@beenotung/tslib
Version:
utils library in Typescript
103 lines • 3.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Random = exports.alphabetNumLetters = exports.symbolLetters = exports.base58Letters = exports.visibleLetters = exports.lowerCaseLetters = exports.upperCaseLetters = exports.digits = exports.genStringRange = void 0;
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;
}
exports.genStringRange = genStringRange;
exports.digits = genStringRange(48, 48 + 10);
exports.upperCaseLetters = genStringRange(65, 65 + 26);
exports.lowerCaseLetters = genStringRange(65 + 32, 65 + 32 + 26);
/** visible characters only in ascii range */
exports.visibleLetters = genStringRange(32, 127);
/** base58btc format, removed '0OIl' and '+/' */
exports.base58Letters = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
exports.symbolLetters = string_1.str_minus(exports.visibleLetters, exports.digits + exports.upperCaseLetters + exports.lowerCaseLetters);
exports.alphabetNumLetters = exports.upperCaseLetters + exports.lowerCaseLetters + exports.digits;
var Random;
(function (Random) {
/** @return number : lower <= value < upper */
function nextInt(upper = Number.MAX_SAFE_INTEGER, lower = 0) {
return Math.floor(Math.random() * (upper - lower) + lower);
}
Random.nextInt = nextInt;
function nextFloat(upper = Number.MAX_VALUE, lower = 0, decimal = 2) {
const a = nextInt(upper, lower);
const b = nextInt(Math.pow(10, decimal));
if (b === 0) {
return a;
}
const p = Math.pow(10, Math.ceil(Math.log10(b)));
return a + b / p;
}
Random.nextFloat = nextFloat;
function nextBool(prob = 0.5) {
return Math.random() < prob;
}
Random.nextBool = nextBool;
function probablyRun(prop, run) {
if (nextBool(prop)) {
return run();
}
}
Random.probablyRun = probablyRun;
/** @return real number : -1 .. 1 */
function nextNP1() {
return Math.random() * 2 - 1;
}
Random.nextNP1 = nextNP1;
/**
* Nullable
* */
function element(xs) {
return xs[nextInt(xs.length, 0)];
}
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(enum_1.enum_keys(e));
return e[key];
}
Random.nextEnum = nextEnum;
function nextEnumKey(e) {
return Random.element(enum_1.enum_keys(e));
}
Random.nextEnumKey = nextEnumKey;
function nextBuffer(n) {
// tslint:disable:no-bitwise
const res = new Buffer(n);
for (let i = 0; i < n; i++) {
res[i] = (Math.random() * 256) >>> 0;
}
return res;
// tslint:enable:no-bitwise
}
Random.nextBuffer = nextBuffer;
function nextString(n, pool = exports.visibleLetters) {
let s = '';
for (; s.length < n;) {
s += element(pool);
}
return s;
}
Random.nextString = nextString;
})(Random = exports.Random || (exports.Random = {}));
//# sourceMappingURL=random.js.map