@evolu/common 8.5.0 → 8.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +5 -5
- 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 +5 -5
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../../src/local-first/Storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EACL,OAAO,EAEP,EAAE,EACF,KAAK,SAAS,EAEd,cAAc,EACd,IAAI,EAGJ,KAAK,UAAU,EACf,WAAW,EAEX,MAAM,EACN,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAS,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAGL,SAAS,EACT,cAAc,EACf,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,aAAa;IAC5B
|
|
1
|
+
{"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../../src/local-first/Storage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evolu/common",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.6.0",
|
|
4
4
|
"description": "TypeScript library and local-first platform",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"evolu",
|
|
@@ -75,10 +75,9 @@
|
|
|
75
75
|
"random": "5.5.1"
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
78
|
+
"@evolu/typescript-config": "0.1.0",
|
|
78
79
|
"@types/node": "^24.10.9",
|
|
79
|
-
"@typescript/native": "npm:typescript@^7.0.2"
|
|
80
|
-
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
81
|
-
"@evolu/typescript-config": "0.0.2"
|
|
80
|
+
"@typescript/native": "npm:typescript@^7.0.2"
|
|
82
81
|
},
|
|
83
82
|
"publishConfig": {
|
|
84
83
|
"access": "public"
|
package/src/Array.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
|
|
@@ -184,7 +196,11 @@ export const emptyArray: ReadonlyArray<never> = [];
|
|
|
184
196
|
* ### Example
|
|
185
197
|
*
|
|
186
198
|
* ```ts
|
|
187
|
-
* import {
|
|
199
|
+
* import {
|
|
200
|
+
* assertEqual,
|
|
201
|
+
* assertType,
|
|
202
|
+
* createMutableArray,
|
|
203
|
+
* } from "@evolu/common";
|
|
188
204
|
*
|
|
189
205
|
* const values = createMutableArray<number>(3);
|
|
190
206
|
*
|
|
@@ -192,8 +208,8 @@ export const emptyArray: ReadonlyArray<never> = [];
|
|
|
192
208
|
* values[index] = index * 10;
|
|
193
209
|
* }
|
|
194
210
|
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
211
|
+
* assertEqual(values, [0, 10, 20]);
|
|
212
|
+
* assertType<Array<number>, typeof values>();
|
|
197
213
|
* ```
|
|
198
214
|
*
|
|
199
215
|
* @group Constructors
|
|
@@ -213,16 +229,24 @@ export const createMutableArray = <T>(length: number): Array<T> =>
|
|
|
213
229
|
* ### Creating from iterables and lengths
|
|
214
230
|
*
|
|
215
231
|
* ```ts
|
|
216
|
-
* import {
|
|
232
|
+
* import {
|
|
233
|
+
* assertEqual,
|
|
234
|
+
* assertSame,
|
|
235
|
+
* assertType,
|
|
236
|
+
* arrayFrom,
|
|
237
|
+
* } from "@evolu/common";
|
|
217
238
|
*
|
|
218
239
|
* const fromSet = arrayFrom(new Set([1, 2, 3]));
|
|
219
|
-
*
|
|
220
|
-
*
|
|
240
|
+
* assertEqual(fromSet, [1, 2, 3]);
|
|
241
|
+
* assertType<ReadonlyArray<number>, typeof fromSet>();
|
|
221
242
|
*
|
|
222
|
-
*
|
|
243
|
+
* assertEqual(
|
|
244
|
+
* arrayFrom(3, (i) => i * 10),
|
|
245
|
+
* [0, 10, 20],
|
|
246
|
+
* );
|
|
223
247
|
*
|
|
224
248
|
* const existing: ReadonlyArray<number> = [1, 2, 3];
|
|
225
|
-
*
|
|
249
|
+
* assertSame(arrayFrom(existing), existing);
|
|
226
250
|
* ```
|
|
227
251
|
*
|
|
228
252
|
* Unlike `Array.from`, there's no map parameter for iterables — use
|
|
@@ -261,19 +285,24 @@ export function arrayFrom<T>(
|
|
|
261
285
|
* ### Awaiting sync and async iterables
|
|
262
286
|
*
|
|
263
287
|
* ```ts
|
|
264
|
-
* import { arrayFromAsync } from "@evolu/common";
|
|
288
|
+
* import { assertEqual, assertType, arrayFromAsync } from "@evolu/common";
|
|
265
289
|
*
|
|
266
|
-
* const fromIterable = await arrayFromAsync(
|
|
267
|
-
*
|
|
290
|
+
* const fromIterable = await arrayFromAsync([
|
|
291
|
+
* Promise.resolve(1),
|
|
292
|
+
* Promise.resolve(2),
|
|
293
|
+
* Promise.resolve(3),
|
|
294
|
+
* ]);
|
|
295
|
+
* assertEqual(fromIterable, [1, 2, 3]);
|
|
268
296
|
*
|
|
269
297
|
* const fromAsyncIterable = await arrayFromAsync(
|
|
270
|
-
* (async function* () {
|
|
271
|
-
*
|
|
272
|
-
* yield
|
|
298
|
+
* (async function* (): AsyncGenerator<number> {
|
|
299
|
+
* await Promise.resolve();
|
|
300
|
+
* yield 1;
|
|
301
|
+
* yield 2;
|
|
273
302
|
* })(),
|
|
274
303
|
* );
|
|
275
|
-
*
|
|
276
|
-
*
|
|
304
|
+
* assertEqual(fromAsyncIterable, [1, 2]);
|
|
305
|
+
* assertType<ReadonlyArray<number>, typeof fromAsyncIterable>();
|
|
277
306
|
* ```
|
|
278
307
|
*
|
|
279
308
|
* Unlike `Array.fromAsync`, there's no map parameter — map the result with
|
|
@@ -299,6 +328,8 @@ export const arrayFromAsync = async <T>(
|
|
|
299
328
|
*
|
|
300
329
|
* ```ts
|
|
301
330
|
* import {
|
|
331
|
+
* assertEqual,
|
|
332
|
+
* assertType,
|
|
302
333
|
* firstInArray,
|
|
303
334
|
* isNonEmptyArray,
|
|
304
335
|
* type NonEmptyArray,
|
|
@@ -311,9 +342,9 @@ export const arrayFromAsync = async <T>(
|
|
|
311
342
|
* throw new Error("Expected values");
|
|
312
343
|
* }
|
|
313
344
|
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
345
|
+
* assertType<NonEmptyArray<number>, typeof mutable>();
|
|
346
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof readonly>();
|
|
347
|
+
* assertEqual(firstInArray(readonly), 1);
|
|
317
348
|
* ```
|
|
318
349
|
*
|
|
319
350
|
* @group Types
|
|
@@ -336,13 +367,15 @@ export function isNonEmptyArray<T>(
|
|
|
336
367
|
*
|
|
337
368
|
* ```ts
|
|
338
369
|
* import {
|
|
370
|
+
* assertEqual,
|
|
371
|
+
* assertType,
|
|
339
372
|
* appendToArray,
|
|
340
373
|
* type NonEmptyReadonlyArray,
|
|
341
374
|
* } from "@evolu/common";
|
|
342
375
|
*
|
|
343
376
|
* const values = appendToArray([1, 2, 3], 4);
|
|
344
|
-
*
|
|
345
|
-
*
|
|
377
|
+
* assertEqual(values, [1, 2, 3, 4]);
|
|
378
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof values>();
|
|
346
379
|
* ```
|
|
347
380
|
*
|
|
348
381
|
* @group Transformations
|
|
@@ -362,13 +395,15 @@ export const appendToArray = <T>(
|
|
|
362
395
|
*
|
|
363
396
|
* ```ts
|
|
364
397
|
* import {
|
|
398
|
+
* assertEqual,
|
|
399
|
+
* assertType,
|
|
365
400
|
* prependToArray,
|
|
366
401
|
* type NonEmptyReadonlyArray,
|
|
367
402
|
* } from "@evolu/common";
|
|
368
403
|
*
|
|
369
404
|
* const values = prependToArray([2, 3], 1);
|
|
370
|
-
*
|
|
371
|
-
*
|
|
405
|
+
* assertEqual(values, [1, 2, 3]);
|
|
406
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof values>();
|
|
372
407
|
* ```
|
|
373
408
|
*
|
|
374
409
|
* @group Transformations
|
|
@@ -386,17 +421,21 @@ export const prependToArray = <T>(
|
|
|
386
421
|
* ### Mapping with indexes while preserving non-emptiness
|
|
387
422
|
*
|
|
388
423
|
* ```ts
|
|
389
|
-
* import {
|
|
424
|
+
* import {
|
|
425
|
+
* assertEqual,
|
|
426
|
+
* assertType,
|
|
427
|
+
* mapArray,
|
|
428
|
+
* type NonEmptyReadonlyArray,
|
|
429
|
+
* } from "@evolu/common";
|
|
390
430
|
*
|
|
391
431
|
* const values: ReadonlyArray<number> = [1, 2, 3];
|
|
392
432
|
* const indexed = mapArray(values, (value, index) => value + index);
|
|
393
|
-
*
|
|
394
|
-
*
|
|
433
|
+
* assertEqual(indexed, [1, 3, 5]);
|
|
434
|
+
* assertType<ReadonlyArray<number>, typeof indexed>();
|
|
395
435
|
*
|
|
396
436
|
* const nonEmpty: NonEmptyReadonlyArray<number> = [1, 2, 3];
|
|
397
|
-
*
|
|
398
|
-
*
|
|
399
|
-
* >();
|
|
437
|
+
* const doubled = mapArray(nonEmpty, (x) => x * 2);
|
|
438
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof doubled>();
|
|
400
439
|
* ```
|
|
401
440
|
*
|
|
402
441
|
* The mapper receives `(item, index, array)`, matching native `Array.map`.
|
|
@@ -429,7 +468,12 @@ export function mapArray<T, U>(
|
|
|
429
468
|
* ### Flattening and expanding values
|
|
430
469
|
*
|
|
431
470
|
* ```ts
|
|
432
|
-
* import {
|
|
471
|
+
* import {
|
|
472
|
+
* assertEqual,
|
|
473
|
+
* assertType,
|
|
474
|
+
* flatMapArray,
|
|
475
|
+
* type NonEmptyReadonlyArray,
|
|
476
|
+
* } from "@evolu/common";
|
|
433
477
|
*
|
|
434
478
|
* const flattened = flatMapArray([
|
|
435
479
|
* [1, 2],
|
|
@@ -440,9 +484,9 @@ export function mapArray<T, U>(
|
|
|
440
484
|
* values,
|
|
441
485
|
* (value, index): NonEmptyReadonlyArray<number> => [value, index],
|
|
442
486
|
* );
|
|
443
|
-
*
|
|
444
|
-
*
|
|
445
|
-
*
|
|
487
|
+
* assertEqual(flattened, [1, 2, 3, 4]);
|
|
488
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof expanded>();
|
|
489
|
+
* assertEqual(expanded, [1, 0, 2, 1, 3, 2]);
|
|
446
490
|
* ```
|
|
447
491
|
*
|
|
448
492
|
* ### Filter and map in one pass
|
|
@@ -450,7 +494,7 @@ export function mapArray<T, U>(
|
|
|
450
494
|
* Return `[]` to filter out, `[value]` to keep:
|
|
451
495
|
*
|
|
452
496
|
* ```ts
|
|
453
|
-
* import { err, flatMapArray, ok } from "@evolu/common";
|
|
497
|
+
* import { assertEqual, err, flatMapArray, ok } from "@evolu/common";
|
|
454
498
|
*
|
|
455
499
|
* const validate = (value: number) =>
|
|
456
500
|
* value > 0 ? ok(value) : err(`${value} is not positive`);
|
|
@@ -459,7 +503,7 @@ export function mapArray<T, U>(
|
|
|
459
503
|
* const result = validate(f);
|
|
460
504
|
* return result.ok ? [] : [result.error];
|
|
461
505
|
* });
|
|
462
|
-
*
|
|
506
|
+
* assertEqual(errors, ["-2 is not positive", "-4 is not positive"]);
|
|
463
507
|
* ```
|
|
464
508
|
*
|
|
465
509
|
* The mapper receives `(item, index, array)`, matching native `Array.flatMap`.
|
|
@@ -510,16 +554,21 @@ export function flatMapArray<T, U>(
|
|
|
510
554
|
* ### Concatenating non-empty inputs
|
|
511
555
|
*
|
|
512
556
|
* ```ts
|
|
513
|
-
* import {
|
|
557
|
+
* import {
|
|
558
|
+
* assertEqual,
|
|
559
|
+
* assertType,
|
|
560
|
+
* concatArrays,
|
|
561
|
+
* type NonEmptyReadonlyArray,
|
|
562
|
+
* } from "@evolu/common";
|
|
514
563
|
*
|
|
515
564
|
* const nonEmpty: NonEmptyReadonlyArray<number> = [1];
|
|
516
565
|
* const joined = concatArrays([1, 2], [3, 4]);
|
|
517
566
|
* const fromLeft = concatArrays(nonEmpty, []);
|
|
518
567
|
* const fromRight = concatArrays([], nonEmpty);
|
|
519
568
|
*
|
|
520
|
-
*
|
|
521
|
-
*
|
|
522
|
-
*
|
|
569
|
+
* assertEqual(joined, [1, 2, 3, 4]);
|
|
570
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof fromLeft>();
|
|
571
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof fromRight>();
|
|
523
572
|
* ```
|
|
524
573
|
*
|
|
525
574
|
* @group Transformations
|
|
@@ -556,16 +605,18 @@ export function concatArrays<T>(
|
|
|
556
605
|
* ### With predicate
|
|
557
606
|
*
|
|
558
607
|
* ```ts
|
|
559
|
-
* import { filterArray } from "@evolu/common";
|
|
608
|
+
* import { assertEqual, filterArray } from "@evolu/common";
|
|
560
609
|
*
|
|
561
610
|
* const evens = filterArray([1, 2, 3, 4, 5], (x) => x % 2 === 0);
|
|
562
|
-
*
|
|
611
|
+
* assertEqual(evens, [2, 4]);
|
|
563
612
|
* ```
|
|
564
613
|
*
|
|
565
614
|
* ### With refinement
|
|
566
615
|
*
|
|
567
616
|
* ```ts
|
|
568
617
|
* import {
|
|
618
|
+
* assertEqual,
|
|
619
|
+
* assertType,
|
|
569
620
|
* filterArray,
|
|
570
621
|
* NonEmptyTrimmedString,
|
|
571
622
|
* PositiveInt,
|
|
@@ -576,8 +627,8 @@ export function concatArrays<T>(
|
|
|
576
627
|
* PositiveInt.orThrow(42),
|
|
577
628
|
* ];
|
|
578
629
|
* const positiveInts = filterArray(mixed, PositiveInt.is);
|
|
579
|
-
*
|
|
580
|
-
*
|
|
630
|
+
* assertEqual(positiveInts, [42]);
|
|
631
|
+
* assertType<ReadonlyArray<PositiveInt>, typeof positiveInts>();
|
|
581
632
|
* ```
|
|
582
633
|
*
|
|
583
634
|
* The predicate receives `(item, index, array)`, matching native
|
|
@@ -611,7 +662,12 @@ export function filterArray<T>(
|
|
|
611
662
|
* ### Deduplicating by value or key
|
|
612
663
|
*
|
|
613
664
|
* ```ts
|
|
614
|
-
* import {
|
|
665
|
+
* import {
|
|
666
|
+
* assertEqual,
|
|
667
|
+
* assertType,
|
|
668
|
+
* dedupeArray,
|
|
669
|
+
* type NonEmptyReadonlyArray,
|
|
670
|
+
* } from "@evolu/common";
|
|
615
671
|
*
|
|
616
672
|
* const numbers = dedupeArray([1, 2, 1, 3, 2]);
|
|
617
673
|
* const people = dedupeArray(
|
|
@@ -622,9 +678,9 @@ export function filterArray<T>(
|
|
|
622
678
|
* ],
|
|
623
679
|
* (item) => item.id,
|
|
624
680
|
* );
|
|
625
|
-
*
|
|
626
|
-
*
|
|
627
|
-
*
|
|
681
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof numbers>();
|
|
682
|
+
* assertEqual(numbers, [1, 2, 3]);
|
|
683
|
+
* assertEqual(people, [
|
|
628
684
|
* { id: 1, name: "Alice" },
|
|
629
685
|
* { id: 2, name: "Bob" },
|
|
630
686
|
* ]);
|
|
@@ -672,20 +728,22 @@ export function dedupeArray<T>(
|
|
|
672
728
|
* ### With predicate
|
|
673
729
|
*
|
|
674
730
|
* ```ts
|
|
675
|
-
* import { partitionArray } from "@evolu/common";
|
|
731
|
+
* import { assertEqual, partitionArray } from "@evolu/common";
|
|
676
732
|
*
|
|
677
733
|
* const [evens, odds] = partitionArray(
|
|
678
734
|
* [1, 2, 3, 4, 5],
|
|
679
735
|
* (x) => x % 2 === 0,
|
|
680
736
|
* );
|
|
681
|
-
*
|
|
682
|
-
*
|
|
737
|
+
* assertEqual(evens, [2, 4]);
|
|
738
|
+
* assertEqual(odds, [1, 3, 5]);
|
|
683
739
|
* ```
|
|
684
740
|
*
|
|
685
741
|
* ### With refinement
|
|
686
742
|
*
|
|
687
743
|
* ```ts
|
|
688
744
|
* import {
|
|
745
|
+
* assertEqual,
|
|
746
|
+
* assertType,
|
|
689
747
|
* NonEmptyTrimmedString,
|
|
690
748
|
* partitionArray,
|
|
691
749
|
* PositiveInt,
|
|
@@ -696,11 +754,9 @@ export function dedupeArray<T>(
|
|
|
696
754
|
* PositiveInt.orThrow(42),
|
|
697
755
|
* ];
|
|
698
756
|
* const [positiveInts, strings] = partitionArray(mixed, PositiveInt.is);
|
|
699
|
-
*
|
|
700
|
-
*
|
|
701
|
-
*
|
|
702
|
-
* ReadonlyArray<NonEmptyTrimmedString>
|
|
703
|
-
* >();
|
|
757
|
+
* assertEqual(positiveInts, [42]);
|
|
758
|
+
* assertType<ReadonlyArray<PositiveInt>, typeof positiveInts>();
|
|
759
|
+
* assertType<ReadonlyArray<NonEmptyTrimmedString>, typeof strings>();
|
|
704
760
|
* ```
|
|
705
761
|
*
|
|
706
762
|
* The predicate receives `(item, index, array)`.
|
|
@@ -742,12 +798,17 @@ export function partitionArray<T>(
|
|
|
742
798
|
* ### Sorting without mutation
|
|
743
799
|
*
|
|
744
800
|
* ```ts
|
|
745
|
-
* import {
|
|
801
|
+
* import {
|
|
802
|
+
* assertEqual,
|
|
803
|
+
* assertType,
|
|
804
|
+
* sortArray,
|
|
805
|
+
* type NonEmptyReadonlyArray,
|
|
806
|
+
* } from "@evolu/common";
|
|
746
807
|
*
|
|
747
808
|
* const values: NonEmptyReadonlyArray<number> = [3, 1, 2];
|
|
748
809
|
* const sorted = sortArray(values, (a, b) => a - b);
|
|
749
|
-
*
|
|
750
|
-
*
|
|
810
|
+
* assertEqual(sorted, [1, 2, 3]);
|
|
811
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof sorted>();
|
|
751
812
|
* ```
|
|
752
813
|
*
|
|
753
814
|
* @group Transformations
|
|
@@ -776,12 +837,17 @@ export function sortArray<T>(
|
|
|
776
837
|
* ### Reversing without mutation
|
|
777
838
|
*
|
|
778
839
|
* ```ts
|
|
779
|
-
* import {
|
|
840
|
+
* import {
|
|
841
|
+
* assertEqual,
|
|
842
|
+
* assertType,
|
|
843
|
+
* reverseArray,
|
|
844
|
+
* type NonEmptyReadonlyArray,
|
|
845
|
+
* } from "@evolu/common";
|
|
780
846
|
*
|
|
781
847
|
* const values: NonEmptyReadonlyArray<number> = [1, 2, 3];
|
|
782
848
|
* const reversed = reverseArray(values);
|
|
783
|
-
*
|
|
784
|
-
*
|
|
849
|
+
* assertEqual(reversed, [3, 2, 1]);
|
|
850
|
+
* assertType<NonEmptyReadonlyArray<number>, typeof reversed>();
|
|
785
851
|
* ```
|
|
786
852
|
*
|
|
787
853
|
* @group Transformations
|
|
@@ -803,12 +869,12 @@ export function reverseArray<T>(array: ReadonlyArray<T>): ReadonlyArray<T> {
|
|
|
803
869
|
* ### Removing and replacing values
|
|
804
870
|
*
|
|
805
871
|
* ```ts
|
|
806
|
-
* import { spliceArray } from "@evolu/common";
|
|
872
|
+
* import { assertEqual, spliceArray } from "@evolu/common";
|
|
807
873
|
*
|
|
808
874
|
* const values: ReadonlyArray<number> = [1, 2, 3, 4];
|
|
809
|
-
*
|
|
810
|
-
*
|
|
811
|
-
*
|
|
875
|
+
* assertEqual(spliceArray(values, 1, 2), [1, 4]);
|
|
876
|
+
* assertEqual(spliceArray([1, 2, 3], 1, 1, 10, 11), [1, 10, 11, 3]);
|
|
877
|
+
* assertEqual(values, [1, 2, 3, 4]);
|
|
812
878
|
* ```
|
|
813
879
|
*
|
|
814
880
|
* @group Transformations
|
|
@@ -840,29 +906,36 @@ export type ZipArrayResult<T extends ReadonlyArray<ReadonlyArray<unknown>>> = {
|
|
|
840
906
|
* ### Zipping to the shortest input
|
|
841
907
|
*
|
|
842
908
|
* ```ts
|
|
843
|
-
* import {
|
|
909
|
+
* import {
|
|
910
|
+
* assertEqual,
|
|
911
|
+
* assertType,
|
|
912
|
+
* zipArray,
|
|
913
|
+
* type NonEmptyReadonlyArray,
|
|
914
|
+
* } from "@evolu/common";
|
|
844
915
|
*
|
|
845
916
|
* const pairs = zipArray([
|
|
846
917
|
* [1, 2, 3],
|
|
847
918
|
* ["a", "b", "c"],
|
|
848
919
|
* ]);
|
|
849
|
-
*
|
|
920
|
+
* assertEqual(pairs, [
|
|
850
921
|
* [1, "a"],
|
|
851
922
|
* [2, "b"],
|
|
852
923
|
* [3, "c"],
|
|
853
924
|
* ]);
|
|
854
|
-
*
|
|
925
|
+
* assertEqual(
|
|
855
926
|
* zipArray([
|
|
856
927
|
* [1, 2],
|
|
857
928
|
* ["a", "b", "c"],
|
|
858
929
|
* [true, false],
|
|
859
930
|
* ]),
|
|
860
|
-
*
|
|
861
|
-
*
|
|
862
|
-
*
|
|
863
|
-
*
|
|
864
|
-
*
|
|
865
|
-
*
|
|
931
|
+
* [
|
|
932
|
+
* [1, "a", true],
|
|
933
|
+
* [2, "b", false],
|
|
934
|
+
* ],
|
|
935
|
+
* );
|
|
936
|
+
* assertType<
|
|
937
|
+
* NonEmptyReadonlyArray<Readonly<[number, string]>>,
|
|
938
|
+
* typeof pairs
|
|
866
939
|
* >();
|
|
867
940
|
* ```
|
|
868
941
|
*
|
|
@@ -896,9 +969,9 @@ export function zipArray<T extends ReadonlyArray<ReadonlyArray<unknown>>>(
|
|
|
896
969
|
* ### Reading the first value
|
|
897
970
|
*
|
|
898
971
|
* ```ts
|
|
899
|
-
* import { firstInArray } from "@evolu/common";
|
|
972
|
+
* import { assertEqual, firstInArray } from "@evolu/common";
|
|
900
973
|
*
|
|
901
|
-
*
|
|
974
|
+
* assertEqual(firstInArray(["a", "b", "c"]), "a");
|
|
902
975
|
* ```
|
|
903
976
|
*
|
|
904
977
|
* @group Accessors
|
|
@@ -911,9 +984,9 @@ export const firstInArray = <T>(array: NonEmptyReadonlyArray<T>): T => array[0];
|
|
|
911
984
|
* ### Reading the last value
|
|
912
985
|
*
|
|
913
986
|
* ```ts
|
|
914
|
-
* import { lastInArray } from "@evolu/common";
|
|
987
|
+
* import { assertEqual, lastInArray } from "@evolu/common";
|
|
915
988
|
*
|
|
916
|
-
*
|
|
989
|
+
* assertEqual(lastInArray(["a", "b", "c"]), "c");
|
|
917
990
|
* ```
|
|
918
991
|
*
|
|
919
992
|
* @group Accessors
|