toosoon-utils 1.2.0 → 1.4.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/README.md CHANGED
@@ -629,13 +629,175 @@ Smoothly interpolate a number toward another.
629
629
  damp(value: number, target: number, damping: number, delta: number): number;
630
630
  ```
631
631
 
632
+ ### Pseudo-Random Number Generator (PRNG)
633
+
634
+ #### PRNG Algorithms
635
+
636
+ **Credits**: [Seeding random number generator](https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript)
637
+
638
+ ##### cyrb128(seed)
639
+
640
+ Produce a 128-bit hash value from a string.
641
+
642
+ `seed`: Initial seed state.
643
+
644
+ ```ts
645
+ cyrb128(prng: string | object): [number, number, number, number];
646
+ ```
647
+
648
+ ##### sfc32(a, b, c, d)
649
+
650
+ _Simple Fast Counter_, Generator with a 128-bit state.
651
+
652
+ ```ts
653
+ sfc32(a: number, b: number, c: number, d: number): number;
654
+ ```
655
+
656
+ ##### splitmix32(a)
657
+
658
+ _SplitMix32_, Generator with a 32-bit state.
659
+
660
+ ```ts
661
+ splitmix32(a: number): number;
662
+ ```
663
+
664
+ ##### mulberry32(a)
665
+
666
+ _Mulberry32_, Generator with a 32-bit state.
667
+
668
+ ```ts
669
+ mulberry32(a: number): number;
670
+ ```
671
+
672
+ ##### jsf32(a, b, c, d)
673
+
674
+ _Jenkins' Small Fast_, Generator with a 32-bit state.
675
+
676
+ ```ts
677
+ jsf32(a: number, b: number, c: number, d: number): number;
678
+ ```
679
+
680
+ ##### xoshiro128ss(a, b, c, d)
681
+
682
+ _xoshiro128\*\*_, Generator with a 128-bit state.
683
+
684
+ ```ts
685
+ xoshiro128ss(a: number, b: number, c: number, d: number): number;
686
+ ```
687
+
688
+ #### PRNG functions
689
+
690
+ Thanks to the above algorithms, a seed-based version of most of the [random functions](#random) are available with a `seed` string and a PRNG `algorithm` function additionnal parameters.
691
+
692
+ ##### random(seed)
693
+
694
+ Generate a pseudo-random number in the interval [0, 1]. It's the PRNG equivalent of `Math.random()`.
695
+
696
+ - `prng`: Can be a seed string or a PRNG parameters object containing the seed and a PRNG algorithm function.
697
+ - `[prng.seed]`: Seed used for pseudo-random number generation.
698
+ - `[prng.algorithm=splitmix32]`: PRNG algorithm function generating a pseudo-random number.
699
+
700
+ ```ts
701
+ random(prng: string | object): number;
702
+ ```
703
+
704
+ ##### randomBoolean(prng)
705
+
706
+ Generate a pseudo-random boolean (true or false).
707
+
708
+ - `prng`
709
+ - `[probability=0.5]`: Probability to get true.
710
+
711
+ ```ts
712
+ randomBoolean(prng: string | object, probability?: number): boolean;
713
+ ```
714
+
715
+ ##### randomSign(prng)
716
+
717
+ Generate a pseudo-random sign (1 or -1).
718
+
719
+ - `prng`
720
+ - `[probability=0.5]`: Probability to get 1.
721
+
722
+ ```ts
723
+ randomSign(prng: string | object, probability?: number): number;
724
+ ```
725
+
726
+ ##### randomFloat(prng, min, max)
727
+
728
+ Generate a pseudo-random floating-point number within a specified range.
729
+
730
+ - `prng`
731
+ - `[min=0]`: Minimum boundary.
732
+ - `[max=1]`: Maximum boundary.
733
+ - `[precision=2]`: Number of digits after the decimal point.
734
+
735
+ ```ts
736
+ randomFloat(prng: string | object, min?: number, max?: number, precision?: number): number;
737
+ ```
738
+
739
+ ##### randomInt(prng, min, max)
740
+
741
+ Generate a pseudo-random integer number within a specified range.
742
+
743
+ - `prng`
744
+ - `min`: Minimum boundary.
745
+ - `max`: Maximum boundary.
746
+
747
+ ```ts
748
+ randomInt(prng: string | object, min: number, max: number): number;
749
+ ```
750
+
751
+ ##### randomHexColor(prng)
752
+
753
+ Generate a pseudo-random hexadecimal color.
754
+
755
+ - `prng`
756
+
757
+ ```ts
758
+ randomHexColor(prng: string | object): string;
759
+ ```
760
+
761
+ ##### randomItem(prng, array)
762
+
763
+ Pick a pseudo-random item from a given array.
764
+
765
+ - `prng`
766
+ - `array`: Array to pick the item from.
767
+
768
+ ```ts
769
+ randomItem<T>(prng: string | object, array: T[]): T | undefined;
770
+ ```
771
+
772
+ ##### randomObjectProperty(prng)
773
+
774
+ Pick a pseudo-random property value from a given object.
775
+
776
+ - `prng`
777
+ - `object`: Object to pick the property from.
778
+
779
+ ```ts
780
+ randomObjectProperty<T>(prng: string | object, object: Record<string, T>): T | undefined;
781
+ ```
782
+
783
+ ##### randomIndex(prng)
784
+
785
+ Select a pseudo-random index from an array of weighted items.
786
+
787
+ - `prng`
788
+ - `weights`: Array of weights.
789
+
790
+ ```ts
791
+ randomIndex(prng: string | object, weights: number[]): number;
792
+ ```
793
+
632
794
  ### Random
633
795
 
634
796
  ##### randomBoolean(probability)
635
797
 
636
798
  Generate a random boolean (true or false).
637
799
 
638
- - `[probability=0.5]`: Probability to get `true`.
800
+ - `[probability=0.5]`: Probability to get true.
639
801
 
640
802
  ```ts
641
803
  randomBoolean(probability?: number): boolean;
@@ -699,7 +861,7 @@ Pick a random property value from a given object.
699
861
  - `object`: Object to pick the property from.
700
862
 
701
863
  ```ts
702
- randomObjectProperty<T>(object: { [key: string]: T }): T | undefined;
864
+ randomObjectProperty<T>(object: Record<string, T>): T | undefined;
703
865
  ```
704
866
 
705
867
  ##### randomIndex(weights)
@@ -709,7 +871,7 @@ Select a random index from an array of weighted items.
709
871
  - `weights`: Array of weights.
710
872
 
711
873
  ```ts
712
- randomIndex(weights?: number[]): number;
874
+ randomIndex(weights: number[]): number;
713
875
  ```
714
876
 
715
877
  ##### onCircle(radius)
