Files
asciidisco.com/build/node_modules/base62/base62.js
2023-08-01 13:49:46 +02:00

77 lines
2.2 KiB
JavaScript

module.exports = (function (Base62) {
"use strict";
var DEFAULT_CHARACTER_SET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
Base62.encode = function(integer){
if (integer === 0) {return '0';}
var s = '';
while (integer > 0) {
s = Base62.characterSet[integer % 62] + s;
integer = Math.floor(integer/62);
}
return s;
};
var defaultCharsetDecode = function defaultCharsetDecode (base62String) {
var value = 0,
i = 0,
length = base62String.length,
charValue;
for (; i < length; i++) {
charValue = base62String.charCodeAt(i);
if (charValue < 58) {
charValue = charValue - 48;
} else if (charValue < 91) {
charValue = charValue - 29;
} else {
charValue = charValue - 87;
}
value += charValue * Math.pow(62, length - i - 1);
}
return value;
};
var customCharsetDecode = function customCharsetDecode (base62String) {
var val = 0,
i = 0,
length = base62String.length,
characterSet = Base62.characterSet;
for (; i < length; i++) {
val += characterSet.indexOf(base62String[i]) * Math.pow(62, length - i - 1);
}
return val;
};
var decodeImplementation = null;
Base62.decode = function(base62String){
return decodeImplementation(base62String);
};
Base62.setCharacterSet = function(chars) {
var arrayOfChars = chars.split(""), uniqueCharacters = [];
if(arrayOfChars.length !== 62) throw Error("You must supply 62 characters");
arrayOfChars.forEach(function(char){
if(!~uniqueCharacters.indexOf(char)) uniqueCharacters.push(char);
});
if(uniqueCharacters.length !== 62) throw Error("You must use unique characters.");
Base62.characterSet = arrayOfChars;
decodeImplementation = chars === DEFAULT_CHARACTER_SET ? defaultCharsetDecode : customCharsetDecode;
};
Base62.setCharacterSet(DEFAULT_CHARACTER_SET);
return Base62;
}({}));