@lazy-random/generators-seedrandom
Version:
112 lines (106 loc) • 3.53 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@lazy-random/generators-function'), require('seedrandom'), require('@lazy-random/clone-class')) :
typeof define === 'function' && define.amd ? define(['exports', '@lazy-random/generators-function', 'seedrandom', '@lazy-random/clone-class'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.LazyRandomGeneratorsSeedrandom = {}, global.generatorsFunction, global.seedrandom, global.cloneClass));
})(this, (function (exports, generatorsFunction, seedrandom, cloneClass) { 'use strict';
const defaultOptions = /*#__PURE__*/Object.freeze({
entropy: true
});
class RNGSeedRandom extends generatorsFunction.RNGFunction {
_seedable = true;
constructor(seed, opts, ...argv) {
super(seed, opts, ...argv);
}
static createLib(...argv) {
return new this(argv[1], argv[2], argv[0], ...argv.slice(3));
}
static create(...argv) {
return new this(...argv);
}
// eslint-disable-next-line no-empty-function,@typescript-eslint/no-empty-function
_init_check(seed, opts, ...argv) {}
_init(seed, opts, ...argv) {
this._opts = this._opts || Object.assign({}, defaultOptions);
this._seedrandom = this.__generator(...argv);
super._init(seed, opts, ...argv);
}
_NAME = 'seedrandom';
_TYPE = null;
get name() {
return `${this._NAME}${this._TYPE ? ':' + this._TYPE : ''}`;
}
__generator(fn) {
if (fn && typeof fn === 'string') {
this._TYPE = null;
switch (fn) {
case 'alea':
case 'tychei':
case 'xor128':
case 'xor4096':
case 'xorshift7':
case 'xorwow':
fn = seedrandom[fn];
//fn = require(`seedrandom/lib/${fn}`)
this._TYPE = fn;
break;
default:
if (!fn.includes('..') && /^[a-z\-\.]+$/i.test(fn)) {
this._TYPE = fn;
fn = require(`seedrandom/lib/${fn}`);
break;
} else {
throw new RangeError(`unknow seedrandom lib name: ${fn}`);
}
}
} else if (fn) {
// @ts-ignore
this._TYPE = fn.name;
} else {
this._TYPE = null;
}
fn = fn || seedrandom;
return fn;
/*
return (seed?, opts?: RNGSeedRandomOptions, ...argv) => {
// @ts-ignore
return fn(seed, opts, ...argv)
}
*/
}
get options() {
return this._opts;
}
/**
* only when option.state = true
*/
// eslint-disable-next-line consistent-return,getter-return
get state() {
// eslint-disable-next-line @typescript-eslint/unbound-method
const fn = this._rng.state;
if (typeof fn === 'function') {
// @ts-ignore
return fn();
}
}
/**
* @todo options for change seeder
*/
seed(seed, opts, ...argv) {
if (opts === null) {
this._opts = void 0;
} else {
this._opts = opts || this._opts;
}
this._rng = this._seedrandom(this._seedAuto(seed), this._opts, ...argv);
}
// @ts-ignore
clone(seed, opts, ...argv) {
return cloneClass.cloneClass(RNGSeedRandom, this, seed, opts, ...argv);
}
}
exports.RNGSeedRandom = RNGSeedRandom;
exports.default = RNGSeedRandom;
exports.defaultOptions = defaultOptions;
Object.defineProperty(exports, '__esModule', { value: true });
}));
//# sourceMappingURL=index.umd.development.cjs.map