package/lib/prng.d.ts ADDED
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Produce a 128-bit hash value from a seed
3
+ *
4
+ * @param {string} seed Initial seed state
5
+ * @returns {[number, number, number, number]} Hash numbers
6
+ */
7
+ export declare function cyrb128(seed: string): [number, number, number, 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
+ * @returns {number} Pseudo-random number
16
+ */
17
+ export declare function sfc32(a: number, b: number, c: number, d: number): number;
18
+ /**
19
+ * SplitMix32, Generator with a 32-bit state
20
+ *
21
+ * @param {number} a
22
+ * @returns {number} Pseudo-random number
23
+ */
24
+ export declare function splitmix32(a: number): number;
25
+ /**
26
+ * Mulberry32, Generator with a 32-bit state
27
+ *
28
+ * @param {number} a
29
+ * @returns {number} Pseudo-random number
30
+ */
31
+ export declare function mulberry32(a: number): number;
32
+ /**
33
+ * Jenkins' Small Fast, Generator with a 32-bit state
34
+ *
35
+ * @param {number} a
36
+ * @returns {number} Pseudo-random number
37
+ */
38
+ export declare function jsf32(a: number, b: number, c: number, d: number): number;
39
+ /**
40
+ * xoshiro128**, Generator with a 128-bit state
41
+ *
42
+ * @param {number} a
43
+ * @returns {number} Pseudo-random number
44
+ */
45
+ export declare function xoshiro128ss(a: number, b: number, c: number, d: number): number;
46
+ type PRNGParameters = string | {
47
+ seed: string;
48
+ algorithm: (...args: number[]) => number;
49
+ };
50
+ /**
51
+ * Generate a pseudo-random number in the interval [0, 1]
52
+ * PRNG equivalent of `Math.random()`
53
+ *
54
+ * @param {string|object} prng
55
+ * @returns {number} Pseudo-random number
56
+ */
57
+ export declare function random(prng: PRNGParameters): number;
58
+ /**
59
+ * Generate a pseudo-random boolean (true or false)
60
+ *
61
+ * @param {string|object} prng
62
+ * @param {number} [probability=0.5] Probability to get true
63
+ * @returns {boolean} Either `true` or `false`
64
+ */
65
+ export declare function randomBoolean(prng: PRNGParameters, probability?: number): boolean;
66
+ /**
67
+ * Generate a pseudo-random sign (1 or -1)
68
+ *
69
+ * @param {string|object} prng
70
+ * @param {number} [probability=0.5] Probability to get 1
71
+ * @returns {number} Either 1 or -1
72
+ */
73
+ export declare function randomSign(prng: PRNGParameters, probability?: number): number;
74
+ /**
75
+ * Generate a pseudo-random floating-point number within a specified range
76
+ *
77
+ * @param {string|object} prng
78
+ * @param {number} [min=0] Minimum boundary
79
+ * @param {number} [max=1] Maximum boundary
80
+ * @param {number} [precision=2] Number of digits after the decimal point
81
+ * @returns {number} Generated float
82
+ */
83
+ export declare function randomFloat(prng: PRNGParameters, min?: number, max?: number, precision?: number): number;
84
+ /**
85
+ * Generate a pseudo-random integer number within a specified range
86
+ *
87
+ * @param {string|object} prng
88
+ * @param {number} min Minimum boundary
89
+ * @param {number} max Maximum boundary
90
+ * @returns {number} Generated integer
91
+ */
92
+ export declare function randomInt(prng: PRNGParameters, min: number, max: number): number;
93
+ /**
94
+ * Generate a pseudo-random hexadecimal color
95
+ *
96
+ * @param {string|object} prng
97
+ * @returns {string} Generated hexadecimal color
98
+ */
99
+ export declare function randomHexColor(prng: PRNGParameters): string;
100
+ /**
101
+ * Pick a pseudo-random item from a given array
102
+ *
103
+ * @param {string|object} prng
104
+ * @param {T[]} array Array to pick the item from
105
+ * @returns {T|undefined} Random item picked
106
+ */
107
+ export declare function randomItem<T = unknown>(prng: PRNGParameters, array: T[]): T | undefined;
108
+ /**
109
+ * Pick a pseudo-random property value from a given object
110
+ *
111
+ * @param {string|object} prng
112
+ * @param {object} object Object to pick the property from
113
+ * @returns {T|undefined} Random item picked
114
+ */
115
+ export declare function randomObjectProperty<T = unknown>(prng: PRNGParameters, object: Record<string, T>): T | undefined;
116
+ /**
117
+ * Select a pseudo-random index from an array of weighted items
118
+ *
119
+ * @param {string|object} prng
120
+ * @param {number[]} weights Array of weights
121
+ * @returns {number} Random index based on weights
122
+ */
123
+ export declare function randomIndex(prng: PRNGParameters, weights: number[]): number;
124
+ export {};
package/lib/prng.js ADDED
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Produce a 128-bit hash value from a seed
3
+ *
4
+ * @param {string} seed Initial seed state
5
+ * @returns {[number, number, number, number]} Hash numbers
6
+ */
7
+ export function cyrb128(seed) {
8
+ var h1 = 1779033703;
9
+ var h2 = 3144134277;
10
+ var h3 = 1013904242;
11
+ var h4 = 2773480762;
12
+ for (var i = 0, k = void 0; i < seed.length; i++) {
13
+ k = seed.charCodeAt(i);
14
+ h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
15
+ h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
16
+ h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
17
+ h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
18
+ }
19
+ h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);
20
+ h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);
21
+ h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);
22
+ h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);
23
+ return [(h1 ^ h2 ^ h3 ^ h4) >>> 0, (h2 ^ h1) >>> 0, (h3 ^ h1) >>> 0, (h4 ^ h1) >>> 0];
24
+ }
25
+ // *********************
26
+ // PRNG Algorithms
27
+ // *********************
28
+ /**
29
+ * Simple Fast Counter, Generator with a 128-bit state
30
+ *
31
+ * @param {number} a
32
+ * @param {number} b
33
+ * @param {number} c
34
+ * @param {number} d
35
+ * @returns {number} Pseudo-random number
36
+ */
37
+ export function sfc32(a, b, c, d) {
38
+ a >>>= 0;
39
+ b >>>= 0;
40
+ c >>>= 0;
41
+ d >>>= 0;
42
+ var t = (a + b) | 0;
43
+ a = b ^ (b >>> 9);
44
+ b = (c + (c << 3)) | 0;
45
+ c = (c << 21) | (c >>> 11);
46
+ d = (d + 1) | 0;
47
+ t = (t + d) | 0;
48
+ c = (c + t) | 0;
49
+ return (t >>> 0) / 4294967296;
50
+ }
51
+ /**
52
+ * SplitMix32, Generator with a 32-bit state
53
+ *
54
+ * @param {number} a
55
+ * @returns {number} Pseudo-random number
56
+ */
57
+ export function splitmix32(a) {
58
+ a |= 0;
59
+ a = (a + 0x9e3779b9) | 0;
60
+ var t = a ^ (a >>> 16);
61
+ t = Math.imul(t, 0x21f0aaad);
62
+ t = t ^ (t >>> 15);
63
+ t = Math.imul(t, 0x735a2d97);
64
+ return ((t = t ^ (t >>> 15)) >>> 0) / 4294967296;
65
+ }
66
+ /**
67
+ * Mulberry32, Generator with a 32-bit state
68
+ *
69
+ * @param {number} a
70
+ * @returns {number} Pseudo-random number
71
+ */
72
+ export function mulberry32(a) {
73
+ var t = (a += 0x6d2b79f5);
74
+ t = Math.imul(t ^ (t >>> 15), t | 1);
75
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
76
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
77
+ }
78
+ /**
79
+ * Jenkins' Small Fast, Generator with a 32-bit state
80
+ *
81
+ * @param {number} a
82
+ * @returns {number} Pseudo-random number
83
+ */
84
+ export function jsf32(a, b, c, d) {
85
+ a |= 0;
86
+ b |= 0;
87
+ c |= 0;
88
+ d |= 0;
89
+ var t = (a - ((b << 27) | (b >>> 5))) | 0;
90
+ a = b ^ ((c << 17) | (c >>> 15));
91
+ b = (c + d) | 0;
92
+ c = (d + t) | 0;
93
+ d = (a + t) | 0;
94
+ return (d >>> 0) / 4294967296;
95
+ }
96
+ /**
97
+ * xoshiro128**, Generator with a 128-bit state
98
+ *
99
+ * @param {number} a
100
+ * @returns {number} Pseudo-random number
101
+ */
102
+ export function xoshiro128ss(a, b, c, d) {
103
+ var t = b << 9;
104
+ var r = a * 5;
105
+ r = ((r << 7) | (r >>> 25)) * 9;
106
+ c ^= a;
107
+ d ^= b;
108
+ b ^= c;
109
+ a ^= d;
110
+ c ^= t;
111
+ d = (d << 11) | (d >>> 21);
112
+ return (r >>> 0) / 4294967296;
113
+ }
114
+ /**
115
+ * Generate a pseudo-random number in the interval [0, 1]
116
+ * PRNG equivalent of `Math.random()`
117
+ *
118
+ * @param {string|object} prng
119
+ * @returns {number} Pseudo-random number
120
+ */
121
+ export function random(prng) {
122
+ var seed = typeof prng === 'string' ? prng : prng.seed;
123
+ var algorithm = typeof prng === 'string' ? splitmix32 : prng.algorithm;
124
+ var hashes = cyrb128(seed);
125
+ return algorithm.apply(void 0, hashes);
126
+ }
127
+ /**
128
+ * Generate a pseudo-random boolean (true or false)
129
+ *
130
+ * @param {string|object} prng
131
+ * @param {number} [probability=0.5] Probability to get true
132
+ * @returns {boolean} Either `true` or `false`
133
+ */
134
+ export function randomBoolean(prng, probability) {
135
+ if (probability === void 0) { probability = 0.5; }
136
+ return random(prng) < probability;
137
+ }
138
+ /**
139
+ * Generate a pseudo-random sign (1 or -1)
140
+ *
141
+ * @param {string|object} prng
142
+ * @param {number} [probability=0.5] Probability to get 1
143
+ * @returns {number} Either 1 or -1
144
+ */
145
+ export function randomSign(prng, probability) {
146
+ if (probability === void 0) { probability = 0.5; }
147
+ return randomBoolean(prng, probability) ? 1 : -1;
148
+ }
149
+ /**
150
+ * Generate a pseudo-random floating-point number within a specified range
151
+ *
152
+ * @param {string|object} prng
153
+ * @param {number} [min=0] Minimum boundary
154
+ * @param {number} [max=1] Maximum boundary
155
+ * @param {number} [precision=2] Number of digits after the decimal point
156
+ * @returns {number} Generated float
157
+ */
158
+ export function randomFloat(prng, min, max, precision) {
159
+ if (min === void 0) { min = 0; }
160
+ if (max === void 0) { max = 1; }
161
+ if (precision === void 0) { precision = 2; }
162
+ return parseFloat(Math.min(min + random(prng) * (max - min), max).toFixed(precision));
163
+ }
164
+ /**
165
+ * Generate a pseudo-random integer number within a specified range
166
+ *
167
+ * @param {string|object} prng
168
+ * @param {number} min Minimum boundary
169
+ * @param {number} max Maximum boundary
170
+ * @returns {number} Generated integer
171
+ */
172
+ export function randomInt(prng, min, max) {
173
+ return Math.floor(random(prng) * (max - min + 1) + min);
174
+ }
175
+ /**
176
+ * Generate a pseudo-random hexadecimal color
177
+ *
178
+ * @param {string|object} prng
179
+ * @returns {string} Generated hexadecimal color
180
+ */
181
+ export function randomHexColor(prng) {
182
+ return '#' + ('00000' + ((random(prng) * (1 << 24)) | 0).toString(16)).slice(-6);
183
+ }
184
+ /**
185
+ * Pick a pseudo-random item from a given array
186
+ *
187
+ * @param {string|object} prng
188
+ * @param {T[]} array Array to pick the item from
189
+ * @returns {T|undefined} Random item picked
190
+ */
191
+ export function randomItem(prng, array) {
192
+ if (array.length === 0)
193
+ return undefined;
194
+ return array[randomInt(prng, 0, array.length - 1)];
195
+ }
196
+ /**
197
+ * Pick a pseudo-random property value from a given object
198
+ *
199
+ * @param {string|object} prng
200
+ * @param {object} object Object to pick the property from
201
+ * @returns {T|undefined} Random item picked
202
+ */
203
+ export function randomObjectProperty(prng, object) {
204
+ var keys = Object.keys(object);
205
+ var key = randomItem(prng, keys);
206
+ if (key && object.hasOwnProperty(key)) {
207
+ return object[key];
208
+ }
209
+ }
210
+ /**
211
+ * Select a pseudo-random index from an array of weighted items
212
+ *
213
+ * @param {string|object} prng
214
+ * @param {number[]} weights Array of weights
215
+ * @returns {number} Random index based on weights
216
+ */
217
+ export function randomIndex(prng, weights) {
218
+ if (weights.length === 0)
219
+ return -1;
220
+ var totalWeight = 0;
221
+ for (var _i = 0, weights_1 = weights; _i < weights_1.length; _i++) {
222
+ var weight_1 = weights_1[_i];
223
+ totalWeight += weight_1;
224
+ }
225
+ if (totalWeight <= 0)
226
+ console.warn('PRNG randomIndex()', 'Weights must sum to > 0', totalWeight);
227
+ var weight = random(prng) * totalWeight;
228
+ for (var i = 0; i < weights.length; i++) {
229
+ if (weight < weights[i])
230
+ return i;
231
+ weight -= weights[i];
232
+ }
233
+ return 0;
234
+ }
package/lib/random.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { Vector2, Vector3 } from './types';
2
2
  /**
3
- * Generate a random boolean (`true` or `false`)
3
+ * Generate a random boolean (true or false)
4
4
  *
5
- * @param {number} [probability=0.5] Probability to get `true`
5
+ * @param {number} [probability=0.5] Probability to get true
6
6
  * @returns {boolean} Either `true` or `false`
7
7
  */
