@evolu/common 8.10.0 → 8.11.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/Config.d.ts +22 -22
- package/dist/src/Config.d.ts.map +1 -1
- package/dist/src/Console.d.ts +62 -7
- package/dist/src/Console.d.ts.map +1 -1
- package/dist/src/Console.js +20 -4
- package/dist/src/Crypto.d.ts +76 -4
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +55 -4
- package/dist/src/Error.d.ts +45 -0
- package/dist/src/Error.d.ts.map +1 -1
- package/dist/src/Error.js +69 -0
- package/dist/src/Fs.d.ts +92 -18
- package/dist/src/Fs.d.ts.map +1 -1
- package/dist/src/Fs.js +2 -0
- package/dist/src/Identicon.d.ts +2 -2
- package/dist/src/Identicon.js +2 -2
- package/dist/src/LeakDetector.d.ts +22 -3
- package/dist/src/LeakDetector.d.ts.map +1 -1
- package/dist/src/LeakDetector.js +12 -2
- package/dist/src/LockManager.d.ts +8 -0
- package/dist/src/LockManager.d.ts.map +1 -1
- package/dist/src/LockManager.js +6 -0
- package/dist/src/Object.d.ts.map +1 -1
- package/dist/src/Object.js +5 -0
- package/dist/src/Platform.d.ts +47 -7
- package/dist/src/Platform.d.ts.map +1 -1
- package/dist/src/Platform.js +24 -5
- package/dist/src/Random.d.ts +25 -2
- package/dist/src/Random.d.ts.map +1 -1
- package/dist/src/Random.js +14 -2
- package/dist/src/Resource.d.ts +156 -1
- package/dist/src/Resource.d.ts.map +1 -1
- package/dist/src/Resource.js +201 -72
- package/dist/src/Schedule.d.ts +11 -10
- package/dist/src/Schedule.d.ts.map +1 -1
- package/dist/src/Schedule.js +1 -1
- package/dist/src/Sqlite.d.ts +132 -16
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +63 -9
- package/dist/src/Task.d.ts +15 -4
- package/dist/src/Task.d.ts.map +1 -1
- package/dist/src/Task.js +41 -15
- package/dist/src/Test.d.ts +9 -0
- package/dist/src/Test.d.ts.map +1 -1
- package/dist/src/Test.js +4 -0
- package/dist/src/Time.d.ts +106 -9
- package/dist/src/Time.d.ts.map +1 -1
- package/dist/src/Time.js +55 -4
- package/dist/src/Type.d.ts +1455 -1310
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +1274 -517
- package/dist/src/WebSocket.d.ts +164 -13
- package/dist/src/WebSocket.d.ts.map +1 -1
- package/dist/src/WebSocket.js +133 -24
- package/dist/src/Worker.d.ts +90 -8
- package/dist/src/Worker.d.ts.map +1 -1
- package/dist/src/Worker.js +28 -2
- package/dist/src/index.d.ts +6 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -3
- package/dist/src/local-first/Db.d.ts +52 -3
- package/dist/src/local-first/Db.d.ts.map +1 -1
- package/dist/src/local-first/Db.js +412 -137
- package/dist/src/local-first/Evolu.d.ts +336 -211
- package/dist/src/local-first/Evolu.d.ts.map +1 -1
- package/dist/src/local-first/Evolu.js +102 -15
- package/dist/src/local-first/Owner.d.ts +13 -30
- package/dist/src/local-first/Owner.d.ts.map +1 -1
- package/dist/src/local-first/Owner.js +13 -30
- package/dist/src/local-first/Protocol.d.ts +94 -16
- package/dist/src/local-first/Protocol.d.ts.map +1 -1
- package/dist/src/local-first/Protocol.js +118 -38
- package/dist/src/local-first/Query.d.ts +8 -15
- package/dist/src/local-first/Query.d.ts.map +1 -1
- package/dist/src/local-first/Schema.d.ts +335 -21
- package/dist/src/local-first/Schema.d.ts.map +1 -1
- package/dist/src/local-first/Schema.js +214 -17
- package/dist/src/local-first/Shared.d.ts +537 -22
- package/dist/src/local-first/Shared.d.ts.map +1 -1
- package/dist/src/local-first/Shared.js +1437 -234
- package/dist/src/local-first/Storage.d.ts +192 -14
- package/dist/src/local-first/Storage.d.ts.map +1 -1
- package/dist/src/local-first/Storage.js +81 -20
- package/dist/src/local-first/Timestamp.d.ts +392 -41
- package/dist/src/local-first/Timestamp.d.ts.map +1 -1
- package/dist/src/local-first/Timestamp.js +403 -81
- package/dist/src/local-first/index.d.ts +0 -1
- package/dist/src/local-first/index.d.ts.map +1 -1
- package/dist/src/local-first/index.js +0 -1
- package/package.json +1 -1
- package/src/Assert.test.ts +2 -5
- package/src/Config.test.ts +2 -6
- package/src/Config.ts +133 -133
- package/src/Console.ts +62 -7
- package/src/Crypto.ts +76 -4
- package/src/Eq.test.ts +2 -3
- package/src/Error.test.ts +76 -3
- package/src/Error.ts +71 -0
- package/src/Fs.ts +92 -18
- package/src/Identicon.ts +2 -2
- package/src/LeakDetector.ts +22 -3
- package/src/LockManager.ts +8 -0
- package/src/Object.test.ts +27 -12
- package/src/Object.ts +5 -0
- package/src/Platform.ts +50 -8
- package/src/Random.ts +25 -2
- package/src/Resource.test.ts +837 -0
- package/src/Resource.ts +235 -15
- package/src/Schedule.test.ts +50 -12
- package/src/Schedule.ts +24 -14
- package/src/Sqlite.ts +137 -17
- package/src/Task.test.ts +189 -8
- package/src/Task.ts +56 -17
- package/src/Test.ts +9 -0
- package/src/Time.ts +106 -9
- package/src/Type.test.ts +946 -1028
- package/src/Type.ts +4195 -3136
- package/src/Types.test.ts +4 -14
- package/src/WebSocket.ts +313 -40
- package/src/Worker.ts +90 -8
- package/src/index.ts +15 -6
- package/src/local-first/Db.ts +644 -339
- package/src/local-first/Evolu.test.ts +686 -21
- package/src/local-first/Evolu.ts +450 -228
- package/src/local-first/Owner.ts +13 -30
- package/src/local-first/Protocol.test.ts +617 -10
- package/src/local-first/Protocol.ts +196 -72
- package/src/local-first/Query.ts +8 -15
- package/src/local-first/Schema.test.ts +143 -0
- package/src/local-first/Schema.ts +363 -24
- package/src/local-first/Shared.test.ts +7731 -559
- package/src/local-first/Shared.ts +2036 -267
- package/src/local-first/Storage.ts +218 -32
- package/src/local-first/Timestamp.test.ts +344 -70
- package/src/local-first/Timestamp.ts +434 -118
- package/src/local-first/index.ts +0 -1
- package/dist/src/local-first/Error.d.ts +0 -12
- package/dist/src/local-first/Error.d.ts.map +0 -1
- package/dist/src/local-first/Error.js +0 -6
- package/dist/src/local-first/LocalAuth.d.ts +0 -150
- package/dist/src/local-first/LocalAuth.d.ts.map +0 -1
- package/dist/src/local-first/LocalAuth.js +0 -179
- package/src/local-first/Error.ts +0 -17
- package/src/local-first/LocalAuth.ts +0 -457
|
@@ -41,6 +41,8 @@ import type { Callback } from "./Types.ts";
|
|
|
41
41
|
* );
|
|
42
42
|
* assertEqual(result, "example");
|
|
43
43
|
* ```
|
|
44
|
+
*
|
|
45
|
+
* @group Core
|
|
44
46
|
*/
|
|
45
47
|
export interface LockManagerDep {
|
|
46
48
|
readonly lockManager: LockManager;
|
|
@@ -57,6 +59,8 @@ export interface LockManagerDep {
|
|
|
57
59
|
* via internal namespacing, so tests can reuse the same lock names without
|
|
58
60
|
* contending through the global Web Locks. Query results are filtered to that
|
|
59
61
|
* private namespace and returned with the original visible names.
|
|
62
|
+
*
|
|
63
|
+
* @group Testing
|
|
60
64
|
*/
|
|
61
65
|
export declare const testCreateLockManager: (nativeLockManager?: LockManager) => LockManager;
|
|
62
66
|
/**
|
|
@@ -68,6 +72,8 @@ export declare const testCreateLockManager: (nativeLockManager?: LockManager) =>
|
|
|
68
72
|
* Leadership is held until the returned handle is disposed. Once released,
|
|
69
73
|
* another waiting caller may become the next leader. Waiting for leadership is
|
|
70
74
|
* abortable via the calling {@link Task}'s signal.
|
|
75
|
+
*
|
|
76
|
+
* @group Leader election
|
|
71
77
|
*/
|
|
72
78
|
export declare const acquireLeaderLock: (name: string) => Task<AsyncDisposable, never, LockManagerDep>;
|
|
73
79
|
/**
|
|
@@ -80,6 +86,8 @@ export declare const acquireLeaderLock: (name: string) => Task<AsyncDisposable,
|
|
|
80
86
|
* Leadership is held until the returned handle is disposed. Once released,
|
|
81
87
|
* another waiting caller may become the next leader. Waiting for leadership is
|
|
82
88
|
* abortable by disposing the returned handle.
|
|
89
|
+
*
|
|
90
|
+
* @group Leader election
|
|
83
91
|
*/
|
|
84
92
|
export declare const acquireLeaderLockCallback: (deps: LockManagerDep) => (name: string, callback: Callback<void>) => Disposable;
|
|
85
93
|
//# sourceMappingURL=LockManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LockManager.d.ts","sourceRoot":"","sources":["../../src/LockManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"LockManager.d.ts","sourceRoot":"","sources":["../../src/LockManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,uBACb,WAAW,KAC7B,WAwCF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,SACrB,MAAM,KAAG,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,cAAc,CAuB1D,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,SAC7B,cAAc,YACd,MAAM,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAG,UAsBzC,CAAC"}
|
package/dist/src/LockManager.js
CHANGED
|
@@ -19,6 +19,8 @@ import { createId } from "./Type.js";
|
|
|
19
19
|
* via internal namespacing, so tests can reuse the same lock names without
|
|
20
20
|
* contending through the global Web Locks. Query results are filtered to that
|
|
21
21
|
* private namespace and returned with the original visible names.
|
|
22
|
+
*
|
|
23
|
+
* @group Testing
|
|
22
24
|
*/
|
|
23
25
|
export const testCreateLockManager = (nativeLockManager = navigator.locks) => {
|
|
24
26
|
const namespace = createId({ randomBytes: createRandomBytes() });
|
|
@@ -54,6 +56,8 @@ export const testCreateLockManager = (nativeLockManager = navigator.locks) => {
|
|
|
54
56
|
* Leadership is held until the returned handle is disposed. Once released,
|
|
55
57
|
* another waiting caller may become the next leader. Waiting for leadership is
|
|
56
58
|
* abortable via the calling {@link Task}'s signal.
|
|
59
|
+
*
|
|
60
|
+
* @group Leader election
|
|
57
61
|
*/
|
|
58
62
|
export const acquireLeaderLock = (name) => async (run) => {
|
|
59
63
|
const acquisition = Promise.withResolvers();
|
|
@@ -81,6 +85,8 @@ export const acquireLeaderLock = (name) => async (run) => {
|
|
|
81
85
|
* Leadership is held until the returned handle is disposed. Once released,
|
|
82
86
|
* another waiting caller may become the next leader. Waiting for leadership is
|
|
83
87
|
* abortable by disposing the returned handle.
|
|
88
|
+
*
|
|
89
|
+
* @group Leader election
|
|
84
90
|
*/
|
|
85
91
|
export const acquireLeaderLockCallback = (deps) => (name, callback) => {
|
|
86
92
|
const abortController = new AbortController();
|
package/dist/src/Object.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Object.d.ts","sourceRoot":"","sources":["../../src/Object.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE5E,oEAAoE;AACpE,MAAM,MAAM,UAAU,GACpB,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,YAAY,GAAG,aAAa,CAAC;AAE7E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,UAgB7C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,aAAa,UACjB,OAAO,KACb,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"Object.d.ts","sourceRoot":"","sources":["../../src/Object.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Object.js
CHANGED
|
@@ -74,6 +74,11 @@ export const isPlainObject = (value) => {
|
|
|
74
74
|
const prototype = Object.getPrototypeOf(value);
|
|
75
75
|
if (prototype === null)
|
|
76
76
|
return true;
|
|
77
|
+
// This realm's Object.prototype has an immutable null prototype, so `in`
|
|
78
|
+
// checks the same own properties as the structural test below, faster.
|
|
79
|
+
if (prototype === Object.prototype) {
|
|
80
|
+
return "hasOwnProperty" in prototype && "isPrototypeOf" in prototype;
|
|
81
|
+
}
|
|
77
82
|
return (Object.getPrototypeOf(prototype) === null &&
|
|
78
83
|
Object.hasOwn(prototype, "hasOwnProperty") &&
|
|
79
84
|
Object.hasOwn(prototype, "isPrototypeOf"));
|
package/dist/src/Platform.d.ts
CHANGED
|
@@ -3,9 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Returns true if running in React Native with Hermes engine.
|
|
8
|
+
*
|
|
9
|
+
* @group Detection
|
|
10
|
+
*/
|
|
7
11
|
export declare const isHermes: boolean;
|
|
8
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Returns true if running in a server environment (no DOM).
|
|
14
|
+
*
|
|
15
|
+
* @group Detection
|
|
16
|
+
*/
|
|
9
17
|
export declare const isServer: boolean;
|
|
10
18
|
/**
|
|
11
19
|
* True outside production builds.
|
|
@@ -17,6 +25,8 @@ export declare const isServer: boolean;
|
|
|
17
25
|
* where no bundler ran, such as un-bundled browser ESM, where it fails closed
|
|
18
26
|
* to production behavior. Node.js reads it natively; React Native polyfills it.
|
|
19
27
|
* A missing `NODE_ENV` counts as development, matching React semantics.
|
|
28
|
+
*
|
|
29
|
+
* @group Detection
|
|
20
30
|
*/
|
|
21
31
|
export declare const isDev: boolean;
|
|
22
32
|
/**
|
|
@@ -28,6 +38,7 @@ export declare const isDev: boolean;
|
|
|
28
38
|
* Returns false in React Native even if Buffer is polyfilled, as we prefer
|
|
29
39
|
* native methods in that environment.
|
|
30
40
|
*
|
|
41
|
+
* @group Detection
|
|
31
42
|
* @see https://github.com/craftzdog/react-native-quick-base64#installation
|
|
32
43
|
*/
|
|
33
44
|
export declare const hasNodeBuffer: boolean;
|
|
@@ -40,24 +51,45 @@ export declare const hasNodeBuffer: boolean;
|
|
|
40
51
|
* if an onComplete callback is used.
|
|
41
52
|
*
|
|
42
53
|
* https://react.dev/reference/react-dom/flushSync
|
|
54
|
+
*
|
|
55
|
+
* @group Integration
|
|
43
56
|
*/
|
|
44
57
|
export type FlushSync = (callback: () => void) => void;
|
|
58
|
+
/**
|
|
59
|
+
* Dependency wrapper for {@link FlushSync}.
|
|
60
|
+
*
|
|
61
|
+
* @group Integration
|
|
62
|
+
*/
|
|
45
63
|
export interface FlushSyncDep {
|
|
46
64
|
readonly flushSync: FlushSync;
|
|
47
65
|
}
|
|
48
66
|
/**
|
|
49
67
|
* Reload the app in a platform-specific way.
|
|
50
68
|
*
|
|
51
|
-
*
|
|
52
|
-
* the
|
|
69
|
+
* On the web, Evolu reloads tabs of a build when another build of the app waits
|
|
70
|
+
* for the local databases, so they load the build the server now serves. It can
|
|
71
|
+
* also clear in-memory state after persistent storage was purged; it does not
|
|
72
|
+
* purge storage itself.
|
|
53
73
|
*
|
|
54
|
-
* - Web:
|
|
74
|
+
* - Web: Reloads the page, or loads the specified URL instead
|
|
55
75
|
* - React Native: Restarts the app (URL ignored)
|
|
76
|
+
*
|
|
77
|
+
* @group Integration
|
|
56
78
|
*/
|
|
57
79
|
export type ReloadApp = (url?: string) => void;
|
|
80
|
+
/**
|
|
81
|
+
* Dependency wrapper for {@link ReloadApp}.
|
|
82
|
+
*
|
|
83
|
+
* @group Integration
|
|
84
|
+
*/
|
|
58
85
|
export interface ReloadAppDep {
|
|
59
86
|
readonly reloadApp: ReloadApp;
|
|
60
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Records platform global errors until disposed.
|
|
90
|
+
*
|
|
91
|
+
* @group Testing
|
|
92
|
+
*/
|
|
61
93
|
export interface TestGlobalErrors extends Disposable {
|
|
62
94
|
readonly errors: ReadonlyArray<unknown>;
|
|
63
95
|
readonly next: () => Promise<unknown>;
|
|
@@ -73,8 +105,16 @@ export interface TestGlobalErrors extends Disposable {
|
|
|
73
105
|
*/
|
|
74
106
|
readonly settle: () => Promise<ReadonlyArray<unknown>>;
|
|
75
107
|
}
|
|
76
|
-
/**
|
|
108
|
+
/**
|
|
109
|
+
* Records platform global uncaught-error reporting until disposed.
|
|
110
|
+
*
|
|
111
|
+
* @group Testing
|
|
112
|
+
*/
|
|
77
113
|
export declare const testGlobalUncaughtErrors: () => TestGlobalErrors;
|
|
78
|
-
/**
|
|
114
|
+
/**
|
|
115
|
+
* Records platform global unhandled-rejection reporting until disposed.
|
|
116
|
+
*
|
|
117
|
+
* @group Testing
|
|
118
|
+
*/
|
|
79
119
|
export declare const testGlobalUnhandledRejections: () => TestGlobalErrors;
|
|
80
120
|
//# sourceMappingURL=Platform.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH
|
|
1
|
+
{"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,eAAO,MAAM,QAAQ,SAAiC,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,SAAkC,CAAC;AAExD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,KAAK,SAGyB,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,SAC6B,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;AAEvD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAE/C;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC;;;;;;;;;OASG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;CACxD;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,QAAO,gBACF,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,QAAO,gBACH,CAAC"}
|
package/dist/src/Platform.js
CHANGED
|
@@ -3,9 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Returns true if running in React Native with Hermes engine.
|
|
8
|
+
*
|
|
9
|
+
* @group Detection
|
|
10
|
+
*/
|
|
7
11
|
export const isHermes = "HermesInternal" in globalThis;
|
|
8
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Returns true if running in a server environment (no DOM).
|
|
14
|
+
*
|
|
15
|
+
* @group Detection
|
|
16
|
+
*/
|
|
9
17
|
export const isServer = typeof document === "undefined";
|
|
10
18
|
/**
|
|
11
19
|
* True outside production builds.
|
|
@@ -17,6 +25,8 @@ export const isServer = typeof document === "undefined";
|
|
|
17
25
|
* where no bundler ran, such as un-bundled browser ESM, where it fails closed
|
|
18
26
|
* to production behavior. Node.js reads it natively; React Native polyfills it.
|
|
19
27
|
* A missing `NODE_ENV` counts as development, matching React semantics.
|
|
28
|
+
*
|
|
29
|
+
* @group Detection
|
|
20
30
|
*/
|
|
21
31
|
export const isDev = typeof process === "undefined"
|
|
22
32
|
? false
|
|
@@ -30,14 +40,23 @@ export const isDev = typeof process === "undefined"
|
|
|
30
40
|
* Returns false in React Native even if Buffer is polyfilled, as we prefer
|
|
31
41
|
* native methods in that environment.
|
|
32
42
|
*
|
|
43
|
+
* @group Detection
|
|
33
44
|
* @see https://github.com/craftzdog/react-native-quick-base64#installation
|
|
34
45
|
*/
|
|
35
46
|
export const hasNodeBuffer = !isHermes && typeof globalThis.Buffer !== "undefined";
|
|
36
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* Records platform global uncaught-error reporting until disposed.
|
|
49
|
+
*
|
|
50
|
+
* @group Testing
|
|
51
|
+
*/
|
|
37
52
|
export const testGlobalUncaughtErrors = () => createTestGlobalErrors("uncaughtErrors");
|
|
38
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Records platform global unhandled-rejection reporting until disposed.
|
|
55
|
+
*
|
|
56
|
+
* @group Testing
|
|
57
|
+
*/
|
|
39
58
|
export const testGlobalUnhandledRejections = () => createTestGlobalErrors("unhandledRejection");
|
|
40
|
-
const settleSentinel = new Error("TestGlobalErrors.settle sentinel");
|
|
59
|
+
const settleSentinel = /*#__PURE__*/ new Error("TestGlobalErrors.settle sentinel");
|
|
41
60
|
const createTestGlobalErrors = (kind) => {
|
|
42
61
|
const nodeEvent = kind === "uncaughtErrors" ? "uncaughtException" : "unhandledRejection";
|
|
43
62
|
const webEvent = kind === "uncaughtErrors" ? "error" : "unhandledrejection";
|
package/dist/src/Random.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ import type { Brand } from "./Brand.ts";
|
|
|
9
9
|
* A random floating point number in [0, 1).
|
|
10
10
|
*
|
|
11
11
|
* Branded to distinguish random values from arbitrary numbers.
|
|
12
|
+
*
|
|
13
|
+
* @group Core
|
|
12
14
|
*/
|
|
13
15
|
export type RandomNumber = number & Brand<"RandomNumber">;
|
|
14
16
|
/**
|
|
@@ -40,20 +42,33 @@ export type RandomNumber = number & Brand<"RandomNumber">;
|
|
|
40
42
|
* const secondTestRandom = testCreateRandom("test");
|
|
41
43
|
* assertEqual(firstTestRandom.next(), secondTestRandom.next());
|
|
42
44
|
* ```
|
|
45
|
+
*
|
|
46
|
+
* @group Core
|
|
43
47
|
*/
|
|
44
48
|
export interface Random {
|
|
45
49
|
/** Returns a floating point number in [0, 1). Just like Math.random(). */
|
|
46
50
|
readonly next: () => RandomNumber;
|
|
47
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Dependency wrapper for {@link Random}.
|
|
54
|
+
*
|
|
55
|
+
* @group Core
|
|
56
|
+
*/
|
|
48
57
|
export interface RandomDep {
|
|
49
58
|
readonly random: Random;
|
|
50
59
|
}
|
|
51
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* Creates a {@link Random} using Math.random().
|
|
62
|
+
*
|
|
63
|
+
* @group Core
|
|
64
|
+
*/
|
|
52
65
|
export declare const createRandom: () => Random;
|
|
53
66
|
/**
|
|
54
67
|
* Creates a seeded {@link Random} for deterministic tests.
|
|
55
68
|
*
|
|
56
69
|
* Default seed "evolu".
|
|
70
|
+
*
|
|
71
|
+
* @group Testing
|
|
57
72
|
*/
|
|
58
73
|
export declare const testCreateRandom: (seed?: string) => Random;
|
|
59
74
|
/**
|
|
@@ -61,17 +76,25 @@ export declare const testCreateRandom: (seed?: string) => Random;
|
|
|
61
76
|
* provided by the NPM `random` package.
|
|
62
77
|
*
|
|
63
78
|
* https://github.com/transitive-bullshit/random
|
|
79
|
+
*
|
|
80
|
+
* @group Core
|
|
64
81
|
*/
|
|
65
82
|
export interface RandomLibDep {
|
|
66
83
|
readonly randomLib: RandomLib;
|
|
67
84
|
}
|
|
68
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* Creates a random number generator from the NPM `random` package.
|
|
87
|
+
*
|
|
88
|
+
* @group Core
|
|
89
|
+
*/
|
|
69
90
|
export declare const createRandomLib: () => RandomLib;
|
|
70
91
|
/**
|
|
71
92
|
* Creates a seeded random number generator from the NPM `random` package for
|
|
72
93
|
* deterministic tests.
|
|
73
94
|
*
|
|
74
95
|
* Default seed "evolu".
|
|
96
|
+
*
|
|
97
|
+
* @group Testing
|
|
75
98
|
*/
|
|
76
99
|
export declare const testCreateRandomLib: (seed?: string) => RandomLib;
|
|
77
100
|
//# sourceMappingURL=Random.d.ts.map
|
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
|
|
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;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,MAAM;IACrB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,YAAY,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAO,MAE9B,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,qBAAqB,MAKjD,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAO,SAA4B,CAAC;AAEhE;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,qBAAqB,SAChC,CAAC"}
|
package/dist/src/Random.js
CHANGED
|
@@ -4,7 +4,11 @@
|
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
6
|
import { Random as RandomLib } from "random";
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Creates a {@link Random} using Math.random().
|
|
9
|
+
*
|
|
10
|
+
* @group Core
|
|
11
|
+
*/
|
|
8
12
|
export const createRandom = () => ({
|
|
9
13
|
next: () => Math.random(),
|
|
10
14
|
});
|
|
@@ -12,6 +16,8 @@ export const createRandom = () => ({
|
|
|
12
16
|
* Creates a seeded {@link Random} for deterministic tests.
|
|
13
17
|
*
|
|
14
18
|
* Default seed "evolu".
|
|
19
|
+
*
|
|
20
|
+
* @group Testing
|
|
15
21
|
*/
|
|
16
22
|
export const testCreateRandom = (seed = "evolu") => {
|
|
17
23
|
const random = new RandomLib(seed);
|
|
@@ -19,12 +25,18 @@ export const testCreateRandom = (seed = "evolu") => {
|
|
|
19
25
|
next: () => random.next(),
|
|
20
26
|
};
|
|
21
27
|
};
|
|
22
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Creates a random number generator from the NPM `random` package.
|
|
30
|
+
*
|
|
31
|
+
* @group Core
|
|
32
|
+
*/
|
|
23
33
|
export const createRandomLib = () => new RandomLib();
|
|
24
34
|
/**
|
|
25
35
|
* Creates a seeded random number generator from the NPM `random` package for
|
|
26
36
|
* deterministic tests.
|
|
27
37
|
*
|
|
28
38
|
* Default seed "evolu".
|
|
39
|
+
*
|
|
40
|
+
* @group Testing
|
|
29
41
|
*/
|
|
30
42
|
export const testCreateRandomLib = (seed = "evolu") => new RandomLib(seed);
|
package/dist/src/Resource.d.ts
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Concurrency-safe helpers for efficient reuse of disposable
|
|
2
|
+
* Concurrency-safe helpers for efficient reuse and replacement of disposable
|
|
3
|
+
* resources.
|
|
4
|
+
*
|
|
5
|
+
* ## Replacement policies
|
|
6
|
+
*
|
|
7
|
+
* Replacing a live resource has two policies.
|
|
8
|
+
*
|
|
9
|
+
* Exclusive replacement disposes the current resource and then creates the
|
|
10
|
+
* next, so at most one exists and there is an observable gap with none.
|
|
11
|
+
* {@link ResettableResource} implements it. Leases do not fit this policy: a
|
|
12
|
+
* reset is requested precisely when holders are stuck on a dead resource, so
|
|
13
|
+
* waiting for them inverts the purpose, and revoking them is safe only when the
|
|
14
|
+
* resource's own API is total after disposal, in which case a lease adds
|
|
15
|
+
* nothing.
|
|
16
|
+
*
|
|
17
|
+
* Overlapping replacement creates the next generation first and disposes the
|
|
18
|
+
* previous one when its last lease is released, so work in progress finishes on
|
|
19
|
+
* the generation it started with. It keeps the old generation when creation
|
|
20
|
+
* fails, at the cost of both existing for a while. It is not implemented. It
|
|
21
|
+
* belongs on {@link SharedResource} as an invalidate operation: mark the current
|
|
22
|
+
* generation stale, stop leasing it, dispose it on its last release, and create
|
|
23
|
+
* the next on the next acquire. Before that can ship,
|
|
24
|
+
* {@link SharedResourceByKey} must stop removing a key when its resource is
|
|
25
|
+
* disposed, and {@link SharedResourceByKeyWithClaims} must stop keeping one
|
|
26
|
+
* resource object per key for the lifetime of its claims.
|
|
3
27
|
*
|
|
4
28
|
* @module
|
|
5
29
|
*/
|
|
@@ -27,6 +51,7 @@ import { type DistributiveOmit } from "./Types.ts";
|
|
|
27
51
|
* APIs let that error propagate as a defect. The purpose of resource helpers is
|
|
28
52
|
* to guarantee cleanup and prevent leaks.
|
|
29
53
|
*
|
|
54
|
+
* @see {@link ResettableResource}
|
|
30
55
|
* @see {@link SharedResource}
|
|
31
56
|
* @see {@link createSharedResource}
|
|
32
57
|
*/
|
|
@@ -278,6 +303,131 @@ export interface SharedResourceOptions {
|
|
|
278
303
|
* the Run tree.
|
|
279
304
|
*/
|
|
280
305
|
export declare const createSharedResource: <T extends Resource, D>(create: Task<T, never, D>, { idleDisposeAfter, onDisposed }?: SharedResourceOptions) => Task<SharedResource<T>, never, D>;
|
|
306
|
+
/**
|
|
307
|
+
* A {@link Resource} reset in place.
|
|
308
|
+
*
|
|
309
|
+
* Holds one current resource and resets it on request: the current resource is
|
|
310
|
+
* disposed first, then `create` runs again. At most one resource exists, and
|
|
311
|
+
* there is an observable gap with none. Consumers keep the ResettableResource
|
|
312
|
+
* and read the current resource through {@link ResettableResource.get | get}, so
|
|
313
|
+
* a reset needs no re-registration. A resource that cannot reset itself is the
|
|
314
|
+
* case for it. One that can, as `WebSocket.reconnect` does, keeps a stable
|
|
315
|
+
* identity and needs no wrapper.
|
|
316
|
+
*
|
|
317
|
+
* The ResettableResource keeps a stable identity while its current resource
|
|
318
|
+
* changes. {@link SharedResourceByKeyWithClaims} can retain it directly;
|
|
319
|
+
* consumers read the current resource through `get`.
|
|
320
|
+
*
|
|
321
|
+
* Repeated async disposal calls await the same cleanup and preserve any
|
|
322
|
+
* disposal failure.
|
|
323
|
+
*
|
|
324
|
+
* ### Example
|
|
325
|
+
*
|
|
326
|
+
* ```ts
|
|
327
|
+
* import {
|
|
328
|
+
* assertEqual,
|
|
329
|
+
* assertSame,
|
|
330
|
+
* createRun,
|
|
331
|
+
* createResettableResource,
|
|
332
|
+
* ok,
|
|
333
|
+
* type Task,
|
|
334
|
+
* } from "@evolu/common";
|
|
335
|
+
*
|
|
336
|
+
* interface Connection extends Disposable {
|
|
337
|
+
* readonly id: number;
|
|
338
|
+
* readonly isClosed: () => boolean;
|
|
339
|
+
* }
|
|
340
|
+
*
|
|
341
|
+
* let nextId = 1;
|
|
342
|
+
* const createConnection: Task<Connection> = () => {
|
|
343
|
+
* const id = nextId++;
|
|
344
|
+
* let isClosed = false;
|
|
345
|
+
* return ok({
|
|
346
|
+
* id,
|
|
347
|
+
* isClosed: () => isClosed,
|
|
348
|
+
* [Symbol.dispose]: () => {
|
|
349
|
+
* isClosed = true;
|
|
350
|
+
* },
|
|
351
|
+
* });
|
|
352
|
+
* };
|
|
353
|
+
*
|
|
354
|
+
* await using run = createRun();
|
|
355
|
+
* await using connection = await run.ok(
|
|
356
|
+
* createResettableResource(createConnection),
|
|
357
|
+
* );
|
|
358
|
+
* const first = connection.get();
|
|
359
|
+
* assertEqual(first?.id, 1);
|
|
360
|
+
*
|
|
361
|
+
* await run.ok(connection.reset(first));
|
|
362
|
+
* assertSame(first?.isClosed(), true);
|
|
363
|
+
* assertEqual(connection.get()?.id, 2);
|
|
364
|
+
* ```
|
|
365
|
+
*/
|
|
366
|
+
export interface ResettableResource<T extends Resource> extends AsyncDisposable {
|
|
367
|
+
/**
|
|
368
|
+
* Returns the current resource, or `undefined` when there is none: while a
|
|
369
|
+
* reset is in progress, after a reset whose creation aborted, and after
|
|
370
|
+
* disposal. Callers treat every absence alike, as the resource's own
|
|
371
|
+
* not-ready state.
|
|
372
|
+
*/
|
|
373
|
+
readonly get: () => BorrowedResource<T> | undefined;
|
|
374
|
+
/**
|
|
375
|
+
* Resets the current resource: disposes it, then creates the next one.
|
|
376
|
+
*
|
|
377
|
+
* A reset is requested because `observed` misbehaved, and it runs only while
|
|
378
|
+
* `observed` is still current or there is no current resource. A request that
|
|
379
|
+
* finds a different resource current returns without resetting, so every
|
|
380
|
+
* observer of one dead resource shares one reset, however late its request
|
|
381
|
+
* arrives. An `observed` of `undefined` is an observation of absence, as
|
|
382
|
+
* {@link ResettableResource.get | get} returns during a reset: the request
|
|
383
|
+
* runs only while nothing is current, so it retries an aborted creation and
|
|
384
|
+
* skips once a replacement exists.
|
|
385
|
+
*
|
|
386
|
+
* Resets are serialized. Owner disposal aborts a pending reset with
|
|
387
|
+
* `runDisposedAbortReason`, and a resource that `create` returns after
|
|
388
|
+
* disposal started is disposed and never becomes current.
|
|
389
|
+
*
|
|
390
|
+
* Resets follow the resource-owned {@link Run}'s lifecycle: an abort request
|
|
391
|
+
* can cancel them, and calling reset after that Run starts disposal is a
|
|
392
|
+
* programmer error. Aborting the caller's {@link Fiber} does not cancel a
|
|
393
|
+
* started reset; dependencies remain those captured at creation.
|
|
394
|
+
*/
|
|
395
|
+
readonly reset: (observed: BorrowedResource<T> | undefined) => Task<void>;
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Creates {@link ResettableResource}.
|
|
399
|
+
*
|
|
400
|
+
* The first resource is created before this Task returns; if that creation
|
|
401
|
+
* aborts, nothing is left running. If the caller's Fiber aborts during initial
|
|
402
|
+
* creation, this Task waits for creation to settle, disposes any created
|
|
403
|
+
* resource, and returns the abort instead of a resource.
|
|
404
|
+
*
|
|
405
|
+
* The `create` Task must not fail: the previous resource is already disposed
|
|
406
|
+
* when it runs, so a failure would leave nothing to fall back to. Handle
|
|
407
|
+
* recoverable failures inside `create`, or return a resource whose state models
|
|
408
|
+
* them.
|
|
409
|
+
*
|
|
410
|
+
* The resource's own API must model its not-ready state, as a reconnecting
|
|
411
|
+
* connection models "connecting": `get` returns `undefined` during a reset, and
|
|
412
|
+
* callers treat that absence the same way. A resource whose API assumes
|
|
413
|
+
* readiness gains nothing here; every caller would rebuild that state around
|
|
414
|
+
* it.
|
|
415
|
+
*
|
|
416
|
+
* As with {@link createSharedResource}, a returned resource must be live and
|
|
417
|
+
* independently owned, and `create` runs on a Run created from the Run that
|
|
418
|
+
* executes this Task, so dependencies are captured at creation time.
|
|
419
|
+
*
|
|
420
|
+
* Every successful `create` invocation must return a fresh object identity,
|
|
421
|
+
* never one returned earlier. A reset skips when the observed resource is no
|
|
422
|
+
* longer current, and that comparison is by identity; a reused object makes a
|
|
423
|
+
* stale observation match the replacement and reset it again.
|
|
424
|
+
*
|
|
425
|
+
* A reset runs `create` and the resource's disposer while holding a
|
|
426
|
+
* non-reentrant lock. Neither may directly or transitively await another
|
|
427
|
+
* {@link ResettableResource.reset | reset} of this ResettableResource, because
|
|
428
|
+
* that reset waits for the same lock.
|
|
429
|
+
*/
|
|
430
|
+
export declare const createResettableResource: <T extends Resource, D>(create: Task<T, never, D>) => Task<ResettableResource<T>, never, D>;
|
|
281
431
|
/**
|
|
282
432
|
* Shared {@link Resource}s keyed by logical identity.
|
|
283
433
|
*
|
|
@@ -487,6 +637,11 @@ export declare function createSharedResourceByKey<K, T extends Resource, D, L =
|
|
|
487
637
|
* leases by key and the application does not need to associate those leases
|
|
488
638
|
* with logical owners.
|
|
489
639
|
*
|
|
640
|
+
* One resource object per key is kept for the lifetime of its claims, and
|
|
641
|
+
* callbacks receive that object. A {@link ResettableResource} can be retained
|
|
642
|
+
* directly because its identity is stable; consumers read its current resource
|
|
643
|
+
* through {@link ResettableResource.get | get}.
|
|
644
|
+
*
|
|
490
645
|
* Two accounts can share a relay connection while one also uses a local-network
|
|
491
646
|
* transport:
|
|
492
647
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Resource.d.ts","sourceRoot":"","sources":["../../src/Resource.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Resource.d.ts","sourceRoot":"","sources":["../../src/Resource.ts"],"names":[],"mappings":"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"}
|