@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/dist/src/Object.js
CHANGED
|
@@ -4,39 +4,79 @@
|
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Classifies Object representations supported by Evolu's structural data APIs.
|
|
8
|
+
*
|
|
9
|
+
* Plain Objects are classified from their prototype without reading their
|
|
10
|
+
* properties, including `Symbol.toStringTag`.
|
|
8
11
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
12
|
+
* ### Example
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { assertEqual, getObjectKind } from "@evolu/common";
|
|
16
|
+
*
|
|
17
|
+
* assertEqual(getObjectKind({}), "Object");
|
|
18
|
+
* assertEqual(getObjectKind(new Map()), "Map");
|
|
19
|
+
* assertEqual(getObjectKind(/value/u), "Unsupported");
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export const getObjectKind = (value) => {
|
|
23
|
+
if (Array.isArray(value))
|
|
24
|
+
return "Array";
|
|
25
|
+
if (isPlainObject(value))
|
|
26
|
+
return "Object";
|
|
27
|
+
switch (Object.prototype.toString.call(value)) {
|
|
28
|
+
case "[object Date]":
|
|
29
|
+
return "Date";
|
|
30
|
+
case "[object Map]":
|
|
31
|
+
return "Map";
|
|
32
|
+
case "[object Set]":
|
|
33
|
+
return "Set";
|
|
34
|
+
case "[object Uint8Array]":
|
|
35
|
+
return "Uint8Array";
|
|
36
|
+
default:
|
|
37
|
+
return "Unsupported";
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Checks if a value is a plain object (e.g., created with `{}` or `Object`).
|
|
13
42
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
43
|
+
* Accepts objects with a `null` prototype. Otherwise, it uses a realm-neutral
|
|
44
|
+
* structural heuristic: the immediate prototype must be a root object with own
|
|
45
|
+
* `hasOwnProperty` and `isPrototypeOf` properties. This recognizes ordinary
|
|
46
|
+
* Objects from another JavaScript realm without relying on prototype identity.
|
|
17
47
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
48
|
+
* A custom root prototype with the same shape can therefore be classified as
|
|
49
|
+
* plain. This function assumes trusted JavaScript and is not a prototype
|
|
50
|
+
* authentication or security boundary. Other custom prototypes, class
|
|
51
|
+
* instances, and built-in objects are rejected.
|
|
20
52
|
*
|
|
21
53
|
* ### Example
|
|
22
54
|
*
|
|
23
55
|
* ```ts
|
|
24
|
-
* import { isPlainObject } from "@evolu/common";
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
56
|
+
* import { assertFalse, assertTrue, isPlainObject } from "@evolu/common";
|
|
57
|
+
*
|
|
58
|
+
* class Example {
|
|
59
|
+
* readonly value = "example";
|
|
60
|
+
* }
|
|
61
|
+
*
|
|
62
|
+
* assertTrue(isPlainObject({}));
|
|
63
|
+
* assertTrue(isPlainObject(Object.create(null)));
|
|
64
|
+
* assertFalse(isPlainObject(new Date()));
|
|
65
|
+
* assertFalse(isPlainObject(new Example()));
|
|
66
|
+
* assertFalse(isPlainObject([]));
|
|
67
|
+
* assertFalse(isPlainObject(null));
|
|
32
68
|
* ```
|
|
33
69
|
*/
|
|
34
70
|
export const isPlainObject = (value) => {
|
|
35
|
-
if (
|
|
71
|
+
if (value === null || typeof value !== "object") {
|
|
36
72
|
return false;
|
|
37
73
|
}
|
|
38
74
|
const prototype = Object.getPrototypeOf(value);
|
|
39
|
-
|
|
75
|
+
if (prototype === null)
|
|
76
|
+
return true;
|
|
77
|
+
return (Object.getPrototypeOf(prototype) === null &&
|
|
78
|
+
Object.hasOwn(prototype, "hasOwnProperty") &&
|
|
79
|
+
Object.hasOwn(prototype, "isPrototypeOf"));
|
|
40
80
|
};
|
|
41
81
|
/**
|
|
42
82
|
* Checks if a value is a function.
|
|
@@ -44,11 +84,11 @@ export const isPlainObject = (value) => {
|
|
|
44
84
|
* ### Example
|
|
45
85
|
*
|
|
46
86
|
* ```ts
|
|
47
|
-
* import { isFunction } from "@evolu/common";
|
|
87
|
+
* import { assertFalse, assertTrue, isFunction } from "@evolu/common";
|
|
48
88
|
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
89
|
+
* assertTrue(isFunction(() => {}));
|
|
90
|
+
* assertTrue(isFunction(function () {}));
|
|
91
|
+
* assertFalse(isFunction({}));
|
|
52
92
|
* ```
|
|
53
93
|
*/
|
|
54
94
|
export const isFunction = (value) => typeof value === "function";
|
|
@@ -58,11 +98,11 @@ export const isFunction = (value) => typeof value === "function";
|
|
|
58
98
|
* ### Example
|
|
59
99
|
*
|
|
60
100
|
* ```ts
|
|
61
|
-
* import { isIterable } from "@evolu/common";
|
|
101
|
+
* import { assertFalse, assertTrue, isIterable } from "@evolu/common";
|
|
62
102
|
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
103
|
+
* assertTrue(isIterable([1, 2, 3]));
|
|
104
|
+
* assertTrue(isIterable("abc"));
|
|
105
|
+
* assertFalse(isIterable({}));
|
|
66
106
|
* ```
|
|
67
107
|
*/
|
|
68
108
|
export const isIterable = (value) => value != null &&
|
|
@@ -74,6 +114,8 @@ export const isIterable = (value) => value != null &&
|
|
|
74
114
|
*
|
|
75
115
|
* ```ts
|
|
76
116
|
* import {
|
|
117
|
+
* assertEqual,
|
|
118
|
+
* assertType,
|
|
77
119
|
* objectToEntries,
|
|
78
120
|
* type Brand,
|
|
79
121
|
* type ReadonlyRecord,
|
|
@@ -85,8 +127,8 @@ export const isIterable = (value) => value != null &&
|
|
|
85
127
|
* const users: ReadonlyRecord<UserId, string> = { [userId]: "Alice" };
|
|
86
128
|
* const entries = objectToEntries(users);
|
|
87
129
|
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
130
|
+
* assertType<ReadonlyArray<[UserId, string]>, typeof entries>();
|
|
131
|
+
* assertEqual(entries, [[userId, "Alice"]]);
|
|
90
132
|
* ```
|
|
91
133
|
*/
|
|
92
134
|
export const objectToEntries = (record) => Object.entries(record);
|
|
@@ -100,6 +142,8 @@ export const objectToEntries = (record) => Object.entries(record);
|
|
|
100
142
|
*
|
|
101
143
|
* ```ts
|
|
102
144
|
* import {
|
|
145
|
+
* assertEqual,
|
|
146
|
+
* assertType,
|
|
103
147
|
* objectFromEntries,
|
|
104
148
|
* type Brand,
|
|
105
149
|
* type ReadonlyRecord,
|
|
@@ -111,8 +155,8 @@ export const objectToEntries = (record) => Object.entries(record);
|
|
|
111
155
|
* ];
|
|
112
156
|
* const users = objectFromEntries(entries);
|
|
113
157
|
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
158
|
+
* assertType<ReadonlyRecord<UserId, string>, typeof users>();
|
|
159
|
+
* assertEqual(users, { u1: "Alice" });
|
|
116
160
|
* ```
|
|
117
161
|
*/
|
|
118
162
|
export const objectFromEntries = (entries) => Object.fromEntries(entries);
|
|
@@ -125,17 +169,20 @@ export const objectFromEntries = (entries) => Object.fromEntries(entries);
|
|
|
125
169
|
* ### Example
|
|
126
170
|
*
|
|
127
171
|
* ```ts
|
|
128
|
-
* import {
|
|
172
|
+
* import {
|
|
173
|
+
* assertEqual,
|
|
174
|
+
* assertType,
|
|
175
|
+
* objectFrom,
|
|
176
|
+
* type ReadonlyRecord,
|
|
177
|
+
* } from "@evolu/common";
|
|
129
178
|
*
|
|
130
179
|
* const translations = objectFrom(
|
|
131
180
|
* ["en", "fr"] as const,
|
|
132
181
|
* (locale): string => `Hello in ${locale}`,
|
|
133
182
|
* );
|
|
134
183
|
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* >();
|
|
138
|
-
* expect(translations).toEqual({
|
|
184
|
+
* assertType<ReadonlyRecord<"en" | "fr", string>, typeof translations>();
|
|
185
|
+
* assertEqual(translations, {
|
|
139
186
|
* en: "Hello in en",
|
|
140
187
|
* fr: "Hello in fr",
|
|
141
188
|
* });
|
|
@@ -193,7 +240,7 @@ export const emptyRecord =
|
|
|
193
240
|
* ### Example
|
|
194
241
|
*
|
|
195
242
|
* ```ts
|
|
196
|
-
* import { getOwnProp } from "@evolu/common";
|
|
243
|
+
* import { assertEqual, assertType, getOwnProp } from "@evolu/common";
|
|
197
244
|
*
|
|
198
245
|
* interface User {
|
|
199
246
|
* readonly name: string;
|
|
@@ -204,9 +251,9 @@ export const emptyRecord =
|
|
|
204
251
|
* };
|
|
205
252
|
* const user = getOwnProp(users, "bob");
|
|
206
253
|
*
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
254
|
+
* assertType<User | undefined, typeof user>();
|
|
255
|
+
* assertEqual(user, undefined);
|
|
256
|
+
* assertEqual(getOwnProp(users, "toString"), undefined);
|
|
210
257
|
* ```
|
|
211
258
|
*/
|
|
212
259
|
export const getOwnProp = (record, key) => (Object.hasOwn(record, key) ? record[key] : undefined);
|
package/dist/src/Option.d.ts
CHANGED
|
@@ -9,7 +9,16 @@
|
|
|
9
9
|
* ### Example
|
|
10
10
|
*
|
|
11
11
|
* ```ts
|
|
12
|
-
* import {
|
|
12
|
+
* import {
|
|
13
|
+
* assert,
|
|
14
|
+
* assertSame,
|
|
15
|
+
* assertTrue,
|
|
16
|
+
* isNone,
|
|
17
|
+
* isSome,
|
|
18
|
+
* none,
|
|
19
|
+
* type Option,
|
|
20
|
+
* some,
|
|
21
|
+
* } from "@evolu/common";
|
|
13
22
|
*
|
|
14
23
|
* const cache = new Map<string, Option<unknown>>();
|
|
15
24
|
*
|
|
@@ -19,10 +28,10 @@
|
|
|
19
28
|
* cache.set("b", some(undefined));
|
|
20
29
|
*
|
|
21
30
|
* const a = get("a");
|
|
22
|
-
* assert(isSome(a));
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
31
|
+
* assert(isSome(a), "Expected Some.");
|
|
32
|
+
* assertSame(a.value, null);
|
|
33
|
+
* assertTrue(isSome(get("b")));
|
|
34
|
+
* assertTrue(isNone(get("c")));
|
|
26
35
|
* ```
|
|
27
36
|
*
|
|
28
37
|
* @module
|
package/dist/src/Option.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../../src/Option.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../../src/Option.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,sBAAsB;AACtB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,sBAAsB;AACtB,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAEvC,0CAA0C;AAC1C,MAAM,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,MAAM,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACnB;AAED,yCAAyC;AACzC,MAAM,WAAW,IAAK,SAAQ,KAAK,CAAC,MAAM,CAAC;CAAG;AAE9C;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,IAC3C,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEtC,8BAA8B;AAC9B,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,CAAC,KAAG,MAAM,CAAC,CAAC,CAGzC,CAAC;AAEH,oCAAoC;AACpC,eAAO,MAAM,IAAI,EAAE,IAAuB,CAAC;AAE3C,mCAAmC;AACnC,eAAO,MAAM,MAAM,GAAI,CAAC,UAAU,MAAM,CAAC,CAAC,CAAC,KAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CACtC,CAAC;AAEzB,mCAAmC;AACnC,eAAO,MAAM,MAAM,GAAI,CAAC,UAAU,MAAM,CAAC,CAAC,CAAC,KAAG,MAAM,IAAI,IAChC,CAAC;AAEzB;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,SACrB,CAAC,GAAG,IAAI,GAAG,SAAS,KAC1B,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAyC,CAAC"}
|
package/dist/src/Option.js
CHANGED
|
@@ -9,7 +9,16 @@
|
|
|
9
9
|
* ### Example
|
|
10
10
|
*
|
|
11
11
|
* ```ts
|
|
12
|
-
* import {
|
|
12
|
+
* import {
|
|
13
|
+
* assert,
|
|
14
|
+
* assertSame,
|
|
15
|
+
* assertTrue,
|
|
16
|
+
* isNone,
|
|
17
|
+
* isSome,
|
|
18
|
+
* none,
|
|
19
|
+
* type Option,
|
|
20
|
+
* some,
|
|
21
|
+
* } from "@evolu/common";
|
|
13
22
|
*
|
|
14
23
|
* const cache = new Map<string, Option<unknown>>();
|
|
15
24
|
*
|
|
@@ -19,10 +28,10 @@
|
|
|
19
28
|
* cache.set("b", some(undefined));
|
|
20
29
|
*
|
|
21
30
|
* const a = get("a");
|
|
22
|
-
* assert(isSome(a));
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
31
|
+
* assert(isSome(a), "Expected Some.");
|
|
32
|
+
* assertSame(a.value, null);
|
|
33
|
+
* assertTrue(isSome(get("b")));
|
|
34
|
+
* assertTrue(isNone(get("c")));
|
|
26
35
|
* ```
|
|
27
36
|
*
|
|
28
37
|
* @module
|
package/dist/src/Order.d.ts
CHANGED
|
@@ -28,12 +28,12 @@ export type Ordering = -1 | 0 | 1;
|
|
|
28
28
|
* ### Example
|
|
29
29
|
*
|
|
30
30
|
* ```ts
|
|
31
|
-
* import { createOrder } from "@evolu/common";
|
|
31
|
+
* import { assertEqual, createOrder } from "@evolu/common";
|
|
32
32
|
*
|
|
33
33
|
* const orderNumber = createOrder<number>((x, y) => x < y);
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
34
|
+
* assertEqual(orderNumber(1, 2), -1);
|
|
35
|
+
* assertEqual(orderNumber(2, 1), 1);
|
|
36
|
+
* assertEqual(orderNumber(1, 1), 0);
|
|
37
37
|
* ```
|
|
38
38
|
*/
|
|
39
39
|
export declare const createOrder: <A>(isLessThan: (x: A, y: A) => boolean) => Order<A>;
|
|
@@ -43,10 +43,10 @@ export declare const createOrder: <A>(isLessThan: (x: A, y: A) => boolean) => Or
|
|
|
43
43
|
* ### Example
|
|
44
44
|
*
|
|
45
45
|
* ```ts
|
|
46
|
-
* import { orderNumber, reverseOrder } from "@evolu/common";
|
|
46
|
+
* import { assertEqual, orderNumber, reverseOrder } from "@evolu/common";
|
|
47
47
|
*
|
|
48
48
|
* const descendingOrderNumber = reverseOrder(orderNumber);
|
|
49
|
-
*
|
|
49
|
+
* assertEqual([3, 1, 2].toSorted(descendingOrderNumber), [3, 2, 1]);
|
|
50
50
|
* ```
|
|
51
51
|
*/
|
|
52
52
|
export declare const reverseOrder: <A>(order: Order<A>) => Order<A>;
|
|
@@ -56,9 +56,9 @@ export declare const reverseOrder: <A>(order: Order<A>) => Order<A>;
|
|
|
56
56
|
* ### Example
|
|
57
57
|
*
|
|
58
58
|
* ```ts
|
|
59
|
-
* import { orderString } from "@evolu/common";
|
|
59
|
+
* import { assertEqual, orderString } from "@evolu/common";
|
|
60
60
|
*
|
|
61
|
-
*
|
|
61
|
+
* assertEqual(["c", "b", "a"].toSorted(orderString), ["a", "b", "c"]);
|
|
62
62
|
* ```
|
|
63
63
|
*/
|
|
64
64
|
export declare const orderString: Order<string>;
|
|
@@ -68,9 +68,9 @@ export declare const orderString: Order<string>;
|
|
|
68
68
|
* ### Example
|
|
69
69
|
*
|
|
70
70
|
* ```ts
|
|
71
|
-
* import { orderNumber } from "@evolu/common";
|
|
71
|
+
* import { assertEqual, orderNumber } from "@evolu/common";
|
|
72
72
|
*
|
|
73
|
-
*
|
|
73
|
+
* assertEqual([2, 1, 3].toSorted(orderNumber), [1, 2, 3]);
|
|
74
74
|
* ```
|
|
75
75
|
*/
|
|
76
76
|
export declare const orderNumber: Order<number>;
|
|
@@ -80,9 +80,9 @@ export declare const orderNumber: Order<number>;
|
|
|
80
80
|
* ### Example
|
|
81
81
|
*
|
|
82
82
|
* ```ts
|
|
83
|
-
* import { orderBigInt } from "@evolu/common";
|
|
83
|
+
* import { assertEqual, orderBigInt } from "@evolu/common";
|
|
84
84
|
*
|
|
85
|
-
*
|
|
85
|
+
* assertEqual([2n, 1n, 3n].toSorted(orderBigInt), [1n, 2n, 3n]);
|
|
86
86
|
* ```
|
|
87
87
|
*/
|
|
88
88
|
export declare const orderBigInt: Order<bigint>;
|
package/dist/src/Order.js
CHANGED
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
* ### Example
|
|
10
10
|
*
|
|
11
11
|
* ```ts
|
|
12
|
-
* import { createOrder } from "@evolu/common";
|
|
12
|
+
* import { assertEqual, createOrder } from "@evolu/common";
|
|
13
13
|
*
|
|
14
14
|
* const orderNumber = createOrder<number>((x, y) => x < y);
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* assertEqual(orderNumber(1, 2), -1);
|
|
16
|
+
* assertEqual(orderNumber(2, 1), 1);
|
|
17
|
+
* assertEqual(orderNumber(1, 1), 0);
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
20
|
export const createOrder = (isLessThan) => (x, y) => x === y ? 0 : isLessThan(x, y) ? -1 : 1;
|
|
@@ -24,10 +24,10 @@ export const createOrder = (isLessThan) => (x, y) => x === y ? 0 : isLessThan(x,
|
|
|
24
24
|
* ### Example
|
|
25
25
|
*
|
|
26
26
|
* ```ts
|
|
27
|
-
* import { orderNumber, reverseOrder } from "@evolu/common";
|
|
27
|
+
* import { assertEqual, orderNumber, reverseOrder } from "@evolu/common";
|
|
28
28
|
*
|
|
29
29
|
* const descendingOrderNumber = reverseOrder(orderNumber);
|
|
30
|
-
*
|
|
30
|
+
* assertEqual([3, 1, 2].toSorted(descendingOrderNumber), [3, 2, 1]);
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
33
33
|
export const reverseOrder = (order) => (a, b) => order(b, a);
|
|
@@ -37,9 +37,9 @@ export const reverseOrder = (order) => (a, b) => order(b, a);
|
|
|
37
37
|
* ### Example
|
|
38
38
|
*
|
|
39
39
|
* ```ts
|
|
40
|
-
* import { orderString } from "@evolu/common";
|
|
40
|
+
* import { assertEqual, orderString } from "@evolu/common";
|
|
41
41
|
*
|
|
42
|
-
*
|
|
42
|
+
* assertEqual(["c", "b", "a"].toSorted(orderString), ["a", "b", "c"]);
|
|
43
43
|
* ```
|
|
44
44
|
*/
|
|
45
45
|
export const orderString = /*#__PURE__*/ createOrder((a, b) => a < b);
|
|
@@ -49,9 +49,9 @@ export const orderString = /*#__PURE__*/ createOrder((a, b) => a < b);
|
|
|
49
49
|
* ### Example
|
|
50
50
|
*
|
|
51
51
|
* ```ts
|
|
52
|
-
* import { orderNumber } from "@evolu/common";
|
|
52
|
+
* import { assertEqual, orderNumber } from "@evolu/common";
|
|
53
53
|
*
|
|
54
|
-
*
|
|
54
|
+
* assertEqual([2, 1, 3].toSorted(orderNumber), [1, 2, 3]);
|
|
55
55
|
* ```
|
|
56
56
|
*/
|
|
57
57
|
export const orderNumber = /*#__PURE__*/ createOrder((a, b) => a < b);
|
|
@@ -61,9 +61,9 @@ export const orderNumber = /*#__PURE__*/ createOrder((a, b) => a < b);
|
|
|
61
61
|
* ### Example
|
|
62
62
|
*
|
|
63
63
|
* ```ts
|
|
64
|
-
* import { orderBigInt } from "@evolu/common";
|
|
64
|
+
* import { assertEqual, orderBigInt } from "@evolu/common";
|
|
65
65
|
*
|
|
66
|
-
*
|
|
66
|
+
* assertEqual([2n, 1n, 3n].toSorted(orderBigInt), [1n, 2n, 3n]);
|
|
67
67
|
* ```
|
|
68
68
|
*/
|
|
69
69
|
export const orderBigInt = /*#__PURE__*/ createOrder((a, b) => a < b);
|
package/dist/src/Platform.d.ts
CHANGED
|
@@ -68,8 +68,8 @@ export interface TestGlobalErrors extends Disposable {
|
|
|
68
68
|
* Platforms deliver global errors asynchronously and provide no hook for
|
|
69
69
|
* "nothing was reported", so settle emits a sentinel of the same kind and
|
|
70
70
|
* resolves when it arrives. Platform delivery is ordered, so all earlier
|
|
71
|
-
* errors are recorded by then.
|
|
72
|
-
* unhandledRejections.settle()
|
|
71
|
+
* errors are recorded by then. Assert absence with `assertEqual(await
|
|
72
|
+
* unhandledRejections.settle(), [])`.
|
|
73
73
|
*/
|
|
74
74
|
readonly settle: () => Promise<ReadonlyArray<unknown>>;
|
|
75
75
|
}
|
package/dist/src/Platform.js
CHANGED
|
@@ -104,6 +104,7 @@ const createTestGlobalErrors = (kind) => {
|
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
106
|
else {
|
|
107
|
+
// oxlint-disable-next-line unicorn/prefer-type-error -- An unsupported runtime environment is not an invalid argument type.
|
|
107
108
|
throw new Error(`Unsupported platform global ${errorType} reporting.`);
|
|
108
109
|
}
|
|
109
110
|
return {
|
package/dist/src/Random.d.ts
CHANGED
|
@@ -20,6 +20,9 @@ export type RandomNumber = number & Brand<"RandomNumber">;
|
|
|
20
20
|
*
|
|
21
21
|
* ```ts
|
|
22
22
|
* import {
|
|
23
|
+
* assertEqual,
|
|
24
|
+
* assertTrue,
|
|
25
|
+
* assertType,
|
|
23
26
|
* createRandom,
|
|
24
27
|
* testCreateRandom,
|
|
25
28
|
* type RandomNumber,
|
|
@@ -28,14 +31,14 @@ export type RandomNumber = number & Brand<"RandomNumber">;
|
|
|
28
31
|
* // For apps, use the Math.random-backed implementation.
|
|
29
32
|
* const random = createRandom();
|
|
30
33
|
* const value = random.next();
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
+
* assertType<RandomNumber, typeof value>();
|
|
35
|
+
* assertTrue(value >= 0);
|
|
36
|
+
* assertTrue(value < 1);
|
|
34
37
|
*
|
|
35
38
|
* // For tests, use a seed.
|
|
36
39
|
* const firstTestRandom = testCreateRandom("test");
|
|
37
40
|
* const secondTestRandom = testCreateRandom("test");
|
|
38
|
-
*
|
|
41
|
+
* assertEqual(firstTestRandom.next(), secondTestRandom.next());
|
|
39
42
|
* ```
|
|
40
43
|
*/
|
|
41
44
|
export interface Random {
|
package/dist/src/Random.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Random.d.ts","sourceRoot":"","sources":["../../src/Random.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;AAE1D
|
|
1
|
+
{"version":3,"file":"Random.d.ts","sourceRoot":"","sources":["../../src/Random.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,WAAW,MAAM;IACrB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,YAAY,CAAC;CACnC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,oDAAoD;AACpD,eAAO,MAAM,YAAY,QAAO,MAE9B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,qBAAqB,MAKjD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED,uEAAuE;AACvE,eAAO,MAAM,eAAe,QAAO,SAA4B,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,qBAAqB,SAChC,CAAC"}
|
package/dist/src/Redacted.d.ts
CHANGED
|
@@ -27,8 +27,11 @@ import type { Eq } from "./Eq.ts";
|
|
|
27
27
|
*
|
|
28
28
|
* ```ts
|
|
29
29
|
* import {
|
|
30
|
+
* assertErr,
|
|
31
|
+
* assertEqual,
|
|
30
32
|
* createRedacted,
|
|
31
33
|
* revealRedacted,
|
|
34
|
+
* trySync,
|
|
32
35
|
* type Brand,
|
|
33
36
|
* type Redacted,
|
|
34
37
|
* } from "@evolu/common";
|
|
@@ -42,11 +45,13 @@ import type { Eq } from "./Eq.ts";
|
|
|
42
45
|
* using redactedKey: RedactedApiKey = createRedacted(apiKey);
|
|
43
46
|
* const fetchUser = (key: RedactedApiKey): ApiKey => revealRedacted(key);
|
|
44
47
|
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
48
|
+
* // oxlint-disable-next-line typescript/no-base-to-string -- Redacted intentionally implements a safe custom toString.
|
|
49
|
+
* assertEqual(redactedKey.toString(), "<redacted>");
|
|
50
|
+
* assertEqual(
|
|
51
|
+
* JSON.stringify({ apiKey: redactedKey }),
|
|
47
52
|
* '{"apiKey":"<redacted>"}',
|
|
48
53
|
* );
|
|
49
|
-
*
|
|
54
|
+
* assertEqual(fetchUser(redactedKey), apiKey);
|
|
50
55
|
*
|
|
51
56
|
* using password = createRedacted("password" as DbPassword);
|
|
52
57
|
* // @ts-expect-error Redacted secrets retain their distinct branded types.
|
|
@@ -57,7 +62,7 @@ import type { Eq } from "./Eq.ts";
|
|
|
57
62
|
* return key;
|
|
58
63
|
* })();
|
|
59
64
|
* // Leaving the `using` scope removes the value from memory.
|
|
60
|
-
*
|
|
65
|
+
* assertErr(trySync(() => revealRedacted(disposedKey)));
|
|
61
66
|
* ```
|
|
62
67
|
*/
|
|
63
68
|
export interface Redacted<A> extends Brand<"Redacted">, Disposable {
|
|
@@ -84,6 +89,8 @@ export declare const isRedacted: (value: unknown) => value is Redacted<unknown>;
|
|
|
84
89
|
*
|
|
85
90
|
* ```ts
|
|
86
91
|
* import {
|
|
92
|
+
* assertFalse,
|
|
93
|
+
* assertTrue,
|
|
87
94
|
* createEqRedacted,
|
|
88
95
|
* createRedacted,
|
|
89
96
|
* eqString,
|
|
@@ -98,8 +105,8 @@ export declare const isRedacted: (value: unknown) => value is Redacted<unknown>;
|
|
|
98
105
|
* using b = createRedacted("x" as ApiKey);
|
|
99
106
|
* using c = createRedacted("y" as ApiKey);
|
|
100
107
|
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
108
|
+
* assertTrue(eqRedactedApiKey(a, b));
|
|
109
|
+
* assertFalse(eqRedactedApiKey(a, c));
|
|
103
110
|
* ```
|
|
104
111
|
*/
|
|
105
112
|
export declare const createEqRedacted: <A>(eq: Eq<A>) => Eq<Redacted<A>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Redacted.d.ts","sourceRoot":"","sources":["../../src/Redacted.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC
|
|
1
|
+
{"version":3,"file":"Redacted.d.ts","sourceRoot":"","sources":["../../src/Redacted.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,UAAU,CAAC,EAAE,UAAU;IAChE,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CAClB;AAED,gEAAgE;AAChE,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,CAAC,KAAG,QAAQ,CAAC,CAAC,CAItD,CAAC;AAaF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAG,CAGzD,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,UAAU,UAAW,OAAO,KAAG,KAAK,IAAI,QAAQ,CAAC,OAAO,CAG7B,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,gBAAgB,GAC1B,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAEY,CAAC"}
|
package/dist/src/Redacted.js
CHANGED
|
@@ -43,6 +43,8 @@ export const isRedacted = (value) => typeof value === "object" &&
|
|
|
43
43
|
*
|
|
44
44
|
* ```ts
|
|
45
45
|
* import {
|
|
46
|
+
* assertFalse,
|
|
47
|
+
* assertTrue,
|
|
46
48
|
* createEqRedacted,
|
|
47
49
|
* createRedacted,
|
|
48
50
|
* eqString,
|
|
@@ -57,8 +59,8 @@ export const isRedacted = (value) => typeof value === "object" &&
|
|
|
57
59
|
* using b = createRedacted("x" as ApiKey);
|
|
58
60
|
* using c = createRedacted("y" as ApiKey);
|
|
59
61
|
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
+
* assertTrue(eqRedactedApiKey(a, b));
|
|
63
|
+
* assertFalse(eqRedactedApiKey(a, c));
|
|
62
64
|
* ```
|
|
63
65
|
*/
|
|
64
66
|
export const createEqRedacted = (eq) => (x, y) => eq(revealRedacted(x), revealRedacted(y));
|
package/dist/src/Ref.d.ts
CHANGED
|
@@ -18,18 +18,18 @@
|
|
|
18
18
|
* ### Example
|
|
19
19
|
*
|
|
20
20
|
* ```ts
|
|
21
|
-
* import { createRef } from "@evolu/common";
|
|
21
|
+
* import { assertEqual, createRef } from "@evolu/common";
|
|
22
22
|
*
|
|
23
23
|
* const count = createRef(0);
|
|
24
24
|
* count.set(1);
|
|
25
25
|
* count.update((n) => n + 1);
|
|
26
|
-
*
|
|
26
|
+
* assertEqual(count.get(), 2);
|
|
27
27
|
* ```
|
|
28
28
|
*
|
|
29
29
|
* ### As a dependency
|
|
30
30
|
*
|
|
31
31
|
* ```ts
|
|
32
|
-
* import { createRef, type Ref } from "@evolu/common";
|
|
32
|
+
* import { assertEqual, createRef, type Ref } from "@evolu/common";
|
|
33
33
|
*
|
|
34
34
|
* interface CounterRefDep {
|
|
35
35
|
* readonly counterRef: Ref<number>;
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
*
|
|
38
38
|
* const deps: CounterRefDep = { counterRef: createRef(0) };
|
|
39
39
|
* deps.counterRef.update((count) => count + 1);
|
|
40
|
-
*
|
|
40
|
+
* assertEqual(deps.counterRef.get(), 1);
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
43
|
export interface Ref<T> {
|
package/dist/src/Relation.d.ts
CHANGED
|
@@ -40,7 +40,7 @@ import { NonNegativeInt, PositiveInt } from "./Type.ts";
|
|
|
40
40
|
* Use the default identity semantics.
|
|
41
41
|
*
|
|
42
42
|
* ```ts
|
|
43
|
-
* import { createRelation } from "@evolu/common";
|
|
43
|
+
* import { assertFalse, assertTrue, createRelation } from "@evolu/common";
|
|
44
44
|
*
|
|
45
45
|
* interface Socket {
|
|
46
46
|
* readonly id: string;
|
|
@@ -51,8 +51,8 @@ import { NonNegativeInt, PositiveInt } from "./Type.ts";
|
|
|
51
51
|
*
|
|
52
52
|
* relation.add(socket, "owner-1");
|
|
53
53
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
54
|
+
* assertTrue(relation.has(socket, "owner-1"));
|
|
55
|
+
* assertFalse(relation.has({ id: "socket-1" }, "owner-1"));
|
|
56
56
|
* ```
|
|
57
57
|
*
|
|
58
58
|
* ### Lookup-derived equality
|
|
@@ -60,7 +60,7 @@ import { NonNegativeInt, PositiveInt } from "./Type.ts";
|
|
|
60
60
|
* Use lookup-derived equality.
|
|
61
61
|
*
|
|
62
62
|
* ```ts
|
|
63
|
-
* import { createRelation } from "@evolu/common";
|
|
63
|
+
* import { assertTrue, createRelation } from "@evolu/common";
|
|
64
64
|
*
|
|
65
65
|
* interface Person {
|
|
66
66
|
* readonly id: string;
|
|
@@ -74,9 +74,7 @@ import { NonNegativeInt, PositiveInt } from "./Type.ts";
|
|
|
74
74
|
*
|
|
75
75
|
* relation.add({ id: "1", name: "Ada" }, { id: "admins" });
|
|
76
76
|
*
|
|
77
|
-
*
|
|
78
|
-
* true,
|
|
79
|
-
* );
|
|
77
|
+
* assertTrue(relation.has({ id: "1", name: "Grace" }, { id: "admins" }));
|
|
80
78
|
* ```
|
|
81
79
|
*
|
|
82
80
|
* @see {@link createRelation}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Relation.d.ts","sourceRoot":"","sources":["../../src/Relation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAGL,KAAK,MAAM,EAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EAEd,WAAW,EAEZ,MAAM,WAAW,CAAC;AAEnB
|
|
1
|
+
{"version":3,"file":"Relation.d.ts","sourceRoot":"","sources":["../../src/Relation.ts"],"names":[],"mappings":"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"}
|