@oliversalzburg/js-utils 0.7.0 → 0.7.1

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.
Files changed (173) hide show
  1. package/lib/async/async.d.ts +44 -0
  2. package/lib/async/async.js +76 -0
  3. package/lib/async/async.js.map +1 -0
  4. package/lib/async/async.test.d.ts +1 -0
  5. package/lib/async/async.test.js +26 -0
  6. package/lib/async/async.test.js.map +1 -0
  7. package/lib/core.d.ts +43 -0
  8. package/lib/core.js +2 -0
  9. package/lib/core.js.map +1 -0
  10. package/lib/data/array.d.ts +55 -0
  11. package/lib/data/array.js +90 -0
  12. package/lib/data/array.js.map +1 -0
  13. package/lib/data/nil.d.ts +92 -0
  14. package/lib/data/nil.js +131 -0
  15. package/lib/data/nil.js.map +1 -0
  16. package/lib/data/random.d.ts +111 -0
  17. package/lib/data/random.js +381 -0
  18. package/lib/data/random.js.map +1 -0
  19. package/lib/data/string.d.ts +30 -0
  20. package/lib/data/string.js +53 -0
  21. package/lib/data/string.js.map +1 -0
  22. package/lib/data/tree.d.ts +28 -0
  23. package/lib/data/tree.js +45 -0
  24. package/lib/data/tree.js.map +1 -0
  25. package/lib/device/shake.d.ts +79 -0
  26. package/lib/device/shake.js +135 -0
  27. package/lib/device/shake.js.map +1 -0
  28. package/lib/dom/core.d.ts +21 -0
  29. package/lib/dom/core.js +41 -0
  30. package/lib/dom/core.js.map +1 -0
  31. package/lib/errors/AbstractError.d.ts +29 -0
  32. package/lib/errors/AbstractError.js +59 -0
  33. package/lib/errors/AbstractError.js.map +1 -0
  34. package/lib/errors/InternalError.d.ts +19 -0
  35. package/lib/errors/InternalError.js +38 -0
  36. package/lib/errors/InternalError.js.map +1 -0
  37. package/lib/errors/InvalidArgumentError.d.ts +13 -0
  38. package/lib/errors/InvalidArgumentError.js +22 -0
  39. package/lib/errors/InvalidArgumentError.js.map +1 -0
  40. package/lib/errors/InvalidOperationError.d.ts +13 -0
  41. package/lib/errors/InvalidOperationError.js +22 -0
  42. package/lib/errors/InvalidOperationError.js.map +1 -0
  43. package/lib/errors/NotImplementedError.d.ts +12 -0
  44. package/lib/errors/NotImplementedError.js +21 -0
  45. package/lib/errors/NotImplementedError.js.map +1 -0
  46. package/lib/errors/PermissionViolationError.d.ts +13 -0
  47. package/lib/errors/PermissionViolationError.js +22 -0
  48. package/lib/errors/PermissionViolationError.js.map +1 -0
  49. package/lib/errors/ResourceConflictError.d.ts +12 -0
  50. package/lib/errors/ResourceConflictError.js +21 -0
  51. package/lib/errors/ResourceConflictError.js.map +1 -0
  52. package/lib/errors/UnknownError.d.ts +16 -0
  53. package/lib/errors/UnknownError.js +25 -0
  54. package/lib/errors/UnknownError.js.map +1 -0
  55. package/lib/errors/console.d.ts +7 -0
  56. package/lib/errors/console.js +13 -0
  57. package/lib/errors/console.js.map +1 -0
  58. package/lib/errors/error-serializer.d.ts +45 -0
  59. package/lib/errors/error-serializer.js +74 -0
  60. package/lib/errors/error-serializer.js.map +1 -0
  61. package/lib/errors/error-serializer.test.d.ts +1 -0
  62. package/lib/errors/error-serializer.test.js +109 -0
  63. package/lib/errors/error-serializer.test.js.map +1 -0
  64. package/lib/errors/stream.d.ts +7 -0
  65. package/lib/errors/stream.js +15 -0
  66. package/lib/errors/stream.js.map +1 -0
  67. package/lib/errors/tools.d.ts +10 -0
  68. package/lib/errors/tools.js +13 -0
  69. package/lib/errors/tools.js.map +1 -0
  70. package/lib/events/event.d.ts +9 -0
  71. package/lib/events/event.js +10 -0
  72. package/lib/events/event.js.map +1 -0
  73. package/lib/format/bytes.d.ts +118 -0
  74. package/lib/format/bytes.js +138 -0
  75. package/lib/format/bytes.js.map +1 -0
  76. package/lib/format/bytes.test.d.ts +1 -0
  77. package/lib/format/bytes.test.js +146 -0
  78. package/lib/format/bytes.test.js.map +1 -0
  79. package/lib/format/count.d.ts +14 -0
  80. package/lib/format/count.js +51 -0
  81. package/lib/format/count.js.map +1 -0
  82. package/lib/format/count.test.d.ts +1 -0
  83. package/lib/format/count.test.js +42 -0
  84. package/lib/format/count.test.js.map +1 -0
  85. package/lib/format/milliseconds.d.ts +100 -0
  86. package/lib/format/milliseconds.js +199 -0
  87. package/lib/format/milliseconds.js.map +1 -0
  88. package/lib/format/milliseconds.test.d.ts +1 -0
  89. package/lib/format/milliseconds.test.js +393 -0
  90. package/lib/format/milliseconds.test.js.map +1 -0
  91. package/lib/format/string.d.ts +24 -0
  92. package/lib/format/string.js +32 -0
  93. package/lib/format/string.js.map +1 -0
  94. package/lib/format/string.test.d.ts +1 -0
  95. package/lib/format/string.test.js +17 -0
  96. package/lib/format/string.test.js.map +1 -0
  97. package/lib/graphics/canvas-sandbox-mp.d.ts +258 -0
  98. package/lib/graphics/canvas-sandbox-mp.js +280 -0
  99. package/lib/graphics/canvas-sandbox-mp.js.map +1 -0
  100. package/lib/graphics/canvas-sandbox.d.ts +255 -0
  101. package/lib/graphics/canvas-sandbox.js +358 -0
  102. package/lib/graphics/canvas-sandbox.js.map +1 -0
  103. package/lib/graphics/canvas.d.ts +57 -0
  104. package/lib/graphics/canvas.js +37 -0
  105. package/lib/graphics/canvas.js.map +1 -0
  106. package/lib/graphics/canvas2d-headless.d.ts +85 -0
  107. package/lib/graphics/canvas2d-headless.js +197 -0
  108. package/lib/graphics/canvas2d-headless.js.map +1 -0
  109. package/lib/graphics/canvas2d.d.ts +162 -0
  110. package/lib/graphics/canvas2d.js +332 -0
  111. package/lib/graphics/canvas2d.js.map +1 -0
  112. package/lib/graphics/canvas3d.d.ts +41 -0
  113. package/lib/graphics/canvas3d.js +67 -0
  114. package/lib/graphics/canvas3d.js.map +1 -0
  115. package/lib/graphics/color.d.ts +22 -0
  116. package/lib/graphics/color.js +38 -0
  117. package/lib/graphics/color.js.map +1 -0
  118. package/lib/graphics/core.d.ts +89 -0
  119. package/lib/graphics/core.js +146 -0
  120. package/lib/graphics/core.js.map +1 -0
  121. package/lib/graphics/palette-sampler.d.ts +7 -0
  122. package/lib/graphics/palette-sampler.js +21 -0
  123. package/lib/graphics/palette-sampler.js.map +1 -0
  124. package/lib/graphics/palette.d.ts +120 -0
  125. package/lib/graphics/palette.js +574 -0
  126. package/lib/graphics/palette.js.map +1 -0
  127. package/lib/graphics/palette.test.d.ts +1 -0
  128. package/lib/graphics/palette.test.js +43 -0
  129. package/lib/graphics/palette.test.js.map +1 -0
  130. package/lib/graphics/render-loop.d.ts +76 -0
  131. package/lib/graphics/render-loop.js +114 -0
  132. package/lib/graphics/render-loop.js.map +1 -0
  133. package/lib/graphics/shader.d.ts +56 -0
  134. package/lib/graphics/shader.js +80 -0
  135. package/lib/graphics/shader.js.map +1 -0
  136. package/lib/log/log.d.ts +11 -0
  137. package/lib/log/log.js +2 -0
  138. package/lib/log/log.js.map +1 -0
  139. package/lib/log/report.d.ts +57 -0
  140. package/lib/log/report.js +88 -0
  141. package/lib/log/report.js.map +1 -0
  142. package/lib/math/core.d.ts +85 -0
  143. package/lib/math/core.js +125 -0
  144. package/lib/math/core.js.map +1 -0
  145. package/lib/math/easing.d.ts +204 -0
  146. package/lib/math/easing.js +366 -0
  147. package/lib/math/easing.js.map +1 -0
  148. package/lib/math/euler.d.ts +18 -0
  149. package/lib/math/euler.js +22 -0
  150. package/lib/math/euler.js.map +1 -0
  151. package/lib/math/matrix3.d.ts +227 -0
  152. package/lib/math/matrix3.js +508 -0
  153. package/lib/math/matrix3.js.map +1 -0
  154. package/lib/math/quaternion.d.ts +119 -0
  155. package/lib/math/quaternion.js +270 -0
  156. package/lib/math/quaternion.js.map +1 -0
  157. package/lib/math/transformation.d.ts +26 -0
  158. package/lib/math/transformation.js +31 -0
  159. package/lib/math/transformation.js.map +1 -0
  160. package/lib/math/vector2.d.ts +202 -0
  161. package/lib/math/vector2.js +310 -0
  162. package/lib/math/vector2.js.map +1 -0
  163. package/lib/math/vector3.d.ts +293 -0
  164. package/lib/math/vector3.js +492 -0
  165. package/lib/math/vector3.js.map +1 -0
  166. package/lib/math/vector4.d.ts +182 -0
  167. package/lib/math/vector4.js +302 -0
  168. package/lib/math/vector4.js.map +1 -0
  169. package/lib/measurement/performance.d.ts +13 -0
  170. package/lib/measurement/performance.js +19 -0
  171. package/lib/measurement/performance.js.map +1 -0
  172. package/lib/tsconfig.tsbuildinfo +1 -0
  173. package/package.json +3 -5
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Helps with generating random numbers.
3
+ */
4
+ export declare class Random {
5
+ /**
6
+ * The value this PRNG was seeded with.
7
+ */
8
+ private _seed;
9
+ /**
10
+ * Retrieve the seed of the PRNG.
11
+ * @returns The seed of the PRNG.
12
+ */
13
+ get seed(): number;
14
+ /**
15
+ * The permutation table for simplex noise.
16
+ */
17
+ private _perm;
18
+ /**
19
+ * The gradient map for simplex noise.
20
+ */
21
+ private _gradP;
22
+ /**
23
+ * Skewing and unskewing factors for 2, 3, and 4 dimensions.
24
+ */
25
+ private _F2;
26
+ /**
27
+ * Skewing and unskewing factors for 2, 3, and 4 dimensions.
28
+ */
29
+ private _G2;
30
+ /**
31
+ * Creates a pseudo-random value generator. The seed must be an integer.
32
+ *
33
+ * Uses an optimized version of the Park-Miller PRNG.
34
+ * http://www.firstpr.com.au/dsp/rand31/
35
+ * @param seed - The seed for the random number generator.
36
+ */
37
+ constructor(seed?: number);
38
+ /**
39
+ * Returns a pseudo-random value between 1 and 2^32 - 2.
40
+ * @returns A pseudo-random value between 1 and 2^32 - 2.
41
+ */
42
+ next(): number;
43
+ /**
44
+ * Returns a random value in a given range.
45
+ * @param min - The lower bound.
46
+ * @param max - The upper bound.
47
+ * @returns A random value between the lower and upper bound.
48
+ */
49
+ nextRange(min: number, max: number): number;
50
+ /**
51
+ * Returns either `true` or `false`.
52
+ * @returns Either `true` or `false`.
53
+ */
54
+ nextBoolean(): boolean;
55
+ /**
56
+ * Returns a pseudo-random floating point number in range [0, 1).
57
+ * @returns a pseudo-random floating point number in range [0, 1).
58
+ */
59
+ nextFloat(): number;
60
+ /**
61
+ * Creates a new Random instance, with a seed that is based of the seed
62
+ * of this Random instance.
63
+ * @returns A new random number generator.
64
+ */
65
+ nextRandom(): Random;
66
+ static ALLOWED_CHARACTERS: string;
67
+ /**
68
+ * Returns a random ASCII string.
69
+ * @param length - The length of the string.
70
+ * @returns A random ASCII string.
71
+ */
72
+ nextString(length: number, characters?: string): string;
73
+ /**
74
+ * Returns a 2D simplex noise value for a given input coordinate.
75
+ * @param x - The X input coordinate.
76
+ * @param y - The Y input coordinate.
77
+ * @returns The noise value for the input coordinates.
78
+ */
79
+ simplex2(x: number, y: number): number;
80
+ /**
81
+ * Returns a 3D simplex noise value for a given input coordinate.
82
+ * @param x - The X input coordinate.
83
+ * @param y - The Y input coordinate.
84
+ * @param z - The Z input coordinate.
85
+ * @returns The noise value for the input coordinates.
86
+ */
87
+ simplex3(x: number, y: number, z: number): number;
88
+ }
89
+ /**
90
+ * Returns a random value in a given range.
91
+ *
92
+ * Uses the JS-internal `Math.random()`. Use {@linkcode Random} for a PRNG with more features.
93
+ *
94
+ * Note that this method returns floating point numbers, regardless of your inputs potentially
95
+ * being integers. If you require integers, ensure to truncate the resulting random value.
96
+ * @param min - The lower bound.
97
+ * @param max - The upper bound.
98
+ * @returns A random value between the lower and upper bound.
99
+ */
100
+ export declare const randomRange: (min: number, max: number) => number;
101
+ /**
102
+ * Generates a numberic seed, to be used as an input for a PRNG,
103
+ * from a string.
104
+ * @param input - The string to use as a seed.
105
+ * @returns A numeric seed value for a PRNG.
106
+ */
107
+ export declare const seedFromString: (input: string) => number;
108
+ /**
109
+ * A global PRNG instance that is ready-to-use.
110
+ */
111
+ export declare const random: Random;
@@ -0,0 +1,381 @@
1
+ import { Vector3 } from "../math/vector3.js";
2
+ /**
3
+ * Helps with generating random numbers.
4
+ */
5
+ export class Random {
6
+ /**
7
+ * The value this PRNG was seeded with.
8
+ */
9
+ _seed;
10
+ /**
11
+ * Retrieve the seed of the PRNG.
12
+ * @returns The seed of the PRNG.
13
+ */
14
+ get seed() {
15
+ return this._seed;
16
+ }
17
+ /**
18
+ * The permutation table for simplex noise.
19
+ */
20
+ _perm;
21
+ /**
22
+ * The gradient map for simplex noise.
23
+ */
24
+ _gradP;
25
+ /**
26
+ * Skewing and unskewing factors for 2, 3, and 4 dimensions.
27
+ */
28
+ _F2;
29
+ /**
30
+ * Skewing and unskewing factors for 2, 3, and 4 dimensions.
31
+ */
32
+ _G2;
33
+ /**
34
+ * Creates a pseudo-random value generator. The seed must be an integer.
35
+ *
36
+ * Uses an optimized version of the Park-Miller PRNG.
37
+ * http://www.firstpr.com.au/dsp/rand31/
38
+ * @param seed - The seed for the random number generator.
39
+ */
40
+ constructor(seed = 0) {
41
+ this._seed = Math.trunc(seed) % 2147483647;
42
+ if (this._seed <= 0) {
43
+ this._seed += 2147483646;
44
+ }
45
+ const grad3 = [
46
+ new Vector3(1, 1, 0),
47
+ new Vector3(-1, 1, 0),
48
+ new Vector3(1, -1, 0),
49
+ new Vector3(-1, -1, 0),
50
+ new Vector3(1, 0, 1),
51
+ new Vector3(-1, 0, 1),
52
+ new Vector3(1, 0, -1),
53
+ new Vector3(-1, 0, -1),
54
+ new Vector3(0, 1, 1),
55
+ new Vector3(0, -1, 1),
56
+ new Vector3(0, 1, -1),
57
+ new Vector3(0, -1, -1),
58
+ ];
59
+ const p = [
60
+ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225,
61
+ 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247,
62
+ 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177,
63
+ 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165,
64
+ 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211,
65
+ 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25,
66
+ 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196,
67
+ 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217,
68
+ 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206,
69
+ 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248,
70
+ 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22,
71
+ 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218,
72
+ 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241,
73
+ 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157,
74
+ 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93,
75
+ 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180,
76
+ ];
77
+ this._perm = new Array(512);
78
+ this._gradP = new Array(512);
79
+ for (let i = 0; i < 256; i++) {
80
+ let v;
81
+ if (i & 1) {
82
+ v = p[i] ^ (this._seed & 255);
83
+ }
84
+ else {
85
+ v = p[i] ^ ((this._seed >> 8) & 255);
86
+ }
87
+ this._perm[i] = this._perm[i + 256] = v;
88
+ this._gradP[i] = this._gradP[i + 256] = grad3[v % 12];
89
+ }
90
+ this._F2 = 0.5 * (Math.sqrt(3) - 1);
91
+ this._G2 = (3 - Math.sqrt(3)) / 6;
92
+ }
93
+ /**
94
+ * Returns a pseudo-random value between 1 and 2^32 - 2.
95
+ * @returns A pseudo-random value between 1 and 2^32 - 2.
96
+ */
97
+ next() {
98
+ this._seed = (this._seed * 16807) % 2147483647;
99
+ return this._seed;
100
+ }
101
+ /**
102
+ * Returns a random value in a given range.
103
+ * @param min - The lower bound.
104
+ * @param max - The upper bound.
105
+ * @returns A random value between the lower and upper bound.
106
+ */
107
+ nextRange(min, max) {
108
+ return this.nextFloat() * (max - min) + min;
109
+ }
110
+ /**
111
+ * Returns either `true` or `false`.
112
+ * @returns Either `true` or `false`.
113
+ */
114
+ nextBoolean() {
115
+ return this.next() < 2147483646 / 2;
116
+ }
117
+ /**
118
+ * Returns a pseudo-random floating point number in range [0, 1).
119
+ * @returns a pseudo-random floating point number in range [0, 1).
120
+ */
121
+ nextFloat() {
122
+ // We know that result of next() will be 1 to 2147483646 (inclusive).
123
+ return (this.next() - 1) / 2147483646;
124
+ }
125
+ /**
126
+ * Creates a new Random instance, with a seed that is based of the seed
127
+ * of this Random instance.
128
+ * @returns A new random number generator.
129
+ */
130
+ nextRandom() {
131
+ return new Random(this.seed + 1);
132
+ }
133
+ static ALLOWED_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
134
+ /**
135
+ * Returns a random ASCII string.
136
+ * @param length - The length of the string.
137
+ * @returns A random ASCII string.
138
+ */
139
+ nextString(length, characters = Random.ALLOWED_CHARACTERS) {
140
+ let result = "";
141
+ while (result.length < length) {
142
+ const characterIndex = Math.floor(this.nextFloat() * characters.length);
143
+ result += characters.substring(characterIndex, characterIndex + 1);
144
+ }
145
+ return result;
146
+ }
147
+ /**
148
+ * Returns a 2D simplex noise value for a given input coordinate.
149
+ * @param x - The X input coordinate.
150
+ * @param y - The Y input coordinate.
151
+ * @returns The noise value for the input coordinates.
152
+ */
153
+ simplex2(x, y) {
154
+ let n0, n1, n2; // Noise contributions from the three corners
155
+ // Skew the input space to determine which simplex cell we're in
156
+ const s = (x + y) * this._F2; // Hairy factor for 2D
157
+ let i = Math.floor(x + s);
158
+ let j = Math.floor(y + s);
159
+ const t = (i + j) * this._G2;
160
+ const x0 = x - i + t; // The x,y distances from the cell origin, unskewed.
161
+ const y0 = y - j + t;
162
+ // For the 2D case, the simplex shape is an equilateral triangle.
163
+ // Determine which simplex we are in.
164
+ let i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords
165
+ if (x0 > y0) {
166
+ // lower triangle, XY order: (0,0)->(1,0)->(1,1)
167
+ i1 = 1;
168
+ j1 = 0;
169
+ }
170
+ else {
171
+ // upper triangle, YX order: (0,0)->(0,1)->(1,1)
172
+ i1 = 0;
173
+ j1 = 1;
174
+ }
175
+ // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and
176
+ // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where
177
+ // c = (3-sqrt(3))/6
178
+ const x1 = x0 - i1 + this._G2; // Offsets for middle corner in (x,y) unskewed coords
179
+ const y1 = y0 - j1 + this._G2;
180
+ const x2 = x0 - 1 + 2 * this._G2; // Offsets for last corner in (x,y) unskewed coords
181
+ const y2 = y0 - 1 + 2 * this._G2;
182
+ // Work out the hashed gradient indices of the three simplex corners
183
+ i &= 255;
184
+ j &= 255;
185
+ const gi0 = this._gradP[i + this._perm[j]];
186
+ const gi1 = this._gradP[i + i1 + this._perm[j + j1]];
187
+ const gi2 = this._gradP[i + 1 + this._perm[j + 1]];
188
+ // Calculate the contribution from the three corners
189
+ let t0 = 0.5 - x0 * x0 - y0 * y0;
190
+ if (t0 < 0) {
191
+ n0 = 0;
192
+ }
193
+ else {
194
+ t0 *= t0;
195
+ n0 = t0 * t0 * gi0.dotXYZ(x0, y0, 0); // (x,y) of grad3 used for 2D gradient
196
+ }
197
+ let t1 = 0.5 - x1 * x1 - y1 * y1;
198
+ if (t1 < 0) {
199
+ n1 = 0;
200
+ }
201
+ else {
202
+ t1 *= t1;
203
+ n1 = t1 * t1 * gi1.dotXYZ(x1, y1, 0);
204
+ }
205
+ let t2 = 0.5 - x2 * x2 - y2 * y2;
206
+ if (t2 < 0) {
207
+ n2 = 0;
208
+ }
209
+ else {
210
+ t2 *= t2;
211
+ n2 = t2 * t2 * gi2.dotXYZ(x2, y2, 0);
212
+ }
213
+ // Add contributions from each corner to get the final noise value.
214
+ // The result is scaled to return values in the interval [-1,1].
215
+ return 70 * (n0 + n1 + n2);
216
+ }
217
+ /**
218
+ * Returns a 3D simplex noise value for a given input coordinate.
219
+ * @param x - The X input coordinate.
220
+ * @param y - The Y input coordinate.
221
+ * @param z - The Z input coordinate.
222
+ * @returns The noise value for the input coordinates.
223
+ */
224
+ simplex3(x, y, z) {
225
+ const F3 = 1 / 3;
226
+ const G3 = 1 / 6;
227
+ let n0, n1, n2, n3; // Noise contributions from the four corners
228
+ // Skew the input space to determine which simplex cell we're in
229
+ const s = (x + y + z) * F3; // Hairy factor for 2D
230
+ let i = Math.floor(x + s);
231
+ let j = Math.floor(y + s);
232
+ let k = Math.floor(z + s);
233
+ const t = (i + j + k) * G3;
234
+ const x0 = x - i + t; // The x,y distances from the cell origin, unskewed.
235
+ const y0 = y - j + t;
236
+ const z0 = z - k + t;
237
+ // For the 3D case, the simplex shape is a slightly irregular tetrahedron.
238
+ // Determine which simplex we are in.
239
+ let i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords
240
+ let i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords
241
+ if (x0 >= y0) {
242
+ if (y0 >= z0) {
243
+ i1 = 1;
244
+ j1 = 0;
245
+ k1 = 0;
246
+ i2 = 1;
247
+ j2 = 1;
248
+ k2 = 0;
249
+ }
250
+ else if (x0 >= z0) {
251
+ i1 = 1;
252
+ j1 = 0;
253
+ k1 = 0;
254
+ i2 = 1;
255
+ j2 = 0;
256
+ k2 = 1;
257
+ }
258
+ else {
259
+ i1 = 0;
260
+ j1 = 0;
261
+ k1 = 1;
262
+ i2 = 1;
263
+ j2 = 0;
264
+ k2 = 1;
265
+ }
266
+ }
267
+ else {
268
+ if (y0 < z0) {
269
+ i1 = 0;
270
+ j1 = 0;
271
+ k1 = 1;
272
+ i2 = 0;
273
+ j2 = 1;
274
+ k2 = 1;
275
+ }
276
+ else if (x0 < z0) {
277
+ i1 = 0;
278
+ j1 = 1;
279
+ k1 = 0;
280
+ i2 = 0;
281
+ j2 = 1;
282
+ k2 = 1;
283
+ }
284
+ else {
285
+ i1 = 0;
286
+ j1 = 1;
287
+ k1 = 0;
288
+ i2 = 1;
289
+ j2 = 1;
290
+ k2 = 0;
291
+ }
292
+ }
293
+ // A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z),
294
+ // a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and
295
+ // a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where
296
+ // c = 1/6.
297
+ const x1 = x0 - i1 + G3; // Offsets for second corner
298
+ const y1 = y0 - j1 + G3;
299
+ const z1 = z0 - k1 + G3;
300
+ const x2 = x0 - i2 + 2 * G3; // Offsets for third corner
301
+ const y2 = y0 - j2 + 2 * G3;
302
+ const z2 = z0 - k2 + 2 * G3;
303
+ const x3 = x0 - 1 + 3 * G3; // Offsets for fourth corner
304
+ const y3 = y0 - 1 + 3 * G3;
305
+ const z3 = z0 - 1 + 3 * G3;
306
+ // Work out the hashed gradient indices of the four simplex corners
307
+ i &= 255;
308
+ j &= 255;
309
+ k &= 255;
310
+ const gi0 = this._gradP[i + this._perm[j + this._perm[k]]];
311
+ const gi1 = this._gradP[i + i1 + this._perm[j + j1 + this._perm[k + k1]]];
312
+ const gi2 = this._gradP[i + i2 + this._perm[j + j2 + this._perm[k + k2]]];
313
+ const gi3 = this._gradP[i + 1 + this._perm[j + 1 + this._perm[k + 1]]];
314
+ // Calculate the contribution from the four corners
315
+ let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;
316
+ if (t0 < 0) {
317
+ n0 = 0;
318
+ }
319
+ else {
320
+ t0 *= t0;
321
+ n0 = t0 * t0 * gi0.dotXYZ(x0, y0, z0); // (x,y) of grad3 used for 2D gradient
322
+ }
323
+ let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;
324
+ if (t1 < 0) {
325
+ n1 = 0;
326
+ }
327
+ else {
328
+ t1 *= t1;
329
+ n1 = t1 * t1 * gi1.dotXYZ(x1, y1, z1);
330
+ }
331
+ let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;
332
+ if (t2 < 0) {
333
+ n2 = 0;
334
+ }
335
+ else {
336
+ t2 *= t2;
337
+ n2 = t2 * t2 * gi2.dotXYZ(x2, y2, z2);
338
+ }
339
+ let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;
340
+ if (t3 < 0) {
341
+ n3 = 0;
342
+ }
343
+ else {
344
+ t3 *= t3;
345
+ n3 = t3 * t3 * gi3.dotXYZ(x3, y3, z3);
346
+ }
347
+ // Add contributions from each corner to get the final noise value.
348
+ // The result is scaled to return values in the interval [-1,1].
349
+ return 32 * (n0 + n1 + n2 + n3);
350
+ }
351
+ }
352
+ /**
353
+ * Returns a random value in a given range.
354
+ *
355
+ * Uses the JS-internal `Math.random()`. Use {@linkcode Random} for a PRNG with more features.
356
+ *
357
+ * Note that this method returns floating point numbers, regardless of your inputs potentially
358
+ * being integers. If you require integers, ensure to truncate the resulting random value.
359
+ * @param min - The lower bound.
360
+ * @param max - The upper bound.
361
+ * @returns A random value between the lower and upper bound.
362
+ */
363
+ export const randomRange = (min, max) => {
364
+ return Math.random() * (max - min) + min;
365
+ };
366
+ /**
367
+ * Generates a numberic seed, to be used as an input for a PRNG,
368
+ * from a string.
369
+ * @param input - The string to use as a seed.
370
+ * @returns A numeric seed value for a PRNG.
371
+ */
372
+ export const seedFromString = (input) => {
373
+ return input
374
+ .split("")
375
+ .reduce((seed, char) => (seed = seed + ((char.charCodeAt(0) * 17989) % 2147483647)), 0);
376
+ };
377
+ /**
378
+ * A global PRNG instance that is ready-to-use.
379
+ */
380
+ export const random = new Random();
381
+ //# sourceMappingURL=random.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.js","sourceRoot":"","sources":["../../source/data/random.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C;;GAEG;AACH,MAAM,OAAO,MAAM;IAClB;;OAEG;IACK,KAAK,CAAS;IAEtB;;;OAGG;IACH,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,KAAK,CAAgB;IAE7B;;OAEG;IACK,MAAM,CAAiB;IAE/B;;OAEG;IACK,GAAG,CAAS;IAEpB;;OAEG;IACK,GAAG,CAAS;IAEpB;;;;;;OAMG;IACH,YAAY,IAAI,GAAG,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;QAC3C,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC;QAC1B,CAAC;QAED,MAAM,KAAK,GAAG;YACb,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACpB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACpB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACpB,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACtB,CAAC;QAEF,MAAM,CAAC,GAAG;YACT,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG;YACrE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG;YACvE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;YACzE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG;YACvE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG;YACxE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACtE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACtE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;YACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACzE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACvE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;YACtE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACtE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACzE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACxE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG;SACvE,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAS,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAU,GAAG,CAAC,CAAC;QAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAS,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACX,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACP,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACtC,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,IAAI;QACH,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,GAAW,EAAE,GAAW;QACjC,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,WAAW;QACV,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,SAAS;QACR,qEAAqE;QACrE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,UAAU;QACT,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,kBAAkB,GACxB,sDAAsD,CAAC;IAExD;;;;OAIG;IACH,UAAU,CAAC,MAAc,EAAE,UAAU,GAAG,MAAM,CAAC,kBAAkB;QAChE,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACxE,MAAM,IAAI,UAAU,CAAC,SAAS,CAAC,cAAc,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,CAAS,EAAE,CAAS;QAC5B,IAAI,EAAU,EAAE,EAAU,EAAE,EAAU,CAAC,CAAC,6CAA6C;QACrF,gEAAgE;QAChE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,sBAAsB;QACpD,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,oDAAoD;QAC1E,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,iEAAiE;QACjE,qCAAqC;QACrC,IAAI,EAAU,EAAE,EAAU,CAAC,CAAC,gEAAgE;QAC5F,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;YACb,gDAAgD;YAChD,EAAE,GAAG,CAAC,CAAC;YACP,EAAE,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACP,gDAAgD;YAChD,EAAE,GAAG,CAAC,CAAC;YACP,EAAE,GAAG,CAAC,CAAC;QACR,CAAC;QACD,kEAAkE;QAClE,oEAAoE;QACpE,oBAAoB;QACpB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,qDAAqD;QACpF,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,mDAAmD;QACrF,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QACjC,oEAAoE;QACpE,CAAC,IAAI,GAAG,CAAC;QACT,CAAC,IAAI,GAAG,CAAC;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD,oDAAoD;QACpD,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACjC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACZ,EAAE,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACP,EAAE,IAAI,EAAE,CAAC;YACT,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,sCAAsC;QAC7E,CAAC;QACD,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACjC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACZ,EAAE,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACP,EAAE,IAAI,EAAE,CAAC;YACT,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACjC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACZ,EAAE,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACP,EAAE,IAAI,EAAE,CAAC;YACT,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,mEAAmE;QACnE,gEAAgE;QAChE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACvC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAEjB,IAAI,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,CAAC,CAAC,4CAA4C;QAEhG,gEAAgE;QAChE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,sBAAsB;QAClD,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,oDAAoD;QAC1E,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAErB,0EAA0E;QAC1E,qCAAqC;QACrC,IAAI,EAAU,EAAE,EAAU,EAAE,EAAU,CAAC,CAAC,yDAAyD;QACjG,IAAI,EAAU,EAAE,EAAU,EAAE,EAAU,CAAC,CAAC,wDAAwD;QAChG,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YACd,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACd,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;YACR,CAAC;iBAAM,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrB,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;YACR,CAAC;iBAAM,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;YACR,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;gBACb,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;YACR,CAAC;iBAAM,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;gBACpB,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;YACR,CAAC;iBAAM,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;gBACP,EAAE,GAAG,CAAC,CAAC;YACR,CAAC;QACF,CAAC;QACD,uEAAuE;QACvE,2EAA2E;QAC3E,6EAA6E;QAC7E,WAAW;QACX,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,4BAA4B;QACrD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAExB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,2BAA2B;QACxD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAE5B,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,4BAA4B;QACxD,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAE3B,mEAAmE;QACnE,CAAC,IAAI,GAAG,CAAC;QACT,CAAC,IAAI,GAAG,CAAC;QACT,CAAC,IAAI,GAAG,CAAC;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvE,mDAAmD;QACnD,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC3C,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACZ,EAAE,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACP,EAAE,IAAI,EAAE,CAAC;YACT,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,sCAAsC;QAC9E,CAAC;QACD,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC3C,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACZ,EAAE,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACP,EAAE,IAAI,EAAE,CAAC;YACT,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC3C,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACZ,EAAE,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACP,EAAE,IAAI,EAAE,CAAC;YACT,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC3C,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACZ,EAAE,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACP,EAAE,IAAI,EAAE,CAAC;YACT,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,mEAAmE;QACnE,gEAAgE;QAChE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,CAAC;CACD;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE;IACvD,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC1C,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE;IAC/C,OAAO,KAAK;SACV,KAAK,CAAC,EAAE,CAAC;SACT,MAAM,CACN,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CACd,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,EAC5D,CAAC,CACD,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Indent every line of the passed text.
3
+ * @param subject - The text to indent.
4
+ * @param depth - How often to apply the indenting.
5
+ * @param prefix - The string to use as the indent.
6
+ * @returns The indented text.
7
+ */
8
+ export declare const indent: (subject: string, depth?: number, prefix?: string) => string;
9
+ /**
10
+ * A fast and simple 53-bit string hash function with decent collision resistance.
11
+ * Largely inspired by MurmurHash2/3, but with a focus on speed/simplicity.
12
+ * License: Public domain. Attribution appreciated.
13
+ * cyrb53 (c) 2018 bryc (github.com/bryc)
14
+ * @param subject - The string to hash.
15
+ * @param seed - An optional seed value.
16
+ * @returns A hash of the string.
17
+ */
18
+ export declare const hashCyrb53: (subject: string, seed?: number) => string;
19
+ /**
20
+ * Encodes the provided string in Base64.
21
+ * @param subject - The string to encode.
22
+ * @returns The subject string encoded in Base64.
23
+ */
24
+ export declare const base64Encode: (subject: string) => string;
25
+ /**
26
+ * Decodes the provided Base64 encoded string.
27
+ * @param subject - The string to decode.
28
+ * @returns The decoded subject string.
29
+ */
30
+ export declare const base64Decode: (subject: string) => string;
@@ -0,0 +1,53 @@
1
+ import { mustExist } from "./nil.js";
2
+ /**
3
+ * Indent every line of the passed text.
4
+ * @param subject - The text to indent.
5
+ * @param depth - How often to apply the indenting.
6
+ * @param prefix - The string to use as the indent.
7
+ * @returns The indented text.
8
+ */
9
+ export const indent = (subject, depth = 0, prefix = " ") => subject.replaceAll(/^/gm, prefix.repeat(depth));
10
+ /**
11
+ * A fast and simple 53-bit string hash function with decent collision resistance.
12
+ * Largely inspired by MurmurHash2/3, but with a focus on speed/simplicity.
13
+ * License: Public domain. Attribution appreciated.
14
+ * cyrb53 (c) 2018 bryc (github.com/bryc)
15
+ * @param subject - The string to hash.
16
+ * @param seed - An optional seed value.
17
+ * @returns A hash of the string.
18
+ */
19
+ export const hashCyrb53 = (subject, seed = 0) => {
20
+ let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
21
+ for (let i = 0, ch = 0; i < subject.length; i++) {
22
+ ch = subject.charCodeAt(i);
23
+ h1 = Math.imul(h1 ^ ch, 2654435761);
24
+ h2 = Math.imul(h2 ^ ch, 1597334677);
25
+ }
26
+ h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);
27
+ h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);
28
+ h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);
29
+ h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);
30
+ return ((h2 >>> 0).toString(16).padStart(8, "0") +
31
+ (h1 >>> 0).toString(16).padStart(8, "0"));
32
+ };
33
+ /**
34
+ * Encodes the provided string in Base64.
35
+ * @param subject - The string to encode.
36
+ * @returns The subject string encoded in Base64.
37
+ */
38
+ export const base64Encode = (subject) => {
39
+ const bytes = new TextEncoder().encode(subject);
40
+ const binString = String.fromCodePoint(...bytes);
41
+ return btoa(binString);
42
+ };
43
+ /**
44
+ * Decodes the provided Base64 encoded string.
45
+ * @param subject - The string to decode.
46
+ * @returns The decoded subject string.
47
+ */
48
+ export const base64Decode = (subject) => {
49
+ const binString = atob(subject);
50
+ const bytes = Uint8Array.from(binString, (m) => mustExist(m.codePointAt(0)));
51
+ return new TextDecoder().decode(bytes);
52
+ };
53
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../source/data/string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAe,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAU,EAAE,CAC7E,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,IAAI,GAAG,CAAC,EAAU,EAAE;IAC/D,IAAI,EAAE,GAAG,UAAU,GAAG,IAAI,EACzB,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QACpC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7C,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAC9C,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7C,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAC9C,OAAO,CACN,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACxC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CACxC,CAAC;AACH,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAU,EAAE;IACvD,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAU,EAAE;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Base class to quickly provide parent-child relationships.
3
+ * @typeParam TNode - Your sub-class.
4
+ */
5
+ export declare abstract class TreeNode<TNode> {
6
+ #private;
7
+ /**
8
+ * The parent.
9
+ * @returns The parent.
10
+ */
11
+ get parent(): TNode | undefined;
12
+ /**
13
+ * The children.
14
+ * @returns The children.
15
+ */
16
+ get children(): Set<TNode>;
17
+ /**
18
+ * Construct tree node.
19
+ * @param parent - The parent.
20
+ */
21
+ constructor(parent?: TNode);
22
+ /**
23
+ * Register a new child on the tree.
24
+ * @param child - A new child.
25
+ * @returns The child.
26
+ */
27
+ child(child: TNode): TNode;
28
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Base class to quickly provide parent-child relationships.
3
+ * @typeParam TNode - Your sub-class.
4
+ */
5
+ export class TreeNode {
6
+ /**
7
+ * The parent.
8
+ */
9
+ #parent;
10
+ /**
11
+ * Our children.
12
+ */
13
+ #children = new Set();
14
+ /**
15
+ * The parent.
16
+ * @returns The parent.
17
+ */
18
+ get parent() {
19
+ return this.#parent;
20
+ }
21
+ /**
22
+ * The children.
23
+ * @returns The children.
24
+ */
25
+ get children() {
26
+ return this.#children;
27
+ }
28
+ /**
29
+ * Construct tree node.
30
+ * @param parent - The parent.
31
+ */
32
+ constructor(parent) {
33
+ this.#parent = parent;
34
+ }
35
+ /**
36
+ * Register a new child on the tree.
37
+ * @param child - A new child.
38
+ * @returns The child.
39
+ */
40
+ child(child) {
41
+ this.children.add(child);
42
+ return child;
43
+ }
44
+ }
45
+ //# sourceMappingURL=tree.js.map