8
8
  export declare function randomBoolean(probability?: number): boolean;
@@ -49,9 +49,7 @@ export declare function randomItem<T = unknown>(array: T[]): T | undefined;
49
49
  * @param {object} object Object to pick the property from
50
50
  * @returns {T|undefined} Random item picked
51
51
  */
52
- export declare function randomObjectProperty<T = unknown>(object: {
53
- [key: string]: T;
54
- }): T | undefined;
52
+ export declare function randomObjectProperty<T = unknown>(object: Record<string, T>): T | undefined;
55
53
  /**
56
54
  * Select a random index from an array of weighted items
57
55
  *
package/lib/random.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { radToSphere } from './geometry';
2
2
  /**
3
- * Generate a random boolean (`true` or `false`)
3
+ * Generate a random boolean (true or false)
4
4
  *
5
- * @param {number} [probability=0.5] Probability to get `true`
5
+ * @param {number} [probability=0.5] Probability to get true
6
6
  * @returns {boolean} Either `true` or `false`
7
7
  */
8
8
  export function randomBoolean(probability) {
@@ -86,17 +86,17 @@ export function randomIndex(weights) {
86
86
  return -1;
87
87
  var totalWeight = 0;
88
88
  for (var _i = 0, weights_1 = weights; _i < weights_1.length; _i++) {
89
- var weight = weights_1[_i];
90
- totalWeight += weight;
89
+ var weight_1 = weights_1[_i];
90
+ totalWeight += weight_1;
91
91
  }
92
92
  if (totalWeight <= 0) {
93
93
  console.warn('randomIndex()', 'Weights must sum to > 0', totalWeight);
94
94
  }
95
- var random = Math.random() * totalWeight;
95
+ var weight = Math.random() * totalWeight;
96
96
  for (var i = 0; i < weights.length; i++) {
97
- if (random < weights[i])
97
+ if (weight < weights[i])
98
98
  return i;
99
- random -= weights[i];
99
+ weight -= weights[i];
100
100
  }
101
101
  return 0;
102
102
  }
@@ -1 +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","../src/constants.ts","../src/types.ts","../src/geometry.ts","../src/maths.ts","../src/colors.ts","../src/dom.ts","../src/files.ts","../src/functions.ts","../src/random.ts","../src/strings.ts","../src/classes/_pool.ts","../src/classes/color-scale.ts","../src/classes/frame-rate.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.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},{"version":"45cf2eb6cd6d7189ff80c87564aaa4fea53eb4c3da65d5e641127373de571cd9","signature":"0b4eec0a8599d6713095e0af18ab7e6204b675cd9fe8b2d02d04d66746e586e1"},{"version":"afcdcf3d0d1bb3289b5b7e7f9279e29ddee9ff9204376cf3d61636fe739f34ac","signature":"cf619c5895f1094521348154ca64a0c7b2f27aae89224981a63aee81ec835745"},{"version":"26337136ebd1ad61e045cf60e54556c56f64d69c0c3ab3567a04c48223c3d607","signature":"b2257f8c6c1893a598e6ab1109ae8af08dc4f44e220e04bc24d9e41e3252d8c1"},{"version":"ac3ceb54ea53cf59c64876bd639f29f36a971be7dd80d8cac3714e771ce3ae83","signature":"1ae451b9641fbf2f2fe337265830a61d9acd7b23f97ff3596e1c1e8030cebc6f"},{"version":"aa631ccb764e10001e746490f52eef2f129fd73c41aee0e95f9a9964544c92e1","signature":"ca745f3cebda4c4e91b00575b1cb2512df09c3f167b186b6f6fb5e8a9dec338e"},{"version":"56e06e465410f22645dca5fb7e640d2cf69004507af83364f1cc409297718adb","signature":"c1628eb24e9fb865d784112e7d6fd6c3c2a9af35c2947f3f7814a61f987f55a1"},{"version":"d52ff004bb7cd1c00d0a179f4b0893ddf84cdafc6830b2ceafc814804dfff9a5","signature":"4d71e33886aa72fef5fe425d76a3557f6553ee0b08863733656d58b91b8a6e77"},{"version":"de35f6a8eedc2a21a0e673f456cb55419da3985c321b19f3f1c81f37cb2f3013","signature":"61f803248f1cb85557eaa016fe19620e5a390cf87abba42ec793afda3a65f3be"},{"version":"2e0e406d29c690a1492452740dd2b48e8462bcc70cabe128df1d40a226f21308","signature":"fe3a7e6416d68ee395401ed1189255b42973efbacb0ca17b5c4ed15be3e88d2b"},{"version":"7ff1ac0e7aebca773d04dda761bca41d14320e0622ef69f6f2447e7b000f4fa7","signature":"399d115998e6ee77790354467a58babe1c7ee7caba7eed1bf471f4ec8a9a365f"},{"version":"4d7527ca5cc5b43998dea53a70b01fcae3f3ddcfdd570d8f677813107d198b4f","signature":"d0e23e1faa28d5e2cd295e0ee3348313884513c7db2e17609664c01a95228ba3"},{"version":"34ffa94ce2d61b3c97797c9616213b9bd810adc4ecfccfafc5e0369ef6346749","signature":"fcb413aaae0549c5b6b386263f6452910271db6cd6bc712098c37324b8910d84"},{"version":"562abb83a49d3112664e50077ea0b0b68e7714258a2961f47ee6c79117eeb153","signature":"93bd4de4b789d580460b72635bcfff03bf58797ef8c581c5de815f429c5115a9"},"efc7d584a33fe3422847783d228f315c4cd1afe74bd7cf8e3f0e4c1125129fef","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"a14ed46fa3f5ffc7a8336b497cd07b45c2084213aaca933a22443fcb2eef0d07","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"e2eb1ce13a9c0fa7ab62c63909d81973ef4b707292667c64f1e25e6e53fa7afa","affectsGlobalScope":true},"16d74fe4d8e183344d3beb15d48b123c5980ff32ff0cc8c3b96614ddcdf9b239","7b43160a49cf2c6082da0465876c4a0b164e160b81187caeb0a6ca7a281e85ba",{"version":"41fb2a1c108fbf46609ce5a451b7ec78eb9b5ada95fd5b94643e4b26397de0b3","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"a1d2988ad9d2aef7b9915a22b5e52c165c83a878f2851c35621409046bbe3c05","affectsGlobalScope":true},"bd3f5d05b6b5e4bfcea7739a45f3ffb4a7f4a3442ba7baf93e0200799285b8f1","4c775c2fccabf49483c03cd5e3673f87c1ffb6079d98e7b81089c3def79e29c6","8806ae97308ef26363bd7ec8071bca4d07fb575f905ee3d8a91aff226df6d618","af5bf1db6f1804fb0069039ae77a05d60133c77a2158d9635ea27b6bb2828a8f","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"2c71199d1fc83bf17636ad5bf63a945633406b7b94887612bba4ef027c662b3e","affectsGlobalScope":true},{"version":"7ae9dc7dbb58cd843065639707815df85c044babaa0947116f97bdb824d07204","affectsGlobalScope":true},"fe1fd6afdfe77976d4c702f3746c05fb05a7e566845c890e0e970fe9376d6a90","313a0b063f5188037db113509de1b934a0e286f14e9479af24fada241435e707","f1ace2d2f98429e007d017c7a445efad2aaebf8233135abdb2c88b8c0fef91ab","87ef1a23caa071b07157c72077fa42b86d30568f9dc9e31eed24d5d14fc30ba8","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","21773f5ac69ddf5a05636ba1f50b5239f4f2d27e4420db147fc2f76a5ae598ac",{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true},"c07146dbbbd8b347241b5df250a51e48f2d7bef19b1e187b1a3f20c849988ff1","45b1053e691c5af9bfe85060a3e1542835f8d84a7e6e2e77ca305251eda0cb3c","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"ae5507fc333d637dec9f37c6b3f4d423105421ea2820a64818de55db85214d66","affectsGlobalScope":true},{"version":"0666f4c99b8688c7be5956df8fecf5d1779d3b22f8f2a88258ae7072c7b6026f","affectsGlobalScope":true},"8abd0566d2854c4bd1c5e48e05df5c74927187f1541e6770001d9637ac41542e","54e854615c4eafbdd3fd7688bd02a3aafd0ccf0e87c98f79d3e9109f047ce6b8","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","8221b00f271cf7f535a8eeec03b0f80f0929c7a16116e2d2df089b41066de69b","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","7424817d5eb498771e6d1808d726ec38f75d2eaf3fa359edd5c0c540c52725c1","9a9634296cca836c3308923ba7aa094fa6ed76bb1e366d8ddcf5c65888ab1024",{"version":"bddce945d552a963c9733db106b17a25474eefcab7fc990157a2134ef55d4954","affectsGlobalScope":true},{"version":"7052b7b0c3829df3b4985bab2fd74531074b4835d5a7b263b75c82f0916ad62f","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","4b55240c2a03b2c71e98a7fc528b16136faa762211c92e781a01c37821915ea6","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"94c086dff8dbc5998749326bc69b520e8e4273fb5b7b58b50e0210e0885dfcde","affectsGlobalScope":true},{"version":"f5b5dc128973498b75f52b1b8c2d5f8629869104899733ae485100c2309b4c12","affectsGlobalScope":true},"ebe5facd12fd7745cda5f4bc3319f91fb29dc1f96e57e9c6f8b260a7cc5b67ee","79bad8541d5779c85e82a9fb119c1fe06af77a71cc40f869d62ad379473d4b75","37dc027f781c75f0f546e329cfac7cf92a6b289f42458f47a9adc25e516b6839",{"version":"629d20681ca284d9e38c0a019f647108f5fe02f9c59ac164d56f5694fc3faf4d","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b510d0a18e3db42ac9765d26711083ec1e8b4e21caaca6dc4d25ae6e8623f447"],"root":[[65,77]],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"esModuleInterop":true,"experimentalDecorators":true,"module":99,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strict":true,"target":1},"fileIdsList":[[78],[113],[114,119,147],[115,126,127,134,144,155],[115,116,126,134],[117,156],[118,119,127,135],[119,144,152],[120,122,126,134],[113,121],[122,123],[126],[124,126],[113,126],[126,127,128,144,155],[126,127,128,141,144,147],[111,114,160],[122,126,129,134,144,155],[126,127,129,130,134,144,152,155],[129,131,144,152,155],[78,79,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],[126,132],[133,155,160],[122,126,134,144],[135],[136],[113,137],[138,154,160],[139],[140],[126,141,142],[141,143,156,158],[114,126,144,145,146,147],[114,144,146],[144,145],[147],[148],[113,144],[126,150,151],[150,151],[119,134,144,152],[153],[134,154],[114,129,140,155],[119,156],[144,157],[133,158],[159],[114,119,126,128,137,144,155,158,160],[144,161],[88,92,155],[88,144,155],[83],[85,88,152,155],[134,152],[163],[83,163],[85,88,134,155],[80,81,84,87,114,126,144,155],[80,86],[84,88,114,147,155,163],[114,163],[104,114,163],[82,83,163],[88],[82,83,84,85,86,87,88,89,90,92,93,94,95,96,97,98,99,100,101,102,103,105,106,107,108,109,110],[88,95,96],[86,88,96,97],[87],[80,83,88],[88,92,96,97],[92],[86,88,91,155],[80,85,86,88,92,95],[114,144],[83,88,104,114,160,163],[66,68,69],[72],[65,66,67,68],[66],[65,66],[66,67],[65]],"referencedMap":[[78,1],[79,1],[113,2],[114,3],[115,4],[116,5],[117,6],[118,7],[119,8],[120,9],[121,10],[122,11],[123,11],[125,12],[124,13],[126,14],[127,15],[128,16],[112,17],[129,18],[130,19],[131,20],[163,21],[132,22],[133,23],[134,24],[135,25],[136,26],[137,27],[138,28],[139,29],[140,30],[141,31],[142,31],[143,32],[144,33],[146,34],[145,35],[147,36],[148,37],[149,38],[150,39],[151,40],[152,41],[153,42],[154,43],[155,44],[156,45],[157,46],[158,47],[159,48],[160,49],[161,50],[95,51],[102,52],[94,51],[109,53],[86,54],[85,55],[108,56],[103,57],[106,58],[88,59],[87,60],[83,61],[82,62],[105,63],[84,64],[89,65],[93,65],[111,66],[110,65],[97,67],[98,68],[100,69],[96,70],[99,71],[104,56],[91,72],[92,73],[101,74],[81,75],[107,76],[76,77],[77,78],[69,79],[72,80],[67,81],[73,82],[66,83]],"exportedModulesMap":[[78,1],[79,1],[113,2],[114,3],[115,4],[116,5],[117,6],[118,7],[119,8],[120,9],[121,10],[122,11],[123,11],[125,12],[124,13],[126,14],[127,15],[128,16],[112,17],[129,18],[130,19],[131,20],[163,21],[132,22],[133,23],[134,24],[135,25],[136,26],[137,27],[138,28],[139,29],[140,30],[141,31],[142,31],[143,32],[144,33],[146,34],[145,35],[147,36],[148,37],[149,38],[150,39],[151,40],[152,41],[153,42],[154,43],[155,44],[156,45],[157,46],[158,47],[159,48],[160,49],[161,50],[95,51],[102,52],[94,51],[109,53],[86,54],[85,55],[108,56],[103,57],[106,58],[88,59],[87,60],[83,61],[82,62],[105,63],[84,64],[89,65],[93,65],[111,66],[110,65],[97,67],[98,68],[100,69],[96,70],[99,71],[104,56],[91,72],[92,73],[101,74],[81,75],[107,76],[76,80],[69,80],[72,80],[67,80],[73,80],[66,83]],"semanticDiagnosticsPerFile":[78,79,113,114,115,116,117,118,119,120,121,122,123,125,124,126,127,128,112,162,129,130,131,163,132,133,134,135,136,137,138,139,140,141,142,143,144,146,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,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,95,102,94,109,86,85,108,103,106,88,87,83,82,105,84,89,90,93,80,111,110,97,98,100,96,99,104,91,92,101,81,107,75,76,77,69,65,70,71,72,67,68,73,74,66]},"version":"5.3.3"}
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","../src/constants.ts","../src/types.ts","../src/geometry.ts","../src/maths.ts","../src/colors.ts","../src/dom.ts","../src/files.ts","../src/functions.ts","../src/prng.ts","../src/random.ts","../src/strings.ts","../src/classes/_pool.ts","../src/classes/color-scale.ts","../src/classes/frame-rate.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.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},{"version":"45cf2eb6cd6d7189ff80c87564aaa4fea53eb4c3da65d5e641127373de571cd9","signature":"0b4eec0a8599d6713095e0af18ab7e6204b675cd9fe8b2d02d04d66746e586e1"},{"version":"afcdcf3d0d1bb3289b5b7e7f9279e29ddee9ff9204376cf3d61636fe739f34ac","signature":"cf619c5895f1094521348154ca64a0c7b2f27aae89224981a63aee81ec835745"},{"version":"26337136ebd1ad61e045cf60e54556c56f64d69c0c3ab3567a04c48223c3d607","signature":"b2257f8c6c1893a598e6ab1109ae8af08dc4f44e220e04bc24d9e41e3252d8c1"},{"version":"ac3ceb54ea53cf59c64876bd639f29f36a971be7dd80d8cac3714e771ce3ae83","signature":"1ae451b9641fbf2f2fe337265830a61d9acd7b23f97ff3596e1c1e8030cebc6f"},{"version":"aa631ccb764e10001e746490f52eef2f129fd73c41aee0e95f9a9964544c92e1","signature":"ca745f3cebda4c4e91b00575b1cb2512df09c3f167b186b6f6fb5e8a9dec338e"},{"version":"56e06e465410f22645dca5fb7e640d2cf69004507af83364f1cc409297718adb","signature":"c1628eb24e9fb865d784112e7d6fd6c3c2a9af35c2947f3f7814a61f987f55a1"},{"version":"d52ff004bb7cd1c00d0a179f4b0893ddf84cdafc6830b2ceafc814804dfff9a5","signature":"4d71e33886aa72fef5fe425d76a3557f6553ee0b08863733656d58b91b8a6e77"},{"version":"de35f6a8eedc2a21a0e673f456cb55419da3985c321b19f3f1c81f37cb2f3013","signature":"61f803248f1cb85557eaa016fe19620e5a390cf87abba42ec793afda3a65f3be"},{"version":"ca87695cf624ac3810968c444fd07b7b6370b0df199304530ecfe7373cdad5c7","signature":"bfbf0986270057216327e240d192582c2e1ad64f995251a8e99ef655ae3174f9"},{"version":"9c870b7ab6fbcf9491ff24997ad32d113b1d15ee21dc3b3a29c53f3979f12677","signature":"898901974d793c87194bd6b9b5e80cb5e1462113da0a76649d2b9c83a1820934"},{"version":"7ff1ac0e7aebca773d04dda761bca41d14320e0622ef69f6f2447e7b000f4fa7","signature":"399d115998e6ee77790354467a58babe1c7ee7caba7eed1bf471f4ec8a9a365f"},{"version":"4d7527ca5cc5b43998dea53a70b01fcae3f3ddcfdd570d8f677813107d198b4f","signature":"d0e23e1faa28d5e2cd295e0ee3348313884513c7db2e17609664c01a95228ba3"},{"version":"34ffa94ce2d61b3c97797c9616213b9bd810adc4ecfccfafc5e0369ef6346749","signature":"fcb413aaae0549c5b6b386263f6452910271db6cd6bc712098c37324b8910d84"},{"version":"562abb83a49d3112664e50077ea0b0b68e7714258a2961f47ee6c79117eeb153","signature":"93bd4de4b789d580460b72635bcfff03bf58797ef8c581c5de815f429c5115a9"},"efc7d584a33fe3422847783d228f315c4cd1afe74bd7cf8e3f0e4c1125129fef","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"a14ed46fa3f5ffc7a8336b497cd07b45c2084213aaca933a22443fcb2eef0d07","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"e2eb1ce13a9c0fa7ab62c63909d81973ef4b707292667c64f1e25e6e53fa7afa","affectsGlobalScope":true},"16d74fe4d8e183344d3beb15d48b123c5980ff32ff0cc8c3b96614ddcdf9b239","7b43160a49cf2c6082da0465876c4a0b164e160b81187caeb0a6ca7a281e85ba",{"version":"41fb2a1c108fbf46609ce5a451b7ec78eb9b5ada95fd5b94643e4b26397de0b3","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"a1d2988ad9d2aef7b9915a22b5e52c165c83a878f2851c35621409046bbe3c05","affectsGlobalScope":true},"bd3f5d05b6b5e4bfcea7739a45f3ffb4a7f4a3442ba7baf93e0200799285b8f1","4c775c2fccabf49483c03cd5e3673f87c1ffb6079d98e7b81089c3def79e29c6","8806ae97308ef26363bd7ec8071bca4d07fb575f905ee3d8a91aff226df6d618","af5bf1db6f1804fb0069039ae77a05d60133c77a2158d9635ea27b6bb2828a8f","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"2c71199d1fc83bf17636ad5bf63a945633406b7b94887612bba4ef027c662b3e","affectsGlobalScope":true},{"version":"7ae9dc7dbb58cd843065639707815df85c044babaa0947116f97bdb824d07204","affectsGlobalScope":true},"fe1fd6afdfe77976d4c702f3746c05fb05a7e566845c890e0e970fe9376d6a90","313a0b063f5188037db113509de1b934a0e286f14e9479af24fada241435e707","f1ace2d2f98429e007d017c7a445efad2aaebf8233135abdb2c88b8c0fef91ab","87ef1a23caa071b07157c72077fa42b86d30568f9dc9e31eed24d5d14fc30ba8","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","21773f5ac69ddf5a05636ba1f50b5239f4f2d27e4420db147fc2f76a5ae598ac",{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true},"c07146dbbbd8b347241b5df250a51e48f2d7bef19b1e187b1a3f20c849988ff1","45b1053e691c5af9bfe85060a3e1542835f8d84a7e6e2e77ca305251eda0cb3c","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"ae5507fc333d637dec9f37c6b3f4d423105421ea2820a64818de55db85214d66","affectsGlobalScope":true},{"version":"0666f4c99b8688c7be5956df8fecf5d1779d3b22f8f2a88258ae7072c7b6026f","affectsGlobalScope":true},"8abd0566d2854c4bd1c5e48e05df5c74927187f1541e6770001d9637ac41542e","54e854615c4eafbdd3fd7688bd02a3aafd0ccf0e87c98f79d3e9109f047ce6b8","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","8221b00f271cf7f535a8eeec03b0f80f0929c7a16116e2d2df089b41066de69b","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","7424817d5eb498771e6d1808d726ec38f75d2eaf3fa359edd5c0c540c52725c1","9a9634296cca836c3308923ba7aa094fa6ed76bb1e366d8ddcf5c65888ab1024",{"version":"bddce945d552a963c9733db106b17a25474eefcab7fc990157a2134ef55d4954","affectsGlobalScope":true},{"version":"7052b7b0c3829df3b4985bab2fd74531074b4835d5a7b263b75c82f0916ad62f","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","4b55240c2a03b2c71e98a7fc528b16136faa762211c92e781a01c37821915ea6","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"94c086dff8dbc5998749326bc69b520e8e4273fb5b7b58b50e0210e0885dfcde","affectsGlobalScope":true},{"version":"f5b5dc128973498b75f52b1b8c2d5f8629869104899733ae485100c2309b4c12","affectsGlobalScope":true},"ebe5facd12fd7745cda5f4bc3319f91fb29dc1f96e57e9c6f8b260a7cc5b67ee","79bad8541d5779c85e82a9fb119c1fe06af77a71cc40f869d62ad379473d4b75","37dc027f781c75f0f546e329cfac7cf92a6b289f42458f47a9adc25e516b6839",{"version":"629d20681ca284d9e38c0a019f647108f5fe02f9c59ac164d56f5694fc3faf4d","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b510d0a18e3db42ac9765d26711083ec1e8b4e21caaca6dc4d25ae6e8623f447"],"root":[[65,78]],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"esModuleInterop":true,"experimentalDecorators":true,"module":99,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strict":true,"target":1},"fileIdsList":[[79],[114],[115,120,148],[116,127,128,135,145,156],[116,117,127,135],[118,157],[119,120,128,136],[120,145,153],[121,123,127,135],[114,122],[123,124],[127],[125,127],[114,127],[127,128,129,145,156],[127,128,129,142,145,148],[112,115,161],[123,127,130,135,145,156],[127,128,130,131,135,145,153,156],[130,132,145,153,156],[79,80,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[127,133],[134,156,161],[123,127,135,145],[136],[137],[114,138],[139,155,161],[140],[141],[127,142,143],[142,144,157,159],[115,127,145,146,147,148],[115,145,147],[145,146],[148],[149],[114,145],[127,151,152],[151,152],[120,135,145,153],[154],[135,155],[115,130,141,156],[120,157],[145,158],[134,159],[160],[115,120,127,129,138,145,156,159,161],[145,162],[89,93,156],[89,145,156],[84],[86,89,153,156],[135,153],[164],[84,164],[86,89,135,156],[81,82,85,88,115,127,145,156],[81,87],[85,89,115,148,156,164],[115,164],[105,115,164],[83,84,164],[89],[83,84,85,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,106,107,108,109,110,111],[89,96,97],[87,89,97,98],[88],[81,84,89],[89,93,97,98],[93],[87,89,92,156],[81,86,87,89,93,96],[115,145],[84,89,105,115,161,164],[66,68,69],[72],[65,66,67,68],[66],[65,66],[66,67],[65]],"referencedMap":[[79,1],[80,1],[114,2],[115,3],[116,4],[117,5],[118,6],[119,7],[120,8],[121,9],[122,10],[123,11],[124,11],[126,12],[125,13],[127,14],[128,15],[129,16],[113,17],[130,18],[131,19],[132,20],[164,21],[133,22],[134,23],[135,24],[136,25],[137,26],[138,27],[139,28],[140,29],[141,30],[142,31],[143,31],[144,32],[145,33],[147,34],[146,35],[148,36],[149,37],[150,38],[151,39],[152,40],[153,41],[154,42],[155,43],[156,44],[157,45],[158,46],[159,47],[160,48],[161,49],[162,50],[96,51],[103,52],[95,51],[110,53],[87,54],[86,55],[109,56],[104,57],[107,58],[89,59],[88,60],[84,61],[83,62],[106,63],[85,64],[90,65],[94,65],[112,66],[111,65],[98,67],[99,68],[101,69],[97,70],[100,71],[105,56],[92,72],[93,73],[102,74],[82,75],[108,76],[77,77],[78,78],[69,79],[72,80],[67,81],[74,82],[66,83]],"exportedModulesMap":[[79,1],[80,1],[114,2],[115,3],[116,4],[117,5],[118,6],[119,7],[120,8],[121,9],[122,10],[123,11],[124,11],[126,12],[125,13],[127,14],[128,15],[129,16],[113,17],[130,18],[131,19],[132,20],[164,21],[133,22],[134,23],[135,24],[136,25],[137,26],[138,27],[139,28],[140,29],[141,30],[142,31],[143,31],[144,32],[145,33],[147,34],[146,35],[148,36],[149,37],[150,38],[151,39],[152,40],[153,41],[154,42],[155,43],[156,44],[157,45],[158,46],[159,47],[160,48],[161,49],[162,50],[96,51],[103,52],[95,51],[110,53],[87,54],[86,55],[109,56],[104,57],[107,58],[89,59],[88,60],[84,61],[83,62],[106,63],[85,64],[90,65],[94,65],[112,66],[111,65],[98,67],[99,68],[101,69],[97,70],[100,71],[105,56],[92,72],[93,73],[102,74],[82,75],[108,76],[77,80],[69,80],[72,80],[67,80],[74,80],[66,83]],"semanticDiagnosticsPerFile":[79,80,114,115,116,117,118,119,120,121,122,123,124,126,125,127,128,129,113,163,130,131,132,164,133,134,135,136,137,138,139,140,141,142,143,144,145,147,146,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,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,96,103,95,110,87,86,109,104,107,89,88,84,83,106,85,90,91,94,81,112,111,98,99,101,97,100,105,92,93,102,82,108,76,77,78,69,65,70,71,72,67,68,73,74,75,66]},"version":"5.3.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toosoon-utils",
3
- "version": "1.2.0",
3
+ "version": "1.4.0",
4
4
  "description": "Utility functions & classes",
