@lazy-random/generators-seedrandom
Version:
1 lines • 5.41 kB
Source Map (JSON)
{"version":3,"file":"index.esm.mjs","sources":["../src/index.ts"],"sourcesContent":["import { RNGFunction } from '@lazy-random/generators-function';\nimport seedrandom from 'seedrandom';\n\nimport { PickValueOf } from '@lazy-random/shared-lib';\nimport { cloneClass } from '@lazy-random/clone-class';\nexport import RNGSeedRandomOptions = seedrandom.seedRandomOptions;\n\nexport const defaultOptions: RNGSeedRandomOptions = Object.freeze({\n\tentropy: true,\n});\n\nexport type IRNGSeedRandomLibName = 'alea' | 'tychei' | 'xor128' | 'xor4096' | 'xorshift7' | 'xorwow';\nexport type IRNGSeedRandomLib = IRNGSeedRandomLibName | string;\nexport type IRNGSeedRandomLibValueOf = PickValueOf<typeof seedrandom, IRNGSeedRandomLibName>;\n\nexport class RNGSeedRandom extends RNGFunction<seedrandom.prng>\n{\n\tprotected _opts: RNGSeedRandomOptions;\n\tprotected _seedrandom: IRNGSeedRandomGenerator;\n\n\tprotected override _seedable = true;\n\n\tconstructor(seed?, opts?: RNGSeedRandomOptions, lib?: IRNGSeedRandomLib, ...argv);\n\tconstructor(seed?, opts?: RNGSeedRandomOptions, ...argv)\n\t{\n\t\tsuper(seed, opts, ...argv);\n\t}\n\n\tpublic static createLib(lib?: IRNGSeedRandomLib, seed?, opts?: RNGSeedRandomOptions, ...argv): RNGSeedRandom;\n\tpublic static createLib(...argv)\n\t{\n\t\treturn new this(argv[1], argv[2], argv[0], ...argv.slice(3));\n\t}\n\n\tpublic static override create(seed?, opts?: RNGSeedRandomOptions, lib?: IRNGSeedRandomLib, ...argv): RNGSeedRandom;\n\tpublic static override create(...argv)\n\t{\n\t\treturn new this(...argv);\n\t}\n\n// eslint-disable-next-line no-empty-function,@typescript-eslint/no-empty-function\n\tprotected override _init_check(seed?, opts?, ...argv) {}\n\n\tprotected override _init(seed?, opts?, ...argv)\n\t{\n\t\tthis._opts = this._opts || Object.assign({}, defaultOptions);\n\t\tthis._seedrandom = this.__generator(...argv);\n\n\t\tsuper._init(seed, opts, ...argv);\n\t}\n\n\tprotected readonly _NAME = 'seedrandom';\n\tprotected _TYPE = null;\n\n\toverride get name()\n\t{\n\t\treturn `${this._NAME}${this._TYPE ? ':' + this._TYPE : ''}`;\n\t}\n\n\tprotected __generator(fn?: typeof seedrandom | IRNGSeedRandomLib | IRNGSeedRandomLibValueOf): IRNGSeedRandomGenerator\n\t{\n\t\tif (fn && typeof fn === 'string')\n\t\t{\n\t\t\tthis._TYPE = null;\n\n\t\t\tswitch (fn)\n\t\t\t{\n\t\t\t\tcase 'alea':\n\t\t\t\tcase 'tychei':\n\t\t\t\tcase 'xor128':\n\t\t\t\tcase 'xor4096':\n\t\t\t\tcase 'xorshift7':\n\t\t\t\tcase 'xorwow':\n\t\t\t\t\tfn = seedrandom[fn];\n\t\t\t\t\t//fn = require(`seedrandom/lib/${fn}`)\n\n\t\t\t\t\tthis._TYPE = fn;\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif (!fn.includes('..') && /^[a-z\\-\\.]+$/i.test(fn))\n\t\t\t\t\t{\n\t\t\t\t\t\tthis._TYPE = fn;\n\n\t\t\t\t\t\tfn = require(`seedrandom/lib/${fn}`);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new RangeError(`unknow seedrandom lib name: ${fn}`);\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (fn)\n\t\t{\n\t\t\t// @ts-ignore\n\t\t\tthis._TYPE = fn.name;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._TYPE = null;\n\t\t}\n\n\t\tfn = fn || seedrandom;\n\n\t\treturn fn as IRNGSeedRandomGenerator;\n\n\t\t/*\n\t\treturn (seed?, opts?: RNGSeedRandomOptions, ...argv) => {\n\t\t\t// @ts-ignore\n\t\t\treturn fn(seed, opts, ...argv)\n\t\t}\n\t\t*/\n\t}\n\n\toverride get options()\n\t{\n\t\treturn this._opts;\n\t}\n\n\t/**\n\t * only when option.state = true\n\t */\n\t// eslint-disable-next-line consistent-return,getter-return\n\tpublic get state(): IRNGSeedRandomState\n\t{\n\t\t// eslint-disable-next-line @typescript-eslint/unbound-method\n\t\tconst fn = this._rng.state;\n\n\t\tif (typeof fn === 'function')\n\t\t{\n\t\t\t// @ts-ignore\n\t\t\treturn fn();\n\t\t}\n\t}\n\n\t/**\n\t * @todo options for change seeder\n\t */\n\toverride seed(seed?, opts?: RNGSeedRandomOptions, ...argv)\n\t{\n\t\tif (opts === null)\n\t\t{\n\t\t\tthis._opts = void 0;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._opts = opts || this._opts;\n\t\t}\n\n\t\tthis._rng = this._seedrandom(this._seedAuto(seed), this._opts, ...argv);\n\t}\n\n\t// @ts-ignore\n\tclone(seed?, opts?: RNGSeedRandomOptions, ...argv): RNGSeedRandom\n\t{\n\t\treturn cloneClass(RNGSeedRandom, this, seed, opts, ...argv);\n\t}\n\n}\n\nexport interface IRNGSeedRandomState\n{\n\ti: number,\n\tj: number,\n\tS: number[],\n}\n\nexport interface IRNGSeedRandomGenerator\n{\n\t(seed?: any, opts?: seedrandom.seedRandomOptions, ...argv: any[]): seedrandom.prng\n}\n\nexport default RNGSeedRandom;\n"],"names":["RNGSeedRandom","RNGFunction","_seedable","constructor","seed","opts","argv","this","slice","_init_check","_init","_opts","Object","assign","defaultOptions","_seedrandom","super","_NAME","_TYPE","name","fn","includes","test","require"],"mappings":";;;;;;;;;;AAAAA,MAAAA,sBAAAC;EAiBuCC,WAAA;EAC5BC,WAAAA,CAAAC,GAAAC,MAAAC;;;sBA4BOA;WAGhB,IAAAC,KAAAD,EAAA,IAAAA,EAAA,IAAAA,EAAA,OAAAA,EAAAE,MAAA;;mBAuCIF;IACA,OAAA,IAAAC,QAAAD;;EA9BKG,WAAAA,CAAAL,GAAAC,MAAiFC,IAAA;EAE1FI,KAAAA,CAAAN,GAAAC,MAAAC;IAMEC,aAAYA,KAAAI,SAAAC,OAAAC,OAAA,CAAA,GAAAC,IAEZP,KAAAQ,cAAKR;IACLS,MAAAN,MAAAN,GAAAC,MAAAC;AAEA;EACCW,MAAmB;EAGnBC,MAAK;EAGNC,QAAAA;IACC,OAAA,GAAAZ,KAAAU,QAAKV,KAAAW,QAAgB,MAAKX,KAAAW,QAAA;;;IAW3B,IAAAE,KAAA,mBAAAA,wBAEO;KAIR,KAAA;KAGA,KAAA;KAGD,KAAA;KAIA,KAAA;;;MAMDb,KAACW;MAED;;;MAGC,KAAAE,EAAAC,kCAAAC,KAAAF,IAAA;wBAK0DA,IAAAG,QAAA,kBAAAH;QAC3D;;2BAQS,+BAAKA;WASbb,KAAAW,YAAAE,EAAAD,OAMK;;;;;;;;;;;;;;;;;;"}