@evolu/common 8.4.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 +191 -94
- package/dist/src/Array.d.ts.map +1 -1
- package/dist/src/Array.js +91 -40
- package/dist/src/Assert.d.ts +233 -30
- package/dist/src/Assert.d.ts.map +1 -1
- package/dist/src/Assert.js +151 -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/LeakDetector.d.ts.map +1 -1
- package/dist/src/LeakDetector.js +4 -1
- 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 +5 -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/Platform.js +1 -0
- 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/Relation.js +3 -3
- package/dist/src/Resource.d.ts +27 -12
- package/dist/src/Resource.d.ts.map +1 -1
- package/dist/src/Resource.js +9 -3
- package/dist/src/Result.d.ts +258 -114
- package/dist/src/Result.d.ts.map +1 -1
- package/dist/src/Result.js +74 -39
- 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 +18 -15
- package/dist/src/Store.d.ts.map +1 -1
- package/dist/src/Store.js +3 -1
- package/dist/src/String.d.ts.map +1 -1
- package/dist/src/String.js +1 -1
- package/dist/src/Task.d.ts +555 -264
- package/dist/src/Task.d.ts.map +1 -1
- package/dist/src/Task.js +278 -168
- package/dist/src/Test.d.ts +10 -4
- package/dist/src/Test.d.ts.map +1 -1
- package/dist/src/Test.js +11 -4
- package/dist/src/Time.d.ts +27 -17
- package/dist/src/Time.d.ts.map +1 -1
- package/dist/src/Time.js +25 -8
- package/dist/src/Type.d.ts +1218 -372
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +1056 -379
- 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/WebSocket.js +8 -0
- package/dist/src/Worker.d.ts +10 -6
- package/dist/src/Worker.d.ts.map +1 -1
- package/dist/src/Worker.js +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/Db.js +3 -2
- 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/Evolu.js +1 -0
- package/dist/src/local-first/Owner.d.ts +18 -14
- package/dist/src/local-first/Owner.d.ts.map +1 -1
- package/dist/src/local-first/Owner.js +14 -11
- package/dist/src/local-first/Protocol.d.ts +5 -5
- package/dist/src/local-first/Protocol.d.ts.map +1 -1
- package/dist/src/local-first/Protocol.js +35 -29
- 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 +27 -14
- 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/Relay.js +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/Shared.d.ts.map +1 -1
- package/dist/src/local-first/Shared.js +4 -2
- package/dist/src/local-first/Storage.d.ts +4 -2
- package/dist/src/local-first/Storage.d.ts.map +1 -1
- package/dist/src/local-first/Timestamp.d.ts.map +1 -1
- package/dist/src/local-first/Timestamp.js +1 -1
- package/package.json +3 -4
- package/src/Array.ts +195 -95
- package/src/Assert.ts +337 -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/LeakDetector.ts +4 -3
- package/src/LockManager.ts +12 -10
- package/src/Lookup.ts +5 -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 +3 -2
- package/src/Random.ts +7 -4
- package/src/Redacted.ts +13 -6
- package/src/Ref.ts +4 -4
- package/src/Relation.ts +8 -10
- package/src/Resource.ts +36 -15
- package/src/Result.ts +263 -119
- package/src/Schedule.ts +233 -116
- package/src/Set.ts +43 -24
- package/src/Sqlite.ts +18 -15
- package/src/Store.ts +3 -1
- package/src/String.ts +1 -1
- package/src/Task.ts +566 -286
- package/src/Test.ts +11 -4
- package/src/Time.ts +36 -19
- package/src/Type.ts +2191 -590
- package/src/Types.ts +108 -40
- package/src/WebSocket.ts +22 -6
- package/src/Worker.ts +11 -7
- 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/Db.ts +2 -1
- package/src/local-first/Evolu.ts +48 -24
- package/src/local-first/Owner.ts +18 -14
- package/src/local-first/Protocol.ts +45 -35
- package/src/local-first/Query.ts +40 -24
- package/src/local-first/Relay.ts +13 -6
- package/src/local-first/Schema.ts +19 -11
- package/src/local-first/Shared.ts +4 -2
- package/src/local-first/Storage.ts +4 -2
- package/src/local-first/Timestamp.ts +1 -1
package/src/Set.ts
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* ```ts
|
|
14
14
|
* import {
|
|
15
15
|
* addToSet,
|
|
16
|
+
* assertEqual,
|
|
16
17
|
* deleteFromSet,
|
|
17
18
|
* filterSet,
|
|
18
19
|
* firstInSet,
|
|
@@ -31,7 +32,7 @@
|
|
|
31
32
|
* const difference = intersection.difference(new Set([4]));
|
|
32
33
|
*
|
|
33
34
|
* if (!isNonEmptySet(difference)) throw new Error("Expected values");
|
|
34
|
-
*
|
|
35
|
+
* assertEqual(firstInSet(difference), 6);
|
|
35
36
|
* ```
|
|
36
37
|
*
|
|
37
38
|
* @module
|
|
@@ -58,14 +59,19 @@ export const emptySet: ReadonlySet<never> = /*#__PURE__*/ new Set();
|
|
|
58
59
|
* ### Preserving non-empty inputs
|
|
59
60
|
*
|
|
60
61
|
* ```ts
|
|
61
|
-
* import {
|
|
62
|
+
* import {
|
|
63
|
+
* assertEqual,
|
|
64
|
+
* assertType,
|
|
65
|
+
* createSet,
|
|
66
|
+
* type NonEmptyReadonlySet,
|
|
67
|
+
* } from "@evolu/common";
|
|
62
68
|
*
|
|
63
69
|
* const values = createSet([1, 2, 3]);
|
|
64
70
|
* const empty = createSet([] as ReadonlyArray<number>);
|
|
65
71
|
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
72
|
+
* assertType<NonEmptyReadonlySet<number>, typeof values>();
|
|
73
|
+
* assertType<ReadonlySet<number>, typeof empty>();
|
|
74
|
+
* assertEqual(values, new Set([1, 2, 3]));
|
|
69
75
|
* ```
|
|
70
76
|
*
|
|
71
77
|
* @group Constructors
|
|
@@ -108,13 +114,18 @@ export type NonEmptyReadonlySet<T> = ReadonlySet<T> & Brand<"NonEmpty">;
|
|
|
108
114
|
* ### Narrowing before access
|
|
109
115
|
*
|
|
110
116
|
* ```ts
|
|
111
|
-
* import {
|
|
117
|
+
* import {
|
|
118
|
+
* assertEqual,
|
|
119
|
+
* assertType,
|
|
120
|
+
* isNonEmptySet,
|
|
121
|
+
* type NonEmptyReadonlySet,
|
|
122
|
+
* } from "@evolu/common";
|
|
112
123
|
*
|
|
113
124
|
* const set: ReadonlySet<number> = new Set([1, 2, 3]);
|
|
114
125
|
* if (!isNonEmptySet(set)) throw new Error("Expected a non-empty set");
|
|
115
126
|
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
127
|
+
* assertType<NonEmptyReadonlySet<number>, typeof set>();
|
|
128
|
+
* assertEqual(set.size, 3);
|
|
118
129
|
* ```
|
|
119
130
|
*
|
|
120
131
|
* @group Type guards
|
|
@@ -132,15 +143,21 @@ export const isNonEmptySet = <T>(
|
|
|
132
143
|
* ### Adding without mutation
|
|
133
144
|
*
|
|
134
145
|
* ```ts
|
|
135
|
-
* import {
|
|
146
|
+
* import {
|
|
147
|
+
* addToSet,
|
|
148
|
+
* assertEqual,
|
|
149
|
+
* assertTrue,
|
|
150
|
+
* assertType,
|
|
151
|
+
* type NonEmptyReadonlySet,
|
|
152
|
+
* } from "@evolu/common";
|
|
136
153
|
*
|
|
137
154
|
* const original: ReadonlySet<number> = new Set([1, 2]);
|
|
138
155
|
* const added = addToSet(original, 3);
|
|
139
156
|
* const unchanged = addToSet(original, 2);
|
|
140
157
|
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
158
|
+
* assertType<NonEmptyReadonlySet<number>, typeof added>();
|
|
159
|
+
* assertEqual(added, new Set([1, 2, 3]));
|
|
160
|
+
* assertTrue(unchanged !== original);
|
|
144
161
|
* ```
|
|
145
162
|
*
|
|
146
163
|
* @group Transformations
|
|
@@ -163,11 +180,11 @@ export const addToSet = <T>(
|
|
|
163
180
|
* ### Deleting without mutation
|
|
164
181
|
*
|
|
165
182
|
* ```ts
|
|
166
|
-
* import { deleteFromSet } from "@evolu/common";
|
|
183
|
+
* import { assertEqual, assertTrue, deleteFromSet } from "@evolu/common";
|
|
167
184
|
*
|
|
168
185
|
* const original = new Set([1, 2, 3]);
|
|
169
|
-
*
|
|
170
|
-
*
|
|
186
|
+
* assertEqual(deleteFromSet(original, 2), new Set([1, 3]));
|
|
187
|
+
* assertTrue(deleteFromSet(original, 5) !== original);
|
|
171
188
|
* ```
|
|
172
189
|
*
|
|
173
190
|
* @group Transformations
|
|
@@ -193,6 +210,8 @@ export const deleteFromSet = <T>(
|
|
|
193
210
|
*
|
|
194
211
|
* ```ts
|
|
195
212
|
* import {
|
|
213
|
+
* assertEqual,
|
|
214
|
+
* assertType,
|
|
196
215
|
* createSet,
|
|
197
216
|
* mapSet,
|
|
198
217
|
* type NonEmptyReadonlySet,
|
|
@@ -202,9 +221,9 @@ export const deleteFromSet = <T>(
|
|
|
202
221
|
* const doubled = mapSet(original, (x) => x * 2);
|
|
203
222
|
* const parity = mapSet(original, (x) => x % 2);
|
|
204
223
|
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
*
|
|
224
|
+
* assertType<NonEmptyReadonlySet<number>, typeof doubled>();
|
|
225
|
+
* assertEqual(doubled, new Set([2, 4, 6]));
|
|
226
|
+
* assertEqual(parity, new Set([1, 0]));
|
|
208
227
|
* ```
|
|
209
228
|
*
|
|
210
229
|
* @group Transformations
|
|
@@ -239,18 +258,18 @@ export function mapSet<T, U>(
|
|
|
239
258
|
* ### Filtering and refining
|
|
240
259
|
*
|
|
241
260
|
* ```ts
|
|
242
|
-
* import { filterSet } from "@evolu/common";
|
|
261
|
+
* import { assertEqual, assertType, filterSet } from "@evolu/common";
|
|
243
262
|
*
|
|
244
263
|
* const evens = filterSet(new Set([1, 2, 3, 4, 5]), (x) => x % 2 === 0);
|
|
245
|
-
*
|
|
264
|
+
* assertEqual(evens, new Set([2, 4]));
|
|
246
265
|
*
|
|
247
266
|
* const mixed: ReadonlySet<string | number> = new Set([1, "a", 2, "b"]);
|
|
248
267
|
* const strings = filterSet(
|
|
249
268
|
* mixed,
|
|
250
269
|
* (value): value is string => typeof value === "string",
|
|
251
270
|
* );
|
|
252
|
-
*
|
|
253
|
-
*
|
|
271
|
+
* assertType<ReadonlySet<string>, typeof strings>();
|
|
272
|
+
* assertEqual(strings, new Set(["a", "b"]));
|
|
254
273
|
* ```
|
|
255
274
|
*
|
|
256
275
|
* @group Transformations
|
|
@@ -284,10 +303,10 @@ export function filterSet<T>(
|
|
|
284
303
|
* ### Reading the first value
|
|
285
304
|
*
|
|
286
305
|
* ```ts
|
|
287
|
-
* import { createSet, firstInSet } from "@evolu/common";
|
|
306
|
+
* import { assertEqual, createSet, firstInSet } from "@evolu/common";
|
|
288
307
|
*
|
|
289
308
|
* const set = createSet(["a", "b", "c"]);
|
|
290
|
-
*
|
|
309
|
+
* assertEqual(firstInSet(set), "a");
|
|
291
310
|
* ```
|
|
292
311
|
*
|
|
293
312
|
* @group Accessors
|
package/src/Sqlite.ts
CHANGED
|
@@ -256,12 +256,13 @@ export const createSqlite =
|
|
|
256
256
|
console.debug({ query });
|
|
257
257
|
|
|
258
258
|
const label =
|
|
259
|
-
query.options?.logQueryExecutionTime
|
|
260
|
-
|
|
259
|
+
query.options?.logQueryExecutionTime === true
|
|
260
|
+
? `SqliteQueryExecutionTime ${query.sql}`
|
|
261
|
+
: null;
|
|
261
262
|
|
|
262
|
-
if (label) console.time(label);
|
|
263
|
+
if (label !== null) console.time(label);
|
|
263
264
|
const result = driver.exec(query);
|
|
264
|
-
if (label) console.timeEnd(label);
|
|
265
|
+
if (label !== null) console.timeEnd(label);
|
|
265
266
|
|
|
266
267
|
if (query.options?.logExplainQueryPlan) {
|
|
267
268
|
const result = driver.exec({
|
|
@@ -343,11 +344,12 @@ const drawSqliteQueryPlan = (rows: Array<SqliteQueryPlanRow>): string =>
|
|
|
343
344
|
let indent = 0;
|
|
344
345
|
|
|
345
346
|
do {
|
|
347
|
+
// oxlint-disable-next-line eslint/no-loop-func -- find invokes the callback synchronously before parentId changes.
|
|
346
348
|
const parent = rows.find((r) => r.id === parentId);
|
|
347
349
|
if (!parent) break;
|
|
348
350
|
parentId = parent.parent;
|
|
349
351
|
indent++;
|
|
350
|
-
//
|
|
352
|
+
// oxlint-disable-next-line eslint/no-constant-condition -- A missing parent terminates the traversal above.
|
|
351
353
|
} while (true);
|
|
352
354
|
|
|
353
355
|
return `${" ".repeat(indent)}${row.detail}`;
|
|
@@ -395,7 +397,7 @@ export const createPreparedStatementsCache = <P>(
|
|
|
395
397
|
if (alwaysPrepare !== true && !query.options?.prepare)
|
|
396
398
|
return null as never;
|
|
397
399
|
let statement = statementsBySql.get(query.sql);
|
|
398
|
-
if (
|
|
400
|
+
if (statement === undefined) {
|
|
399
401
|
statement = factory(query.sql);
|
|
400
402
|
statementsBySql.set(query.sql, statement);
|
|
401
403
|
}
|
|
@@ -432,7 +434,7 @@ export type SqlTemplateParam = SqliteValue | SqlIdentifier | RawSql;
|
|
|
432
434
|
* ### Example
|
|
433
435
|
*
|
|
434
436
|
* ```ts
|
|
435
|
-
* import { sql } from "@evolu/common";
|
|
437
|
+
* import { assertEqual, assertTrue, sql } from "@evolu/common";
|
|
436
438
|
*
|
|
437
439
|
* const id = 42;
|
|
438
440
|
* const name = "Alice";
|
|
@@ -450,12 +452,13 @@ export type SqlTemplateParam = SqliteValue | SqlIdentifier | RawSql;
|
|
|
450
452
|
* const orderBy = "created_at desc";
|
|
451
453
|
* const ordered = sql`select * from users order by ${sql.raw(orderBy)};`;
|
|
452
454
|
*
|
|
453
|
-
*
|
|
455
|
+
* assertEqual(select, {
|
|
454
456
|
* sql: "select * from users where id = ? and name = ?;",
|
|
455
457
|
* parameters: [42, "Alice"],
|
|
456
458
|
* });
|
|
457
|
-
*
|
|
458
|
-
*
|
|
459
|
+
* assertTrue(createTable.sql.includes('create table "users"'));
|
|
460
|
+
* assertEqual(
|
|
461
|
+
* ordered.sql,
|
|
459
462
|
* "select * from users order by created_at desc;",
|
|
460
463
|
* );
|
|
461
464
|
* ```
|
|
@@ -492,7 +495,7 @@ export const sql = (
|
|
|
492
495
|
sql.identifier = (identifier: string): SqlIdentifier => ({
|
|
493
496
|
type: "SqlIdentifier",
|
|
494
497
|
// From Kysely
|
|
495
|
-
sql: `"${identifier.
|
|
498
|
+
sql: `"${identifier.replaceAll('"', '""')}"` as SafeSql,
|
|
496
499
|
});
|
|
497
500
|
|
|
498
501
|
/**
|
|
@@ -674,9 +677,9 @@ export const sqliteFalse = 0;
|
|
|
674
677
|
* ### Example
|
|
675
678
|
*
|
|
676
679
|
* ```ts
|
|
677
|
-
* import { booleanToSqliteBoolean } from "@evolu/common";
|
|
680
|
+
* import { assertEqual, booleanToSqliteBoolean } from "@evolu/common";
|
|
678
681
|
*
|
|
679
|
-
*
|
|
682
|
+
* assertEqual(booleanToSqliteBoolean(true), 1);
|
|
680
683
|
* ```
|
|
681
684
|
*/
|
|
682
685
|
export const booleanToSqliteBoolean = (value: boolean): SqliteBoolean =>
|
|
@@ -688,9 +691,9 @@ export const booleanToSqliteBoolean = (value: boolean): SqliteBoolean =>
|
|
|
688
691
|
* ### Example
|
|
689
692
|
*
|
|
690
693
|
* ```ts
|
|
691
|
-
* import { sqliteBooleanToBoolean } from "@evolu/common";
|
|
694
|
+
* import { assertTrue, sqliteBooleanToBoolean } from "@evolu/common";
|
|
692
695
|
*
|
|
693
|
-
*
|
|
696
|
+
* assertTrue(sqliteBooleanToBoolean(1));
|
|
694
697
|
* ```
|
|
695
698
|
*/
|
|
696
699
|
export const sqliteBooleanToBoolean = (value: SqliteBoolean): boolean =>
|
package/src/Store.ts
CHANGED
|
@@ -70,7 +70,9 @@ export const createStore = <T>(initialState: T, eq?: Eq<T>): Store<T> => {
|
|
|
70
70
|
get: ref.get,
|
|
71
71
|
subscribe: (listener) => {
|
|
72
72
|
listeners.add(listener);
|
|
73
|
-
return () =>
|
|
73
|
+
return () => {
|
|
74
|
+
listeners.delete(listener);
|
|
75
|
+
};
|
|
74
76
|
},
|
|
75
77
|
|
|
76
78
|
set: (state) => {
|
package/src/String.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* pattern.
|
|
10
10
|
*/
|
|
11
11
|
export const escapeRegExp = (value: string): string =>
|
|
12
|
-
value.
|
|
12
|
+
value.replaceAll(/[.*+?^${}()|[\]\\]/gu, "\\$&");
|
|
13
13
|
|
|
14
14
|
/** Converts an unknown value to a compact, human-readable diagnostic string. */
|
|
15
15
|
export const safelyStringifyUnknownValue = (value: unknown): string => {
|