5
5
  "main": "",
6
6
  "exports": {
@@ -10,6 +10,7 @@
10
10
  "./functions": "./lib/functions.js",
11
11
  "./geometry": "./lib/geometry.js",
12
12
  "./maths": "./lib/maths.js",
13
+ "./prng": "./lib/prng.js",
13
14
  "./random": "./lib/random.js",
14
15
  "./strings": "./lib/strings.js",
15
16
  "./constants": "./lib/constants.js",
@@ -34,7 +35,7 @@
34
35
  "functions",
35
36
  "geometry",
36
37
  "maths",
37
- "now",
38
+ "prng",
38
39
  "random",
39
40
  "strings"
40
41
  ],
package/src/prng.ts ADDED
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Produce a 128-bit hash value from a seed
3
+ *
4
+ * @param {string} seed Initial seed state
5
+ * @returns {[number, number, number, number]} Hash numbers
6
+ */
7
+ export function cyrb128(seed: string): [number, number, number, number] {
8
+ let h1 = 1779033703;
9
+ let h2 = 3144134277;
10
+ let h3 = 1013904242;
11
+ let h4 = 2773480762;
12
+ for (let i = 0, k; i < seed.length; i++) {
13
+ k = seed.charCodeAt(i);
14
+ h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
15
+ h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
16
+ h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
17
+ h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
18
+ }
19
+ h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);
20
+ h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);
21
+ h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);
22
+ h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);
23
+ return [(h1 ^ h2 ^ h3 ^ h4) >>> 0, (h2 ^ h1) >>> 0, (h3 ^ h1) >>> 0, (h4 ^ h1) >>> 0];
24
+ }
25
+
26
+ // *********************
27
+ // PRNG Algorithms
28
+ // *********************
29
+
30
+ /**
31
+ * Simple Fast Counter, Generator with a 128-bit state
32
+ *
33
+ * @param {number} a
34
+ * @param {number} b
35
+ * @param {number} c
36
+ * @param {number} d
37
+ * @returns {number} Pseudo-random number
38
+ */
39
+ export function sfc32(a: number, b: number, c: number, d: number): number {
40
+ a >>>= 0;
41
+ b >>>= 0;
42
+ c >>>= 0;
43
+ d >>>= 0;
44
+ let t = (a + b) | 0;
45
+ a = b ^ (b >>> 9);
46
+ b = (c + (c << 3)) | 0;
47
+ c = (c << 21) | (c >>> 11);
48
+ d = (d + 1) | 0;
49
+ t = (t + d) | 0;
50
+ c = (c + t) | 0;
51
+ return (t >>> 0) / 4294967296;
52
+ }
53
+
54
+ /**
55
+ * SplitMix32, Generator with a 32-bit state
56
+ *
57
+ * @param {number} a
58
+ * @returns {number} Pseudo-random number
59
+ */
60
+ export function splitmix32(a: number): number {
61
+ a |= 0;
62
+ a = (a + 0x9e3779b9) | 0;
63
+ var t = a ^ (a >>> 16);
64
+ t = Math.imul(t, 0x21f0aaad);
65
+ t = t ^ (t >>> 15);
66
+ t = Math.imul(t, 0x735a2d97);
67
+ return ((t = t ^ (t >>> 15)) >>> 0) / 4294967296;
68
+ }
69
+
70
+ /**
71
+ * Mulberry32, Generator with a 32-bit state
72
+ *
73
+ * @param {number} a
74
+ * @returns {number} Pseudo-random number
75
+ */
76
+ export function mulberry32(a: number): number {
77
+ let t = (a += 0x6d2b79f5);
78
+ t = Math.imul(t ^ (t >>> 15), t | 1);
79
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
80
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
81
+ }
82
+
83
+ /**
84
+ * Jenkins' Small Fast, Generator with a 32-bit state
85
+ *
86
+ * @param {number} a
87
+ * @returns {number} Pseudo-random number
88
+ */
89
+ export function jsf32(a: number, b: number, c: number, d: number): number {
90
+ a |= 0;
91
+ b |= 0;
92
+ c |= 0;
93
+ d |= 0;
94
+ let t = (a - ((b << 27) | (b >>> 5))) | 0;
95
+ a = b ^ ((c << 17) | (c >>> 15));
96
+ b = (c + d) | 0;
97
+ c = (d + t) | 0;
98
+ d = (a + t) | 0;
99
+ return (d >>> 0) / 4294967296;
100
+ }
101
+
102
+ /**
103
+ * xoshiro128**, Generator with a 128-bit state
104
+ *
105
+ * @param {number} a
106
+ * @returns {number} Pseudo-random number
107
+ */
108
+ export function xoshiro128ss(a: number, b: number, c: number, d: number): number {
109
+ let t = b << 9;
110
+ let r = a * 5;
111
+ r = ((r << 7) | (r >>> 25)) * 9;
112
+ c ^= a;
113
+ d ^= b;
114
+ b ^= c;
115
+ a ^= d;
116
+ c ^= t;
117
+ d = (d << 11) | (d >>> 21);
118
+ return (r >>> 0) / 4294967296;
119
+ }
120
+
121
+ // *********************
122
+ // PRNG Functions
123
+ // *********************
124
+
125
+ type PRNGParameters = string | { seed: string; algorithm: (...args: number[]) => number };
126
+
127
+ /**
128
+ * Generate a pseudo-random number in the interval [0, 1]
129
+ * PRNG equivalent of `Math.random()`
130
+ *
131
+ * @param {string|object} prng
132
+ * @returns {number} Pseudo-random number
133
+ */
134
+ export function random(prng: PRNGParameters): number {
135
+ const seed = typeof prng === 'string' ? prng : prng.seed;
136
+ const algorithm = typeof prng === 'string' ? splitmix32 : prng.algorithm;
137
+
138
+ const hashes = cyrb128(seed);
139
+ return algorithm(...hashes);
140
+ }
141
+
142
+ /**
143
+ * Generate a pseudo-random boolean (true or false)
144
+ *
145
+ * @param {string|object} prng
146
+ * @param {number} [probability=0.5] Probability to get true
147
+ * @returns {boolean} Either `true` or `false`
148
+ */
149
+ export function randomBoolean(prng: PRNGParameters, probability: number = 0.5): boolean {
150
+ return random(prng) < probability;
151
+ }
152
+
153
+ /**
154
+ * Generate a pseudo-random sign (1 or -1)
155
+ *
156
+ * @param {string|object} prng
157
+ * @param {number} [probability=0.5] Probability to get 1
158
+ * @returns {number} Either 1 or -1
159
+ */
160
+ export function randomSign(prng: PRNGParameters, probability: number = 0.5): number {
161
+ return randomBoolean(prng, probability) ? 1 : -1;
162
+ }
163
+
164
+ /**
165
+ * Generate a pseudo-random floating-point number within a specified range
166
+ *
167
+ * @param {string|object} prng
168
+ * @param {number} [min=0] Minimum boundary
169
+ * @param {number} [max=1] Maximum boundary
170
+ * @param {number} [precision=2] Number of digits after the decimal point
171
+ * @returns {number} Generated float
172
+ */
173
+ export function randomFloat(prng: PRNGParameters, min: number = 0, max: number = 1, precision: number = 2): number {
174
+ return parseFloat(Math.min(min + random(prng) * (max - min), max).toFixed(precision));
175
+ }
176
+
177
+ /**
178
+ * Generate a pseudo-random integer number within a specified range
179
+ *
180
+ * @param {string|object} prng
181
+ * @param {number} min Minimum boundary
182
+ * @param {number} max Maximum boundary
183
+ * @returns {number} Generated integer
184
+ */
185
+ export function randomInt(prng: PRNGParameters, min: number, max: number): number {
186
+ return Math.floor(random(prng) * (max - min + 1) + min);
187
+ }
188
+
189
+ /**
190
+ * Generate a pseudo-random hexadecimal color
191
+ *
192
+ * @param {string|object} prng
193
+ * @returns {string} Generated hexadecimal color
194
+ */
195
+ export function randomHexColor(prng: PRNGParameters): string {
196
+ return '#' + ('00000' + ((random(prng) * (1 << 24)) | 0).toString(16)).slice(-6);
197
+ }
198
+
199
+ /**
200
+ * Pick a pseudo-random item from a given array
201
+ *
202
+ * @param {string|object} prng
203
+ * @param {T[]} array Array to pick the item from
204
+ * @returns {T|undefined} Random item picked
205
+ */
206
+ export function randomItem<T = unknown>(prng: PRNGParameters, array: T[]): T | undefined {
207
+ if (array.length === 0) return undefined;
208
+ return array[randomInt(prng, 0, array.length - 1)];
209
+ }
210
+
211
+ /**
212
+ * Pick a pseudo-random property value from a given object
213
+ *
214
+ * @param {string|object} prng
215
+ * @param {object} object Object to pick the property from
216
+ * @returns {T|undefined} Random item picked
217
+ */
218
+ export function randomObjectProperty<T = unknown>(prng: PRNGParameters, object: Record<string, T>): T | undefined {
219
+ const keys = Object.keys(object);
220
+ const key = randomItem(prng, keys);
221
+ if (key && object.hasOwnProperty(key)) {
222
+ return object[key as keyof object];
223
+ }
224
+ }
225
+
226
+ /**
227
+ * Select a pseudo-random index from an array of weighted items
228
+ *
229
+ * @param {string|object} prng
230
+ * @param {number[]} weights Array of weights
231
+ * @returns {number} Random index based on weights
232
+ */
233
+ export function randomIndex(prng: PRNGParameters, weights: number[]): number {
234
+ if (weights.length === 0) return -1;
235
+
236
+ let totalWeight = 0;
237
+ for (let weight of weights) {
238
+ totalWeight += weight;
239
+ }
240
+
241
+ if (totalWeight <= 0) console.warn('PRNG randomIndex()', 'Weights must sum to > 0', totalWeight);
242
+
243
+ let weight = random(prng) * totalWeight;
244
+ for (let i = 0; i < weights.length; i++) {
245
+ if (weight < weights[i]) return i;
246
+ weight -= weights[i];
247
+ }
248
+
249
+ return 0;
250
+ }
package/src/random.ts CHANGED
@@ -2,9 +2,9 @@ import { radToSphere } from './geometry';
2
2
  import { Vector2, Vector3 } from './types';
