toosoon-prng 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/prng.js ADDED
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PRNGMethod = void 0;
4
+ var utils_1 = require("./utils");
5
+ var PRNGMethod;
6
+ (function (PRNGMethod) {
7
+ PRNGMethod["jsf32"] = "jsf32";
8
+ PRNGMethod["mulberry32"] = "mulberry32";
9
+ PRNGMethod["sfc32"] = "sfc32";
10
+ PRNGMethod["xoshiro128ss"] = "xoshiro128**";
11
+ })(PRNGMethod || (exports.PRNGMethod = PRNGMethod = {}));
12
+ var PRNG = /** @class */ (function () {
13
+ function PRNG(seed) {
14
+ if (seed === void 0) { seed = ''; }
15
+ this.seed = '';
16
+ this.method = PRNGMethod.sfc32;
17
+ this.controllers = [];
18
+ this.setSeed(seed);
19
+ }
20
+ PRNG.prototype.addController = function (controller) {
21
+ this.controllers.push(controller);
22
+ };
23
+ PRNG.prototype.removeController = function (controller) {
24
+ var index = this.controllers.indexOf(controller);
25
+ this.controllers.splice(index, 1);
26
+ };
27
+ PRNG.prototype.setSeed = function (seed) {
28
+ if (this.seed === seed)
29
+ return;
30
+ this.seed = seed;
31
+ this.controllers.forEach(function (controller) {
32
+ controller.getValue();
33
+ });
34
+ };
35
+ PRNG.prototype.setMethod = function (method) {
36
+ this.method = method;
37
+ };
38
+ PRNG.prototype.random = function (seed) {
39
+ var hashes = (0, utils_1.cyrb128)(this.seed + seed);
40
+ switch (this.method) {
41
+ case PRNGMethod.jsf32:
42
+ return (0, utils_1.jsf32)(hashes[0], hashes[1], hashes[2], hashes[3]);
43
+ case PRNGMethod.mulberry32:
44
+ return (0, utils_1.mulberry32)(hashes[0]);
45
+ case PRNGMethod.sfc32:
46
+ return (0, utils_1.sfc32)(hashes[0], hashes[1], hashes[2], hashes[3]);
47
+ case PRNGMethod.xoshiro128ss:
48
+ return (0, utils_1.xoshiro128ss)(hashes[0], hashes[1], hashes[2], hashes[3]);
49
+ }
50
+ };
51
+ PRNG.prototype.randomBoolean = function (seed, probability) {
52
+ if (probability === void 0) { probability = 0.5; }
53
+ return this.random(seed) < probability;
54
+ };
55
+ PRNG.prototype.randomSign = function (seed, probability) {
56
+ if (probability === void 0) { probability = 0.5; }
57
+ return this.randomBoolean(seed, probability) ? 1 : -1;
58
+ };
59
+ PRNG.prototype.randomInt = function (seed, min, max) {
60
+ return Math.floor(this.random(seed) * (max - min + 1) + min);
61
+ };
62
+ PRNG.prototype.randomFloat = function (seed, min, max, precision) {
63
+ if (min === void 0) { min = 0; }
64
+ if (max === void 0) { max = 1; }
65
+ if (precision === void 0) { precision = 2; }
66
+ return parseFloat(Math.min(min + this.random(seed) * (max - min), max).toFixed(precision));
67
+ };
68
+ PRNG.prototype.randomHexColor = function (seed) {
69
+ return '#' + ('00000' + ((this.random(seed) * (1 << 24)) | 0).toString(16)).slice(-6);
70
+ };
71
+ PRNG.prototype.randomItem = function (seed, array) {
72
+ if (array === void 0) { array = []; }
73
+ if (array.length === 0)
74
+ return undefined;
75
+ return array[this.randomInt(seed, 0, array.length - 1)];
76
+ };
77
+ PRNG.prototype.randomObjectProperty = function (seed, object) {
78
+ var keys = Object.keys(object);
79
+ var key = this.randomItem(seed, keys);
80
+ if (key && object.hasOwnProperty(key)) {
81
+ return object[key];
82
+ }
83
+ };
84
+ PRNG.prototype.randomIndex = function (seed, weights) {
85
+ if (weights === void 0) { weights = []; }
86
+ if (weights.length === 0)
87
+ return -1;
88
+ var totalWeight = 0;
89
+ for (var _i = 0, weights_1 = weights; _i < weights_1.length; _i++) {
90
+ var weight = weights_1[_i];
91
+ totalWeight += weight;
92
+ }
93
+ if (totalWeight <= 0)
94
+ console.warn('PRNG.randomIndex()', 'Weights must sum to > 0', totalWeight);
95
+ var random = this.random(seed) * totalWeight;
96
+ for (var i = 0; i < weights.length; i++) {
97
+ if (random < weights[i])
98
+ return i;
99
+ random -= weights[i];
100
+ }
101
+ return 0;
102
+ };
103
+ return PRNG;
104
+ }());
105
+ var prng = new PRNG();
106
+ exports.default = prng;
@@ -0,0 +1 @@
1
+ {"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/typescript/lib/lib.esnext.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/toosoon-gui/lib/wrapper.d.ts","../node_modules/toosoon-gui/lib/types.d.ts","../node_modules/toosoon-gui/lib/controllers/controller.d.ts","../node_modules/toosoon-gui/lib/controllers/angle-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/color-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/coords-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/file-controller.d.ts","../node_modules/toosoon-gui/lib/gui.d.ts","../node_modules/toosoon-gui/lib/controllers/boolean-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/function-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/number-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/option-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/string-controller.d.ts","../node_modules/toosoon-gui/lib/index.d.ts","../src/utils.ts","../src/prng.ts","../src/controllers.ts","../src/index.ts"],"fileInfos":[{"version":"f33e5332b24c3773e930e212cbb8b6867c8ba3ec4492064ea78e55a524d57450","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","26f2f787e82c4222710f3b676b4d83eb5ad0a72fa7b746f03449e7a026ce5073","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","1c0cdb8dc619bc549c3e5020643e7cf7ae7940058e8c7e5aefa5871b6d86f44b","bed7b7ba0eb5a160b69af72814b4dde371968e40b6c5e73d3a9f7bee407d158c",{"version":"21e41a76098aa7a191028256e52a726baafd45a925ea5cf0222eb430c96c1d83","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"e0275cd0e42990dc3a16f0b7c8bca3efe87f1c8ad404f80c6db1c7c0b828c59f","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"acae90d417bee324b1372813b5a00829d31c7eb670d299cd7f8f9a648ac05688","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"62a4966981264d1f04c44eb0f4b5bdc3d81c1a54725608861e44755aa24ad6a5","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"86a34c7a13de9cabc43161348f663624b56871ed80986e41d214932ddd8d6719","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"08a58483392df5fcc1db57d782e87734f77ae9eab42516028acbfe46f29a3ef7","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"4350e5922fecd4bedda2964d69c213a1436349d0b8d260dd902795f5b94dc74b","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"bb0dc65300311f02c71ab5da7aeffe84364bfb53e727bcd29a20d0b3ae2a0ed4","2afcc0377d7c03c9146b153947520ad46967062ff0118dd512e88560f5c48c4b","c15c72246f26117c4e232ede5d394b80c6c983fb73a3d92ede4da3cf5dd44564","6339a44514a06c5e8f726cf27fc7fb2bf0e2ce5fe0de5545e4d412ba54c209f9","52800b74e97d62cd27f91a19ace28ca7ed32084fc5de80b015c8b62aabb4de99","2eba4de3285ccf1518aa5d87c683e4c4da38a837f69e112710fb107c58e86b9f","7b1267119c9c7c148ee973f8affd943c49f7ec2f5573f83cee25139492b533cd","1361b028bda65af72410feed749981eb80ced6439adf892ead6383fd779aa36e","027d78906c03890d8473731baca3acad76095aa2e68af1c6fcd32ded61d9a430","5eb3db8ef1b8f4eb5b16facea0a1cc3d9c22d6513de77a29c6630233c7ccf888","448bf4331abf7995b2ab5c4a449800e35fc3dbcfb522ed752d84564fd7d17374","3147a65dfdc1827b3a1b3899c5b316e8cc10eeb66f5c26c758bb24b2c962983a","845075e15760edf65e31220cbfc67b0bd436be0cd169181aa524dcf8987ff09e","db6c19a31bb62dc80afd34dd6c773f2385db59abf6608c3f293fedf78bcb1de3",{"version":"50b0ac11d8ac3c1ffc3d96b2047de1f23a71a34ef45278dab9db9663ac34ba43","signature":"a33086c14ef04ee690a02c14ed96e979a244182c9c16c01f8e341d56c4bb25e1"},{"version":"c6f49bdb387c6c2333634665eda6d3327d7686244ec7583c081a73bea7b9a0c4","signature":"6782882e169cf1f29876468ad7f713f0da1d97ca1eba37618cd17e4816018996"},{"version":"0e94293698e9e274ecf63336eb24a518735acd867439527f78719ac868d89f08","signature":"2dbc3e7cfdcb7cecea8a9320e37ba4327fa2e5782de4df7851b9c9af6833fe0a"},{"version":"73f9aba3dfd4486bbdf9d6b0647b0ca095c6dfd796c5c94dab541c4f51ee8f75","signature":"76e672d8e983a8a8853647e4b1d5d26eef55db7836923e81f8669be3b9a4b006"}],"root":[[79,82]],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strict":true,"target":1},"fileIdsList":[[67,72],[66,72],[66,67,68,69,70,71],[65,66,67,69,71,72,73,74,75,76,77],[65,67,72],[66,67,72],[78,80],[79,80,81],[79,81],[78],[81]],"referencedMap":[[68,1],[73,1],[69,1],[67,2],[70,1],[71,1],[74,1],[75,1],[76,1],[77,1],[72,3],[78,4],[66,5],[65,6],[81,7],[82,8],[80,9]],"exportedModulesMap":[[68,1],[73,1],[69,1],[67,2],[70,1],[71,1],[74,1],[75,1],[76,1],[77,1],[72,3],[78,4],[66,5],[65,6],[81,10],[82,8],[80,11]],"semanticDiagnosticsPerFile":[68,73,69,67,70,71,74,75,76,77,72,78,66,65,63,64,12,14,13,2,15,16,17,18,19,20,21,22,3,4,23,27,24,25,26,28,29,30,5,31,32,33,34,6,38,35,36,37,39,7,40,45,46,41,42,43,44,8,50,47,48,49,51,9,52,53,54,57,55,56,58,59,10,1,11,62,61,60,81,82,80,79]},"version":"5.3.3"}
package/lib/utils.d.ts ADDED
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Produce a 128-bit hash value from a string
3
+ *
4
+ * @param {string} seed
5
+ * @return {number}
6
+ */
7
+ export declare function cyrb128(seed: string): number[];
8
+ /**
9
+ * Simple Fast Counter, Generator with a 128-bit state
10
+ *
11
+ * @param {number} a
12
+ * @param {number} b
13
+ * @param {number} c
14
+ * @param {number} d
15
+ * @return {Function}
16
+ */
17
+ export declare function sfc32(a: number, b: number, c: number, d: number): number;
18
+ /**
19
+ * Mulberry32, Generator with a 32-bit state
20
+ *
21
+ * @param {number} a
22
+ * @return {Function}
23
+ */
24
+ export declare function mulberry32(a: number): number;
25
+ /**
26
+ * Jenkins' Small Fast, Generator with a 32-bit state
27
+ *
28
+ * @param {number} a
29
+ * @return {Function}
30
+ */
31
+ export declare function jsf32(a: number, b: number, c: number, d: number): number;
32
+ /**
33
+ * xoshiro128**, Generator with a 128-bit state
34
+ *
35
+ * @param {number} a
36
+ * @return {Function}
37
+ */
38
+ export declare function xoshiro128ss(a: number, b: number, c: number, d: number): number;
package/lib/utils.js ADDED
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ // Seeding random number generator
3
+ // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.xoshiro128ss = exports.jsf32 = exports.mulberry32 = exports.sfc32 = exports.cyrb128 = void 0;
6
+ /**
7
+ * Produce a 128-bit hash value from a string
8
+ *
9
+ * @param {string} seed
10
+ * @return {number}
11
+ */
12
+ function cyrb128(seed) {
13
+ var h1 = 1779033703;
14
+ var h2 = 3144134277;
15
+ var h3 = 1013904242;
16
+ var h4 = 2773480762;
17
+ for (var i = 0, k = void 0; i < seed.length; i++) {
18
+ k = seed.charCodeAt(i);
19
+ h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
20
+ h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
21
+ h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
22
+ h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
23
+ }
24
+ h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);
25
+ h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);
26
+ h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);
27
+ h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);
28
+ return [(h1 ^ h2 ^ h3 ^ h4) >>> 0, (h2 ^ h1) >>> 0, (h3 ^ h1) >>> 0, (h4 ^ h1) >>> 0];
29
+ }
30
+ exports.cyrb128 = cyrb128;
31
+ // ******************************************
32
+ // Pseudo-random Number Generator
33
+ // ******************************************
34
+ /**
35
+ * Simple Fast Counter, Generator with a 128-bit state
36
+ *
37
+ * @param {number} a
38
+ * @param {number} b
39
+ * @param {number} c
40
+ * @param {number} d
41
+ * @return {Function}
42
+ */
43
+ function sfc32(a, b, c, d) {
44
+ a >>>= 0;
45
+ b >>>= 0;
46
+ c >>>= 0;
47
+ d >>>= 0;
48
+ var t = (a + b) | 0;
49
+ a = b ^ (b >>> 9);
50
+ b = (c + (c << 3)) | 0;
51
+ c = (c << 21) | (c >>> 11);
52
+ d = (d + 1) | 0;
53
+ t = (t + d) | 0;
54
+ c = (c + t) | 0;
55
+ return (t >>> 0) / 4294967296;
56
+ }
57
+ exports.sfc32 = sfc32;
58
+ /**
59
+ * Mulberry32, Generator with a 32-bit state
60
+ *
61
+ * @param {number} a
62
+ * @return {Function}
63
+ */
64
+ function mulberry32(a) {
65
+ var t = (a += 0x6d2b79f5);
66
+ t = Math.imul(t ^ (t >>> 15), t | 1);
67
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
68
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
69
+ }
70
+ exports.mulberry32 = mulberry32;
71
+ /**
72
+ * Jenkins' Small Fast, Generator with a 32-bit state
73
+ *
74
+ * @param {number} a
75
+ * @return {Function}
76
+ */
77
+ function jsf32(a, b, c, d) {
78
+ a |= 0;
79
+ b |= 0;
80
+ c |= 0;
81
+ d |= 0;
82
+ var t = (a - ((b << 27) | (b >>> 5))) | 0;
83
+ a = b ^ ((c << 17) | (c >>> 15));
84
+ b = (c + d) | 0;
85
+ c = (d + t) | 0;
86
+ d = (a + t) | 0;
87
+ return (d >>> 0) / 4294967296;
88
+ }
89
+ exports.jsf32 = jsf32;
90
+ /**
91
+ * xoshiro128**, Generator with a 128-bit state
92
+ *
93
+ * @param {number} a
94
+ * @return {Function}
95
+ */
96
+ function xoshiro128ss(a, b, c, d) {
97
+ var t = b << 9;
98
+ var r = a * 5;
99
+ r = ((r << 7) | (r >>> 25)) * 9;
100
+ c ^= a;
101
+ d ^= b;
102
+ b ^= c;
103
+ a ^= d;
104
+ c ^= t;
105
+ d = (d << 11) | (d >>> 21);
106
+ return (r >>> 0) / 4294967296;
107
+ }
108
+ exports.xoshiro128ss = xoshiro128ss;
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "toosoon-prng",
3
+ "version": "1.0.0",
4
+ "description": "Pseudo-random number generator utility functions & helpers",
5
+ "main": "./lib/index.js",
6
+ "scripts": {
7
+ "build": "npx tsc",
8
+ "test": "echo \"Error: no test specified\" && exit 1"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/toosoon-dev/toosoon-prng.git"
13
+ },
14
+ "keywords": [
15
+ "tooson",
16
+ "prng",
17
+ "random"
18
+ ],
19
+ "author": "Arnaud Rocca",
20
+ "license": "MIT",
21
+ "bugs": {
22
+ "url": "https://github.com/toosoon-dev/toosoon-prng/issues"
23
+ },
24
+ "homepage": "https://github.com/toosoon-dev/toosoon-prng#readme",
25
+ "dependencies": {
26
+ "toosoon-gui": "^1.0.2"
27
+ },
28
+ "devDependencies": {
29
+ "typescript": "^5.3.3"
30
+ }
31
+ }