@evolu/common 7.0.0 → 7.2.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.
Files changed (70) hide show
  1. package/README.md +26 -28
  2. package/dist/src/Array.d.ts +120 -43
  3. package/dist/src/Array.d.ts.map +1 -1
  4. package/dist/src/Array.js +71 -51
  5. package/dist/src/Assert.d.ts.map +1 -1
  6. package/dist/src/Brand.d.ts +1 -1
  7. package/dist/src/Cache.d.ts +1 -6
  8. package/dist/src/Cache.d.ts.map +1 -1
  9. package/dist/src/Cache.js +1 -6
  10. package/dist/src/Console.d.ts +1 -1
  11. package/dist/src/Console.js +1 -1
  12. package/dist/src/Crypto.d.ts.map +1 -1
  13. package/dist/src/Crypto.js +5 -1
  14. package/dist/src/Evolu/Internal.d.ts +2 -2
  15. package/dist/src/Evolu/Internal.js +2 -2
  16. package/dist/src/Evolu/Public.d.ts +1 -1
  17. package/dist/src/Evolu/Public.js +1 -1
  18. package/dist/src/Order.d.ts +0 -5
  19. package/dist/src/Order.d.ts.map +1 -1
  20. package/dist/src/Order.js +0 -5
  21. package/dist/src/Platform.d.ts +0 -5
  22. package/dist/src/Platform.d.ts.map +1 -1
  23. package/dist/src/Platform.js +0 -5
  24. package/dist/src/Random.d.ts +0 -5
  25. package/dist/src/Random.d.ts.map +1 -1
  26. package/dist/src/Random.js +0 -5
  27. package/dist/src/Ref.d.ts.map +1 -1
  28. package/dist/src/Result.d.ts +15 -17
  29. package/dist/src/Result.d.ts.map +1 -1
  30. package/dist/src/Store.d.ts +0 -5
  31. package/dist/src/Store.d.ts.map +1 -1
  32. package/dist/src/Store.js +0 -5
  33. package/dist/src/Task.d.ts +4 -10
  34. package/dist/src/Task.d.ts.map +1 -1
  35. package/dist/src/Task.js +0 -5
  36. package/dist/src/Time.d.ts +0 -5
  37. package/dist/src/Time.d.ts.map +1 -1
  38. package/dist/src/Time.js +0 -5
  39. package/dist/src/Type.d.ts +3 -3
  40. package/dist/src/Type.d.ts.map +1 -1
  41. package/dist/src/Type.js +1 -1
  42. package/dist/src/Types.d.ts +37 -0
  43. package/dist/src/Types.d.ts.map +1 -1
  44. package/dist/src/WebSocket.d.ts +0 -5
  45. package/dist/src/WebSocket.d.ts.map +1 -1
  46. package/dist/src/WebSocket.js +0 -5
  47. package/dist/src/Worker.d.ts +0 -5
  48. package/dist/src/Worker.d.ts.map +1 -1
  49. package/dist/src/Worker.js +0 -5
  50. package/package.json +1 -1
  51. package/src/Array.ts +157 -45
  52. package/src/Assert.ts +0 -14
  53. package/src/Brand.ts +1 -1
  54. package/src/Cache.ts +1 -7
  55. package/src/Console.ts +1 -1
  56. package/src/Crypto.ts +5 -1
  57. package/src/Evolu/Internal.ts +2 -2
  58. package/src/Evolu/Public.ts +1 -1
  59. package/src/Order.ts +0 -6
  60. package/src/Platform.ts +0 -6
  61. package/src/Random.ts +0 -6
  62. package/src/Ref.ts +0 -5
  63. package/src/Result.ts +15 -17
  64. package/src/Store.ts +0 -5
  65. package/src/Task.ts +4 -11
  66. package/src/Time.ts +0 -6
  67. package/src/Type.ts +3 -3
  68. package/src/Types.ts +42 -0
  69. package/src/WebSocket.ts +0 -6
  70. package/src/Worker.ts +0 -6
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Evolu
2
2
 
3
- Evolu is TypeScript library and local-first platform.
3
+ Evolu is a TypeScript library and local-first platform.
4
4
 
5
5
  ## Documentation
6
6
 
