fast-key-generator
Version:
Simple utils library for key generation.
66 lines (53 loc) • 1.38 kB
JavaScript
/**
* @format
*/
var alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var numeric = "0123456789";
var symbols = "'[?>#](<%+.^_,\")!|;*`}/@~-&{=:$\\";
var alphanum = alpha.concat(numeric);
var charsets = {
alpha: alpha,
alphanum: alphanum,
numeric: numeric,
symbols: symbols
};
var transforms = {
none: String.prototype.toString,
lower: String.prototype.toLowerCase,
upper: String.prototype.toUpperCase
};
var initialOptions = {
size: 16,
prefix: "",
exclude: [],
chartype: "alpha",
transform: "none",
validate: function() {
return true;
}
};
function generateKey(options) {
var settings = Object.assign({}, initialOptions, options || {});
var key = "";
var charset = settings.charset
? settings.charset
: charsets[settings.chartype];
var size =
settings.size > 0 && isFinite(settings.size)
? parseInt(settings.size, 10) | 0
: 0;
var transform =
typeof settings.transform === "function"
? settings.transform
: transforms[settings.transform];
while (size--) {
key = charset.charAt((Math.random() * charset.length) | 0).concat(key);
}
key = settings.prefix.concat(transform.call(key, key) || "");
return !settings.validate(key) || settings.exclude.indexOf(key) !== -1
? generateKey(settings)
: key;
}
module.exports = {
generateKey: generateKey
};