3
3
 
4
4
  /**
5
- * Generate a random boolean (`true` or `false`)
5
+ * Generate a random boolean (true or false)
6
6
  *
7
- * @param {number} [probability=0.5] Probability to get `true`
7
+ * @param {number} [probability=0.5] Probability to get true
8
8
  * @returns {boolean} Either `true` or `false`
9
9
  */
10
10
  export function randomBoolean(probability: number = 0.5): boolean {
@@ -70,7 +70,7 @@ export function randomItem<T = unknown>(array: T[]): T | undefined {
70
70
  * @param {object} object Object to pick the property from
71
71
  * @returns {T|undefined} Random item picked
72
72
  */
73
- export function randomObjectProperty<T = unknown>(object: { [key: string]: T }): T | undefined {
73
+ export function randomObjectProperty<T = unknown>(object: Record<string, T>): T | undefined {
74
74
  const keys = Object.keys(object);
75
75
  const key = randomItem(keys);
76
76
  if (key && object.hasOwnProperty(key)) {
@@ -96,10 +96,10 @@ export function randomIndex(weights: number[]): number {
96
96
  console.warn('randomIndex()', 'Weights must sum to > 0', totalWeight);
97
97
  }
98
98
 
99
- let random = Math.random() * totalWeight;
99
+ let weight = Math.random() * totalWeight;
100
100
  for (let i = 0; i < weights.length; i++) {
101
- if (random < weights[i]) return i;
102
- random -= weights[i];
101
+ if (weight < weights[i]) return i;
102
+ weight -= weights[i];
103
103
  }
104
104
 
105
105
  return 0;