@evolu/common 8.5.0 → 8.6.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.
- package/dist/src/Array.d.ts +170 -97
- package/dist/src/Array.d.ts.map +1 -1
- package/dist/src/Array.js +67 -42
- package/dist/src/Assert.d.ts +233 -30
- package/dist/src/Assert.d.ts.map +1 -1
- package/dist/src/Assert.js +150 -30
- package/dist/src/BigInt.d.ts +3 -3
- package/dist/src/BigInt.js +3 -3
- package/dist/src/Brand.d.ts +7 -7
- package/dist/src/Buffer.d.ts +12 -4
- package/dist/src/Buffer.d.ts.map +1 -1
- package/dist/src/Cache.d.ts +8 -3
- package/dist/src/Cache.d.ts.map +1 -1
- package/dist/src/Cache.js +8 -3
- package/dist/src/Callbacks.d.ts +8 -4
- package/dist/src/Callbacks.d.ts.map +1 -1
- package/dist/src/Console.d.ts +45 -30
- package/dist/src/Console.d.ts.map +1 -1
- package/dist/src/Console.js +32 -21
- package/dist/src/Crypto.d.ts +13 -8
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +6 -3
- package/dist/src/Eq.d.ts +107 -58
- package/dist/src/Eq.d.ts.map +1 -1
- package/dist/src/Eq.js +308 -112
- package/dist/src/Function.d.ts +54 -24
- package/dist/src/Function.d.ts.map +1 -1
- package/dist/src/Function.js +34 -17
- package/dist/src/Http.d.ts +52 -19
- package/dist/src/Http.d.ts.map +1 -1
- package/dist/src/Identicon.d.ts +9 -4
- package/dist/src/Identicon.d.ts.map +1 -1
- package/dist/src/Identicon.js +9 -4
- package/dist/src/LockManager.d.ts +12 -10
- package/dist/src/LockManager.d.ts.map +1 -1
- package/dist/src/Lookup.d.ts +4 -2
- package/dist/src/Lookup.d.ts.map +1 -1
- package/dist/src/Lookup.js +4 -2
- package/dist/src/Number.d.ts +28 -24
- package/dist/src/Number.d.ts.map +1 -1
- package/dist/src/Number.js +16 -17
- package/dist/src/Object.d.ts +89 -47
- package/dist/src/Object.d.ts.map +1 -1
- package/dist/src/Object.js +88 -41
- package/dist/src/Option.d.ts +14 -5
- package/dist/src/Option.d.ts.map +1 -1
- package/dist/src/Option.js +14 -5
- package/dist/src/Order.d.ts +12 -12
- package/dist/src/Order.js +12 -12
- package/dist/src/Platform.d.ts +2 -2
- package/dist/src/Random.d.ts +7 -4
- package/dist/src/Random.d.ts.map +1 -1
- package/dist/src/Redacted.d.ts +13 -6
- package/dist/src/Redacted.d.ts.map +1 -1
- package/dist/src/Redacted.js +4 -2
- package/dist/src/Ref.d.ts +4 -4
- package/dist/src/Relation.d.ts +5 -7
- package/dist/src/Relation.d.ts.map +1 -1
- package/dist/src/Resource.d.ts +27 -12
- package/dist/src/Resource.d.ts.map +1 -1
- package/dist/src/Result.d.ts +258 -114
- package/dist/src/Result.d.ts.map +1 -1
- package/dist/src/Result.js +71 -34
- package/dist/src/Schedule.d.ts +233 -116
- package/dist/src/Schedule.d.ts.map +1 -1
- package/dist/src/Schedule.js +204 -110
- package/dist/src/Set.d.ts +43 -24
- package/dist/src/Set.d.ts.map +1 -1
- package/dist/src/Set.js +25 -13
- package/dist/src/Sqlite.d.ts +4 -4
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +9 -8
- package/dist/src/Task.d.ts +441 -212
- package/dist/src/Task.d.ts.map +1 -1
- package/dist/src/Task.js +238 -115
- package/dist/src/Test.d.ts +10 -4
- package/dist/src/Test.d.ts.map +1 -1
- package/dist/src/Test.js +10 -4
- package/dist/src/Time.d.ts +27 -17
- package/dist/src/Time.d.ts.map +1 -1
- package/dist/src/Time.js +16 -6
- package/dist/src/Type.d.ts +1096 -387
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +1046 -372
- package/dist/src/Types.d.ts +95 -40
- package/dist/src/Types.d.ts.map +1 -1
- package/dist/src/Types.js +13 -4
- package/dist/src/WebSocket.d.ts +14 -6
- package/dist/src/WebSocket.d.ts.map +1 -1
- package/dist/src/Worker.d.ts +10 -6
- package/dist/src/Worker.d.ts.map +1 -1
- package/dist/src/intl/_en.d.ts +3 -1
- package/dist/src/intl/_en.d.ts.map +1 -1
- package/dist/src/intl/_en.js +17 -3
- package/dist/src/intl/ar.d.ts +3 -1
- package/dist/src/intl/ar.d.ts.map +1 -1
- package/dist/src/intl/ar.js +15 -2
- package/dist/src/intl/bn.d.ts +3 -1
- package/dist/src/intl/bn.d.ts.map +1 -1
- package/dist/src/intl/bn.js +16 -3
- package/dist/src/intl/ca.d.ts +3 -1
- package/dist/src/intl/ca.d.ts.map +1 -1
- package/dist/src/intl/ca.js +16 -3
- package/dist/src/intl/cs.d.ts +3 -1
- package/dist/src/intl/cs.d.ts.map +1 -1
- package/dist/src/intl/cs.js +16 -3
- package/dist/src/intl/da.d.ts +3 -1
- package/dist/src/intl/da.d.ts.map +1 -1
- package/dist/src/intl/da.js +16 -3
- package/dist/src/intl/de.d.ts +3 -1
- package/dist/src/intl/de.d.ts.map +1 -1
- package/dist/src/intl/de.js +16 -3
- package/dist/src/intl/el.d.ts +3 -1
- package/dist/src/intl/el.d.ts.map +1 -1
- package/dist/src/intl/el.js +16 -3
- package/dist/src/intl/es.d.ts +3 -1
- package/dist/src/intl/es.d.ts.map +1 -1
- package/dist/src/intl/es.js +16 -3
- package/dist/src/intl/fa.d.ts +3 -1
- package/dist/src/intl/fa.d.ts.map +1 -1
- package/dist/src/intl/fa.js +16 -3
- package/dist/src/intl/fi.d.ts +3 -1
- package/dist/src/intl/fi.d.ts.map +1 -1
- package/dist/src/intl/fi.js +16 -3
- package/dist/src/intl/fil.d.ts +3 -1
- package/dist/src/intl/fil.d.ts.map +1 -1
- package/dist/src/intl/fil.js +16 -3
- package/dist/src/intl/fr.d.ts +3 -1
- package/dist/src/intl/fr.d.ts.map +1 -1
- package/dist/src/intl/fr.js +16 -3
- package/dist/src/intl/he.d.ts +3 -1
- package/dist/src/intl/he.d.ts.map +1 -1
- package/dist/src/intl/he.js +16 -3
- package/dist/src/intl/hi.d.ts +3 -1
- package/dist/src/intl/hi.d.ts.map +1 -1
- package/dist/src/intl/hi.js +16 -3
- package/dist/src/intl/hr.d.ts +3 -1
- package/dist/src/intl/hr.d.ts.map +1 -1
- package/dist/src/intl/hr.js +16 -3
- package/dist/src/intl/hu.d.ts +2 -1
- package/dist/src/intl/hu.d.ts.map +1 -1
- package/dist/src/intl/hu.js +15 -3
- package/dist/src/intl/id.d.ts +3 -1
- package/dist/src/intl/id.d.ts.map +1 -1
- package/dist/src/intl/id.js +16 -3
- package/dist/src/intl/it.d.ts +3 -1
- package/dist/src/intl/it.d.ts.map +1 -1
- package/dist/src/intl/it.js +16 -3
- package/dist/src/intl/ja.d.ts +3 -1
- package/dist/src/intl/ja.d.ts.map +1 -1
- package/dist/src/intl/ja.js +16 -3
- package/dist/src/intl/ko.d.ts +3 -1
- package/dist/src/intl/ko.d.ts.map +1 -1
- package/dist/src/intl/ko.js +16 -3
- package/dist/src/intl/ml.d.ts +3 -1
- package/dist/src/intl/ml.d.ts.map +1 -1
- package/dist/src/intl/ml.js +16 -3
- package/dist/src/intl/mr.d.ts +3 -1
- package/dist/src/intl/mr.d.ts.map +1 -1
- package/dist/src/intl/mr.js +16 -3
- package/dist/src/intl/ms.d.ts +3 -1
- package/dist/src/intl/ms.d.ts.map +1 -1
- package/dist/src/intl/ms.js +15 -2
- package/dist/src/intl/nb.d.ts +2 -1
- package/dist/src/intl/nb.d.ts.map +1 -1
- package/dist/src/intl/nb.js +14 -2
- package/dist/src/intl/nl.d.ts +3 -1
- package/dist/src/intl/nl.d.ts.map +1 -1
- package/dist/src/intl/nl.js +16 -3
- package/dist/src/intl/pa.d.ts +3 -1
- package/dist/src/intl/pa.d.ts.map +1 -1
- package/dist/src/intl/pa.js +16 -3
- package/dist/src/intl/pl.d.ts +2 -0
- package/dist/src/intl/pl.d.ts.map +1 -1
- package/dist/src/intl/pl.js +15 -2
- package/dist/src/intl/pt-BR.d.ts +3 -1
- package/dist/src/intl/pt-BR.d.ts.map +1 -1
- package/dist/src/intl/pt-BR.js +16 -3
- package/dist/src/intl/pt.d.ts +3 -1
- package/dist/src/intl/pt.d.ts.map +1 -1
- package/dist/src/intl/pt.js +15 -2
- package/dist/src/intl/ro.d.ts +3 -1
- package/dist/src/intl/ro.d.ts.map +1 -1
- package/dist/src/intl/ro.js +16 -3
- package/dist/src/intl/sk.d.ts +3 -1
- package/dist/src/intl/sk.d.ts.map +1 -1
- package/dist/src/intl/sk.js +15 -2
- package/dist/src/intl/sl.d.ts +3 -1
- package/dist/src/intl/sl.d.ts.map +1 -1
- package/dist/src/intl/sl.js +16 -3
- package/dist/src/intl/sv.d.ts +3 -1
- package/dist/src/intl/sv.d.ts.map +1 -1
- package/dist/src/intl/sv.js +16 -3
- package/dist/src/intl/sw.d.ts +1 -0
- package/dist/src/intl/sw.d.ts.map +1 -1
- package/dist/src/intl/sw.js +14 -2
- package/dist/src/intl/ta.d.ts +3 -1
- package/dist/src/intl/ta.d.ts.map +1 -1
- package/dist/src/intl/ta.js +16 -3
- package/dist/src/intl/te.d.ts +3 -1
- package/dist/src/intl/te.d.ts.map +1 -1
- package/dist/src/intl/te.js +16 -3
- package/dist/src/intl/th.d.ts +3 -1
- package/dist/src/intl/th.d.ts.map +1 -1
- package/dist/src/intl/th.js +16 -3
- package/dist/src/intl/tr.d.ts +3 -1
- package/dist/src/intl/tr.d.ts.map +1 -1
- package/dist/src/intl/tr.js +16 -3
- package/dist/src/intl/uk.d.ts +3 -1
- package/dist/src/intl/uk.d.ts.map +1 -1
- package/dist/src/intl/uk.js +16 -3
- package/dist/src/intl/ur.d.ts +3 -1
- package/dist/src/intl/ur.d.ts.map +1 -1
- package/dist/src/intl/ur.js +15 -2
- package/dist/src/intl/vi.d.ts +3 -1
- package/dist/src/intl/vi.d.ts.map +1 -1
- package/dist/src/intl/vi.js +16 -3
- package/dist/src/intl/zh-CN.d.ts +3 -1
- package/dist/src/intl/zh-CN.d.ts.map +1 -1
- package/dist/src/intl/zh-CN.js +16 -3
- package/dist/src/intl/zh-TW.d.ts +3 -1
- package/dist/src/intl/zh-TW.d.ts.map +1 -1
- package/dist/src/intl/zh-TW.js +16 -3
- package/dist/src/local-first/Evolu.d.ts +47 -24
- package/dist/src/local-first/Evolu.d.ts.map +1 -1
- package/dist/src/local-first/Owner.d.ts +10 -7
- package/dist/src/local-first/Owner.d.ts.map +1 -1
- package/dist/src/local-first/Owner.js +10 -7
- package/dist/src/local-first/Protocol.d.ts +5 -5
- package/dist/src/local-first/Protocol.js +7 -7
- package/dist/src/local-first/Query.d.ts +34 -21
- package/dist/src/local-first/Query.d.ts.map +1 -1
- package/dist/src/local-first/Query.js +25 -13
- package/dist/src/local-first/Relay.d.ts +12 -5
- package/dist/src/local-first/Relay.d.ts.map +1 -1
- package/dist/src/local-first/Schema.d.ts +19 -11
- package/dist/src/local-first/Schema.d.ts.map +1 -1
- package/dist/src/local-first/Schema.js +11 -6
- package/dist/src/local-first/Storage.d.ts +4 -2
- package/dist/src/local-first/Storage.d.ts.map +1 -1
- package/package.json +3 -4
- package/src/Array.ts +170 -97
- package/src/Assert.ts +336 -31
- package/src/BigInt.ts +3 -3
- package/src/Brand.ts +7 -7
- package/src/Buffer.ts +12 -4
- package/src/Cache.ts +8 -3
- package/src/Callbacks.ts +8 -4
- package/src/Console.ts +45 -30
- package/src/Crypto.ts +13 -8
- package/src/Eq.ts +450 -122
- package/src/Function.ts +54 -24
- package/src/Http.ts +52 -19
- package/src/Identicon.ts +9 -4
- package/src/LockManager.ts +12 -10
- package/src/Lookup.ts +4 -2
- package/src/Number.ts +28 -24
- package/src/Object.ts +115 -49
- package/src/Option.ts +14 -5
- package/src/Order.ts +12 -12
- package/src/Platform.ts +2 -2
- package/src/Random.ts +7 -4
- package/src/Redacted.ts +13 -6
- package/src/Ref.ts +4 -4
- package/src/Relation.ts +5 -7
- package/src/Resource.ts +27 -12
- package/src/Result.ts +258 -114
- package/src/Schedule.ts +233 -116
- package/src/Set.ts +43 -24
- package/src/Sqlite.ts +9 -8
- package/src/Task.ts +441 -212
- package/src/Test.ts +10 -4
- package/src/Time.ts +27 -17
- package/src/Type.ts +2077 -620
- package/src/Types.ts +108 -40
- package/src/WebSocket.ts +14 -6
- package/src/Worker.ts +10 -6
- package/src/intl/_en.ts +20 -4
- package/src/intl/ar.ts +17 -2
- package/src/intl/bn.ts +19 -4
- package/src/intl/ca.ts +19 -4
- package/src/intl/cs.ts +19 -4
- package/src/intl/da.ts +19 -4
- package/src/intl/de.ts +19 -4
- package/src/intl/el.ts +19 -4
- package/src/intl/es.ts +19 -4
- package/src/intl/fa.ts +19 -4
- package/src/intl/fi.ts +19 -4
- package/src/intl/fil.ts +19 -4
- package/src/intl/fr.ts +19 -4
- package/src/intl/he.ts +19 -4
- package/src/intl/hi.ts +19 -4
- package/src/intl/hr.ts +19 -4
- package/src/intl/hu.ts +18 -4
- package/src/intl/id.ts +19 -4
- package/src/intl/it.ts +19 -4
- package/src/intl/ja.ts +19 -4
- package/src/intl/ko.ts +19 -4
- package/src/intl/ml.ts +19 -4
- package/src/intl/mr.ts +19 -4
- package/src/intl/ms.ts +17 -2
- package/src/intl/nb.ts +16 -2
- package/src/intl/nl.ts +19 -4
- package/src/intl/pa.ts +19 -4
- package/src/intl/pl.ts +18 -2
- package/src/intl/pt-BR.ts +19 -4
- package/src/intl/pt.ts +17 -2
- package/src/intl/ro.ts +19 -4
- package/src/intl/sk.ts +17 -2
- package/src/intl/sl.ts +19 -4
- package/src/intl/sv.ts +19 -4
- package/src/intl/sw.ts +15 -2
- package/src/intl/ta.ts +19 -4
- package/src/intl/te.ts +19 -4
- package/src/intl/th.ts +19 -4
- package/src/intl/tr.ts +19 -4
- package/src/intl/uk.ts +19 -4
- package/src/intl/ur.ts +17 -2
- package/src/intl/vi.ts +19 -3
- package/src/intl/zh-CN.ts +19 -4
- package/src/intl/zh-TW.ts +19 -4
- package/src/local-first/Evolu.ts +47 -24
- package/src/local-first/Owner.ts +10 -7
- package/src/local-first/Protocol.ts +7 -7
- package/src/local-first/Query.ts +34 -21
- package/src/local-first/Relay.ts +12 -5
- package/src/local-first/Schema.ts +19 -11
- package/src/local-first/Storage.ts +4 -2
package/dist/src/Array.d.ts
CHANGED
|
@@ -16,13 +16,16 @@
|
|
|
16
16
|
* to track:
|
|
17
17
|
*
|
|
18
18
|
* ```ts
|
|
19
|
-
*
|
|
19
|
+
* import { assertEqual, assertSame } from "@evolu/common";
|
|
20
|
+
*
|
|
21
|
+
* // oxlint-disable-next-line unicorn/no-array-sort -- This example intentionally demonstrates mutating Array.sort.
|
|
22
|
+
* const sortScores = (arr: Array<number>) => arr.sort((a, b) => a - b);
|
|
20
23
|
*
|
|
21
24
|
* const scores = [3, 1, 2];
|
|
22
25
|
* const leaderboard = sortScores(scores);
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
+
* assertEqual(leaderboard, [1, 2, 3]);
|
|
27
|
+
* assertEqual(scores, [1, 2, 3]);
|
|
28
|
+
* assertSame(leaderboard, scores);
|
|
26
29
|
* ```
|
|
27
30
|
*
|
|
28
31
|
* Imagine every method doing that.
|
|
@@ -31,30 +34,35 @@
|
|
|
31
34
|
* instead:
|
|
32
35
|
*
|
|
33
36
|
* ```ts
|
|
34
|
-
* import { sortArray } from "@evolu/common";
|
|
37
|
+
* import { assertEqual, assertTrue, sortArray } from "@evolu/common";
|
|
35
38
|
*
|
|
36
39
|
* const sortScores = (arr: ReadonlyArray<number>) =>
|
|
37
40
|
* sortArray(arr, (a, b) => a - b);
|
|
38
41
|
*
|
|
39
42
|
* const scores: ReadonlyArray<number> = [3, 1, 2];
|
|
40
43
|
* const leaderboard = sortScores(scores);
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
+
* assertEqual(leaderboard, [1, 2, 3]);
|
|
45
|
+
* assertEqual(scores, [3, 1, 2]);
|
|
46
|
+
* assertTrue(leaderboard !== scores);
|
|
44
47
|
* ```
|
|
45
48
|
*
|
|
46
49
|
* Even better, require a {@link NonEmptyReadonlyArray} — there's nothing to sort
|
|
47
50
|
* if the array is empty anyway:
|
|
48
51
|
*
|
|
49
52
|
* ```ts
|
|
50
|
-
* import {
|
|
53
|
+
* import {
|
|
54
|
+
* assertEqual,
|
|
55
|
+
* assertType,
|
|
56
|
+
* sortArray,
|
|
57
|
+
* type NonEmptyReadonlyArray,
|
|
58
|
+
* } from "@evolu/common";
|
|
51
59
|
*
|
|
52
60
|
* const sortScores = (arr: NonEmptyReadonlyArray<number>) =>
|
|
53
61
|
* sortArray(arr, (a, b) => a - b);
|
|
54
62
|
*
|
|
55
63
|
* const leaderboard = sortScores([3, 1, 2]);
|
|
56
|
-
*
|
|
57
|
-
*
|
|
64
|
+
* assertEqual(leaderboard, [1, 2, 3]);
|
|
65
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof leaderboard>();
|
|
58
66
|
* ```
|
|
59
67
|
*
|
|
60
68
|
* Sorting an empty array isn't expensive, but functions can have side effects
|
|
@@ -68,13 +76,16 @@
|
|
|
68
76
|
* readonly arrays without mutation — use them directly.
|
|
69
77
|
*
|
|
70
78
|
* ```ts
|
|
71
|
-
* import { type NonEmptyReadonlyArray } from "@evolu/common";
|
|
79
|
+
* import { assertEqual, type NonEmptyReadonlyArray } from "@evolu/common";
|
|
72
80
|
*
|
|
73
81
|
* const valid: NonEmptyReadonlyArray<number> = [1, 2, 3];
|
|
74
82
|
* // @ts-expect-error An empty array is not non-empty.
|
|
75
|
-
* const
|
|
83
|
+
* const _invalid: NonEmptyReadonlyArray<number> = [];
|
|
76
84
|
*
|
|
77
|
-
*
|
|
85
|
+
* assertEqual(
|
|
86
|
+
* valid.find((value) => value === 2),
|
|
87
|
+
* 2,
|
|
88
|
+
* );
|
|
78
89
|
* ```
|
|
79
90
|
*
|
|
80
91
|
* ## Composition
|
|
@@ -83,7 +94,7 @@
|
|
|
83
94
|
* because it's natural for single operations:
|
|
84
95
|
*
|
|
85
96
|
* ```ts
|
|
86
|
-
* import { mapArray } from "@evolu/common";
|
|
97
|
+
* import { assertEqual, mapArray } from "@evolu/common";
|
|
87
98
|
*
|
|
88
99
|
* interface Message {
|
|
89
100
|
* readonly timestamp: number;
|
|
@@ -94,7 +105,7 @@
|
|
|
94
105
|
* { timestamp: 20 },
|
|
95
106
|
* ];
|
|
96
107
|
* const timestamps = mapArray(messages, (m) => m.timestamp);
|
|
97
|
-
*
|
|
108
|
+
* assertEqual(timestamps, [10, 20]);
|
|
98
109
|
* ```
|
|
99
110
|
*
|
|
100
111
|
* Data-first style also reads well for a few operations, often fitting on a
|
|
@@ -102,6 +113,7 @@
|
|
|
102
113
|
*
|
|
103
114
|
* ```ts
|
|
104
115
|
* import {
|
|
116
|
+
* assertEqual,
|
|
105
117
|
* dedupeArray,
|
|
106
118
|
* filterArray,
|
|
107
119
|
* firstInArray,
|
|
@@ -113,11 +125,11 @@
|
|
|
113
125
|
* } from "@evolu/common";
|
|
114
126
|
*
|
|
115
127
|
* const cheapest = firstInArray(sortArray([30, 10, 20], orderNumber));
|
|
116
|
-
*
|
|
128
|
+
* assertEqual(cheapest, 10);
|
|
117
129
|
*
|
|
118
130
|
* const users = [{ name: "Ada" }, { name: "Linus" }, { name: "Ada" }];
|
|
119
131
|
* const uniqueNames = dedupeArray(mapArray(users, (u) => u.name));
|
|
120
|
-
*
|
|
132
|
+
* assertEqual(uniqueNames, ["Ada", "Linus"]);
|
|
121
133
|
*
|
|
122
134
|
* const jobs = [
|
|
123
135
|
* { id: 1, done: false },
|
|
@@ -127,7 +139,7 @@
|
|
|
127
139
|
* if (!isNonEmptyArray(completedJobs)) throw new Error("Expected a job");
|
|
128
140
|
* const latestDone = lastInArray(completedJobs);
|
|
129
141
|
*
|
|
130
|
-
*
|
|
142
|
+
* assertEqual(latestDone, { id: 2, done: true });
|
|
131
143
|
* ```
|
|
132
144
|
*
|
|
133
145
|
* For more operations, create a function like `getOldestActiveUser` or a
|
|
@@ -177,7 +189,11 @@ export declare const emptyArray: ReadonlyArray<never>;
|
|
|
177
189
|
* ### Example
|
|
178
190
|
*
|
|
179
191
|
* ```ts
|
|
180
|
-
* import {
|
|
192
|
+
* import {
|
|
193
|
+
* assertEqual,
|
|
194
|
+
* assertType,
|
|
195
|
+
* createMutableArray,
|
|
196
|
+
* } from "@evolu/common";
|
|
181
197
|
*
|
|
182
198
|
* const values = createMutableArray<number>(3);
|
|
183
199
|
*
|
|
@@ -185,8 +201,8 @@ export declare const emptyArray: ReadonlyArray<never>;
|
|
|
185
201
|
* values[index] = index * 10;
|
|
186
202
|
* }
|
|
187
203
|
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
204
|
+
* assertEqual(values, [0, 10, 20]);
|
|
205
|
+
* assertType<Array<number>, typeof values>();
|
|
190
206
|
* ```
|
|
191
207
|
*
|
|
192
208
|
* @group Constructors
|
|
@@ -203,16 +219,24 @@ export declare const createMutableArray: <T>(length: number) => Array<T>;
|
|
|
203
219
|
* ### Creating from iterables and lengths
|
|
204
220
|
*
|
|
205
221
|
* ```ts
|
|
206
|
-
* import {
|
|
222
|
+
* import {
|
|
223
|
+
* assertEqual,
|
|
224
|
+
* assertSame,
|
|
225
|
+
* assertType,
|
|
226
|
+
* arrayFrom,
|
|
227
|
+
* } from "@evolu/common";
|
|
207
228
|
*
|
|
208
229
|
* const fromSet = arrayFrom(new Set([1, 2, 3]));
|
|
209
|
-
*
|
|
210
|
-
*
|
|
230
|
+
* assertEqual(fromSet, [1, 2, 3]);
|
|
231
|
+
* assertType<ReadonlyArray<number>, typeof fromSet>();
|
|
211
232
|
*
|
|
212
|
-
*
|
|
233
|
+
* assertEqual(
|
|
234
|
+
* arrayFrom(3, (i) => i * 10),
|
|
235
|
+
* [0, 10, 20],
|
|
236
|
+
* );
|
|
213
237
|
*
|
|
214
238
|
* const existing: ReadonlyArray<number> = [1, 2, 3];
|
|
215
|
-
*
|
|
239
|
+
* assertSame(arrayFrom(existing), existing);
|
|
216
240
|
* ```
|
|
217
241
|
*
|
|
218
242
|
* Unlike `Array.from`, there's no map parameter for iterables — use
|
|
@@ -234,19 +258,24 @@ export declare function arrayFrom<T>(length: number, map: (index: number) => T):
|
|
|
234
258
|
* ### Awaiting sync and async iterables
|
|
235
259
|
*
|
|
236
260
|
* ```ts
|
|
237
|
-
* import { arrayFromAsync } from "@evolu/common";
|
|
261
|
+
* import { assertEqual, assertType, arrayFromAsync } from "@evolu/common";
|
|
238
262
|
*
|
|
239
|
-
* const fromIterable = await arrayFromAsync(
|
|
240
|
-
*
|
|
263
|
+
* const fromIterable = await arrayFromAsync([
|
|
264
|
+
* Promise.resolve(1),
|
|
265
|
+
* Promise.resolve(2),
|
|
266
|
+
* Promise.resolve(3),
|
|
267
|
+
* ]);
|
|
268
|
+
* assertEqual(fromIterable, [1, 2, 3]);
|
|
241
269
|
*
|
|
242
270
|
* const fromAsyncIterable = await arrayFromAsync(
|
|
243
|
-
* (async function* () {
|
|
244
|
-
*
|
|
245
|
-
* yield
|
|
271
|
+
* (async function* (): AsyncGenerator<number> {
|
|
272
|
+
* await Promise.resolve();
|
|
273
|
+
* yield 1;
|
|
274
|
+
* yield 2;
|
|
246
275
|
* })(),
|
|
247
276
|
* );
|
|
248
|
-
*
|
|
249
|
-
*
|
|
277
|
+
* assertEqual(fromAsyncIterable, [1, 2]);
|
|
278
|
+
* assertType<ReadonlyArray<number>, typeof fromAsyncIterable>();
|
|
250
279
|
* ```
|
|
251
280
|
*
|
|
252
281
|
* Unlike `Array.fromAsync`, there's no map parameter — map the result with
|
|
@@ -269,6 +298,8 @@ export declare const arrayFromAsync: <T>(iterable: AsyncIterable<T> | Iterable<T
|
|
|
269
298
|
*
|
|
270
299
|
* ```ts
|
|
271
300
|
* import {
|
|
301
|
+
* assertEqual,
|
|
302
|
+
* assertType,
|
|
272
303
|
* firstInArray,
|
|
273
304
|
* isNonEmptyArray,
|
|
274
305
|
* type NonEmptyArray,
|
|
@@ -281,9 +312,9 @@ export declare const arrayFromAsync: <T>(iterable: AsyncIterable<T> | Iterable<T
|
|
|
281
312
|
* throw new Error("Expected values");
|
|
282
313
|
* }
|
|
283
314
|
*
|
|
284
|
-
*
|
|
285
|
-
*
|
|
286
|
-
*
|
|
315
|
+
* assertType<NonEmptyArray<number>, typeof mutable>();
|
|
316
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof readonly>();
|
|
317
|
+
* assertEqual(firstInArray(readonly), 1);
|
|
287
318
|
* ```
|
|
288
319
|
*
|
|
289
320
|
* @group Types
|
|
@@ -298,13 +329,15 @@ export declare function isNonEmptyArray<T>(array: ReadonlyArray<T>): array is No
|
|
|
298
329
|
*
|
|
299
330
|
* ```ts
|
|
300
331
|
* import {
|
|
332
|
+
* assertEqual,
|
|
333
|
+
* assertType,
|
|
301
334
|
* appendToArray,
|
|
302
335
|
* type NonEmptyReadonlyArray,
|
|
303
336
|
* } from "@evolu/common";
|
|
304
337
|
*
|
|
305
338
|
* const values = appendToArray([1, 2, 3], 4);
|
|
306
|
-
*
|
|
307
|
-
*
|
|
339
|
+
* assertEqual(values, [1, 2, 3, 4]);
|
|
340
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof values>();
|
|
308
341
|
* ```
|
|
309
342
|
*
|
|
310
343
|
* @group Transformations
|
|
@@ -317,13 +350,15 @@ export declare const appendToArray: <T>(array: ReadonlyArray<T>, item: T) => Non
|
|
|
317
350
|
*
|
|
318
351
|
* ```ts
|
|
319
352
|
* import {
|
|
353
|
+
* assertEqual,
|
|
354
|
+
* assertType,
|
|
320
355
|
* prependToArray,
|
|
321
356
|
* type NonEmptyReadonlyArray,
|
|
322
357
|
* } from "@evolu/common";
|
|
323
358
|
*
|
|
324
359
|
* const values = prependToArray([2, 3], 1);
|
|
325
|
-
*
|
|
326
|
-
*
|
|
360
|
+
* assertEqual(values, [1, 2, 3]);
|
|
361
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof values>();
|
|
327
362
|
* ```
|
|
328
363
|
*
|
|
329
364
|
* @group Transformations
|
|
@@ -337,17 +372,21 @@ export declare const prependToArray: <T>(array: ReadonlyArray<T>, item: T) => No
|
|
|
337
372
|
* ### Mapping with indexes while preserving non-emptiness
|
|
338
373
|
*
|
|
339
374
|
* ```ts
|
|
340
|
-
* import {
|
|
375
|
+
* import {
|
|
376
|
+
* assertEqual,
|
|
377
|
+
* assertType,
|
|
378
|
+
* mapArray,
|
|
379
|
+
* type NonEmptyReadonlyArray,
|
|
380
|
+
* } from "@evolu/common";
|
|
341
381
|
*
|
|
342
382
|
* const values: ReadonlyArray<number> = [1, 2, 3];
|
|
343
383
|
* const indexed = mapArray(values, (value, index) => value + index);
|
|
344
|
-
*
|
|
345
|
-
*
|
|
384
|
+
* assertEqual(indexed, [1, 3, 5]);
|
|
385
|
+
* assertType<ReadonlyArray<number>, typeof indexed>();
|
|
346
386
|
*
|
|
347
387
|
* const nonEmpty: NonEmptyReadonlyArray<number> = [1, 2, 3];
|
|
348
|
-
*
|
|
349
|
-
*
|
|
350
|
-
* >();
|
|
388
|
+
* const doubled = mapArray(nonEmpty, (x) => x * 2);
|
|
389
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof doubled>();
|
|
351
390
|
* ```
|
|
352
391
|
*
|
|
353
392
|
* The mapper receives `(item, index, array)`, matching native `Array.map`.
|
|
@@ -367,7 +406,12 @@ export declare function mapArray<T, U>(array: ReadonlyArray<T>, mapper: (item: T
|
|
|
367
406
|
* ### Flattening and expanding values
|
|
368
407
|
*
|
|
369
408
|
* ```ts
|
|
370
|
-
* import {
|
|
409
|
+
* import {
|
|
410
|
+
* assertEqual,
|
|
411
|
+
* assertType,
|
|
412
|
+
* flatMapArray,
|
|
413
|
+
* type NonEmptyReadonlyArray,
|
|
414
|
+
* } from "@evolu/common";
|
|
371
415
|
*
|
|
372
416
|
* const flattened = flatMapArray([
|
|
373
417
|
* [1, 2],
|
|
@@ -378,9 +422,9 @@ export declare function mapArray<T, U>(array: ReadonlyArray<T>, mapper: (item: T
|
|
|
378
422
|
* values,
|
|
379
423
|
* (value, index): NonEmptyReadonlyArray<number> => [value, index],
|
|
380
424
|
* );
|
|
381
|
-
*
|
|
382
|
-
*
|
|
383
|
-
*
|
|
425
|
+
* assertEqual(flattened, [1, 2, 3, 4]);
|
|
426
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof expanded>();
|
|
427
|
+
* assertEqual(expanded, [1, 0, 2, 1, 3, 2]);
|
|
384
428
|
* ```
|
|
385
429
|
*
|
|
386
430
|
* ### Filter and map in one pass
|
|
@@ -388,7 +432,7 @@ export declare function mapArray<T, U>(array: ReadonlyArray<T>, mapper: (item: T
|
|
|
388
432
|
* Return `[]` to filter out, `[value]` to keep:
|
|
389
433
|
*
|
|
390
434
|
* ```ts
|
|
391
|
-
* import { err, flatMapArray, ok } from "@evolu/common";
|
|
435
|
+
* import { assertEqual, err, flatMapArray, ok } from "@evolu/common";
|
|
392
436
|
*
|
|
393
437
|
* const validate = (value: number) =>
|
|
394
438
|
* value > 0 ? ok(value) : err(`${value} is not positive`);
|
|
@@ -397,7 +441,7 @@ export declare function mapArray<T, U>(array: ReadonlyArray<T>, mapper: (item: T
|
|
|
397
441
|
* const result = validate(f);
|
|
398
442
|
* return result.ok ? [] : [result.error];
|
|
399
443
|
* });
|
|
400
|
-
*
|
|
444
|
+
* assertEqual(errors, ["-2 is not positive", "-4 is not positive"]);
|
|
401
445
|
* ```
|
|
402
446
|
*
|
|
403
447
|
* The mapper receives `(item, index, array)`, matching native `Array.flatMap`.
|
|
@@ -419,16 +463,21 @@ export declare function flatMapArray<T, U>(array: ReadonlyArray<T>, mapper: (ite
|
|
|
419
463
|
* ### Concatenating non-empty inputs
|
|
420
464
|
*
|
|
421
465
|
* ```ts
|
|
422
|
-
* import {
|
|
466
|
+
* import {
|
|
467
|
+
* assertEqual,
|
|
468
|
+
* assertType,
|
|
469
|
+
* concatArrays,
|
|
470
|
+
* type NonEmptyReadonlyArray,
|
|
471
|
+
* } from "@evolu/common";
|
|
423
472
|
*
|
|
424
473
|
* const nonEmpty: NonEmptyReadonlyArray<number> = [1];
|
|
425
474
|
* const joined = concatArrays([1, 2], [3, 4]);
|
|
426
475
|
* const fromLeft = concatArrays(nonEmpty, []);
|
|
427
476
|
* const fromRight = concatArrays([], nonEmpty);
|
|
428
477
|
*
|
|
429
|
-
*
|
|
430
|
-
*
|
|
431
|
-
*
|
|
478
|
+
* assertEqual(joined, [1, 2, 3, 4]);
|
|
479
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof fromLeft>();
|
|
480
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof fromRight>();
|
|
432
481
|
* ```
|
|
433
482
|
*
|
|
434
483
|
* @group Transformations
|
|
@@ -449,16 +498,18 @@ export declare function concatArrays<T>(first: ReadonlyArray<T>, second: Readonl
|
|
|
449
498
|
* ### With predicate
|
|
450
499
|
*
|
|
451
500
|
* ```ts
|
|
452
|
-
* import { filterArray } from "@evolu/common";
|
|
501
|
+
* import { assertEqual, filterArray } from "@evolu/common";
|
|
453
502
|
*
|
|
454
503
|
* const evens = filterArray([1, 2, 3, 4, 5], (x) => x % 2 === 0);
|
|
455
|
-
*
|
|
504
|
+
* assertEqual(evens, [2, 4]);
|
|
456
505
|
* ```
|
|
457
506
|
*
|
|
458
507
|
* ### With refinement
|
|
459
508
|
*
|
|
460
509
|
* ```ts
|
|
461
510
|
* import {
|
|
511
|
+
* assertEqual,
|
|
512
|
+
* assertType,
|
|
462
513
|
* filterArray,
|
|
463
514
|
* NonEmptyTrimmedString,
|
|
464
515
|
* PositiveInt,
|
|
@@ -469,8 +520,8 @@ export declare function concatArrays<T>(first: ReadonlyArray<T>, second: Readonl
|
|
|
469
520
|
* PositiveInt.orThrow(42),
|
|
470
521
|
* ];
|
|
471
522
|
* const positiveInts = filterArray(mixed, PositiveInt.is);
|
|
472
|
-
*
|
|
473
|
-
*
|
|
523
|
+
* assertEqual(positiveInts, [42]);
|
|
524
|
+
* assertType<ReadonlyArray<PositiveInt>, typeof positiveInts>();
|
|
474
525
|
* ```
|
|
475
526
|
*
|
|
476
527
|
* The predicate receives `(item, index, array)`, matching native
|
|
@@ -491,7 +542,12 @@ export declare function filterArray<T>(array: ReadonlyArray<T>, predicate: (item
|
|
|
491
542
|
* ### Deduplicating by value or key
|
|
492
543
|
*
|
|
493
544
|
* ```ts
|
|
494
|
-
* import {
|
|
545
|
+
* import {
|
|
546
|
+
* assertEqual,
|
|
547
|
+
* assertType,
|
|
548
|
+
* dedupeArray,
|
|
549
|
+
* type NonEmptyReadonlyArray,
|
|
550
|
+
* } from "@evolu/common";
|
|
495
551
|
*
|
|
496
552
|
* const numbers = dedupeArray([1, 2, 1, 3, 2]);
|
|
497
553
|
* const people = dedupeArray(
|
|
@@ -502,9 +558,9 @@ export declare function filterArray<T>(array: ReadonlyArray<T>, predicate: (item
|
|
|
502
558
|
* ],
|
|
503
559
|
* (item) => item.id,
|
|
504
560
|
* );
|
|
505
|
-
*
|
|
506
|
-
*
|
|
507
|
-
*
|
|
561
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof numbers>();
|
|
562
|
+
* assertEqual(numbers, [1, 2, 3]);
|
|
563
|
+
* assertEqual(people, [
|
|
508
564
|
* { id: 1, name: "Alice" },
|
|
509
565
|
* { id: 2, name: "Bob" },
|
|
510
566
|
* ]);
|
|
@@ -529,20 +585,22 @@ export declare function dedupeArray<T>(array: ReadonlyArray<T>, by?: (item: T) =
|
|
|
529
585
|
* ### With predicate
|
|
530
586
|
*
|
|
531
587
|
* ```ts
|
|
532
|
-
* import { partitionArray } from "@evolu/common";
|
|
588
|
+
* import { assertEqual, partitionArray } from "@evolu/common";
|
|
533
589
|
*
|
|
534
590
|
* const [evens, odds] = partitionArray(
|
|
535
591
|
* [1, 2, 3, 4, 5],
|
|
536
592
|
* (x) => x % 2 === 0,
|
|
537
593
|
* );
|
|
538
|
-
*
|
|
539
|
-
*
|
|
594
|
+
* assertEqual(evens, [2, 4]);
|
|
595
|
+
* assertEqual(odds, [1, 3, 5]);
|
|
540
596
|
* ```
|
|
541
597
|
*
|
|
542
598
|
* ### With refinement
|
|
543
599
|
*
|
|
544
600
|
* ```ts
|
|
545
601
|
* import {
|
|
602
|
+
* assertEqual,
|
|
603
|
+
* assertType,
|
|
546
604
|
* NonEmptyTrimmedString,
|
|
547
605
|
* partitionArray,
|
|
548
606
|
* PositiveInt,
|
|
@@ -553,11 +611,9 @@ export declare function dedupeArray<T>(array: ReadonlyArray<T>, by?: (item: T) =
|
|
|
553
611
|
* PositiveInt.orThrow(42),
|
|
554
612
|
* ];
|
|
555
613
|
* const [positiveInts, strings] = partitionArray(mixed, PositiveInt.is);
|
|
556
|
-
*
|
|
557
|
-
*
|
|
558
|
-
*
|
|
559
|
-
* ReadonlyArray<NonEmptyTrimmedString>
|
|
560
|
-
* >();
|
|
614
|
+
* assertEqual(positiveInts, [42]);
|
|
615
|
+
* assertType<ReadonlyArray<PositiveInt>, typeof positiveInts>();
|
|
616
|
+
* assertType<ReadonlyArray<NonEmptyTrimmedString>, typeof strings>();
|
|
561
617
|
* ```
|
|
562
618
|
*
|
|
563
619
|
* The predicate receives `(item, index, array)`.
|
|
@@ -575,12 +631,17 @@ export declare function partitionArray<T>(array: ReadonlyArray<T>, predicate: (i
|
|
|
575
631
|
* ### Sorting without mutation
|
|
576
632
|
*
|
|
577
633
|
* ```ts
|
|
578
|
-
* import {
|
|
634
|
+
* import {
|
|
635
|
+
* assertEqual,
|
|
636
|
+
* assertType,
|
|
637
|
+
* sortArray,
|
|
638
|
+
* type NonEmptyReadonlyArray,
|
|
639
|
+
* } from "@evolu/common";
|
|
579
640
|
*
|
|
580
641
|
* const values: NonEmptyReadonlyArray<number> = [3, 1, 2];
|
|
581
642
|
* const sorted = sortArray(values, (a, b) => a - b);
|
|
582
|
-
*
|
|
583
|
-
*
|
|
643
|
+
* assertEqual(sorted, [1, 2, 3]);
|
|
644
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof sorted>();
|
|
584
645
|
* ```
|
|
585
646
|
*
|
|
586
647
|
* @group Transformations
|
|
@@ -596,12 +657,17 @@ export declare function sortArray<T>(array: ReadonlyArray<T>, compareFn?: (a: T,
|
|
|
596
657
|
* ### Reversing without mutation
|
|
597
658
|
*
|
|
598
659
|
* ```ts
|
|
599
|
-
* import {
|
|
660
|
+
* import {
|
|
661
|
+
* assertEqual,
|
|
662
|
+
* assertType,
|
|
663
|
+
* reverseArray,
|
|
664
|
+
* type NonEmptyReadonlyArray,
|
|
665
|
+
* } from "@evolu/common";
|
|
600
666
|
*
|
|
601
667
|
* const values: NonEmptyReadonlyArray<number> = [1, 2, 3];
|
|
602
668
|
* const reversed = reverseArray(values);
|
|
603
|
-
*
|
|
604
|
-
*
|
|
669
|
+
* assertEqual(reversed, [3, 2, 1]);
|
|
670
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof reversed>();
|
|
605
671
|
* ```
|
|
606
672
|
*
|
|
607
673
|
* @group Transformations
|
|
@@ -617,12 +683,12 @@ export declare function reverseArray<T>(array: ReadonlyArray<T>): ReadonlyArray<
|
|
|
617
683
|
* ### Removing and replacing values
|
|
618
684
|
*
|
|
619
685
|
* ```ts
|
|
620
|
-
* import { spliceArray } from "@evolu/common";
|
|
686
|
+
* import { assertEqual, spliceArray } from "@evolu/common";
|
|
621
687
|
*
|
|
622
688
|
* const values: ReadonlyArray<number> = [1, 2, 3, 4];
|
|
623
|
-
*
|
|
624
|
-
*
|
|
625
|
-
*
|
|
689
|
+
* assertEqual(spliceArray(values, 1, 2), [1, 4]);
|
|
690
|
+
* assertEqual(spliceArray([1, 2, 3], 1, 1, 10, 11), [1, 10, 11, 3]);
|
|
691
|
+
* assertEqual(values, [1, 2, 3, 4]);
|
|
626
692
|
* ```
|
|
627
693
|
*
|
|
628
694
|
* @group Transformations
|
|
@@ -647,29 +713,36 @@ export type ZipArrayResult<T extends ReadonlyArray<ReadonlyArray<unknown>>> = {
|
|
|
647
713
|
* ### Zipping to the shortest input
|
|
648
714
|
*
|
|
649
715
|
* ```ts
|
|
650
|
-
* import {
|
|
716
|
+
* import {
|
|
717
|
+
* assertEqual,
|
|
718
|
+
* assertType,
|
|
719
|
+
* zipArray,
|
|
720
|
+
* type NonEmptyReadonlyArray,
|
|
721
|
+
* } from "@evolu/common";
|
|
651
722
|
*
|
|
652
723
|
* const pairs = zipArray([
|
|
653
724
|
* [1, 2, 3],
|
|
654
725
|
* ["a", "b", "c"],
|
|
655
726
|
* ]);
|
|
656
|
-
*
|
|
727
|
+
* assertEqual(pairs, [
|
|
657
728
|
* [1, "a"],
|
|
658
729
|
* [2, "b"],
|
|
659
730
|
* [3, "c"],
|
|
660
731
|
* ]);
|
|
661
|
-
*
|
|
732
|
+
* assertEqual(
|
|
662
733
|
* zipArray([
|
|
663
734
|
* [1, 2],
|
|
664
735
|
* ["a", "b", "c"],
|
|
665
736
|
* [true, false],
|
|
666
737
|
* ]),
|
|
667
|
-
*
|
|
668
|
-
*
|
|
669
|
-
*
|
|
670
|
-
*
|
|
671
|
-
*
|
|
672
|
-
*
|
|
738
|
+
* [
|
|
739
|
+
* [1, "a", true],
|
|
740
|
+
* [2, "b", false],
|
|
741
|
+
* ],
|
|
742
|
+
* );
|
|
743
|
+
* assertType<
|
|
744
|
+
* NonEmptyReadonlyArray<Readonly<[number, string]>>,
|
|
745
|
+
* typeof pairs
|
|
673
746
|
* >();
|
|
674
747
|
* ```
|
|
675
748
|
*
|
|
@@ -684,9 +757,9 @@ export declare function zipArray<const T extends ReadonlyArray<ReadonlyArray<unk
|
|
|
684
757
|
* ### Reading the first value
|
|
685
758
|
*
|
|
686
759
|
* ```ts
|
|
687
|
-
* import { firstInArray } from "@evolu/common";
|
|
760
|
+
* import { assertEqual, firstInArray } from "@evolu/common";
|
|
688
761
|
*
|
|
689
|
-
*
|
|
762
|
+
* assertEqual(firstInArray(["a", "b", "c"]), "a");
|
|
690
763
|
* ```
|
|
691
764
|
*
|
|
692
765
|
* @group Accessors
|
|
@@ -698,9 +771,9 @@ export declare const firstInArray: <T>(array: NonEmptyReadonlyArray<T>) => T;
|
|
|
698
771
|
* ### Reading the last value
|
|
699
772
|
*
|
|
700
773
|
* ```ts
|
|
701
|
-
* import { lastInArray } from "@evolu/common";
|
|
774
|
+
* import { assertEqual, lastInArray } from "@evolu/common";
|
|
702
775
|
*
|
|
703
|
-
*
|
|
776
|
+
* assertEqual(lastInArray(["a", "b", "c"]), "c");
|
|
704
777
|
* ```
|
|
705
778
|
*
|
|
706
779
|
* @group Accessors
|
package/dist/src/Array.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../../src/Array.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../../src/Array.ts"],"names":[],"mappings":"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"}
|