@evolu/common 8.0.0-next.2 → 8.0.0-next.4
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/Assert.d.ts +5 -5
- package/dist/src/Assert.d.ts.map +1 -1
- package/dist/src/Assert.js +4 -4
- package/dist/src/Identicon.js +4 -4
- package/dist/src/LockManager.d.ts +74 -0
- package/dist/src/LockManager.d.ts.map +1 -0
- package/dist/src/LockManager.js +103 -0
- package/dist/src/Microtask.d.ts.map +1 -1
- package/dist/src/Microtask.js +90 -26
- package/dist/src/Object.d.ts.map +1 -1
- package/dist/src/RefCount.d.ts.map +1 -1
- package/dist/src/RefCount.js +153 -68
- package/dist/src/Resource.d.ts +6 -6
- package/dist/src/Resource.d.ts.map +1 -1
- package/dist/src/Resource.js +211 -162
- package/dist/src/Schedule.d.ts +5 -5
- package/dist/src/Schedule.d.ts.map +1 -1
- package/dist/src/Schedule.js +53 -44
- package/dist/src/Sqlite.d.ts +2 -0
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +64 -40
- package/dist/src/Task.d.ts +6 -33
- package/dist/src/Task.d.ts.map +1 -1
- package/dist/src/Task.js +213 -204
- package/dist/src/Test.d.ts +4 -4
- package/dist/src/Time.d.ts +5 -0
- package/dist/src/Time.d.ts.map +1 -1
- package/dist/src/Time.js +5 -0
- package/dist/src/Type.d.ts +7 -0
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +7 -0
- package/dist/src/WebSocket.d.ts.map +1 -1
- package/dist/src/WebSocket.js +7 -6
- package/dist/src/Worker.d.ts +42 -8
- package/dist/src/Worker.d.ts.map +1 -1
- package/dist/src/Worker.js +298 -75
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/local-first/Db.d.ts +5 -4
- package/dist/src/local-first/Db.d.ts.map +1 -1
- package/dist/src/local-first/Db.js +44 -38
- package/dist/src/local-first/Evolu.d.ts +3 -2
- package/dist/src/local-first/Evolu.d.ts.map +1 -1
- package/dist/src/local-first/Evolu.js +90 -80
- package/dist/src/local-first/Owner.d.ts.map +1 -1
- package/dist/src/local-first/Shared.d.ts +65 -54
- package/dist/src/local-first/Shared.d.ts.map +1 -1
- package/dist/src/local-first/Shared.js +387 -373
- package/package.json +1 -1
- package/src/Array.ts +8 -8
- package/src/Assert.ts +5 -5
- package/src/Identicon.ts +4 -4
- package/src/LockManager.ts +181 -0
- package/src/Microtask.ts +17 -11
- package/src/Object.ts +3 -3
- package/src/RefCount.ts +25 -21
- package/src/Resource.ts +63 -56
- package/src/Schedule.ts +70 -48
- package/src/Set.ts +4 -4
- package/src/Sqlite.ts +41 -30
- package/src/Task.ts +77 -120
- package/src/Test.ts +4 -4
- package/src/Time.ts +7 -0
- package/src/Type.ts +9 -0
- package/src/WebSocket.ts +7 -6
- package/src/Worker.ts +240 -49
- package/src/index.ts +1 -0
- package/src/local-first/Db.ts +69 -46
- package/src/local-first/Evolu.ts +74 -68
- package/src/local-first/Owner.ts +1 -1
- package/src/local-first/Query.ts +1 -1
- package/src/local-first/Shared.ts +472 -464
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { type NonEmptyReadonlyArray } from "../Array.js";
|
|
7
7
|
import type { ConsoleDep } from "../Console.js";
|
|
8
|
+
import { type LockManagerDep } from "../LockManager.js";
|
|
8
9
|
import type { FlushSyncDep, ReloadAppDep } from "../Platform.js";
|
|
9
10
|
import type { Listener, ReadonlyStore, Unsubscribe } from "../Store.js";
|
|
10
11
|
import { type Task } from "../Task.js";
|
|
11
12
|
import type { TypeError } from "../Type.js";
|
|
12
13
|
import { Name } from "../Type.js";
|
|
13
|
-
import type { CreateMessageChannelDep } from "../Worker.js";
|
|
14
|
+
import type { CreateBroadcastChannelDep, CreateMessageChannelDep } from "../Worker.js";
|
|
14
15
|
import type { CreateDbWorkerDep } from "./Db.js";
|
|
15
16
|
import type { EvoluError } from "./Error.js";
|
|
16
17
|
import type { AppOwner, Owner, OwnerTransport, ReadonlyOwner } from "./Owner.js";
|
|
@@ -444,7 +445,7 @@ export type EvoluDeps = EvoluPlatformDeps & EvoluErrorDep & Disposable;
|
|
|
444
445
|
* Provides worker and channel adapters plus optional platform integrations for
|
|
445
446
|
* logging and synchronous UI flush.
|
|
446
447
|
*/
|
|
447
|
-
export type EvoluPlatformDeps = CreateDbWorkerDep & CreateMessageChannelDep & ReloadAppDep & SharedWorkerDep & Partial<ConsoleDep> & Partial<FlushSyncDep>;
|
|
448
|
+
export type EvoluPlatformDeps = CreateDbWorkerDep & CreateBroadcastChannelDep & CreateMessageChannelDep & LockManagerDep & ReloadAppDep & SharedWorkerDep & Partial<ConsoleDep> & Partial<FlushSyncDep>;
|
|
448
449
|
/**
|
|
449
450
|
* Creates shared dependencies used by all {@link createEvolu} instances on a
|
|
450
451
|
* platform.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../../src/local-first/Evolu.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,aAAa,CAAC;AAOrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../../src/local-first/Evolu.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,6 +61,7 @@ import { createCallbacks } from "../Callbacks.js";
|
|
|
61
61
|
import { createConsole } from "../Console.js";
|
|
62
62
|
import { createUnknownError } from "../Error.js";
|
|
63
63
|
import { exhaustiveCheck, todo } from "../Function.js";
|
|
64
|
+
import { acquireLeaderLock, acquireLeaderLockCallback, } from "../LockManager.js";
|
|
64
65
|
import { createMicrotaskBatch } from "../Microtask.js";
|
|
65
66
|
import { createRefCountByKey } from "../RefCount.js";
|
|
66
67
|
import { err, ok } from "../Result.js";
|
|
@@ -72,6 +73,7 @@ import { brand, createId, createIdFromString, Name, UrlSafeString, } from "../Ty
|
|
|
72
73
|
import { createOwnerWebSocketTransport } from "./Owner.js";
|
|
73
74
|
import { applyPatches } from "./Query.js";
|
|
74
75
|
import { evoluSchemaToSqliteSchema } from "./Schema.js";
|
|
76
|
+
import { consoleEntryOrErrorBroadcastChannelName } from "./Shared.js";
|
|
75
77
|
import { DbChange } from "./Storage.js";
|
|
76
78
|
/**
|
|
77
79
|
* Application name.
|
|
@@ -99,61 +101,75 @@ export const testAppName = /*#__PURE__*/ AppName.orThrow("AppName");
|
|
|
99
101
|
* Dispose it only during app shutdown.
|
|
100
102
|
*/
|
|
101
103
|
export const createEvoluDeps = (deps) => {
|
|
102
|
-
const {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
104
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
105
|
+
try {
|
|
106
|
+
const { createBroadcastChannel, sharedWorker } = deps;
|
|
107
|
+
const console = deps.console ?? createConsole();
|
|
108
|
+
const disposer = __addDisposableResource(env_1, new DisposableStack(), false);
|
|
109
|
+
disposer.use(sharedWorker);
|
|
110
|
+
const evoluError = disposer.use(createStore(null));
|
|
111
|
+
const consoleEntryOrErrorBroadcastChannel = disposer.use(createBroadcastChannel(consoleEntryOrErrorBroadcastChannelName));
|
|
112
|
+
consoleEntryOrErrorBroadcastChannel.onMessage = (message) => {
|
|
113
|
+
switch (message.type) {
|
|
114
|
+
case "ConsoleEntry":
|
|
115
|
+
console.write(message.entry);
|
|
116
|
+
// Fallback channel for unexpected errors without EvoluError typing.
|
|
117
|
+
if (message.entry.method === "error") {
|
|
118
|
+
evoluError.set(createUnknownError(message.entry.args));
|
|
119
|
+
}
|
|
120
|
+
break;
|
|
121
|
+
case "Error":
|
|
122
|
+
evoluError.set(message.error);
|
|
123
|
+
// Keep typed errors visible in logs as operational failures.
|
|
124
|
+
console.error(message.error);
|
|
125
|
+
break;
|
|
126
|
+
default:
|
|
127
|
+
exhaustiveCheck(message);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
sharedWorker.port.onMessage = (message) => {
|
|
131
|
+
deps.createDbWorker().postMessage(message, [message.port]);
|
|
132
|
+
};
|
|
133
|
+
disposer.use(acquireLeaderLockCallback(deps)("tab", () => {
|
|
134
|
+
sharedWorker.port.postMessage({
|
|
135
|
+
type: "AnnounceTabLeader",
|
|
136
|
+
consoleLevel: console.getLevel(),
|
|
137
|
+
});
|
|
138
|
+
}));
|
|
139
|
+
const disposables = disposer.move();
|
|
140
|
+
return {
|
|
141
|
+
...deps,
|
|
142
|
+
evoluError,
|
|
143
|
+
[Symbol.dispose]: () => disposables.dispose(),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
catch (e_1) {
|
|
147
|
+
env_1.error = e_1;
|
|
148
|
+
env_1.hasError = true;
|
|
149
|
+
}
|
|
150
|
+
finally {
|
|
151
|
+
__disposeResources(env_1);
|
|
152
|
+
}
|
|
137
153
|
};
|
|
138
154
|
/**
|
|
139
155
|
* Creates an {@link Evolu} instance from {@link EvoluSchema} and
|
|
140
156
|
* {@link EvoluConfig}.
|
|
141
157
|
*/
|
|
142
158
|
export const createEvolu = (schema, config) => async (run) => {
|
|
143
|
-
const
|
|
159
|
+
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
144
160
|
try {
|
|
145
161
|
const { appName, appOwner, memoryOnly = false, transports = [{ type: "WebSocket", url: "wss://free.evoluhq.com" }], } = config;
|
|
146
162
|
const name = Name.orThrow(`${appName}-${createIdFromString(appOwner.id)}`);
|
|
147
163
|
const console = run.deps.console.child(name).child("Evolu");
|
|
148
164
|
console.info("createEvolu");
|
|
149
|
-
const
|
|
150
|
-
const rowsByQueryMapStore =
|
|
151
|
-
const subscribedQueriesRefCount =
|
|
165
|
+
const disposer = __addDisposableResource(env_2, new AsyncDisposableStack(), true);
|
|
166
|
+
const rowsByQueryMapStore = disposer.use(createStore(new Map()));
|
|
167
|
+
const subscribedQueriesRefCount = disposer.use(createRefCountByKey());
|
|
152
168
|
/**
|
|
153
169
|
* Settle pending query loads during disposal so awaiting callers and React
|
|
154
170
|
* `use` thenables do not hang forever during teardown.
|
|
155
171
|
*/
|
|
156
|
-
const loadingPromisesByQuery =
|
|
172
|
+
const loadingPromisesByQuery = disposer.adopt(new Map(), (loadingPromisesByQuery) => {
|
|
157
173
|
for (const loadingPromise of loadingPromisesByQuery.values()) {
|
|
158
174
|
if (loadingPromise.promise.status === "fulfilled")
|
|
159
175
|
continue;
|
|
@@ -199,13 +215,13 @@ export const createEvolu = (schema, config) => async (run) => {
|
|
|
199
215
|
}
|
|
200
216
|
}
|
|
201
217
|
};
|
|
202
|
-
const onMutateCompleteCallbacks =
|
|
218
|
+
const onMutateCompleteCallbacks = disposer.use(createCallbacks(run.deps));
|
|
203
219
|
let exportDatabasePending = null;
|
|
204
|
-
|
|
220
|
+
disposer.defer(() => {
|
|
205
221
|
exportDatabasePending?.reject({ type: "EvoluDisposedError" });
|
|
206
222
|
exportDatabasePending = null;
|
|
207
223
|
});
|
|
208
|
-
const mutateBatch =
|
|
224
|
+
const mutateBatch = disposer.use(createMicrotaskBatch((items) => {
|
|
209
225
|
console.debug("mutateBatch", { changeCount: items.length });
|
|
210
226
|
releaseUnsubscribedLoadingPromises();
|
|
211
227
|
postMessage({
|
|
@@ -217,19 +233,20 @@ export const createEvolu = (schema, config) => async (run) => {
|
|
|
217
233
|
subscribedQueries: subscribedQueriesRefCount.keys(),
|
|
218
234
|
});
|
|
219
235
|
}));
|
|
220
|
-
const queryBatch =
|
|
236
|
+
const queryBatch = disposer.use(createMicrotaskBatch((queries) => {
|
|
221
237
|
const dedupedQueries = new Set(queries);
|
|
222
238
|
assert(isNonEmptySet(dedupedQueries), "Expected non-empty query batch.");
|
|
223
239
|
console.debug("queryBatch", { queryCount: dedupedQueries.size });
|
|
224
240
|
postMessage({ type: "Query", queries: dedupedQueries });
|
|
225
241
|
}));
|
|
226
|
-
const useOwnerBatch =
|
|
242
|
+
const useOwnerBatch = disposer.use(createMicrotaskBatch((actions) => postMessage({ type: "UseOwner", actions })));
|
|
227
243
|
let postMessage;
|
|
228
244
|
// Scope worker/channel wiring and keep only postMessage outside.
|
|
229
245
|
{
|
|
230
|
-
const
|
|
231
|
-
const
|
|
232
|
-
|
|
246
|
+
const id = createId(run.deps);
|
|
247
|
+
const { createMessageChannel, sharedWorker } = run.deps;
|
|
248
|
+
disposer.use(await run.orThrow(acquireLeaderLock(id)));
|
|
249
|
+
const evoluChannel = disposer.use(createMessageChannel());
|
|
233
250
|
evoluChannel.port1.onMessage = (message) => {
|
|
234
251
|
switch (message.type) {
|
|
235
252
|
case "OnPatchesByQuery": {
|
|
@@ -294,30 +311,17 @@ export const createEvolu = (schema, config) => async (run) => {
|
|
|
294
311
|
sharedWorker.port.postMessage({
|
|
295
312
|
type: "CreateEvolu",
|
|
296
313
|
name,
|
|
297
|
-
|
|
298
|
-
dbWorkerPort: dbWorkerChannel.port2.native,
|
|
299
|
-
}, [evoluChannel.port2.native, dbWorkerChannel.port2.native]);
|
|
300
|
-
/**
|
|
301
|
-
* No stack.use because Evolu instances don't dispose DbWorker because
|
|
302
|
-
* it's SharedWorder responsibility. DbWorker can be used by another tab.
|
|
303
|
-
* That's required because SQLite WASM needs a single web worker.
|
|
304
|
-
*/
|
|
305
|
-
createDbWorker().postMessage({
|
|
306
|
-
type: "Init",
|
|
307
|
-
name,
|
|
314
|
+
id,
|
|
308
315
|
consoleLevel: console.getLevel(),
|
|
309
316
|
sqliteSchema: evoluSchemaToSqliteSchema(schema, config.indexes),
|
|
310
317
|
encryptionKey: appOwner.encryptionKey,
|
|
311
318
|
memoryOnly,
|
|
312
|
-
|
|
313
|
-
}, [
|
|
319
|
+
evoluPort: evoluChannel.port2.native,
|
|
320
|
+
}, [evoluChannel.port2.native]);
|
|
314
321
|
postMessage = evoluChannel.port1.postMessage;
|
|
315
|
-
stack.defer(() => {
|
|
316
|
-
postMessage({ type: "Dispose" });
|
|
317
|
-
});
|
|
318
322
|
}
|
|
319
323
|
const createMutation = (kind) => (table, values, options) => {
|
|
320
|
-
assertNotDisposed(
|
|
324
|
+
assertNotDisposed(disposables);
|
|
321
325
|
const { id = createId(run.deps), isDeleted, ...changeValues } = values;
|
|
322
326
|
const dbChange = {
|
|
323
327
|
table,
|
|
@@ -336,7 +340,7 @@ export const createEvolu = (schema, config) => async (run) => {
|
|
|
336
340
|
return { id };
|
|
337
341
|
};
|
|
338
342
|
const loadQuery = (query) => {
|
|
339
|
-
assertNotDisposed(
|
|
343
|
+
assertNotDisposed(disposables);
|
|
340
344
|
const loadingPromise = loadingPromisesByQuery.get(query);
|
|
341
345
|
if (loadingPromise) {
|
|
342
346
|
return loadingPromise.promise;
|
|
@@ -353,12 +357,12 @@ export const createEvolu = (schema, config) => async (run) => {
|
|
|
353
357
|
return typedPromise;
|
|
354
358
|
};
|
|
355
359
|
const getQueryRows = (query) => {
|
|
356
|
-
assertNotDisposed(
|
|
360
|
+
assertNotDisposed(disposables);
|
|
357
361
|
return (rowsByQueryMapStore.get().get(query) ??
|
|
358
362
|
emptyArray);
|
|
359
363
|
};
|
|
360
364
|
const useOwner = (owner, ownerTransports) => {
|
|
361
|
-
assertNotDisposed(
|
|
365
|
+
assertNotDisposed(disposables);
|
|
362
366
|
const effectiveTransports = ownerTransports ?? transports;
|
|
363
367
|
assertNonEmptyReadonlyArray(effectiveTransports, "useOwner requires explicit non-empty transports when config.transports is empty.");
|
|
364
368
|
const syncOwner = {
|
|
@@ -371,6 +375,8 @@ export const createEvolu = (schema, config) => async (run) => {
|
|
|
371
375
|
});
|
|
372
376
|
let isUsed = true;
|
|
373
377
|
return () => {
|
|
378
|
+
if (disposables.disposed)
|
|
379
|
+
return;
|
|
374
380
|
assert(isUsed, "UnuseOwner can be called only once.");
|
|
375
381
|
isUsed = false;
|
|
376
382
|
useOwnerBatch.push({
|
|
@@ -379,9 +385,12 @@ export const createEvolu = (schema, config) => async (run) => {
|
|
|
379
385
|
});
|
|
380
386
|
};
|
|
381
387
|
};
|
|
382
|
-
const
|
|
388
|
+
const disposables = disposer.move();
|
|
383
389
|
if (isNonEmptyArray(transports))
|
|
384
390
|
useOwner(appOwner);
|
|
391
|
+
if (run.signal.aborted) {
|
|
392
|
+
await disposables.disposeAsync();
|
|
393
|
+
}
|
|
385
394
|
return ok({
|
|
386
395
|
name,
|
|
387
396
|
appOwner,
|
|
@@ -391,7 +400,7 @@ export const createEvolu = (schema, config) => async (run) => {
|
|
|
391
400
|
loadQuery,
|
|
392
401
|
loadQueries: (queries) => queries.map((query) => loadQuery(query)),
|
|
393
402
|
subscribeQuery: (query) => (listener) => {
|
|
394
|
-
assertNotDisposed(
|
|
403
|
+
assertNotDisposed(disposables);
|
|
395
404
|
subscribedQueriesRefCount.increment(query);
|
|
396
405
|
let isSubscribed = true;
|
|
397
406
|
let previousRows = null;
|
|
@@ -407,14 +416,14 @@ export const createEvolu = (schema, config) => async (run) => {
|
|
|
407
416
|
isSubscribed = false;
|
|
408
417
|
previousRows = null;
|
|
409
418
|
unsubscribe();
|
|
410
|
-
if (
|
|
419
|
+
if (disposables.disposed)
|
|
411
420
|
return;
|
|
412
421
|
subscribedQueriesRefCount.decrement(query);
|
|
413
422
|
};
|
|
414
423
|
},
|
|
415
424
|
getQueryRows,
|
|
416
425
|
exportDatabase: () => {
|
|
417
|
-
assertNotDisposed(
|
|
426
|
+
assertNotDisposed(disposables);
|
|
418
427
|
if (!exportDatabasePending) {
|
|
419
428
|
exportDatabasePending =
|
|
420
429
|
Promise.withResolvers();
|
|
@@ -423,27 +432,28 @@ export const createEvolu = (schema, config) => async (run) => {
|
|
|
423
432
|
return exportDatabasePending.promise;
|
|
424
433
|
},
|
|
425
434
|
deleteDatabase: () => {
|
|
426
|
-
assertNotDisposed(
|
|
435
|
+
assertNotDisposed(disposables);
|
|
427
436
|
todo();
|
|
428
437
|
},
|
|
429
438
|
deleteOwner: (owner) => {
|
|
430
|
-
assertNotDisposed(
|
|
439
|
+
assertNotDisposed(disposables);
|
|
431
440
|
void owner;
|
|
432
441
|
todo();
|
|
433
442
|
},
|
|
434
443
|
useOwner,
|
|
435
444
|
[Symbol.asyncDispose]: () => {
|
|
436
|
-
|
|
437
|
-
|
|
445
|
+
if (!disposables.disposed)
|
|
446
|
+
console.info("disposeEvolu");
|
|
447
|
+
return disposables.disposeAsync();
|
|
438
448
|
},
|
|
439
449
|
});
|
|
440
450
|
}
|
|
441
|
-
catch (
|
|
442
|
-
|
|
443
|
-
|
|
451
|
+
catch (e_2) {
|
|
452
|
+
env_2.error = e_2;
|
|
453
|
+
env_2.hasError = true;
|
|
444
454
|
}
|
|
445
455
|
finally {
|
|
446
|
-
const result_1 = __disposeResources(
|
|
456
|
+
const result_1 = __disposeResources(env_2);
|
|
447
457
|
if (result_1)
|
|
448
458
|
await result_1;
|
|
449
459
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Owner.d.ts","sourceRoot":"","sources":["../../../src/local-first/Owner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAUnD,OAAO,EAML,QAAQ,EACR,cAAc,EACd,KAAK,KAAK,EACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,WAAW,KAAM,SAAQ,aAAa;IAC1C,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,KAAK,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAC;CAC5D;AAED,iFAAiF;AACjF,eAAO,MAAM,OAAO,mZAAqC,CAAC;AAC1D,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAE1C,+CAA+C;AAC/C,eAAO,MAAM,YAAY,uvBAA+C,CAAC;AACzE,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAC;AAEpD,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,YACnB,CAAC;AAEvC,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,GAAI,cAAc,YAAY,KAAG,
|
|
1
|
+
{"version":3,"file":"Owner.d.ts","sourceRoot":"","sources":["../../../src/local-first/Owner.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,42 +4,51 @@
|
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
6
|
import { type NonEmptyReadonlyArray } from "../Array.js";
|
|
7
|
+
import type { Brand } from "../Brand.js";
|
|
7
8
|
import type { ConsoleEntry, ConsoleLevel } from "../Console.js";
|
|
9
|
+
import type { EncryptionKey } from "../Crypto.js";
|
|
10
|
+
import { type LockManagerDep } from "../LockManager.js";
|
|
8
11
|
import { type Result } from "../Result.js";
|
|
9
12
|
import type { NonEmptyReadonlySet } from "../Set.js";
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
13
|
+
import type { SqliteSchema } from "../Sqlite.js";
|
|
14
|
+
import { AbortError, type Task } from "../Task.js";
|
|
15
|
+
import { type Id, type Name, type Typed } from "../Type.js";
|
|
12
16
|
import type { ExtractType } from "../Types.js";
|
|
13
17
|
import type { CreateWebSocketDep } from "../WebSocket.js";
|
|
14
|
-
import type { SharedWorker as CommonSharedWorker, NativeMessagePort, SharedWorkerSelf, WorkerDeps } from "../Worker.js";
|
|
18
|
+
import type { SharedWorker as CommonSharedWorker, CreateBroadcastChannelDep, CreateMessageChannelDep, NativeMessagePort, SharedWorkerSelf, WorkerDeps } from "../Worker.js";
|
|
19
|
+
import type { DbWorkerInit } from "./Db.js";
|
|
15
20
|
import type { EvoluError } from "./Error.js";
|
|
16
21
|
import type { Owner, OwnerId, SyncOwner } from "./Owner.js";
|
|
17
22
|
import { type ApplyProtocolMessageAsClientResult, type ProtocolError, type ProtocolMessage } from "./Protocol.js";
|
|
18
23
|
import { type Patch, type Query, type RowsByQueryMap } from "./Query.js";
|
|
19
24
|
import type { MutationChange } from "./Schema.js";
|
|
20
25
|
import type { CrdtMessage } from "./Storage.js";
|
|
21
|
-
export type SharedWorker = CommonSharedWorker<SharedWorkerInput>;
|
|
26
|
+
export type SharedWorker = CommonSharedWorker<SharedWorkerInput, SharedWorkerOutput>;
|
|
22
27
|
export interface SharedWorkerDep {
|
|
23
28
|
readonly sharedWorker: SharedWorker;
|
|
24
29
|
}
|
|
25
|
-
export type SharedWorkerDeps = WorkerDeps & CreateWebSocketDep;
|
|
26
30
|
export type SharedWorkerInput = {
|
|
27
|
-
readonly type: "
|
|
31
|
+
readonly type: "AnnounceTabLeader";
|
|
28
32
|
readonly consoleLevel: ConsoleLevel;
|
|
29
|
-
readonly port: NativeMessagePort<EvoluTabOutput>;
|
|
30
33
|
} | {
|
|
31
34
|
readonly type: "CreateEvolu";
|
|
32
35
|
readonly name: Name;
|
|
36
|
+
readonly id: EvoluInstanceId;
|
|
37
|
+
readonly consoleLevel: ConsoleLevel;
|
|
38
|
+
readonly sqliteSchema: SqliteSchema;
|
|
39
|
+
readonly encryptionKey: EncryptionKey;
|
|
40
|
+
readonly memoryOnly: boolean;
|
|
33
41
|
readonly evoluPort: NativeMessagePort<EvoluOutput, EvoluInput>;
|
|
34
|
-
readonly dbWorkerPort: NativeMessagePort<DbWorkerInput, DbWorkerOutput>;
|
|
35
42
|
};
|
|
36
|
-
export type
|
|
37
|
-
|
|
43
|
+
export type SharedWorkerOutput = DbWorkerInit;
|
|
44
|
+
export type ConsoleEntryOrError = {
|
|
45
|
+
readonly type: "ConsoleEntry";
|
|
38
46
|
readonly entry: ConsoleEntry;
|
|
39
47
|
} | {
|
|
40
|
-
readonly type: "
|
|
48
|
+
readonly type: "Error";
|
|
41
49
|
readonly error: EvoluError;
|
|
42
50
|
};
|
|
51
|
+
export declare const consoleEntryOrErrorBroadcastChannelName = "evolu:console-entry-or-error";
|
|
43
52
|
export type EvoluInput = {
|
|
44
53
|
readonly type: "Mutate";
|
|
45
54
|
readonly changes: NonEmptyReadonlyArray<MutationChange>;
|
|
@@ -56,8 +65,6 @@ export type EvoluInput = {
|
|
|
56
65
|
readonly queries: NonEmptyReadonlySet<Query>;
|
|
57
66
|
} | {
|
|
58
67
|
readonly type: "Export";
|
|
59
|
-
} | {
|
|
60
|
-
readonly type: "Dispose";
|
|
61
68
|
};
|
|
62
69
|
export type EvoluOutput = {
|
|
63
70
|
readonly type: "OnPatchesByQuery";
|
|
@@ -69,57 +76,61 @@ export type EvoluOutput = {
|
|
|
69
76
|
readonly type: "OnExport";
|
|
70
77
|
readonly file: Uint8Array<ArrayBuffer>;
|
|
71
78
|
};
|
|
72
|
-
export
|
|
73
|
-
export interface DbWorkerInput {
|
|
79
|
+
export type DbWorkerInput = (Typed<"Request"> & {
|
|
74
80
|
readonly callbackId: Id;
|
|
75
|
-
readonly request:
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
81
|
+
readonly request: DbWorkerRequest;
|
|
82
|
+
}) | Typed<"Dispose">;
|
|
83
|
+
export type DbWorkerRequest = {
|
|
84
|
+
readonly type: "ForEvolu";
|
|
85
|
+
readonly id: EvoluInstanceId;
|
|
86
|
+
readonly message: ExtractType<EvoluInput, "Mutate" | "Query" | "Export">;
|
|
87
|
+
} | {
|
|
88
|
+
readonly type: "ForSharedWorker";
|
|
89
|
+
readonly message: {
|
|
90
|
+
readonly type: "CreateSyncMessages";
|
|
91
|
+
readonly owners: NonEmptyReadonlyArray<Owner>;
|
|
79
92
|
} | {
|
|
80
|
-
readonly type: "
|
|
81
|
-
readonly
|
|
82
|
-
|
|
83
|
-
readonly owners: NonEmptyReadonlyArray<Owner>;
|
|
84
|
-
} | {
|
|
85
|
-
readonly type: "ApplySyncMessage";
|
|
86
|
-
readonly owner: Owner;
|
|
87
|
-
readonly inputMessage: Uint8Array;
|
|
88
|
-
};
|
|
93
|
+
readonly type: "ApplySyncMessage";
|
|
94
|
+
readonly owner: Owner;
|
|
95
|
+
readonly inputMessage: Uint8Array;
|
|
89
96
|
};
|
|
90
|
-
}
|
|
91
|
-
export type DbWorkerOutput =
|
|
97
|
+
};
|
|
98
|
+
export type DbWorkerOutput = {
|
|
92
99
|
readonly type: "LeaderAcquired";
|
|
93
100
|
readonly name: Name;
|
|
94
101
|
} | {
|
|
95
102
|
readonly type: "OnQueuedResponse";
|
|
96
103
|
readonly callbackId: Id;
|
|
97
|
-
readonly response:
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
104
|
+
readonly response: DbWorkerQueuedResponse;
|
|
105
|
+
};
|
|
106
|
+
export type DbWorkerQueuedResponse = {
|
|
107
|
+
readonly type: "ForEvolu";
|
|
108
|
+
readonly id: EvoluInstanceId;
|
|
109
|
+
readonly message: {
|
|
110
|
+
readonly type: "Mutate";
|
|
111
|
+
readonly messagesByOwnerId: ReadonlyMap<OwnerId, NonEmptyReadonlyArray<CrdtMessage>>;
|
|
112
|
+
readonly rowsByQuery: RowsByQueryMap;
|
|
113
|
+
} | {
|
|
114
|
+
readonly type: "Query";
|
|
115
|
+
readonly rowsByQuery: RowsByQueryMap;
|
|
116
|
+
} | {
|
|
117
|
+
readonly type: "Export";
|
|
118
|
+
readonly file: Uint8Array<ArrayBuffer>;
|
|
119
|
+
};
|
|
120
|
+
} | {
|
|
121
|
+
readonly type: "ForSharedWorker";
|
|
122
|
+
readonly message: {
|
|
123
|
+
readonly type: "CreateSyncMessages";
|
|
124
|
+
readonly protocolMessagesByOwnerId: ReadonlyMap<OwnerId, ProtocolMessage>;
|
|
111
125
|
} | {
|
|
112
|
-
readonly type: "
|
|
113
|
-
readonly
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
} | {
|
|
117
|
-
readonly type: "ApplySyncMessage";
|
|
118
|
-
readonly ownerId: OwnerId;
|
|
119
|
-
readonly didWriteMessages: boolean;
|
|
120
|
-
readonly result: Result<ApplyProtocolMessageAsClientResult, ProtocolError | AbortError>;
|
|
121
|
-
};
|
|
126
|
+
readonly type: "ApplySyncMessage";
|
|
127
|
+
readonly ownerId: OwnerId;
|
|
128
|
+
readonly didWriteMessages: boolean;
|
|
129
|
+
readonly result: Result<ApplyProtocolMessageAsClientResult, ProtocolError | AbortError>;
|
|
122
130
|
};
|
|
123
131
|
};
|
|
132
|
+
export type SharedWorkerDeps = WorkerDeps & CreateBroadcastChannelDep & CreateMessageChannelDep & CreateWebSocketDep & LockManagerDep;
|
|
133
|
+
export type EvoluInstanceId = Id & Brand<"EvoluInstance">;
|
|
124
134
|
export type SyncState = 123;
|
|
135
|
+
export declare const initSharedWorker: (self: SharedWorkerSelf<SharedWorkerInput, SharedWorkerOutput>) => Task<AsyncDisposableStack, never, SharedWorkerDeps>;
|
|
125
136
|
//# sourceMappingURL=Shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shared.d.ts","sourceRoot":"","sources":["../../../src/local-first/Shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAKL,KAAK,qBAAqB,EAC3B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Shared.d.ts","sourceRoot":"","sources":["../../../src/local-first/Shared.ts"],"names":[],"mappings":"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"}
|