@evolu/common 8.0.0-next.4 → 8.0.0-next.5

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/Task.js CHANGED
@@ -154,7 +154,7 @@ export const RunEvent = /*#__PURE__*/ object({
154
154
  // TODO:
155
155
  // Partial<TracerConfigDep> & // TODO:
156
156
  // Partial<TracerDep>; // TODO:
157
- const runDeps = {
157
+ const runDefaultDeps = {
158
158
  console: createConsole(),
159
159
  randomBytes: createRandomBytes(),
160
160
  random: createRandom(),
@@ -175,7 +175,7 @@ const runDeps = {
175
175
  * Node.js `uncaughtException`, `unhandledRejection`, and graceful shutdown
176
176
  * handling, and `@evolu/react-native` adds React Native global error handling.
177
177
  *
178
- * {@link RunDeps} provides default dependencies:
178
+ * {@link RunDefaultDeps} provides default dependencies:
179
179
  *
180
180
  * - {@link Time}
181
181
  * - {@link Console}
@@ -213,7 +213,7 @@ const runDeps = {
213
213
  * };
214
214
  *
215
215
  * // Composition root: create a Run with custom deps
216
- * type AppDeps = RunDeps & ConfigDep;
216
+ * type AppDeps = RunDefaultDeps & ConfigDep;
217
217
  *
218
218
  * const appDeps: AppDeps = {
219
219
  * ...testCreateDeps(), // or spread individual deps
@@ -226,17 +226,14 @@ const runDeps = {
226
226
  * const result = await run(fetchUser("123"));
227
227
  *
228
228
  * // TypeScript catches missing deps at compile time:
229
- * // await using run2 = createRun(); // Run<RunDeps>
229
+ * // await using run2 = createRun(); // Run<RunDefaultDeps>
230
230
  * // run2(fetchUser("123")); // Error: Property 'config' is missing
231
231
  * ```
232
232
  *
233
233
  * @group Creating Run
234
234
  */
235
- export const createRun = (deps) => {
236
- const mergedDeps = { ...runDeps, ...deps };
237
- return createRunInternal(createRef(mergedDeps))();
238
- };
239
- const createRunInternal = (depsRef) => (parent, daemon, abortBehavior, concurrencyBehavior) => {
235
+ export const createRun = (deps) => createRunInternal({ ...runDefaultDeps, ...deps });
236
+ const createRunInternal = (deps, parent, daemon, abortBehavior, concurrencyBehavior) => {
240
237
  const parentMask = parent?.abortMask ?? isAbortable;
241
238
  let abortMask;
242
239
  switch (abortBehavior) {
@@ -256,8 +253,7 @@ const createRunInternal = (depsRef) => (parent, daemon, abortBehavior, concurren
256
253
  let result;
257
254
  let outcome;
258
255
  let children = emptySet;
259
- const requestAbort = (reason) => {
260
- const abortError = reason;
256
+ const requestAbort = (abortError) => {
261
257
  if (abortMask === isAbortable)
262
258
  signalController.abort(abortError);
263
259
  requestController.abort(abortError);
@@ -266,7 +262,6 @@ const createRunInternal = (depsRef) => (parent, daemon, abortBehavior, concurren
266
262
  subscribeToAbort(parent.requestSignal, () => requestAbort(parent.requestSignal.reason), { signal: requestController.signal });
267
263
  }
268
264
  const emitEvent = (data) => {
269
- const deps = depsRef.get();
270
265
  if (!deps.runConfig?.eventsEnabled.get())
271
266
  return;
272
267
  const e = { id: self.id, timestamp: deps.time.now(), data };
@@ -274,16 +269,28 @@ const createRunInternal = (depsRef) => (parent, daemon, abortBehavior, concurren
274
269
  node.onEvent?.(e);
275
270
  }
276
271
  };
277
- const run = (task) => {
278
- const childRun = createRunInternal(depsRef)(self, daemon ?? self, getAbortBehavior(task), getConcurrencyBehavior(task));
272
+ const run = (task, taskDeps) => {
273
+ const childRun = createRunInternal(taskDeps === undefined
274
+ ? deps
275
+ : {
276
+ console: deps.console,
277
+ randomBytes: deps.randomBytes,
278
+ random: deps.random,
279
+ time: deps.time,
280
+ ...(deps.runConfig && {
281
+ runConfig: deps.runConfig,
282
+ }),
283
+ ...taskDeps,
284
+ }, self, daemon ?? self, getAbortBehavior(task), getConcurrencyBehavior(task));
279
285
  if (state !== running) {
280
286
  childRun.requestAbort(runStoppedAbortError);
281
287
  task = () => err(runStoppedAbortError);
282
288
  }
283
289
  else if (signalController.signal.aborted &&
284
290
  childRun.abortMask === isAbortable) {
285
- childRun.requestAbort(signalController.signal.reason);
286
- task = () => err(signalController.signal.reason);
291
+ const abortError = signalController.signal.reason;
292
+ childRun.requestAbort(abortError);
293
+ task = () => err(abortError);
287
294
  }
288
295
  const childFiber = Object.assign(Promise.try(task, childRun)
289
296
  .then(childRun.handleTaskFulfilled)
@@ -306,13 +313,17 @@ const createRunInternal = (depsRef) => (parent, daemon, abortBehavior, concurren
306
313
  emitEvent({ type: "ChildAdded", childId: childRun.id });
307
314
  return childFiber;
308
315
  };
316
+ let snapshot = null;
317
+ let disposingPromise = null;
309
318
  const self = run;
310
319
  {
311
320
  const run = self;
312
- const id = createId(depsRef.get());
313
- let snapshot = null;
314
- let disposingPromise = null;
315
- run.orThrow = async (task) => getOrThrow(await self(task));
321
+ const id = createId(deps);
322
+ async function orThrow(task, taskDeps) {
323
+ const result = taskDeps === undefined ? await self(task) : await self(task, taskDeps);
324
+ return getOrThrow(result);
325
+ }
326
+ run.orThrow = orThrow;
316
327
  run.id = id;
317
328
  run.parent = parent ?? null;
318
329
  run.signal = signalController.signal;
@@ -330,45 +341,38 @@ const createRunInternal = (depsRef) => (parent, daemon, abortBehavior, concurren
330
341
  !eqArrayStrict(snapshot.children, childSnapshots)) {
331
342
  snapshot = {
332
343
  id,
333
- state: state,
344
+ state,
334
345
  children: childSnapshots,
335
346
  abortMask,
336
347
  };
337
348
  }
338
349
  return snapshot;
339
350
  };
351
+ run.onEvent = undefined;
340
352
  run.daemon = daemon ?? self;
341
- run.create = () => run.daemon(createDeferred().task).run;
342
- Object.defineProperty(run, "deps", { get: depsRef.get });
353
+ run.create = (runDeps = deps) => {
354
+ const task = createDeferred().task;
355
+ return run.daemon(task, runDeps).run;
356
+ };
357
+ run.deps = deps;
343
358
  run.concurrency =
344
359
  concurrencyBehavior ?? parent?.concurrency ?? defaultConcurrency;
345
- run.addDeps = (newDeps) => {
346
- depsRef.modify((currentDeps) => {
347
- const duplicate = Object.keys(newDeps).find((k) => k in currentDeps);
348
- assert(!duplicate, `Dependency '${duplicate}' already added. ` +
349
- `This assert ensures dependencies are created once. ` +
350
- `Automatic deduplication would mask bugs.`);
351
- return [undefined, { ...currentDeps, ...newDeps }];
352
- });
353
- return self;
354
- };
355
360
  run[Symbol.asyncDispose] = () => {
356
361
  if (disposingPromise)
357
362
  return disposingPromise;
358
363
  state = { type: "Disposing" };
359
364
  emitEvent({ type: "StateChanged", state });
360
365
  requestAbort(runStoppedAbortError);
361
- disposingPromise = Promise.allSettled((run.ownTaskSettled
362
- ? [run.ownTaskSettled.promise, ...children]
366
+ disposingPromise = Promise.allSettled((self.ownTaskSettled
367
+ ? [self.ownTaskSettled.promise, ...children]
363
368
  : children))
364
369
  .then(lazyVoid)
365
370
  .finally(() => {
366
371
  /**
367
- * Root and daemon Runs have no own Task, so
368
- * `run.handleTaskFulfilled` never populates their terminal values.
369
- * In that case disposal publishes `ok()` for both `result` and
370
- * `outcome`. Task-backed Runs normally reach this point with both
371
- * values already set.
372
+ * Root and daemon Runs have no own Task, so `run.handleTaskFulfilled`
373
+ * never populates their terminal values. In that case disposal
374
+ * publishes `ok()` for both `result` and `outcome`. Task-backed Runs
375
+ * normally reach this point with both values already set.
372
376
  */
373
377
  [result, outcome] = [result ?? ok(), outcome ?? ok()];
374
378
  state = { type: "Settled", result, outcome };
@@ -381,15 +385,15 @@ const createRunInternal = (depsRef) => (parent, daemon, abortBehavior, concurren
381
385
  run.requestAbort = requestAbort;
382
386
  run.requestSignal = requestController.signal;
383
387
  run.handleTaskFulfilled = (taskOutcome) => {
384
- const taskResult = run.signal.aborted
385
- ? err(run.signal.reason)
388
+ const taskResult = self.signal.aborted
389
+ ? err(self.signal.reason)
386
390
  : taskOutcome;
387
391
  result = taskResult;
388
392
  outcome = taskOutcome;
389
393
  return taskResult;
390
394
  };
391
395
  run.handleTaskSettled = () => {
392
- run.ownTaskSettled?.resolve();
396
+ self.ownTaskSettled?.resolve();
393
397
  };
394
398
  }
395
399
  return self;
@@ -432,16 +436,19 @@ const abortBehavior = (behavior) => (task) => Object.assign((run) => run(task),
432
436
  /**
433
437
  * Makes a {@link Task} unabortable.
434
438
  *
435
- * Once started, an unabortable Task always completes abort requests are
436
- * ignored and `signal.aborted` remains `false`.
439
+ * Once started, an unabortable Task always completes. Abort requests are masked
440
+ * while it runs, and `signal.aborted` remains `false` inside the Task.
437
441
  *
438
- * If the parent {@link Run} is already disposing or settled, `run(task)`
442
+ * `unabortable` controls abort signal propagation; it does not force work to
443
+ * start. If the parent {@link Run} is already disposing or settled, `run(task)`
439
444
  * short-circuits before task execution and returns `err(AbortError)` with
440
445
  * {@link runStoppedError} as reason. So `unabortable` means “do not interrupt
441
446
  * this Task once it has started”, not “remove AbortError from its type”.
442
447
  *
443
- * When that pre-start abort would be a programmer error, assert it explicitly
444
- * with `assertNotAborted` after awaiting the result.
448
+ * Most callers should still propagate or ignore {@link AbortError} according to
449
+ * ordinary structured-concurrency ownership. When abort would violate a
450
+ * lifecycle invariant, await the unabortable Task and use
451
+ * {@link assertNotAborted} to fail fast if it could not even start.
445
452
  *
446
453
  * ### Example
447
454
  *
@@ -804,7 +811,7 @@ export const timeoutError = { type: "TimeoutError" };
804
811
  * @group Composition
805
812
  * @see {@link RetryOptions}
806
813
  */
807
- export const retry = (task, schedule, { retryable = lazyTrue, onRetry, } = {}) => async (run) => {
814
+ export const retry = (task, schedule, { retryable = lazyTrue, onRetry } = {}) => async (run) => {
808
815
  const step = schedule(run.deps);
809
816
  let attempt = onePositiveInt;
810
817
  let error;
@@ -887,7 +894,7 @@ export const retry = (task, schedule, { retryable = lazyTrue, onRetry, } = {}) =
887
894
  *
888
895
  * @group Composition
889
896
  */
890
- export const repeat = (task, schedule, { repeatable = lazyTrue, onRepeat, } = {}) => async (run) => {
897
+ export const repeat = (task, schedule, { repeatable = lazyTrue, onRepeat } = {}) => async (run) => {
891
898
  const step = schedule(run.deps);
892
899
  let lastResult;
893
900
  let attempt = onePositiveInt;
@@ -1442,7 +1449,8 @@ export const anyAbortError = { type: "AnyAbortError" };
1442
1449
  const collect = (type, input, { collect = true, abortReason = type === "all" ? allAbortError : allSettledAbortError, } = {}) => {
1443
1450
  const stopOn = type === "all" ? "error" : null;
1444
1451
  if (isIterable(input)) {
1445
- const array = arrayFrom(input);
1452
+ const tasks = input;
1453
+ const array = arrayFrom(tasks);
1446
1454
  if (!isNonEmptyArray(array))
1447
1455
  return () => ok(collect ? emptyArray : undefined);
1448
1456
  return pool(array, {
@@ -1528,7 +1536,7 @@ function pool(tasksIterable, { stopOn = null, collect, abortReason, allFailed, }
1528
1536
  worker.abort(reason);
1529
1537
  };
1530
1538
  const workerCount = Math.min(run.concurrency, length);
1531
- const workers = arrayFrom(workerCount, () => run.daemon(worker));
1539
+ const workers = arrayFrom(workerCount, () => run.daemon(worker, run.deps));
1532
1540
  const _ = __addDisposableResource(env_8, new DisposableStack(), false);
1533
1541
  _.defer(() => {
1534
1542
  abortWorkers(abortReason);
@@ -6,21 +6,21 @@
6
6
  import type { Brand } from "./Brand.js";
7
7
  import { type TestConsoleDep } from "./Console.js";
8
8
  import { type RandomLibDep } from "./Random.js";
9
- import { type Run, type RunDeps } from "./Task.js";
9
+ import { type Run, type RunDefaultDeps } from "./Task.js";
10
10
  import { type Duration, type TestTimeDep } from "./Time.js";
11
11
  import { type Id } from "./Type.js";
12
12
  export type TestCreateId = <B extends string = never>() => [B] extends [never] ? Id : Id & Brand<B>;
13
13
  /**
14
14
  * Cheap deterministic baseline deps for tests.
15
15
  *
16
- * `TestDeps` includes test-friendly replacements for {@link RunDeps}, such as
17
- * {@link TestConsole} and {@link TestTime}, plus extra helpers commonly useful in
18
- * tests and fixtures, such as `randomLib` (only that for now).
16
+ * `TestDeps` includes test-friendly replacements for {@link RunDefaultDeps},
17
+ * such as {@link TestConsole} and {@link TestTime}, plus extra helpers commonly
18
+ * useful in tests and fixtures, such as `randomLib` (only that for now).
19
19
  *
20
20
  * Use it directly for synchronous test setup, fixtures, and helpers. It is also
21
21
  * intentionally the base deps used by {@link testCreateRun}.
22
22
  */
23
- export type TestDeps = Omit<RunDeps, "console" | "time"> & TestConsoleDep & TestTimeDep & RandomLibDep;
23
+ export type TestDeps = Omit<RunDefaultDeps, "console" | "time"> & TestConsoleDep & TestTimeDep & RandomLibDep;
24
24
  /**
25
25
  * Creates deterministic {@link TestDeps}.
26
26
  *
@@ -68,7 +68,7 @@ export declare const testCreateDeps: (options?: {
68
68
  * ### Example
69
69
  *
70
70
  * ```ts
71
- * // Built-in TestTime
71
+ * // Default TestTime
72
72
  * await using run = testCreateRun();
73
73
  * const fiber = run(sleep("1s"));
74
74
  * run.deps.time.advance("1s");
@@ -77,9 +77,7 @@ export declare const testCreateDeps: (options?: {
77
77
  * // For a single test, create the dependency using the Run.
78
78
  * await using run = testCreateRun();
79
79
  * await using foo = await run.orThrow(createFoo());
80
- * const runWithFoo = run.addDeps({ foo });
81
- *
82
- * expect(runWithFoo.deps.foo).toBe(foo);
80
+ * await run.orThrow(taskThatNeedsFoo, { foo });
83
81
  *
84
82
  * // If multiple tests need the same setup, create a disposable helper.
85
83
  * // Then `await using setup` disposes everything the helper owns.
@@ -87,14 +85,15 @@ export declare const testCreateDeps: (options?: {
87
85
  * await using disposer = new AsyncDisposableStack();
88
86
  * const run = disposer.use(testCreateRun());
89
87
  * const foo = disposer.use(await run.orThrow(createFoo()));
88
+ * const runWithFoo = disposer.use(run.create({ ...run.deps, foo }));
90
89
  * const disposables = disposer.move();
91
90
  *
92
91
  * // Return whatever the tests need: a Run with the dependency,
93
92
  * // the dependency itself, or both.
94
93
  * return {
95
- * run: run.addDeps({ foo }),
94
+ * run: runWithFoo,
96
95
  * foo,
97
- * [Symbol.asyncDispose]: () => moved.disposeAsync(),
96
+ * [Symbol.asyncDispose]: () => disposables.disposeAsync(),
98
97
  * };
99
98
  * };
100
99
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Test.d.ts","sourceRoot":"","sources":["../../src/Test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAa,KAAK,GAAG,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAIL,KAAK,QAAQ,EAEb,KAAK,WAAW,EACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAY,KAAK,EAAE,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAC1E,EAAE,GACF,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAElB;;;;;;;;;GASG;AACH,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC,GACtD,cAAc,GACd,WAAW,GACX,YAAY,CAAC;AAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,cAAc,GAAI,UAAU;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,KAAG,QAQH,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;AAE/C,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AAO7D;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAC/B,WAAU,QAAoB,KAC7B,OAAO,CAAC,IAAI,CAAyB,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,YAAY,QAAO,YAQ/B,CAAC"}
1
+ {"version":3,"file":"Test.d.ts","sourceRoot":"","sources":["../../src/Test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAa,KAAK,GAAG,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAIL,KAAK,QAAQ,EAEb,KAAK,WAAW,EACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAY,KAAK,EAAE,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAC1E,EAAE,GACF,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAElB;;;;;;;;;GASG;AACH,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,MAAM,CAAC,GAC7D,cAAc,GACd,WAAW,GACX,YAAY,CAAC;AAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,cAAc,GAAI,UAAU;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,KAAG,QAQH,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;AAE/C,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AAO7D;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAC/B,WAAU,QAAoB,KAC7B,OAAO,CAAC,IAAI,CAAyB,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,YAAY,QAAO,YAQ/B,CAAC"}
@@ -294,12 +294,4 @@ export type ExtractType<TUnion extends {
294
294
  }, TType extends TUnion["type"]> = Extract<TUnion, {
295
295
  readonly type: TType;
296
296
  }>;
297
- /**
298
- * Constrains `T` to only contain keys not present in `Existing`.
299
- *
300
- * Use as a generic constraint to prevent overriding existing properties.
301
- */
302
- export type NewKeys<T, Existing> = {
303
- [K in keyof T]: K extends keyof Existing ? never : T[K];
304
- };
305
297
  //# sourceMappingURL=Types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Types.d.ts","sourceRoot":"","sources":["../../src/Types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Types.d.ts","sourceRoot":"","sources":["../../src/Types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../../src/local-first/Db.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,aAAa,EAGd,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,OAAO,KAAK,EACV,qBAAqB,EAGrB,YAAY,EACb,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AASvC,OAAO,KAAK,EACV,yBAAyB,EACzB,iBAAiB,EACjB,MAAM,EACN,UAAU,EACV,UAAU,EACX,MAAM,cAAc,CAAC;AAqBtB,OAAO,KAAK,EAEV,aAAa,EACb,cAAc,EAGf,MAAM,aAAa,CAAC;AA+BrB,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;CACjE;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;CACzC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GACnC,yBAAyB,GACzB,cAAc,GACd,qBAAqB,CAAC;AAExB,eAAO,MAAM,aAAa,GACvB,MAAM,UAAU,CAAC,YAAY,CAAC,KAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CA8O/D,CAAC"}
1
+ {"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../../src/local-first/Db.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,aAAa,EAGd,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,OAAO,KAAK,EACV,qBAAqB,EAGrB,YAAY,EACb,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AASvC,OAAO,KAAK,EACV,yBAAyB,EACzB,iBAAiB,EACjB,MAAM,EACN,UAAU,EACV,UAAU,EACX,MAAM,cAAc,CAAC;AAqBtB,OAAO,KAAK,EAEV,aAAa,EACb,cAAc,EAGf,MAAM,aAAa,CAAC;AA+BrB,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;CACjE;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;CACzC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GACnC,yBAAyB,GACzB,cAAc,GACd,qBAAqB,CAAC;AAExB,eAAO,MAAM,aAAa,GACvB,MAAM,UAAU,CAAC,YAAY,CAAC,KAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAgP/D,CAAC"}
@@ -77,10 +77,9 @@ export const startDbWorker = (self) => async (run) => {
77
77
  try {
78
78
  const disposer = __addDisposableResource(env_1, new AsyncDisposableStack(), true);
79
79
  disposer.use(self);
80
- const dbWorkerRun = disposer.use(run.create());
81
- const { deps } = dbWorkerRun;
80
+ const { deps } = run;
82
81
  let initialized = false;
83
- const initMessage = await dbWorkerRun.orThrow(callback(({ ok }) => {
82
+ const initMessage = await run.orThrow(callback(({ ok }) => {
84
83
  self.onMessage = (message) => {
85
84
  assert(!initialized, "DbWorker must be initialized only once");
86
85
  initialized = true;
@@ -100,23 +99,24 @@ export const startDbWorker = (self) => async (run) => {
100
99
  });
101
100
  }));
102
101
  console.debug("createDbWorker");
103
- disposer.use(await dbWorkerRun.orThrow(acquireLeaderLock(initMessage.name)));
102
+ disposer.use(await run.orThrow(acquireLeaderLock(initMessage.name)));
104
103
  port.postMessage({ type: "LeaderAcquired", name: initMessage.name });
105
- const sqlite = disposer.use(await dbWorkerRun.orThrow(createSqlite(initMessage.name, initMessage.memoryOnly
104
+ const sqlite = disposer.use(await run.orThrow(createSqlite(initMessage.name, initMessage.memoryOnly
106
105
  ? { mode: "memory" }
107
106
  : { mode: "encrypted", encryptionKey: initMessage.encryptionKey })));
108
107
  console.debug("SQLite created");
109
108
  const baseSqliteStorage = createBaseSqliteStorage({
110
109
  sqlite,
111
- ...dbWorkerRun.deps,
110
+ ...deps,
112
111
  });
113
112
  const dbDeps = {
114
- ...dbWorkerRun.deps,
113
+ ...deps,
115
114
  sqlite,
116
115
  sqliteSchema: initMessage.sqliteSchema,
117
116
  baseSqliteStorage,
118
117
  timestampConfig: { maxDrift: defaultTimestampMaxDrift },
119
118
  };
119
+ const dbWorkerRun = disposer.use(run.create());
120
120
  const currentSchema = getEvoluSqliteSchema(dbDeps)();
121
121
  const dbIsInitialized = "evolu_version" in currentSchema.tables;
122
122
  const clock = createClock(dbDeps)(dbIsInitialized);
@@ -135,7 +135,6 @@ export const startDbWorker = (self) => async (run) => {
135
135
  },
136
136
  });
137
137
  const disposables = disposer.move();
138
- const dbWorkerRunWithStorage = dbWorkerRun.addDeps({ storage });
139
138
  port.onMessage = (input) => {
140
139
  if (input.type === "Dispose") {
141
140
  if (!disposables.disposed)
@@ -217,7 +216,8 @@ export const startDbWorker = (self) => async (run) => {
217
216
  }
218
217
  case "ApplySyncMessage": {
219
218
  const { owner, inputMessage } = request.message;
220
- dbWorkerRunWithStorage(async (run) => {
219
+ dbWorkerRun(async (run) => {
220
+ const { storage } = run.deps;
221
221
  storage.setRequestContext(owner.encryptionKey);
222
222
  const result = await run(applyProtocolMessageAsClient(inputMessage, {
223
223
  writeKey: owner.writeKey,
@@ -233,7 +233,7 @@ export const startDbWorker = (self) => async (run) => {
233
233
  },
234
234
  });
235
235
  return ok();
236
- });
236
+ }, { storage });
237
237
  break;
238
238
  }
239
239
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"Shared.d.ts","sourceRoot":"","sources":["../../../src/local-first/Shared.ts"],"names":[],"mappings":"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"}
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;AAErB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAS3E,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EACL,UAAU,EAIV,KAAK,IAAI,EACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAa,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EACV,YAAY,IAAI,kBAAkB,EAClC,yBAAyB,EACzB,uBAAuB,EAEvB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAkB,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAIL,KAAK,kCAAkC,EACvC,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,KAAK,EAEV,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,YAAY,GAAG,kBAAkB,CAC3C,iBAAiB,EACjB,kBAAkB,CACnB,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;CACrC;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;CACrC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;CAChE,CAAC;AAEN,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAE9C,MAAM,MAAM,mBAAmB,GAC3B;IACE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B,CAAC;AAEN,eAAO,MAAM,uCAAuC,iCACpB,CAAC;AAEjC,MAAM,MAAM,UAAU,GAClB;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;CAChD,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;QAC1B,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;KACnC,CAAC,CAAC;CACJ,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;CAC9C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,WAAW,GACnB;IACE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;CAC3C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;CACjC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CACxC,CAAC;AAEN,MAAM,MAAM,aAAa,GACrB,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG;IAClB,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;CACnC,CAAC,GACF,KAAK,CAAC,SAAS,CAAC,CAAC;AAErB,MAAM,MAAM,eAAe,GACvB;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC;CAC1E,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,OAAO,EACZ;QACE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;QACpC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC;KAC/C,GACD;QACE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;QAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;KACnC,CAAC;CACP,CAAC;AAEN,MAAM,MAAM,cAAc,GACtB;IACE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;CAC3C,CAAC;AAEN,MAAM,MAAM,sBAAsB,GAC9B;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,OAAO,EACZ;QACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QACxB,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CACrC,OAAO,EACP,qBAAqB,CAAC,WAAW,CAAC,CACnC,CAAC;QACF,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;KACtC,GACD;QACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;KACtC,GACD;QACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QACxB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;KACxC,CAAC;CACP,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,OAAO,EACZ;QACE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;QACpC,QAAQ,CAAC,yBAAyB,EAAE,WAAW,CAC7C,OAAO,EACP,eAAe,CAChB,CAAC;KACH,GACD;QACE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;QAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CACrB,kCAAkC,EAClC,aAAa,GAAG,UAAU,CAC3B,CAAC;KACH,CAAC;CACP,CAAC;AAEN,MAAM,MAAM,gBAAgB,GAAG,UAAU,GACvC,yBAAyB,GACzB,uBAAuB,GACvB,kBAAkB,GAClB,cAAc,CAAC;AAwCjB,MAAM,MAAM,eAAe,GAAG,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;AAE1D,MAAM,MAAM,SAAS,GAAG,GAAG,CAAC;AAE5B,eAAO,MAAM,gBAAgB,GAEzB,MAAM,gBAAgB,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,KAC5D,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,gBAAgB,CAkKpD,CAAC"}
@@ -56,16 +56,15 @@ 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 { emptyArray, firstInArray, isNonEmptyArray, shiftFromArray, } from "../Array.js";
59
- import { assert, assertNotDisposed } from "../Assert.js";
59
+ import { assert, assertNotAborted, assertNotDisposed } from "../Assert.js";
60
60
  import { createCallbacks } from "../Callbacks.js";
61
- import { exhaustiveCheck } from "../Function.js";
62
61
  import { acquireLeaderLock } from "../LockManager.js";
63
62
  import { structuralLookup } from "../Lookup.js";
64
63
  import { createRefCountByKey } from "../RefCount.js";
65
64
  import { createSharedResourceByKey, createSharedResourceByKeyWithClaims, } from "../Resource.js";
66
65
  import { ok } from "../Result.js";
67
66
  import { createStore } from "../Store.js";
68
- import { AbortError, createMutex } from "../Task.js";
67
+ import { AbortError, createMutex, unabortable, } from "../Task.js";
69
68
  import {} from "../Type.js";
70
69
  import { createProtocolMessageForUnsubscribe, createProtocolMessageFromCrdtMessages, parseProtocolHeader, } from "./Protocol.js";
71
70
  import { makePatches, } from "./Query.js";
@@ -96,8 +95,10 @@ export const initSharedWorker = (self) => async (run) => {
96
95
  }
97
96
  case "CreateEvolu": {
98
97
  void sharedWorkerRun(async (run) => {
99
- const tenant = await run.orThrow(tenantsByName.acquire(message));
100
- tenant.addInstance(message, () => void sharedWorkerRun(tenantsByName.release(message)));
98
+ const tenant = await run(unabortable(tenantsByName.acquire(message)));
99
+ if (!tenant.ok)
100
+ return tenant;
101
+ tenant.value.addInstance(message, () => void sharedWorkerRun(tenantsByName.release(message)));
101
102
  return ok();
102
103
  });
103
104
  break;
@@ -161,12 +162,14 @@ export const initSharedWorker = (self) => async (run) => {
161
162
  idleDisposeAfter: "3s",
162
163
  resourceLookup: structuralLookup,
163
164
  })));
164
- const sharedWorkerRun = run.create().addDeps({
165
+ const sharedWorkerRun = run.create({
166
+ ...deps,
165
167
  postConsoleEntryOrError,
166
168
  tabLeaderPortStore,
167
169
  transports,
168
170
  });
169
171
  const tenantsByName = disposer.use(await sharedWorkerRun.orThrow(createSharedResourceByKey(createEvoluTenant, {
172
+ idleDisposeAfter: "3s",
170
173
  lookup: (message) => message.name,
171
174
  })));
172
175
  sharedWorkerReady.resolve();
@@ -235,8 +238,6 @@ const createEvoluTenant = ({ name, consoleLevel, sqliteSchema, encryptionKey, me
235
238
  callbacks.execute(message.callbackId, message);
236
239
  break;
237
240
  }
238
- default:
239
- exhaustiveCheck(message);
240
241
  }
241
242
  };
242
243
  tabLeaderPort.postMessage({
@@ -266,8 +267,6 @@ const createEvoluTenant = ({ name, consoleLevel, sqliteSchema, encryptionKey, me
266
267
  case "ForSharedWorker":
267
268
  handleResponseForSharedWorker(response);
268
269
  break;
269
- default:
270
- exhaustiveCheck(response);
271
270
  }
272
271
  // Complete the current queue item and continue with the next one.
273
272
  shiftFromArray(queue);
@@ -283,7 +282,16 @@ const createEvoluTenant = ({ name, consoleLevel, sqliteSchema, encryptionKey, me
283
282
  dbWorkerPort?.postMessage({ type: "Dispose" });
284
283
  dbWorkerPort = null;
285
284
  queueRequestInFlight = false;
286
- const _ = __addDisposableResource(env_4, await tenantRun.orThrow(acquireLeaderLock(name)), true);
285
+ // The DbWorker holds this tenant leader lock while it is alive. Tenant
286
+ // disposal sends Dispose, then acquires the same lock to wait until the
287
+ // DbWorker releases it: either because Dispose was delivered or because
288
+ // the hosting tab closed. The wait is unabortable because tenant disposal
289
+ // must finish even after tenantRun receives an abort request.
290
+ const lock = await tenantRun(acquireLeaderLock(name));
291
+ // AbortError here means tenantRun was already disposed before this
292
+ // cleanup could start, violating the disposal ordering above.
293
+ assertNotAborted(lock);
294
+ const _ = __addDisposableResource(env_4, lock.value, true);
287
295
  }
288
296
  catch (e_4) {
289
297
  env_4.error = e_4;
@@ -346,8 +354,6 @@ const createEvoluTenant = ({ name, consoleLevel, sqliteSchema, encryptionKey, me
346
354
  case "Export":
347
355
  instance.port.postMessage({ type: "OnExport", file: response.message.file }, [response.message.file.buffer]);
348
356
  break;
349
- default:
350
- exhaustiveCheck(response.message);
351
357
  }
352
358
  };
353
359
  const handleResponseForSharedWorker = (response) => {
@@ -382,13 +388,9 @@ const createEvoluTenant = ({ name, consoleLevel, sqliteSchema, encryptionKey, me
382
388
  case "Broadcast":
383
389
  case "NoResponse":
384
390
  break;
385
- default:
386
- exhaustiveCheck(response.message.result.value);
387
391
  }
388
392
  }
389
393
  break;
390
- default:
391
- exhaustiveCheck(response.message);
392
394
  }
393
395
  };
394
396
  const sendProtocolMessagesByOwnerId = (protocolMessagesByOwnerId) => {
@@ -461,14 +463,14 @@ const createEvoluTenant = ({ name, consoleLevel, sqliteSchema, encryptionKey, me
461
463
  console.info("evoluDispose", { name, id: instance.id });
462
464
  });
463
465
  disposer.use(instance.port);
464
- void tenantRun(acquireLeaderLock(message.id)).then((result) => {
465
- if (!result.ok)
466
+ // The main-thread Evolu instance holds this per-instance leader lock
467
+ // while it is alive. Acquiring the same lock here means the main
468
+ // thread instance was disposed or its tab closed, so the tenant-side
469
+ // instance must dispose itself.
470
+ void tenantRun(acquireLeaderLock(message.id)).then((lock) => {
471
+ if (!lock.ok)
466
472
  return;
467
- const lock = result.value;
468
- if (disposer.disposed) {
469
- return lock[Symbol.asyncDispose]();
470
- }
471
- disposer.use(lock);
473
+ disposer.use(lock.value);
472
474
  return disposer.disposeAsync();
473
475
  });
474
476
  instance.port.onMessage = (message) => {
@@ -500,8 +502,6 @@ const createEvoluTenant = ({ name, consoleLevel, sqliteSchema, encryptionKey, me
500
502
  }));
501
503
  break;
502
504
  }
503
- default:
504
- exhaustiveCheck(message);
505
505
  }
506
506
  };
507
507
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evolu/common",
3
- "version": "8.0.0-next.4",
3
+ "version": "8.0.0-next.5",
4
4
  "description": "TypeScript library and local-first platform",
5
5
  "keywords": [
6
6
  "evolu",
package/src/Assert.ts CHANGED
@@ -151,9 +151,14 @@ export function assertNotAborted<T, E>(
151
151
  * await disposer.disposeAsync();
152
152
  * assertNotDisposed(disposer); // throws Error
153
153
  * ```
154
+ *
155
+ * This is the JavaScript equivalent of the .NET `ObjectDisposedException`
156
+ * pattern: once a helper has been disposed, calling its synchronous methods is
157
+ * a programmer error and should throw immediately instead of continuing with
158
+ * invalid state.
154
159
  */
155
160
  export const assertNotDisposed = (
156
161
  value: DisposableStack | AsyncDisposableStack,
157
162
  ): void => {
158
- assert(!value.disposed, "Expected value to not be disposed.");
163
+ assert(!value.disposed, "Cannot use a disposed object.");
159
164
  };