UNPKG

@beenotung/tslib

Version:
129 lines (128 loc) 4.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Random = exports.alphabetNumLetters = exports.symbolLetters = exports.base58Letters = exports.visibleLetters = exports.lowerCaseLetters = exports.upperCaseLetters = exports.digits = void 0; exports.genStringRange = genStringRange; const enum_1 = require("./enum"); const string_1 = require("./string"); /** * @param start {number} inclusive * @param end {number} exclusive * */ function genStringRange(start, end) { let s = ''; for (let i = start; i < end; i++) { s += String.fromCharCode(i); } return s; } /** @description from '0' to '9' */ exports.digits = genStringRange(48, 48 + 10); /** @description from 'A' to 'Z' */ exports.upperCaseLetters = genStringRange(65, 65 + 26); /** @description from 'a' to 'z' */ exports.lowerCaseLetters = genStringRange(65 + 32, 65 + 32 + 26); /** @description visible characters only in ascii range */ exports.visibleLetters = genStringRange(32, 127); /** @description base58btc format, removed '0OIl' and '+/' */ exports.base58Letters = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; exports.symbolLetters = (0, string_1.str_minus)(exports.visibleLetters, exports.digits + exports.upperCaseLetters + exports.lowerCaseLetters); /** @description upperCaseLetters + lowerCaseLetters + digits */ exports.alphabetNumLetters = exports.upperCaseLetters + exports.lowerCaseLetters + exports.digits; var Random; (function (Random) { /** * @param {number} upper defaults to Number.MAX_SAFE_INTEGER * @param {number} lower defaults to 0 * @returns {number} integer, lower <= value < upper */ function nextInt(upper = Number.MAX_SAFE_INTEGER, lower = 0) { return Math.floor(Math.random() * (upper - lower) + lower); } Random.nextInt = nextInt; /** * @param {number} upper defaults to Number.MAX_VALUE * @param {number} lower defaults to 0 * @param {number} decimal defaults to 2 * @returns {number} integer or float, lower <= value < upper */ function nextFloat(upper = Number.MAX_VALUE, lower = 0, decimal = 2) { const range = upper - lower; const value_random = Math.random() * range + lower; const value_int = Math.floor(value_random); if (value_random == value_int) { return value_random; } const value_decimal = value_random - value_int; const value_decimal_str = value_decimal.toString().slice(2, 2 + decimal); return +(value_int + '.' + value_decimal_str); } Random.nextFloat = nextFloat; /** * @param {number} prob defaults to 0.5 * @returns {boolean} boolean with prob chance being true */ function nextBool(prob = 0.5) { return Math.random() < prob; } Random.nextBool = nextBool; function probablyRun(prop, run) { if (nextBool(prop)) { return run(); } } Random.probablyRun = probablyRun; /** @returns real number : -1 .. 1 */ function nextNP1() { return Math.random() * 2 - 1; } Random.nextNP1 = nextNP1; function element(xs) { if (xs.length == 0) { throw new Error(typeof xs == 'string' ? 'cannot random pick from empty string' : 'cannot random pick from empty array'); } const idx = Math.floor(Math.random() * xs.length); return xs[idx]; } Random.element = element; function nextDate(after = new Date('2016-12-12'), before = new Date('2018-12-12')) { const diff = before.getTime() - after.getTime(); const time = Random.nextInt(after.getTime() + diff, after.getTime()); return new Date(time); } Random.nextDate = nextDate; /** * @return value of enum (not key of enum) * */ function nextEnum(e) { const key = Random.element((0, enum_1.enum_keys)(e)); return e[key]; } Random.nextEnum = nextEnum; function nextEnumKey(e) { return Random.element((0, enum_1.enum_keys)(e)); } Random.nextEnumKey = nextEnumKey; function nextBuffer(n) { const res = Buffer.alloc(n); for (let i = 0; i < n; i++) { res[i] = (Math.random() * 256) >>> 0; } return res; } Random.nextBuffer = nextBuffer; /** * @param {number} n length of string to be generated * @param {string} pool candidate characters, defaults to visibleLetters * @returns string random generated characters, possible to have repeating characters */ function nextString(n, pool = exports.visibleLetters) { let s = ''; for (; s.length < n;) { s += element(pool); } return s; } Random.nextString = nextString; })(Random || (exports.Random = Random = {}));