@@ -20,7 +20,7 @@ To chat with other community members, you can join the [Evolu Discord](https://d
20
20
 
21
21
  We provide a free relay `free.evoluhq.com` for testing and personal usage.
22
22
 
23
- The Evolu Relay source along with the Docker files can be in the [/apps/relay](/apps/relay) directory.
23
+ The Evolu Relay source and Docker files are in the [/apps/relay](/apps/relay) directory.
24
24
 
25
25
  Alternatively, a pre-built image `evoluhq/relay:latest` is hosted on [Docker Hub](https://hub.docker.com/r/evoluhq/relay).
26
26
 
@@ -36,39 +36,37 @@ Install dependencies:
36
36
  pnpm install
37
37
  ```
38
38
 
39
- Build monorepo:
39
+ Build scripts
40
40
 
41
- ```
42
- pnpm build
43
- pnpm build:web
44
- ```
41
+ - `pnpm build` - Build packages
42
+ - `pnpm build:web` - Build web
43
+ - `pnpm examples:build` - Build all examples
45
44
 
46
- Start dev:
45
+ Start dev
47
46
 
48
- ```
49
- # web
50
- pnpm dev
47
+ > **Warning**: Run `pnpm build` before running dev. Packages must be built first.
51
48
 
52
- # expo (pnpm dev must be running too)
53
- pnpm ios
54
- pnpm android
55
- ```
49
+ - `pnpm dev` - Dev server for web
50
+ - `pnpm ios` - Run iOS example (requires `pnpm dev` running)
51
+ - `pnpm android` - Run Android example (requires `pnpm dev` running)
52
+ - `pnpm examples:react-nextjs:dev` - Dev server for React Next.js example
53
+ - `pnpm examples:react-vite-pwa:dev` - Dev server for React Vite PWA example
54
+ - `pnpm examples:svelte-vite-pwa:dev` - Dev server for Svelte Vite PWA example
55
+ - `pnpm examples:vue-vite-pwa:dev` - Dev server for Vue Vite PWA example
56
56
 
57
- Linting:
57
+ Linting
58
58
 
59
- ```
60
- pnpm lint
61
- pnpm lint-monorepo
62
- ```
59
+ - `pnpm lint` - Lint code
60
+ - `pnpm lint-monorepo` - Lint monorepo structure
63
61
 
64
- Tests
62
+ Testing
65
63
 
66
- ```
67
- pnpm test
68
- ```
64
+ - `pnpm test` - Run tests
69
65
 
70
- Describe changes for release log:
66
+ Release
71
67
 
72
- ```
73
- pnpm changeset
74
- ```
68
+ - `pnpm changeset` - Describe changes for release log
69
+
70
+ Verify
71
+
72
+ - `pnpm verify` - Run all checks (build, lint, test) before commit
@@ -1,8 +1,44 @@
1
1
  /**
2
- * 🔒 Type-safe array helpers that do not mutate
2
+ * Array types, type guards, operations, transformations, accessors, and (rare)
3
+ * mutations
3
4
  *
4
- * Array types, guards, operations, transformations, accessors, and (rare)
5
- * mutations.
5
+ * ### Example
6
+ *
7
+ * ```ts
8
+ * // Types - compile-time guarantee of at least one element
9
+ * const _valid: NonEmptyReadonlyArray<number> = [1, 2, 3];
10
+ * // ts-expect-error - empty array is not a valid NonEmptyReadonlyArray
11
+ * const _invalid: NonEmptyReadonlyArray<number> = [];
12
+ *
13
+ * // Type guards
14
+ * const arr: ReadonlyArray<number> = [1, 2, 3];
15
+ * if (isNonEmptyReadonlyArray(arr)) {
16
+ * firstInArray(arr);
17
+ * }
18
+ *
19
+ * // Operations
20
+ * const appended = appendToArray([1, 2, 3], 4); // [1, 2, 3, 4]
21
+ * const prepended = prependToArray([2, 3], 1); // [1, 2, 3]
22
+ *
23
+ * // Transformations
24
+ * const readonly: ReadonlyArray<number> = [1, 2, 3];
25
+ * const mapped = mapArray(readonly, (x) => x * 2); // [2, 4, 6]
26
+ * const filtered = filterArray(readonly, (x) => x > 1); // [2, 3]
27
+ * const deduped = dedupeArray([1, 2, 1, 3, 2]); // [1, 2, 3]
28
+ * const [evens, odds] = partitionArray(
29
+ * [1, 2, 3, 4, 5],
30
+ * (x) => x % 2 === 0,
31
+ * ); // [[2, 4], [1, 3, 5]]
32
+ *
33
+ * // Accessors
34
+ * const first = firstInArray(["a", "b", "c"]); // "a"
35
+ * const last = lastInArray(["a", "b", "c"]); // "c"
36
+ *
37
+ * // Mutations
38
+ * const mutable: NonEmptyArray<number> = [1, 2, 3];
39
+ * shiftArray(mutable); // 1 (guaranteed to exist)
40
+ * mutable; // [2, 3]
41
+ * ```
6
42
  *
7
43
  * Functions are intentionally data-first to be prepared for the upcoming
8
44
  * JavaScript pipe operator.
@@ -43,42 +79,9 @@
43
79
  * **Note**: Feel free to use Array instance methods (mutation) if you think
44
80
  * it's better (performance, local scope, etc.).
45
81
  *
46
- * ### Example
47
- *
48
- * ```ts
49
- * // Types - compile-time guarantee of at least one element
50
- * const _valid: NonEmptyReadonlyArray<number> = [1, 2, 3];
51
- * // ts-expect-error - empty array is not a valid NonEmptyReadonlyArray
52
- * const _invalid: NonEmptyReadonlyArray<number> = [];
53
- *
54
- * // Guards
55
- * const arr: ReadonlyArray<number> = [1, 2, 3];
56
- * if (isNonEmptyReadonlyArray(arr)) {
57
- * firstInArray(arr);
58
- * }
59
- *
60
- * // Operations
61
- * const appended = appendToArray([1, 2, 3], 4); // [1, 2, 3, 4]
62
- * const prepended = prependToArray([2, 3], 1); // [1, 2, 3]
63
- *
64
- * // Transformations
65
- * const readonly: ReadonlyArray<number> = [1, 2, 3];
66
- * const mapped = mapArray(readonly, (x) => x * 2); // [2, 4, 6]
67
- * const filtered = filterArray(readonly, (x) => x > 1); // [2, 3]
68
- * const deduped = dedupeArray([1, 2, 1, 3, 2]); // [1, 2, 3]
69
- *
70
- * // Accessors
71
- * const first = firstInArray(["a", "b", "c"]); // "a"
72
- * const last = lastInArray(["a", "b", "c"]); // "c"
73
- *
74
- * // Mutations
75
- * const mutable: NonEmptyArray<number> = [1, 2, 3];
76
- * shiftArray(mutable); // 1 (guaranteed to exist)
77
- * mutable; // [2, 3]
78
- * ```
79
- *
80
82
  * @module
81
83
  */
84
+ import { PredicateWithIndex, RefinementWithIndex } from "./Types.js";
82
85
  /**
83
86
  * An array with at least one element.
84
87
  *
@@ -157,8 +160,7 @@ export declare const prependToArray: <T>(array: ReadonlyArray<T>, item: T) => No
157
160
  /**
158
161
  * Maps an array using a mapper function.
159
162
  *
160
- * Accepts both mutable and readonly arrays. Does not mutate the original array.
161
- * Preserves non-empty type.
163
+ * Accepts both mutable and readonly arrays. Preserves non-empty type.
162
164
  *
163
165
  * ### Example
164
166
  *
@@ -171,19 +173,37 @@ export declare const prependToArray: <T>(array: ReadonlyArray<T>, item: T) => No
171
173
  export declare function mapArray<T, U>(array: NonEmptyReadonlyArray<T> | NonEmptyArray<T>, mapper: (item: T, index: number) => U): NonEmptyReadonlyArray<U>;
172
174
  export declare function mapArray<T, U>(array: ReadonlyArray<T> | Array<T>, mapper: (item: T, index: number) => U): ReadonlyArray<U>;
173
175
  /**
174
- * Filters an array using a predicate function, returning a new readonly array.
176
+ * Filters an array using a predicate or refinement function, returning a new
177
+ * readonly array.
175
178
  *
176
- * Accepts both mutable and readonly arrays. Does not mutate the original array.
179
+ * Accepts both mutable and readonly arrays. When used with a refinement
180
+ * function (with `value is Type` syntax), TypeScript will narrow the result
181
+ * type to the narrowed type, making it useful for filtering with Evolu Types
182
+ * like `PositiveInt.is`.
177
183
  *
178
- * ### Example
184
+ * ### Examples
185
+ *
186
+ * #### With predicate
179
187
  *
180
188
  * ```ts
181
189
  * filterArray([1, 2, 3, 4, 5], (x) => x % 2 === 0); // [2, 4]
182
190
  * ```
183
191
  *
192
+ * #### With refinement
193
+ *
194
+ * ```ts
195
+ * const mixed: ReadonlyArray<NonEmptyString | PositiveInt> = [
196
+ * NonEmptyString.orThrow("hello"),
197
+ * PositiveInt.orThrow(42),
198
+ * ];
199
+ * const positiveInts = filterArray(mixed, PositiveInt.is);
200
+ * // positiveInts: ReadonlyArray<PositiveInt> (narrowed type)
201
+ * ```
202
+ *
184
203
  * @category Transformations
185
204
  */
186
- export declare const filterArray: <T>(array: ReadonlyArray<T>, predicate: (item: T, index: number) => boolean) => ReadonlyArray<T>;
205
+ export declare function filterArray<T, S extends T>(array: ReadonlyArray<T>, refinement: RefinementWithIndex<T, S>): ReadonlyArray<S>;
206
+ export declare function filterArray<T>(array: ReadonlyArray<T>, predicate: PredicateWithIndex<T>): ReadonlyArray<T>;
187
207
  /**
188
208
  * Returns a new readonly array with duplicate items removed. If `by` is
189
209
  * provided, it will be used to derive the key for uniqueness; otherwise values
@@ -214,6 +234,47 @@ export declare const filterArray: <T>(array: ReadonlyArray<T>, predicate: (item:
214
234
  */
215
235
  export declare function dedupeArray<T>(array: NonEmptyReadonlyArray<T> | NonEmptyArray<T>, by?: (item: T) => unknown): NonEmptyReadonlyArray<T>;
216
236
  export declare function dedupeArray<T>(array: ReadonlyArray<T> | Array<T>, by?: (item: T) => unknown): ReadonlyArray<T>;
237
+ /**
238
+ * Partitions an array into two arrays based on a predicate or refinement
239
+ * function.
240
+ *
241
+ * Returns a tuple where the first array contains elements that satisfy the
242
+ * predicate, and the second array contains elements that do not. Accepts both
243
+ * mutable and readonly arrays.
244
+ *
245
+ * When used with a refinement function (with `value is Type` syntax),
246
+ * TypeScript will narrow the first array to the narrowed type, making it useful
247
+ * for filtering with Evolu Types like `PositiveInt.is`.
248
+ *
249
+ * ### Examples
250
+ *
251
+ * #### With predicate
252
+ *
253
+ * ```ts
254
+ * const [evens, odds] = partitionArray(
255
+ * [1, 2, 3, 4, 5],
256
+ * (x) => x % 2 === 0,
257
+ * );
258
+ * evens; // [2, 4]
259
+ * odds; // [1, 3, 5]
260
+ * ```
261
+ *
262
+ * #### With refinement
263
+ *
264
+ * ```ts
265
+ * const mixed: ReadonlyArray<NonEmptyString | PositiveInt> = [
266
+ * NonEmptyString.orThrow("hello"),
267
+ * PositiveInt.orThrow(42),
268
+ * ];
269
+ * const [positiveInts, strings] = partitionArray(mixed, PositiveInt.is);
270
+ * // positiveInts: ReadonlyArray<PositiveInt> (narrowed type)
271
+ * // strings: ReadonlyArray<NonEmptyString> (Exclude<T, PositiveInt>)
272
+ * ```
273
+ *
274
+ * @category Transformations
275
+ */
276
+ export declare function partitionArray<T, S extends T>(array: ReadonlyArray<T>, refinement: RefinementWithIndex<T, S>): readonly [ReadonlyArray<S>, ReadonlyArray<Exclude<T, S>>];
277
+ export declare function partitionArray<T>(array: ReadonlyArray<T>, predicate: PredicateWithIndex<T>): readonly [ReadonlyArray<T>, ReadonlyArray<T>];
217
278
  /**
218
279
  * Returns the first element of a non-empty array.
219
280
  *
@@ -258,4 +319,20 @@ export declare const lastInArray: <T>(array: NonEmptyReadonlyArray<T>) => T;
258
319
  * @category Mutations
259
320
  */
260
321
  export declare const shiftArray: <T>(array: NonEmptyArray<T>) => T;
322
+ /**
323
+ * Pops an item from a non-empty mutable array, guaranteed to return T.
324
+ *
325
+ * **Mutates** the original array.
326
+ *
327
+ * ### Example
328
+ *
329
+ * ```ts
330
+ * const arr: NonEmptyArray<number> = [1, 2, 3];
331
+ * popArray(arr); // 3
332
+ * arr; // [1, 2]
333
+ * ```
334
+ *
335
+ * @category Mutations
336
+ */
337
+ export declare const popArray: <T>(array: NonEmptyArray<T>) => T;
261
338
  //# sourceMappingURL=Array.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../../src/Array.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../../src/Array.ts"],"names":[],"mappings":"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"}
package/dist/src/Array.js CHANGED
@@ -1,8 +1,44 @@
1
1
  /**
2
- * 🔒 Type-safe array helpers that do not mutate
2
+ * Array types, type guards, operations, transformations, accessors, and (rare)
3
+ * mutations
3
4
  *
4
- * Array types, guards, operations, transformations, accessors, and (rare)
5
- * mutations.
5
+ * ### Example
6
+ *
7
+ * ```ts
8
+ * // Types - compile-time guarantee of at least one element
9
+ * const _valid: NonEmptyReadonlyArray<number> = [1, 2, 3];
10
+ * // ts-expect-error - empty array is not a valid NonEmptyReadonlyArray
11
+ * const _invalid: NonEmptyReadonlyArray<number> = [];
12
+ *
13
+ * // Type guards
14
+ * const arr: ReadonlyArray<number> = [1, 2, 3];
15
+ * if (isNonEmptyReadonlyArray(arr)) {
16
+ * firstInArray(arr);
17
+ * }
18
+ *
19
+ * // Operations
20
+ * const appended = appendToArray([1, 2, 3], 4); // [1, 2, 3, 4]
21
+ * const prepended = prependToArray([2, 3], 1); // [1, 2, 3]
22
+ *
23
+ * // Transformations
24
+ * const readonly: ReadonlyArray<number> = [1, 2, 3];
25
+ * const mapped = mapArray(readonly, (x) => x * 2); // [2, 4, 6]
26
+ * const filtered = filterArray(readonly, (x) => x > 1); // [2, 3]
27
+ * const deduped = dedupeArray([1, 2, 1, 3, 2]); // [1, 2, 3]
28
+ * const [evens, odds] = partitionArray(
29
+ * [1, 2, 3, 4, 5],
30
+ * (x) => x % 2 === 0,
31
+ * ); // [[2, 4], [1, 3, 5]]
32
+ *
33
+ * // Accessors
34
+ * const first = firstInArray(["a", "b", "c"]); // "a"
35
+ * const last = lastInArray(["a", "b", "c"]); // "c"
36
+ *
37
+ * // Mutations
38
+ * const mutable: NonEmptyArray<number> = [1, 2, 3];
39
+ * shiftArray(mutable); // 1 (guaranteed to exist)
40
+ * mutable; // [2, 3]
41
+ * ```
6
42
  *
7
43
  * Functions are intentionally data-first to be prepared for the upcoming
8
44
  * JavaScript pipe operator.
@@ -43,40 +79,6 @@
43
79
  * **Note**: Feel free to use Array instance methods (mutation) if you think
44
80
  * it's better (performance, local scope, etc.).
45
81
  *
46
- * ### Example
47
- *
48
- * ```ts
49
- * // Types - compile-time guarantee of at least one element
50
- * const _valid: NonEmptyReadonlyArray<number> = [1, 2, 3];
51
- * // ts-expect-error - empty array is not a valid NonEmptyReadonlyArray
52
- * const _invalid: NonEmptyReadonlyArray<number> = [];
53
- *
54
- * // Guards
55
- * const arr: ReadonlyArray<number> = [1, 2, 3];
56
- * if (isNonEmptyReadonlyArray(arr)) {
57
- * firstInArray(arr);
58
- * }
59
- *
60
- * // Operations
61
- * const appended = appendToArray([1, 2, 3], 4); // [1, 2, 3, 4]
62
- * const prepended = prependToArray([2, 3], 1); // [1, 2, 3]
63
- *
64
- * // Transformations
65
- * const readonly: ReadonlyArray<number> = [1, 2, 3];
66
- * const mapped = mapArray(readonly, (x) => x * 2); // [2, 4, 6]
67
- * const filtered = filterArray(readonly, (x) => x > 1); // [2, 3]
68
- * const deduped = dedupeArray([1, 2, 1, 3, 2]); // [1, 2, 3]
69
- *
70
- * // Accessors
71
- * const first = firstInArray(["a", "b", "c"]); // "a"
72
- * const last = lastInArray(["a", "b", "c"]); // "c"
73
- *
74
- * // Mutations
75
- * const mutable: NonEmptyArray<number> = [1, 2, 3];
76
- * shiftArray(mutable); // 1 (guaranteed to exist)
77
- * mutable; // [2, 3]
78
- * ```
79
- *
80
82
  * @module
81
83
  */
82
84
  /**
@@ -145,20 +147,9 @@ export const prependToArray = (array, item) => [item, ...array];
145
147
  export function mapArray(array, mapper) {
146
148
  return array.map(mapper);
147
149
  }
148
- /**
149
- * Filters an array using a predicate function, returning a new readonly array.
150
- *
151
- * Accepts both mutable and readonly arrays. Does not mutate the original array.
152
- *
153
- * ### Example
154
- *
155
- * ```ts
156
- * filterArray([1, 2, 3, 4, 5], (x) => x % 2 === 0); // [2, 4]
157
- * ```
158
- *
159
- * @category Transformations
160
- */
161
- export const filterArray = (array, predicate) => array.filter(predicate);
150
+ export function filterArray(array, predicate) {
151
+ return array.filter(predicate);
152
+ }
162
153
  export function dedupeArray(array, by) {
163
154
  if (by == null) {
164
155
  return Array.from(new Set(array));
@@ -172,6 +163,19 @@ export function dedupeArray(array, by) {
172
163
  return true;
173
164
  });
174
165
  }
166
+ export function partitionArray(array, predicate) {
167
+ const trueArray = [];
168
+ const falseArray = [];
169
+ for (let i = 0; i < array.length; i++) {
170
+ if (predicate(array[i], i)) {
171
+ trueArray.push(array[i]);
172
+ }
173
+ else {
174
+ falseArray.push(array[i]);
175
+ }
176
+ }
177
+ return [trueArray, falseArray];
178
+ }
175
179
  /**
176
180
  * Returns the first element of a non-empty array.
177
181
  *
@@ -216,3 +220,19 @@ export const lastInArray = (array) => array[array.length - 1];
216
220
  * @category Mutations
217
221
  */
218
222
  export const shiftArray = (array) => array.shift();
223
+ /**
224
+ * Pops an item from a non-empty mutable array, guaranteed to return T.
225
+ *
226
+ * **Mutates** the original array.
227
+ *
228
+ * ### Example
229
+ *
230
+ * ```ts
231
+ * const arr: NonEmptyArray<number> = [1, 2, 3];
232
+ * popArray(arr); // 3
233
+ * arr; // [1, 2]
234
+ * ```
235
+ *
236
+ * @category Mutations
237
+ */
238
+ export const popArray = (array) => array.pop();
@@ -1 +1 @@
1
- {"version":3,"file":"Assert.d.ts","sourceRoot":"","sources":["../../src/Assert.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,MAAM,EAAE,CACnB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,SAIZ,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,EAClC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EACb,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAKlC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,2BAA2B,EAAE,CAAC,CAAC,EAC1C,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,EACrB,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAK3C,CAAC"}
1
+ {"version":3,"file":"Assert.d.ts","sourceRoot":"","sources":["../../src/Assert.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,MAAM,EAAE,CACnB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,SAIZ,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,EAClC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EACb,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAKlC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,2BAA2B,EAAE,CAAC,CAAC,EAC1C,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,EACrB,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAK3C,CAAC"}
@@ -65,7 +65,7 @@ declare const __brand: unique symbol;
65
65
  *
66
66
  * Works with any base type intersected with a `Brand`.
67
67
  *
68
- * ### Examples
68
+ * ### Example
69
69
  *
70
70
  * - `IsBranded<string>` -> false
71
71
  * - `IsBranded<string & Brand<"X">>` -> true
@@ -1,8 +1,3 @@
1
- /**
2
- * 🗄️ Generic cache interface and LRU cache implementation.
3
- *
4
- * @module
5
- */
6
1
  import { PositiveInt } from "./Type.js";
7
2
  /**
8
3
  * Generic cache interface providing basic key-value storage operations.
@@ -25,7 +20,7 @@ export interface Cache<K, V> {
25
20
  readonly map: ReadonlyMap<K, V>;
26
21
  }
27
22
  /**
28
- * Creates a Least Recently Used (LRU) cache with a maximum capacity.
23
+ * Creates an LRU (least recently used) cache with a maximum capacity.
29
24
  *
30
25
  * When the cache reaches capacity, the least recently used entry is evicted.
31
26
  * Both `get` and `set` operations update the access order.
@@ -1 +1 @@
1
- {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../src/Cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;IACzB,2CAA2C;IAC3C,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IAEzB,kEAAkE;IAClE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAE/B,4CAA4C;IAC5C,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAE9B,oCAAoC;IACpC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAEzB,mDAAmD;IACnD,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,EAAE,UAAU,WAAW,KAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAmCtE,CAAC"}
1
+ {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../src/Cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;IACzB,2CAA2C;IAC3C,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IAEzB,kEAAkE;IAClE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAE/B,4CAA4C;IAC5C,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAE9B,oCAAoC;IACpC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAEzB,mDAAmD;IACnD,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,EAAE,UAAU,WAAW,KAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAmCtE,CAAC"}
package/dist/src/Cache.js CHANGED
@@ -1,10 +1,5 @@
1
1
  /**
2
- * 🗄️ Generic cache interface and LRU cache implementation.
3
- *
4
- * @module
5
- */
6
- /**
7
- * Creates a Least Recently Used (LRU) cache with a maximum capacity.
2
+ * Creates an LRU (least recently used) cache with a maximum capacity.
8
3
  *
9
4
  * When the cache reaches capacity, the least recently used entry is evicted.
10
5
  * Both `get` and `set` operations update the access order.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 📝 Cross-platform console
2
+ * Cross-platform console
3
3
  *
4
4
  * Console abstraction for Chrome 123+, Firefox 125+, Safari 18.1+, Node.js
5
5
  * 22.x+, and React Native 0.75+. Includes methods guaranteed to be available in
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 📝 Cross-platform console
2
+ * Cross-platform console
3
3
  *
4
4
  * Console abstraction for Chrome 123+, Firefox 125+, Safari 18.1+, Node.js
5
5
  * 22.x+, and React Native 0.75+. Includes methods guaranteed to be available in
@@ -1 +1 @@
1
- {"version":3,"file":"Crypto.d.ts","sourceRoot":"","sources":["../../src/Crypto.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,MAAM,EAAW,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAiB,cAAc,EAAc,MAAM,WAAW,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,CAAC,WAAW,EAAE,EAAE,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,WAAW,EAAE,EAAE,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,WAAW,EAAE,EAAE,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED,QAAA,MAAM,OAAO,uVAA+B,CAAC;AAC7C,KAAK,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAEnC,eAAO,MAAM,SAAS,mbAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAE9C,eAAO,MAAM,SAAS,mbAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAE9C,eAAO,MAAM,SAAS,mbAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAE9C,eAAO,MAAM,iBAAiB,QAAO,WAEnC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,EACvC,MAAM,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,KACnC,SAaF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,EACb,YAAY,SAAS,KACpB,SAMF,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,aAAa,2qBAAoC,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAC;AAEtD,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IAErC,QAAQ,CAAC,OAAO,EAAE,CAChB,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,aAAa,KACzB;QACH,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;KACjC,CAAC;IAEF,QAAQ,CAAC,OAAO,EAAE,CAChB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,UAAU,KACd,MAAM,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,6BAA6B,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,cAAc,KACnB,eAyBF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,cAAc,KACrB,cAOF,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,GAAI,QAAQ,cAAc,KAAG,UAI3D,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC3C"}
1
+ {"version":3,"file":"Crypto.d.ts","sourceRoot":"","sources":["../../src/Crypto.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,MAAM,EAAW,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAiB,cAAc,EAAc,MAAM,WAAW,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,CAAC,WAAW,EAAE,EAAE,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,WAAW,EAAE,EAAE,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,WAAW,EAAE,EAAE,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED,QAAA,MAAM,OAAO,uVAA+B,CAAC;AAC7C,KAAK,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAEnC,eAAO,MAAM,SAAS,mbAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAE9C,eAAO,MAAM,SAAS,mbAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAE9C,eAAO,MAAM,SAAS,mbAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAE9C,eAAO,MAAM,iBAAiB,QAAO,WAEnC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,EACvC,MAAM,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,KACnC,SAaF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,EACb,YAAY,SAAS,KACpB,SAMF,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,aAAa,2qBAAoC,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAC;AAEtD,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IAErC,QAAQ,CAAC,OAAO,EAAE,CAChB,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,aAAa,KACzB;QACH,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;KACjC,CAAC;IAEF,QAAQ,CAAC,OAAO,EAAE,CAChB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,UAAU,KACd,MAAM,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,6BAA6B,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,cAAc,KACnB,eAyBF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,cAAc,KACrB,cAOF,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,GAAI,QAAQ,cAAc,KAAG,UAI3D,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC3C"}
@@ -1,5 +1,9 @@
1
1
  /**
2
- * 🔒
2
+ * Cryptographic utilities
3
+ *
4
+ * Type-safe cryptographic operations including random number generation, SLIP21
5
+ * key derivation, XChaCha20-Poly1305 symmetric encryption, PADMÉ padding, and
6
+ * timing-safe comparisons.
3
7
  *
4
8
  * @module
5
9
  */
@@ -1,10 +1,10 @@
1
1
  /**
2
- * 🛠️
2
+ * Internal Evolu
3
3
  *
4
4
  * ### Example
5
5
  *
6
6
  * ```ts
7
- * import { Evolu } from "@evolu/common/evolu";
7
+ * import { createTimestamp } from "@evolu/common/evolu";
8
8
  * ```
9
9
  *
10
10
  * @module
@@ -1,10 +1,10 @@
1
1
  /**
2
- * 🛠️
2
+ * Internal Evolu
3
3
  *
4
4
  * ### Example
5
5
  *
6
6
  * ```ts
7
- * import { Evolu } from "@evolu/common/evolu";
7
+ * import { createTimestamp } from "@evolu/common/evolu";
8
8
  * ```
9
9
  *
10
10
  * @module
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 💾
2
+ * Public Evolu
3
3
  *
4
4
  * @module
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 💾
2
+ * Public Evolu
3
3
  *
4
4
  * @module
5
5
  */
@@ -1,8 +1,3 @@
1
- /**
2
- * 🔢
3
- *
4
- * @module
5
- */
6
1
  /**
7
2
  * Compares two values of type `A` and returns their ordering.
8
3
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Order.d.ts","sourceRoot":"","sources":["../../src/Order.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;GAQG;AACH,MAAM,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC;AAEnD;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,GACrB,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,KAAG,KAAK,CAAC,CAAC,CAER,CAAC;AAE5C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GACtB,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,CAAC,CAEhB,CAAC;AAEhB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,MAAM,CAAgC,CAAC;AAEvE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,eAAuC,CAAC;AAEhE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,eAAuC,CAAC;AAEhE,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,CAUxD,CAAC"}
1
+ {"version":3,"file":"Order.d.ts","sourceRoot":"","sources":["../../src/Order.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC;AAEnD;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,GACrB,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,KAAG,KAAK,CAAC,CAAC,CAER,CAAC;AAE5C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GACtB,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,CAAC,CAEhB,CAAC;AAEhB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,MAAM,CAAgC,CAAC;AAEvE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,eAAuC,CAAC;AAEhE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,eAAuC,CAAC;AAEhE,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,CAUxD,CAAC"}
package/dist/src/Order.js CHANGED
@@ -1,8 +1,3 @@
1
- /**
2
- * 🔢
3
- *
4
- * @module
5
- */
6
1
  /**
7
2
  * Creates an ordering function from a "less than" comparator.
8
3
  *
@@ -1,8 +1,3 @@
1
- /**
2
- * Platform detection utilities for Evolu.
3
- *
4
- * @module
5
- */
6
1
  /** Detects if the code is running in React Native environment. */
7
2
  export declare const isReactNative: boolean;
8
3
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kEAAkE;AAClE,eAAO,MAAM,aAAa,SAIoB,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,SACkC,CAAC"}
1
+ {"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,eAAO,MAAM,aAAa,SAIoB,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,SACkC,CAAC"}
@@ -1,8 +1,3 @@
1
- /**
2
- * Platform detection utilities for Evolu.
3
- *
4
- * @module
5
- */
6
1
  /** Detects if the code is running in React Native environment. */
7
2
  export const isReactNative = typeof navigator !== "undefined" &&
8
3
  "product" in navigator &&
@@ -1,8 +1,3 @@
1
- /**
2
- * 🎲
3
- *
4
- * @module
5
- */
6
1
  import { Random as RandomLib } from "random";
7
2
  /**
8
3
  * A simple wrapper around Math.random().