orzo
Version:
A library for random events like dice rolls and random strings.
155 lines (131 loc) • 5.35 kB
JavaScript
var NUMBERS = '0123456789';
var LOWERCASE_CHARACTERS = 'abcdefghijklmnopqrstuvwxyz';
var UPPERCASE_CHARACTERS = LOWERCASE_CHARACTERS.toUpperCase();
var SPECIAL_CHARACTERS = '!@#$%^&*()';
var HEX_CHARACTERS = NUMBERS + 'abcdef';
/**
* Generates a random number between 1 and 6 unless different min/max values are supplied.
* @param {Object} [args] Contains the arguments for the random number generator.
* @param {number} [args.min=1] Lowest possible random number (inclusive).
* @param {number} [args.max=6] Highest possible random number (inclusive).
* @return {number} Random number between min and max.
*/
function generateRandomNumber() {
var args = arguments.lenth <= 0 || arguments[0] === undefined ? {} : arguments[0];
var _args$min = args.min;
var min = typeof _args$min === 'undefined' ? 1 : _args$min;
var _args$max = args.max;
var max = typeof _args$max === 'undefined' ? 6 : _args$max;
if (min > max) {
throw new RangeError('Max must be larger than min');
}
return Math.floor(Math.random() * (max - min + 1) + min);
}
/**
* Generates a random set of 10 characters unless a different 'len' is supplied.
* @param {Object} [args] Contains the arguments for the random string generator.
* @param {number} [args.len=10] Length for the random string.
* @param {string} [args.char=a-zA-Z0-9] The character set for the random string.
* @return {string} Random set of characters.
*/
function generateRandomString() {
var args = arguments.lenth <= 0 || arguments[0] === undefined ? {} : arguments[0];
var _args$len = args.len;
var len = typeof _args$len === 'undefined' ? 10 : _args$len;
var _args$chars = args.chars;
var chars = typeof _args$chars === 'undefined' ? NUMBERS + LOWERCASE_CHARACTERS + UPPERCASE_CHARACTERS : _args$chars;
var output = '';
// TODO: Add ability to parse character sets like regex (eg: a-zA-Z)
if (len < 1) {
throw new RangeError('\'len\' must be greater than 0');
}
if (typeof chars !== 'string') {
throw new TypeError('\'chars\' must be a string');
}
for (var i = 0; i < len; i++) {
output += chars[generateRandomNumber({min: 0, max: chars.length - 1})];
}
return output;
}
/**
* Generates a valid UUIDv4.
* @return {string} A valid UUIDv4.
*/
function generateUUIDv4() {
var output = [];
for (var i = 0; i < 32; i++) {
output[i] = generateRandomString({chars: HEX_CHARACTERS, len: 1});
}
output[12] = 4;
output[16] = generateRandomString({chars: 'ab89', len: 1});
output.splice(20, 0, '-');
output.splice(16, 0, '-');
output.splice(12, 0, '-');
output.splice(8, 0, '-');
return output.join('');
}
/**
* Encodes an base10 input to a custom base of characters.
* @param {Object} [args] Contains the arguments for the encoder.
* @param {number} [args.input] The input to convert to the different base.
* @param {string} [args.char=a-zA-Z0-9] The character set for the new base.
* @return {string} The converted input to the new base.
*/
function customBaseEncode() {
var args = arguments.lenth <= 0 || arguments[0] === undefined ? {} : arguments[0];
var input = args.input;
var _args$chars = args.chars;
var chars = typeof _args$chars === 'undefined' ? NUMBERS + LOWERCASE_CHARACTERS + UPPERCASE_CHARACTERS : _args$chars;
var base = chars.length;
var output = '';
if (typeof input === 'undefined') {
throw new SyntaxError('input is required');
} else if (typeof input !== 'number') {
throw new TypeError('input must be a number');
}
while (input) {
var remainder = input % base;
input = Math.floor(input / base);
output = chars[remainder].toString() + output;
}
return output;
}
/**
* Decodes an input from a custom base of characters to base10.
* @param {Object} [args] Contains the arguments for the decoder.
* @param {number} [args.input] The input to convert back to base10.
* @param {string} [args.char=a-zA-Z0-9] The character set used to convert the input.
* @return {number} The converted input to base10.
*/
function customBaseDecode() {
var args = arguments.lenth <= 0 || arguments[0] === undefined ? {} : arguments[0];
var input = args.input;
var _args$chars = args.chars;
var chars = typeof _args$chars === 'undefined' ? NUMBERS + LOWERCASE_CHARACTERS + UPPERCASE_CHARACTERS : _args$chars;
var base = chars.length;
var output = 0;
if (typeof input === 'undefined') {
throw new SyntaxError('input is required');
} else if (typeof input !== 'string') {
throw new TypeError('input must be a string');
}
while (input) {
var i = chars.indexOf(input[0]);
var pow = input.length - 1;
output += i * (Math.pow(base, pow));
input = input.substring(1);
}
return output;
}
// Constant exports
exports.NUMBERS = NUMBERS;
exports.LOWERCASE_CHARACTERS = LOWERCASE_CHARACTERS;
exports.UPPERCASE_CHARACTERS = UPPERCASE_CHARACTERS;
exports.SPECIAL_CHARACTERS = SPECIAL_CHARACTERS;
exports.HEX_CHARACTERS = HEX_CHARACTERS;
// Function exports
exports.dice = generateRandomNumber;
exports.chars = generateRandomString;
exports.uuid = exports.uuidv4 = generateUUIDv4;
exports.encode = customBaseEncode;
exports.decode = customBaseDecode;