@evolu/common 8.0.0-next.4 → 8.0.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 +279 -173
- package/dist/src/Array.d.ts.map +1 -1
- package/dist/src/Array.js +105 -101
- package/dist/src/Assert.d.ts +44 -44
- package/dist/src/Assert.d.ts.map +1 -1
- package/dist/src/Assert.js +44 -32
- package/dist/src/BigInt.d.ts +6 -3
- package/dist/src/BigInt.d.ts.map +1 -1
- package/dist/src/BigInt.js +5 -2
- package/dist/src/Brand.d.ts +27 -40
- package/dist/src/Brand.d.ts.map +1 -1
- package/dist/src/Buffer.d.ts +27 -11
- package/dist/src/Buffer.d.ts.map +1 -1
- package/dist/src/Cache.d.ts +9 -4
- package/dist/src/Cache.d.ts.map +1 -1
- package/dist/src/Cache.js +8 -3
- package/dist/src/Callbacks.d.ts +30 -19
- package/dist/src/Callbacks.d.ts.map +1 -1
- package/dist/src/Console.d.ts +145 -66
- package/dist/src/Console.d.ts.map +1 -1
- package/dist/src/Console.js +91 -43
- package/dist/src/Crypto.d.ts +85 -42
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +44 -20
- package/dist/src/Eq.d.ts +87 -21
- package/dist/src/Eq.d.ts.map +1 -1
- package/dist/src/Eq.js +67 -19
- package/dist/src/Error.d.ts +5 -3
- package/dist/src/Error.d.ts.map +1 -1
- package/dist/src/Error.js +16 -0
- package/dist/src/Function.d.ts +119 -58
- package/dist/src/Function.d.ts.map +1 -1
- package/dist/src/Function.js +86 -43
- package/dist/src/Http.d.ts +394 -0
- package/dist/src/Http.d.ts.map +1 -0
- package/dist/src/Http.js +102 -0
- package/dist/src/Identicon.d.ts +16 -7
- package/dist/src/Identicon.d.ts.map +1 -1
- package/dist/src/Identicon.js +14 -5
- package/dist/src/LeakDetector.d.ts +88 -0
- package/dist/src/LeakDetector.d.ts.map +1 -0
- package/dist/src/LeakDetector.js +86 -0
- package/dist/src/LockManager.d.ts +18 -9
- package/dist/src/LockManager.d.ts.map +1 -1
- package/dist/src/LockManager.js +7 -8
- package/dist/src/Lookup.d.ts +43 -13
- package/dist/src/Lookup.d.ts.map +1 -1
- package/dist/src/Lookup.js +28 -8
- package/dist/src/Microtask.d.ts +1 -1
- package/dist/src/Microtask.d.ts.map +1 -1
- package/dist/src/Microtask.js +3 -7
- package/dist/src/Number.d.ts +49 -13
- package/dist/src/Number.d.ts.map +1 -1
- package/dist/src/Number.js +34 -5
- package/dist/src/Object.d.ts +160 -40
- package/dist/src/Object.d.ts.map +1 -1
- package/dist/src/Object.js +92 -46
- package/dist/src/Option.d.ts +10 -7
- package/dist/src/Option.d.ts.map +1 -1
- package/dist/src/Option.js +9 -6
- package/dist/src/Order.d.ts +21 -21
- package/dist/src/Order.d.ts.map +1 -1
- package/dist/src/Order.js +18 -21
- package/dist/src/Platform.d.ts +31 -0
- package/dist/src/Platform.d.ts.map +1 -1
- package/dist/src/Platform.js +98 -0
- package/dist/src/Random.d.ts +32 -17
- package/dist/src/Random.d.ts.map +1 -1
- package/dist/src/Random.js +12 -8
- package/dist/src/Redacted.d.ts +43 -29
- package/dist/src/Redacted.d.ts.map +1 -1
- package/dist/src/Redacted.js +14 -3
- package/dist/src/Ref.d.ts +11 -3
- package/dist/src/Ref.d.ts.map +1 -1
- package/dist/src/Ref.js +2 -2
- package/dist/src/RefCount.d.ts +2 -6
- package/dist/src/RefCount.d.ts.map +1 -1
- package/dist/src/RefCount.js +33 -90
- package/dist/src/Relation.d.ts +70 -5
- package/dist/src/Relation.d.ts.map +1 -1
- package/dist/src/Relation.js +77 -2
- package/dist/src/Resource.d.ts +590 -155
- package/dist/src/Resource.d.ts.map +1 -1
- package/dist/src/Resource.js +592 -343
- package/dist/src/Result.d.ts +838 -191
- package/dist/src/Result.d.ts.map +1 -1
- package/dist/src/Result.js +163 -102
- package/dist/src/Schedule.d.ts +684 -231
- package/dist/src/Schedule.d.ts.map +1 -1
- package/dist/src/Schedule.js +766 -295
- package/dist/src/Set.d.ts +89 -40
- package/dist/src/Set.d.ts.map +1 -1
- package/dist/src/Set.js +50 -29
- package/dist/src/Sqlite.d.ts +29 -72
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +41 -46
- package/dist/src/StackTrace.d.ts +40 -0
- package/dist/src/StackTrace.d.ts.map +1 -0
- package/dist/src/StackTrace.js +140 -0
- package/dist/src/Store.d.ts +5 -4
- package/dist/src/Store.d.ts.map +1 -1
- package/dist/src/Store.js +5 -4
- package/dist/src/String.d.ts +7 -1
- package/dist/src/String.d.ts.map +1 -1
- package/dist/src/String.js +20 -7
- package/dist/src/Task.d.ts +3572 -1770
- package/dist/src/Task.d.ts.map +1 -1
- package/dist/src/Task.js +1879 -1274
- package/dist/src/Test.d.ts +17 -125
- package/dist/src/Test.d.ts.map +1 -1
- package/dist/src/Test.js +17 -68
- package/dist/src/Time.d.ts +108 -49
- package/dist/src/Time.d.ts.map +1 -1
- package/dist/src/Time.js +172 -73
- package/dist/src/Type.d.ts +3542 -1926
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +3070 -1784
- package/dist/src/Types.d.ts +200 -108
- package/dist/src/Types.d.ts.map +1 -1
- package/dist/src/Types.js +39 -8
- package/dist/src/WebSocket.d.ts +48 -23
- package/dist/src/WebSocket.d.ts.map +1 -1
- package/dist/src/WebSocket.js +15 -6
- package/dist/src/Worker.d.ts +94 -36
- package/dist/src/Worker.d.ts.map +1 -1
- package/dist/src/Worker.js +58 -24
- package/dist/src/index.d.ts +55 -52
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/intl/cs.d.ts +94 -0
- package/dist/src/intl/cs.d.ts.map +1 -0
- package/dist/src/intl/cs.js +220 -0
- package/dist/src/intl/index.d.ts +7 -0
- package/dist/src/intl/index.d.ts.map +1 -0
- package/dist/src/intl/index.js +6 -0
- package/dist/src/local-first/Db.d.ts +12 -8
- package/dist/src/local-first/Db.d.ts.map +1 -1
- package/dist/src/local-first/Db.js +109 -132
- package/dist/src/local-first/Error.d.ts +4 -4
- package/dist/src/local-first/Evolu.d.ts +338 -92
- package/dist/src/local-first/Evolu.d.ts.map +1 -1
- package/dist/src/local-first/Evolu.js +47 -55
- package/dist/src/local-first/LocalAuth.d.ts +4 -4
- package/dist/src/local-first/LocalAuth.d.ts.map +1 -1
- package/dist/src/local-first/Owner.d.ts +61 -24
- package/dist/src/local-first/Owner.d.ts.map +1 -1
- package/dist/src/local-first/Owner.js +45 -8
- package/dist/src/local-first/Protocol.d.ts +44 -31
- package/dist/src/local-first/Protocol.d.ts.map +1 -1
- package/dist/src/local-first/Protocol.js +36 -13
- package/dist/src/local-first/Query.d.ts +147 -62
- package/dist/src/local-first/Query.d.ts.map +1 -1
- package/dist/src/local-first/Query.js +112 -58
- package/dist/src/local-first/Relay.d.ts +44 -14
- package/dist/src/local-first/Relay.d.ts.map +1 -1
- package/dist/src/local-first/Schema.d.ts +92 -41
- package/dist/src/local-first/Schema.d.ts.map +1 -1
- package/dist/src/local-first/Schema.js +25 -8
- package/dist/src/local-first/Shared.d.ts +23 -21
- package/dist/src/local-first/Shared.d.ts.map +1 -1
- package/dist/src/local-first/Shared.js +100 -57
- package/dist/src/local-first/Storage.d.ts +53 -32
- package/dist/src/local-first/Storage.d.ts.map +1 -1
- package/dist/src/local-first/Storage.js +194 -234
- package/dist/src/local-first/Timestamp.d.ts +21 -21
- package/dist/src/local-first/Timestamp.d.ts.map +1 -1
- package/dist/src/local-first/Timestamp.js +2 -2
- package/dist/src/local-first/index.d.ts +11 -11
- package/package.json +14 -13
- package/src/Array.ts +306 -205
- package/src/Assert.ts +54 -69
- package/src/BigInt.ts +6 -3
- package/src/Brand.ts +27 -40
- package/src/Buffer.ts +28 -12
- package/src/Cache.ts +9 -4
- package/src/Callbacks.ts +30 -19
- package/src/Console.ts +156 -84
- package/src/Crypto.ts +83 -41
- package/src/Eq.ts +95 -22
- package/src/Error.ts +8 -4
- package/src/Function.ts +167 -59
- package/src/Http.ts +549 -0
- package/src/Identicon.ts +16 -7
- package/src/LeakDetector.ts +182 -0
- package/src/LockManager.ts +43 -39
- package/src/Lookup.ts +62 -28
- package/src/Microtask.ts +19 -23
- package/src/Number.ts +64 -12
- package/src/Object.ts +173 -49
- package/src/Option.ts +10 -7
- package/src/Order.ts +23 -21
- package/src/Platform.ts +136 -0
- package/src/Polyfills.ts +6 -12
- package/src/Random.ts +32 -19
- package/src/Redacted.ts +44 -30
- package/src/Ref.ts +14 -6
- package/src/RefCount.ts +38 -80
- package/src/Relation.ts +202 -10
- package/src/Resource.ts +1199 -591
- package/src/Result.ts +930 -271
- package/src/Schedule.ts +859 -343
- package/src/Set.ts +89 -40
- package/src/Sqlite.ts +144 -138
- package/src/StackTrace.ts +230 -0
- package/src/Store.ts +8 -7
- package/src/String.ts +22 -5
- package/src/Task.ts +5101 -2832
- package/src/Test.ts +20 -168
- package/src/Time.ts +293 -90
- package/src/Type.ts +10034 -4117
- package/src/Types.ts +227 -110
- package/src/WebSocket.ts +64 -36
- package/src/Worker.ts +180 -72
- package/src/index.ts +55 -52
- package/src/intl/cs.ts +388 -0
- package/src/intl/index.ts +7 -0
- package/src/local-first/Db.ts +152 -179
- package/src/local-first/Error.ts +4 -4
- package/src/local-first/Evolu.ts +495 -250
- package/src/local-first/LocalAuth.ts +6 -12
- package/src/local-first/Owner.ts +58 -21
- package/src/local-first/Protocol.ts +49 -31
- package/src/local-first/Query.ts +146 -61
- package/src/local-first/Relay.ts +51 -21
- package/src/local-first/Schema.ts +109 -51
- package/src/local-first/Shared.ts +266 -226
- package/src/local-first/Storage.ts +266 -264
- package/src/local-first/Timestamp.ts +25 -18
- package/src/local-first/index.ts +11 -11
- package/dist/src/Skiplist.d.ts +0 -28
- package/dist/src/Skiplist.d.ts.map +0 -1
- package/dist/src/Skiplist.js +0 -64
- package/dist/src/Tracer.d.ts +0 -48
- package/dist/src/Tracer.d.ts.map +0 -1
- package/dist/src/Tracer.js +0 -6
- package/src/Skiplist.ts +0 -108
- package/src/Tracer.ts +0 -54
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocket.d.ts","sourceRoot":"","sources":["../../src/WebSocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAmC,KAAK,KAAK,EAAE,MAAM,WAAW,CAAC;AAExE
|
|
1
|
+
{"version":3,"file":"WebSocket.d.ts","sourceRoot":"","sources":["../../src/WebSocket.ts"],"names":[],"mappings":"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"}
|
package/dist/src/WebSocket.js
CHANGED
|
@@ -56,13 +56,22 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
|
|
|
56
56
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
57
57
|
});
|
|
58
58
|
import { assert } from "./Assert.js";
|
|
59
|
-
import {
|
|
59
|
+
import { constTrue } from "./Function.js";
|
|
60
60
|
import { err, ok } from "./Result.js";
|
|
61
61
|
import { exponential, jitter, maxDelay } from "./Schedule.js";
|
|
62
62
|
import { callback, retry } from "./Task.js";
|
|
63
63
|
import { ArrayBuffer, String, Uint8Array } from "./Type.js";
|
|
64
|
+
/**
|
|
65
|
+
* Default WebSocket reconnect schedule.
|
|
66
|
+
*
|
|
67
|
+
* Uses unlimited exponential backoff with a 100ms base, 30s cap, and full
|
|
68
|
+
* jitter.
|
|
69
|
+
*/
|
|
70
|
+
export const webSocketReconnectSchedule =
|
|
71
|
+
/*#__PURE__*/ jitter("100%")(
|
|
72
|
+
/*#__PURE__*/ maxDelay("30s")(/*#__PURE__*/ exponential("100ms")));
|
|
64
73
|
/** Create a new {@link WebSocket}. */
|
|
65
|
-
export const createWebSocket = (url, { protocols, binaryType, onOpen, onClose, shouldRetryOnClose =
|
|
74
|
+
export const createWebSocket = (url, { protocols, binaryType, onOpen, onClose, shouldRetryOnClose = constTrue, onMessage, onError, schedule = webSocketReconnectSchedule, WebSocketConstructor = globalThis.WebSocket, } = {}) => async (run) => {
|
|
66
75
|
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
67
76
|
try {
|
|
68
77
|
const disposer = __addDisposableResource(env_1, new AsyncDisposableStack(), true);
|
|
@@ -84,7 +93,7 @@ export const createWebSocket = (url, { protocols, binaryType, onOpen, onClose, s
|
|
|
84
93
|
* A task that connects and stays connected until the connection closes or
|
|
85
94
|
* errors. Returns error to trigger retry.
|
|
86
95
|
*/
|
|
87
|
-
const connect = callback(({
|
|
96
|
+
const connect = callback(({ resolve }) => {
|
|
88
97
|
closeSocket();
|
|
89
98
|
socket = new WebSocketConstructor(url, String.is(protocols) ? protocols : protocols && [...protocols]);
|
|
90
99
|
if (binaryType)
|
|
@@ -97,10 +106,10 @@ export const createWebSocket = (url, { protocols, binaryType, onOpen, onClose, s
|
|
|
97
106
|
socket.onclose = (event) => {
|
|
98
107
|
onClose?.(event);
|
|
99
108
|
if (shouldRetryOnClose(event)) {
|
|
100
|
-
err({ type: "WebSocketConnectionCloseError", event });
|
|
109
|
+
resolve(err({ type: "WebSocketConnectionCloseError", event }));
|
|
101
110
|
}
|
|
102
111
|
else {
|
|
103
|
-
ok();
|
|
112
|
+
resolve(ok());
|
|
104
113
|
}
|
|
105
114
|
};
|
|
106
115
|
socket.onmessage = (event) => {
|
|
@@ -112,7 +121,7 @@ export const createWebSocket = (url, { protocols, binaryType, onOpen, onClose, s
|
|
|
112
121
|
: { type: "WebSocketConnectError", event };
|
|
113
122
|
onError?.(error);
|
|
114
123
|
if (error.type === "WebSocketConnectError")
|
|
115
|
-
err(error);
|
|
124
|
+
resolve(err(error));
|
|
116
125
|
};
|
|
117
126
|
return closeSocket;
|
|
118
127
|
});
|
package/dist/src/Worker.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import type { Brand } from "./Brand.
|
|
7
|
-
import type { ConsoleDep, ConsoleStoreOutputEntryDep } from "./Console.
|
|
6
|
+
import type { Brand } from "./Brand.ts";
|
|
7
|
+
import type { ConsoleDep, ConsoleStoreOutputEntryDep } from "./Console.ts";
|
|
8
8
|
/**
|
|
9
9
|
* Typed, disposable Worker.
|
|
10
10
|
*
|
|
@@ -47,13 +47,28 @@ export interface MessagePort<Input, Output = never> extends Disposable {
|
|
|
47
47
|
/**
|
|
48
48
|
* The native underlying port for transferring via `postMessage`.
|
|
49
49
|
*
|
|
50
|
-
*
|
|
50
|
+
* Prepare a port for transfer:
|
|
51
51
|
*
|
|
52
52
|
* ```ts
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
53
|
+
* import {
|
|
54
|
+
* createMessageChannel,
|
|
55
|
+
* type NativeMessagePort,
|
|
56
|
+
* } from "@evolu/common";
|
|
57
|
+
*
|
|
58
|
+
* interface ConsoleMessage {
|
|
59
|
+
* readonly type: "ConsoleEntry";
|
|
60
|
+
* readonly text: string;
|
|
61
|
+
* }
|
|
62
|
+
*
|
|
63
|
+
* using consoleChannel = createMessageChannel<ConsoleMessage>();
|
|
64
|
+
* const init = {
|
|
65
|
+
* type: "InitConsole",
|
|
66
|
+
* port: consoleChannel.port1.native,
|
|
67
|
+
* };
|
|
68
|
+
*
|
|
69
|
+
* expectTypeOf(init.port).toEqualTypeOf<
|
|
70
|
+
* NativeMessagePort<ConsoleMessage>
|
|
71
|
+
* >();
|
|
57
72
|
* ```
|
|
58
73
|
*/
|
|
59
74
|
readonly native: NativeMessagePort<Input, Output>;
|
|
@@ -99,36 +114,80 @@ export type WorkerDeps = ConsoleDep & ConsoleStoreOutputEntryDep & CreateMessage
|
|
|
99
114
|
*
|
|
100
115
|
* For one-way communication, omit `Output` (defaults to `never`).
|
|
101
116
|
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* Transfer a channel port to a SharedWorker for async initialization:
|
|
117
|
+
* Transfer a channel port to a SharedWorker and use the retained port
|
|
118
|
+
* immediately:
|
|
105
119
|
*
|
|
106
120
|
* ```ts
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* }
|
|
121
|
+
* import {
|
|
122
|
+
* createMessageChannel,
|
|
123
|
+
* createMessagePort,
|
|
124
|
+
* createSharedWorker,
|
|
125
|
+
* type NativeMessagePort,
|
|
126
|
+
* } from "@evolu/common";
|
|
127
|
+
*
|
|
128
|
+
* interface Query {
|
|
129
|
+
* readonly text: string;
|
|
130
|
+
* }
|
|
131
|
+
* interface QueryResult {
|
|
132
|
+
* readonly rows: ReadonlyArray<string>;
|
|
133
|
+
* }
|
|
134
|
+
* interface ConnectToEvolu {
|
|
135
|
+
* readonly port: NativeMessagePort<QueryResult, Query>;
|
|
136
|
+
* }
|
|
137
|
+
*
|
|
138
|
+
* const response = Promise.withResolvers<QueryResult>();
|
|
139
|
+
* using sharedWorker = createSharedWorker<ConnectToEvolu>((self) => {
|
|
140
|
+
* self.onConnect = (controlPort) => {
|
|
141
|
+
* controlPort.onMessage = ({ port }) => {
|
|
142
|
+
* const workerQueries = createMessagePort<QueryResult, Query>(port);
|
|
143
|
+
* workerQueries.onMessage = (query) => {
|
|
144
|
+
* workerQueries.postMessage({ rows: [query.text] });
|
|
145
|
+
* workerQueries[Symbol.dispose]();
|
|
146
|
+
* };
|
|
147
|
+
* };
|
|
148
|
+
* };
|
|
149
|
+
* });
|
|
150
|
+
* using queryChannel = createMessageChannel<Query, QueryResult>();
|
|
151
|
+
* queryChannel.port1.onMessage = response.resolve;
|
|
152
|
+
*
|
|
153
|
+
* // The main thread retains port1 and transfers the worker-facing port2.
|
|
154
|
+
* sharedWorker.port.postMessage({ port: queryChannel.port2.native }, [
|
|
155
|
+
* queryChannel.port2.native,
|
|
156
|
+
* ]);
|
|
157
|
+
* queryChannel.port1.postMessage({ text: "all todos" });
|
|
158
|
+
*
|
|
159
|
+
* expect(await response.promise).toEqual({ rows: ["all todos"] });
|
|
120
160
|
* ```
|
|
121
161
|
*
|
|
162
|
+
* On the worker side, attach the handler after asynchronous initialization;
|
|
163
|
+
* messages sent earlier remain queued:
|
|
164
|
+
*
|
|
122
165
|
* ```ts
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
166
|
+
* import { createMessageChannel, createMessagePort } from "@evolu/common";
|
|
167
|
+
*
|
|
168
|
+
* interface Query {
|
|
169
|
+
* readonly text: string;
|
|
170
|
+
* }
|
|
171
|
+
*
|
|
172
|
+
* using channel = createMessageChannel<Query>();
|
|
173
|
+
* using workerPort = createMessagePort<never, Query>(channel.port2.native);
|
|
174
|
+
* const received: Array<Query> = [];
|
|
175
|
+
* const allReceived = Promise.withResolvers<void>();
|
|
176
|
+
* // The main thread can send several messages while the worker initializes.
|
|
177
|
+
* channel.port1.postMessage({ text: "all todos" });
|
|
178
|
+
* channel.port1.postMessage({ text: "completed todos" });
|
|
179
|
+
*
|
|
180
|
+
* await Promise.resolve();
|
|
181
|
+
* workerPort.onMessage = (query) => {
|
|
182
|
+
* received.push(query);
|
|
183
|
+
* if (received.length === 2) allReceived.resolve();
|
|
130
184
|
* };
|
|
131
|
-
*
|
|
185
|
+
* await allReceived.promise;
|
|
186
|
+
*
|
|
187
|
+
* expect(received).toEqual([
|
|
188
|
+
* { text: "all todos" },
|
|
189
|
+
* { text: "completed todos" },
|
|
190
|
+
* ]);
|
|
132
191
|
* ```
|
|
133
192
|
*
|
|
134
193
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel
|
|
@@ -274,12 +333,11 @@ export declare const testCreateMessagePort: CreateMessagePort;
|
|
|
274
333
|
/** Creates an in-memory {@link BroadcastChannel} for testing. */
|
|
275
334
|
export declare const testCreateBroadcastChannel: <Input, Output = Input>(name: string) => TestBroadcastChannel<Input, Output>;
|
|
276
335
|
/**
|
|
277
|
-
* Waits
|
|
278
|
-
* tests.
|
|
336
|
+
* Waits until scheduled in-memory worker message delivery becomes idle.
|
|
279
337
|
*
|
|
280
|
-
* This
|
|
281
|
-
*
|
|
282
|
-
*
|
|
338
|
+
* This observes actual transport tasks instead of waiting for an arbitrary
|
|
339
|
+
* duration. It also waits through message handlers that schedule more worker
|
|
340
|
+
* tasks before the current microtask checkpoint completes.
|
|
283
341
|
*/
|
|
284
342
|
export declare const testWaitForWorkerMessage: () => Promise<void>;
|
|
285
343
|
export {};
|
package/dist/src/Worker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../../src/Worker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAG3E;;;;GAIG;AACH,MAAM,WAAW,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAE,SAAQ,WAAW,CAChE,KAAK,EACL,MAAM,CACP;CAAG;AAEJ;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAE,SAAQ,UAAU;IACrE,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAE,SAAQ,UAAU;IACpE,QAAQ,CAAC,WAAW,EAAE,CACpB,OAAO,EAAE,KAAK,EACd,QAAQ,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,KACnC,IAAI,CAAC;IAEV;;;;;OAKG;IACH,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAE9C
|
|
1
|
+
{"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../../src/Worker.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Worker.js
CHANGED
|
@@ -55,8 +55,8 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
|
|
|
55
55
|
var e = new Error(message);
|
|
56
56
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
57
57
|
});
|
|
58
|
-
import { assert
|
|
59
|
-
import {
|
|
58
|
+
import { assert } from "./Assert.js";
|
|
59
|
+
import { disposable } from "./Function.js";
|
|
60
60
|
/**
|
|
61
61
|
* Creates an in-memory {@link Worker}.
|
|
62
62
|
*
|
|
@@ -171,38 +171,37 @@ export const createBroadcastChannel = (name) => {
|
|
|
171
171
|
}
|
|
172
172
|
dispatches.add(dispatch);
|
|
173
173
|
const disposer = __addDisposableResource(env_2, new DisposableStack(), false);
|
|
174
|
+
let disposed = false;
|
|
174
175
|
disposer.defer(() => {
|
|
176
|
+
disposed = true;
|
|
175
177
|
onMessageHandler = null;
|
|
176
178
|
dispatches.delete(dispatch);
|
|
177
179
|
if (dispatches.size === 0)
|
|
178
180
|
broadcastChannelDispatchesByName.delete(name);
|
|
179
181
|
});
|
|
180
|
-
|
|
181
|
-
return {
|
|
182
|
+
return disposable({
|
|
182
183
|
postMessage: (message) => {
|
|
183
|
-
assertNotDisposed(disposables);
|
|
184
184
|
const dispatches = broadcastChannelDispatchesByName.get(name);
|
|
185
185
|
assert(dispatches, "Expected broadcast channel dispatches");
|
|
186
186
|
for (const otherDispatch of [...dispatches]) {
|
|
187
187
|
if (otherDispatch === dispatch)
|
|
188
188
|
continue;
|
|
189
|
-
|
|
189
|
+
scheduleWorkerTask(() => {
|
|
190
190
|
if (!dispatches.has(otherDispatch))
|
|
191
191
|
return;
|
|
192
192
|
otherDispatch(message);
|
|
193
|
-
}
|
|
193
|
+
});
|
|
194
194
|
}
|
|
195
195
|
},
|
|
196
196
|
get onMessage() {
|
|
197
|
-
return
|
|
197
|
+
return disposed ? null : onMessageHandler;
|
|
198
198
|
},
|
|
199
199
|
set onMessage(fn) {
|
|
200
|
-
if (
|
|
200
|
+
if (disposed)
|
|
201
201
|
return;
|
|
202
202
|
onMessageHandler = fn;
|
|
203
203
|
},
|
|
204
|
-
|
|
205
|
-
};
|
|
204
|
+
}, disposer);
|
|
206
205
|
}
|
|
207
206
|
catch (e_2) {
|
|
208
207
|
env_2.error = e_2;
|
|
@@ -299,17 +298,16 @@ export const testCreateBroadcastChannel = (name) => {
|
|
|
299
298
|
}
|
|
300
299
|
};
|
|
301
300
|
/**
|
|
302
|
-
* Waits
|
|
303
|
-
* tests.
|
|
301
|
+
* Waits until scheduled in-memory worker message delivery becomes idle.
|
|
304
302
|
*
|
|
305
|
-
* This
|
|
306
|
-
*
|
|
307
|
-
*
|
|
303
|
+
* This observes actual transport tasks instead of waiting for an arbitrary
|
|
304
|
+
* duration. It also waits through message handlers that schedule more worker
|
|
305
|
+
* tasks before the current microtask checkpoint completes.
|
|
308
306
|
*/
|
|
309
|
-
export const testWaitForWorkerMessage =
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
};
|
|
307
|
+
export const testWaitForWorkerMessage = () => new Promise((resolve) => {
|
|
308
|
+
workerTaskIdleWaiters.add(resolve);
|
|
309
|
+
notifyWorkerTaskIdle();
|
|
310
|
+
});
|
|
313
311
|
const createMemoryWorkerPair = () => {
|
|
314
312
|
const channel = createMessageChannel();
|
|
315
313
|
const self = {
|
|
@@ -374,7 +372,7 @@ const createPort = ({ receive, peerReceive, native, }) => {
|
|
|
374
372
|
return;
|
|
375
373
|
nativePortRegistry.delete(native);
|
|
376
374
|
if (receive.flushTimeoutId != null) {
|
|
377
|
-
|
|
375
|
+
cancelWorkerTask(receive.flushTimeoutId);
|
|
378
376
|
receive.flushTimeoutId = null;
|
|
379
377
|
}
|
|
380
378
|
receive.handler = null;
|
|
@@ -386,8 +384,7 @@ const createPort = ({ receive, peerReceive, native, }) => {
|
|
|
386
384
|
if (state.flushScheduled || state.ownerCount === 0)
|
|
387
385
|
return;
|
|
388
386
|
state.flushScheduled = true;
|
|
389
|
-
|
|
390
|
-
state.flushTimeoutId = globalThis.setTimeout(() => {
|
|
387
|
+
state.flushTimeoutId = scheduleWorkerTask(() => {
|
|
391
388
|
state.flushTimeoutId = null;
|
|
392
389
|
state.flushScheduled = false;
|
|
393
390
|
if (state.ownerCount === 0)
|
|
@@ -401,7 +398,7 @@ const createPort = ({ receive, peerReceive, native, }) => {
|
|
|
401
398
|
return;
|
|
402
399
|
handler(message);
|
|
403
400
|
}
|
|
404
|
-
}
|
|
401
|
+
});
|
|
405
402
|
};
|
|
406
403
|
return {
|
|
407
404
|
postMessage: (message, transfer) => {
|
|
@@ -443,6 +440,43 @@ const createPort = ({ receive, peerReceive, native, }) => {
|
|
|
443
440
|
__disposeResources(env_5);
|
|
444
441
|
}
|
|
445
442
|
};
|
|
443
|
+
const pendingWorkerTaskIds = new Set();
|
|
444
|
+
const workerTaskIdleWaiters = new Set();
|
|
445
|
+
let workerTaskIdleCheckTimeoutId;
|
|
446
|
+
const scheduleWorkerTask = (callback) => {
|
|
447
|
+
if (workerTaskIdleCheckTimeoutId != null) {
|
|
448
|
+
globalThis.clearTimeout(workerTaskIdleCheckTimeoutId);
|
|
449
|
+
workerTaskIdleCheckTimeoutId = undefined;
|
|
450
|
+
}
|
|
451
|
+
const timeoutId = globalThis.setTimeout(() => {
|
|
452
|
+
pendingWorkerTaskIds.delete(timeoutId);
|
|
453
|
+
try {
|
|
454
|
+
callback();
|
|
455
|
+
}
|
|
456
|
+
finally {
|
|
457
|
+
queueMicrotask(notifyWorkerTaskIdle);
|
|
458
|
+
}
|
|
459
|
+
}, 0);
|
|
460
|
+
pendingWorkerTaskIds.add(timeoutId);
|
|
461
|
+
return timeoutId;
|
|
462
|
+
};
|
|
463
|
+
const cancelWorkerTask = (timeoutId) => {
|
|
464
|
+
globalThis.clearTimeout(timeoutId);
|
|
465
|
+
pendingWorkerTaskIds.delete(timeoutId);
|
|
466
|
+
queueMicrotask(notifyWorkerTaskIdle);
|
|
467
|
+
};
|
|
468
|
+
const notifyWorkerTaskIdle = () => {
|
|
469
|
+
if (pendingWorkerTaskIds.size > 0 ||
|
|
470
|
+
workerTaskIdleWaiters.size === 0 ||
|
|
471
|
+
workerTaskIdleCheckTimeoutId != null)
|
|
472
|
+
return;
|
|
473
|
+
workerTaskIdleCheckTimeoutId = globalThis.setTimeout(() => {
|
|
474
|
+
workerTaskIdleCheckTimeoutId = undefined;
|
|
475
|
+
for (const resolve of workerTaskIdleWaiters)
|
|
476
|
+
resolve();
|
|
477
|
+
workerTaskIdleWaiters.clear();
|
|
478
|
+
}, 0);
|
|
479
|
+
};
|
|
446
480
|
const createTestPort = (registration) => createPort(registration);
|
|
447
481
|
const createNativeMessagePortToken = () => ({});
|
|
448
482
|
/**
|
package/dist/src/index.d.ts
CHANGED
|
@@ -3,56 +3,59 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
export * from "./Array.
|
|
7
|
-
export * from "./Assert.
|
|
8
|
-
export * from "./BigInt.
|
|
9
|
-
export * from "./Brand.
|
|
10
|
-
export * from "./Buffer.
|
|
11
|
-
export * from "./Cache.
|
|
12
|
-
export * from "./Callbacks.
|
|
13
|
-
export * from "./Console.
|
|
14
|
-
export * from "./Crypto.
|
|
15
|
-
export * from "./Eq.
|
|
16
|
-
export * from "./Error.
|
|
17
|
-
export * from "./Function.
|
|
18
|
-
export * from "./
|
|
19
|
-
export * from "./
|
|
20
|
-
export * from "./
|
|
21
|
-
export * from "./
|
|
22
|
-
export * from "./
|
|
23
|
-
export * from "./
|
|
24
|
-
export * from "./
|
|
25
|
-
export * from "./
|
|
26
|
-
export * from "./
|
|
27
|
-
export * from "./
|
|
28
|
-
export * from "./
|
|
29
|
-
export * from "./
|
|
30
|
-
export * from "./
|
|
31
|
-
export * from "./
|
|
32
|
-
export * from "./
|
|
33
|
-
export * from "./
|
|
34
|
-
export * from "./
|
|
35
|
-
export * from "./
|
|
36
|
-
export * from "./
|
|
37
|
-
export * from "./
|
|
38
|
-
export * from "./
|
|
39
|
-
export
|
|
40
|
-
export * from "./
|
|
41
|
-
export * from "./
|
|
42
|
-
export * from "./
|
|
43
|
-
export * from "./
|
|
44
|
-
export * from "./
|
|
45
|
-
export * from "./
|
|
46
|
-
export
|
|
47
|
-
export
|
|
48
|
-
export
|
|
49
|
-
export
|
|
50
|
-
export
|
|
51
|
-
export type {
|
|
52
|
-
export
|
|
53
|
-
export
|
|
54
|
-
export type {
|
|
55
|
-
export type
|
|
56
|
-
export {
|
|
57
|
-
export type {
|
|
6
|
+
export * from "./Array.ts";
|
|
7
|
+
export * from "./Assert.ts";
|
|
8
|
+
export * from "./BigInt.ts";
|
|
9
|
+
export * from "./Brand.ts";
|
|
10
|
+
export * from "./Buffer.ts";
|
|
11
|
+
export * from "./Cache.ts";
|
|
12
|
+
export * from "./Callbacks.ts";
|
|
13
|
+
export * from "./Console.ts";
|
|
14
|
+
export * from "./Crypto.ts";
|
|
15
|
+
export * from "./Eq.ts";
|
|
16
|
+
export * from "./Error.ts";
|
|
17
|
+
export * from "./Function.ts";
|
|
18
|
+
export * from "./Http.ts";
|
|
19
|
+
export * from "./Identicon.ts";
|
|
20
|
+
export * from "./LeakDetector.ts";
|
|
21
|
+
export * from "./LockManager.ts";
|
|
22
|
+
export * from "./Lookup.ts";
|
|
23
|
+
export * from "./Microtask.ts";
|
|
24
|
+
export * from "./Number.ts";
|
|
25
|
+
export * from "./Object.ts";
|
|
26
|
+
export * from "./Option.ts";
|
|
27
|
+
export * from "./Order.ts";
|
|
28
|
+
export * from "./Platform.ts";
|
|
29
|
+
export * from "./Random.ts";
|
|
30
|
+
export * from "./Redacted.ts";
|
|
31
|
+
export * from "./Ref.ts";
|
|
32
|
+
export * from "./RefCount.ts";
|
|
33
|
+
export * from "./Relation.ts";
|
|
34
|
+
export * from "./Resource.ts";
|
|
35
|
+
export * from "./Result.ts";
|
|
36
|
+
export * from "./Schedule.ts";
|
|
37
|
+
export * from "./Set.ts";
|
|
38
|
+
export * from "./Sqlite.ts";
|
|
39
|
+
export type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
40
|
+
export * from "./Store.ts";
|
|
41
|
+
export * from "./String.ts";
|
|
42
|
+
export * from "./Task.ts";
|
|
43
|
+
export * from "./Test.ts";
|
|
44
|
+
export * from "./Time.ts";
|
|
45
|
+
export * from "./Type.ts";
|
|
46
|
+
export * from "./Types.ts";
|
|
47
|
+
export * from "./WebSocket.ts";
|
|
48
|
+
export * from "./Worker.ts";
|
|
49
|
+
export type { EvoluError } from "./local-first/Error.ts";
|
|
50
|
+
export { AppName, createEvolu } from "./local-first/Evolu.ts";
|
|
51
|
+
export type { AppNameError, Evolu, EvoluConfig, EvoluDeps, UnuseOwner, } from "./local-first/Evolu.ts";
|
|
52
|
+
export * from "./local-first/LocalAuth.ts";
|
|
53
|
+
export * from "./local-first/Owner.ts";
|
|
54
|
+
export type { SyncOwner } from "./local-first/Owner.ts";
|
|
55
|
+
export { evoluJsonArrayFrom, evoluJsonBuildObject, evoluJsonObjectFrom, getJsonObjectArgs, kyselySql, type InferRow, type KyselyNotNull, type Query, type QueryRows, type Row, } from "./local-first/Query.ts";
|
|
56
|
+
export { createQueryBuilder } from "./local-first/Schema.ts";
|
|
57
|
+
export type { AnyStandardSchemaV1, EvoluSchema, InsertValues, Mutation, MutationKind, MutationOptions, MutationValues, NullableColumnsToOptional, OptionalColumnKeys, RequiredColumnKeys, TableSchema, UpdateValues, UpsertValues, } from "./local-first/Schema.ts";
|
|
58
|
+
export type { SyncState, } from "./local-first/Shared.ts";
|
|
59
|
+
export { Timestamp, timestampBytesToTimestamp, timestampToTimestampBytes, } from "./local-first/Timestamp.ts";
|
|
60
|
+
export type { TimestampBytes, TimestampCounterOverflowError, TimestampDriftError, TimestampError, TimestampTimeOutOfRangeError, } from "./local-first/Timestamp.ts";
|
|
58
61
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAG5B,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EACV,YAAY,EACZ,KAAK,EACL,WAAW,EACX,SAAS,EACT,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,GAAG,GACT,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAIV,SAAS,GACV,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,SAAS,EACT,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,cAAc,EACd,6BAA6B,EAC7B,mBAAmB,EACnB,cAAc,EACd,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -15,7 +15,9 @@ export * from "./Crypto.js";
|
|
|
15
15
|
export * from "./Eq.js";
|
|
16
16
|
export * from "./Error.js";
|
|
17
17
|
export * from "./Function.js";
|
|
18
|
+
export * from "./Http.js";
|
|
18
19
|
export * from "./Identicon.js";
|
|
20
|
+
export * from "./LeakDetector.js";
|
|
19
21
|
export * from "./LockManager.js";
|
|
20
22
|
export * from "./Lookup.js";
|
|
21
23
|
export * from "./Microtask.js";
|
|
@@ -31,6 +33,7 @@ export * from "./RefCount.js";
|
|
|
31
33
|
export * from "./Relation.js";
|
|
32
34
|
export * from "./Resource.js";
|
|
33
35
|
export * from "./Result.js";
|
|
36
|
+
export * from "./Schedule.js";
|
|
34
37
|
export * from "./Set.js";
|
|
35
38
|
export * from "./Sqlite.js";
|
|
36
39
|
export * from "./Store.js";
|
|
@@ -38,7 +41,6 @@ export * from "./String.js";
|
|
|
38
41
|
export * from "./Task.js";
|
|
39
42
|
export * from "./Test.js";
|
|
40
43
|
export * from "./Time.js";
|
|
41
|
-
export * from "./Tracer.js";
|
|
42
44
|
export * from "./Type.js";
|
|
43
45
|
export * from "./Types.js";
|
|
44
46
|
export * from "./WebSocket.js";
|