@evolu/common 8.18.0 → 8.19.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.
@@ -140,7 +140,7 @@ export interface SqliteQueryOptions {
140
140
  * statements can improve performance for repeated queries by reusing the
141
141
  * compiled query.
142
142
  *
143
- * See: {@link https://sqlite.org/wasm/doc/trunk/api-oo1.md#db-prepare}.
143
+ * See: {@link https://sqlite.org/c3ref/prepare.html}.
144
144
  */
145
145
  readonly prepare?: boolean;
146
146
  }
@@ -48,7 +48,7 @@ export * from "./Type.ts";
48
48
  export * from "./Types.ts";
49
49
  export * from "./WebSocket.ts";
50
50
  export * from "./Worker.ts";
51
- export type { UnsupportedDbVersionError } from "./local-first/Db.ts";
51
+ export type { DatabaseHeldError, UnsupportedDbVersionError, } from "./local-first/Db.ts";
52
52
  export { AppName, createEvolu, maxMutationSize, testAppName, } from "./local-first/Evolu.ts";
53
53
  export type { AppNameError, Evolu, EvoluConfig, EvoluDeps, EvoluError, UnuseOwner, } from "./local-first/Evolu.ts";
54
54
  export * from "./local-first/Owner.ts";
@@ -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,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,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,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACL,OAAO,EACP,WAAW,EACX,eAAe,EACf,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,YAAY,EACZ,KAAK,EACL,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,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,EACL,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,UAAU,EACV,UAAU,GACX,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,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,mBAAmB,EACnB,cAAc,GACf,MAAM,4BAA4B,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,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,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,EACV,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,OAAO,EACP,WAAW,EACX,eAAe,EACf,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,YAAY,EACZ,KAAK,EACL,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,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,EACL,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,UAAU,EACV,UAAU,GACX,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,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,mBAAmB,EACnB,cAAc,GACf,MAAM,4BAA4B,CAAC"}
@@ -23,8 +23,10 @@
23
23
  * version 1. A newer stored version refuses startup with
24
24
  * {@link UnsupportedDbVersionError}. The refusal returns from the startup
25
25
  * transaction before anything is written and is posted to the SharedWorker; the
26
- * worker then exits and releases its resources. The single version row is
27
- * created in the same transaction as the other system tables.
26
+ * worker then exits and releases its resources. A database whose files another
27
+ * context keeps holding refuses startup the same way, before it is opened, with
28
+ * {@link DatabaseHeldError}; see {@link WaitForDatabaseRelease}. The single
29
+ * version row is created in the same transaction as the other system tables.
28
30
  *
29
31
  * Code released before the version record existed never reads it. It recognizes
30
32
  * an initialized database by the `evolu_version` table alone, so it opens a
@@ -63,7 +65,23 @@ export type CreateDbWorker = () => DbWorker;
63
65
  export interface CreateDbWorkerDep {
64
66
  readonly createDbWorker: CreateDbWorker;
65
67
  }
66
- export type DbWorkerDeps = WorkerDeps & CreateBroadcastChannelDep & LockManagerDep & CreateSqliteDriverDep;
68
+ export type DbWorkerDeps = WorkerDeps & CreateBroadcastChannelDep & LockManagerDep & CreateSqliteDriverDep & Partial<WaitForDatabaseReleaseDep>;
69
+ /**
70
+ * Waits until no other context holds the files of the persistent database
71
+ * `name`, and fails with {@link DatabaseHeldError} when they stay held.
72
+ *
73
+ * {@link startDbWorker} calls it, except for a memory-only database, while it
74
+ * holds the database's leader lock and before it opens the database. Only a
75
+ * context that ended without closing the database can then hold its files, and
76
+ * such a context can only release them, so the files stay free until the
77
+ * database opens. Platforms whose databases cannot be held this way, such as
78
+ * Node.js and React Native, omit it.
79
+ */
80
+ export type WaitForDatabaseRelease = (name: Name) => Task<void, DatabaseHeldError>;
81
+ /** Dependency wrapper for {@link WaitForDatabaseRelease}. */
82
+ export interface WaitForDatabaseReleaseDep {
83
+ readonly waitForDatabaseRelease: WaitForDatabaseRelease;
84
+ }
67
85
  /**
68
86
  * The stored database version is newer than this code supports. Newer code
69
87
  * created or migrated the database, which is left unchanged. This happens when
@@ -79,6 +97,17 @@ export interface UnsupportedDbVersionError extends Typed<"UnsupportedDbVersionEr
79
97
  readonly storedVersion: PositiveInt;
80
98
  readonly supportedVersion: PositiveInt;
81
99
  }
100
+ /**
101
+ * Another context kept holding the database's files, so the database did not
102
+ * open; see {@link WaitForDatabaseRelease}.
103
+ *
104
+ * A browser can keep the files of a worker that ended without closing them
105
+ * until the browser restarts. Ask the user to close the app's other tabs or to
106
+ * restart the browser, then to reload the app.
107
+ */
108
+ export interface DatabaseHeldError extends Typed<"DatabaseHeldError"> {
109
+ readonly name: Name;
110
+ }
82
111
  /**
83
112
  * Starts the platform-agnostic Evolu DbWorker and owns its resources until
84
113
  * startup is refused, the worker receives a dispose message, the SharedWorker
@@ -1 +1 @@
1
- {"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../../src/local-first/Db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAeH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,aAAa,EAGd,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOxD,OAAO,KAAK,EACV,qBAAqB,EAGrB,YAAY,EACb,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAsB,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAO3D,OAAO,EASL,WAAW,EAEX,KAAK,IAAI,EACT,KAAK,KAAK,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,yBAAyB,EACzB,iBAAiB,EACjB,MAAM,EACN,UAAU,EACV,UAAU,EACX,MAAM,cAAc,CAAC;AAuBtB,OAAO,KAAK,EAEV,aAAa,EACb,cAAc,EAGd,cAAc,EACf,MAAM,aAAa,CAAC;AAgCrB,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;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,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;AAKxB;;;;;;;;;;GAUG;AACH,MAAM,WAAW,yBAA0B,SAAQ,KAAK,CAAC,2BAA2B,CAAC;IACnF,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC;CACxC;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,SACjB,UAAU,CAAC,YAAY,CAAC,KAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CA8Q/D,CAAC"}
1
+ {"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../../src/local-first/Db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAeH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,aAAa,EAGd,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOxD,OAAO,KAAK,EACV,qBAAqB,EAGrB,YAAY,EACb,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAsB,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAO3D,OAAO,EASL,WAAW,EAEX,KAAK,IAAI,EACT,KAAK,KAAK,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,yBAAyB,EACzB,iBAAiB,EACjB,MAAM,EACN,UAAU,EACV,UAAU,EACX,MAAM,cAAc,CAAC;AAuBtB,OAAO,KAAK,EAEV,aAAa,EACb,cAAc,EAGd,cAAc,EACf,MAAM,aAAa,CAAC;AAgCrB,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;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,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,GACrB,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAErC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,IAAI,EAAE,IAAI,KACP,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAEnC,6DAA6D;AAC7D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;CACzD;AAKD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,yBAA0B,SAAQ,KAAK,CAAC,2BAA2B,CAAC;IACnF,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAkB,SAAQ,KAAK,CAAC,mBAAmB,CAAC;IACnE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,SACjB,UAAU,CAAC,YAAY,CAAC,KAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAuR/D,CAAC"}
@@ -23,8 +23,10 @@
23
23
  * version 1. A newer stored version refuses startup with
24
24
  * {@link UnsupportedDbVersionError}. The refusal returns from the startup
25
25
  * transaction before anything is written and is posted to the SharedWorker; the
26
- * worker then exits and releases its resources. The single version row is
27
- * created in the same transaction as the other system tables.
26
+ * worker then exits and releases its resources. A database whose files another
27
+ * context keeps holding refuses startup the same way, before it is opened, with
28
+ * {@link DatabaseHeldError}; see {@link WaitForDatabaseRelease}. The single
29
+ * version row is created in the same transaction as the other system tables.
28
30
  *
29
31
  * Code released before the version record existed never reads it. It recognizes
30
32
  * an initialized database by the `evolu_version` table alone, so it opens a
@@ -135,6 +137,14 @@ export const startDbWorker = (self) => async (run) => {
135
137
  postConsoleEntry(consoleEntryOrErrorBroadcastChannel, entry);
136
138
  }));
137
139
  disposer.use(await run.ok(acquireLeaderLock(initMessage.name)));
140
+ if (!initMessage.memoryOnly && deps.waitForDatabaseRelease) {
141
+ const released = await run(deps.waitForDatabaseRelease(initMessage.name));
142
+ if (!released.ok) {
143
+ // Returning lets the disposer release the database lock.
144
+ port.postMessage({ type: "LeaderRefused", error: released.error });
145
+ return ok();
146
+ }
147
+ }
138
148
  const sqlite = disposer.use(await run.ok(createSqlite(initMessage.name, initMessage.memoryOnly
139
149
  ? { mode: "memory" }
140
150
  : { mode: "encrypted", encryptionKey: initMessage.encryptionKey })));
@@ -12,7 +12,7 @@ import type { Listener, ReadonlyStore, Unsubscribe } from "../Store.ts";
12
12
  import type { Task } from "../Task.ts";
13
13
  import { Name, PositiveInt, type TypeError, UrlSafeString } from "../Type.ts";
14
14
  import type { CreateBroadcastChannelDep, CreateMessageChannelDep } from "../Worker.ts";
15
- import type { CreateDbWorkerDep, UnsupportedDbVersionError } from "./Db.ts";
15
+ import type { CreateDbWorkerDep, DatabaseHeldError, UnsupportedDbVersionError } from "./Db.ts";
16
16
  import type { AppOwner, Owner, OwnerId, OwnerTransport, ReadonlyOwner } from "./Owner.ts";
17
17
  import type { Queries, QueriesToQueryRowsPromises, Query, QueryRows, Row } from "./Query.ts";
18
18
  import type { EvoluSchema, IndexesConfig, Mutation, MutationValues, ValidateSchema } from "./Schema.ts";
@@ -794,6 +794,9 @@ export type DevicePersistence = "Persisted" | "NotPersisted" | "Unknown";
794
794
  *
795
795
  * - {@link UnsupportedDbVersionError} blocks the app: the local data needs a newer
796
796
  * version of it. Ask the user to update the app or close all its tabs.
797
+ * - {@link DatabaseHeldError} blocks the app: another context keeps holding the
798
+ * local data, as a browser can until it restarts. Ask the user to close the
799
+ * app's other tabs or to restart the browser, then to reload the app.
797
800
  * - {@link OtherBuildRunningError} blocks the app while it lasts: another version
798
801
  * of the app holds the local data. Ask the user to close the app's other
799
802
  * tabs. It clears when the wait ends.
@@ -844,7 +847,7 @@ export type DevicePersistence = "Persisted" | "NotPersisted" | "Unknown";
844
847
  *
845
848
  * @group Core
846
849
  */
847
- export type EvoluError = OtherBuildRunningError | UnknownError | UnsupportedDbVersionError;
850
+ export type EvoluError = DatabaseHeldError | OtherBuildRunningError | UnknownError | UnsupportedDbVersionError;
848
851
  /**
849
852
  * The largest {@link Mutation}, in bytes.
850
853
  *
@@ -881,9 +884,10 @@ export interface EvoluErrorDep {
881
884
  * refusal to each tab once, including tabs that connect later, and starts no
882
885
  * replacement database workers. After all instances release that tenant and
883
886
  * it is disposed when idle, creating another instance retries startup and may
884
- * send the refusal again. On the web, a refused tab first reloads once
885
- * instead; see {@link UnsupportedDbVersionError}. Show that blocking message
886
- * outside any query-loading boundary, so pending queries do not hide it.
887
+ * send the refusal again. On the web, a tab refused with
888
+ * {@link UnsupportedDbVersionError} first reloads once instead. Show that
889
+ * blocking message outside any query-loading boundary, so pending queries do
890
+ * not hide it.
887
891
  *
888
892
  * An {@link UnknownError} leaves Evolu in an unknown state, so the app can
889
893
  * only ask the user to close the tab. A failed shared worker closes itself,
@@ -908,6 +912,8 @@ export interface EvoluErrorDep {
908
912
  * switch (error.type) {
909
913
  * case "UnsupportedDbVersionError":
910
914
  * return "Your data requires a newer version of this app. Please update it.";
915
+ * case "DatabaseHeldError":
916
+ * return "Your data is still in use elsewhere. Close this app's other tabs or restart the browser, then reload this page.";
911
917
  * case "OtherBuildRunningError":
912
918
  * return "This app is open in another tab with a different version. Close that tab to continue.";
913
919
  * case "UnknownError":
@@ -1 +1 @@
1
- {"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../../src/local-first/Evolu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../../src/local-first/Evolu.ts"],"names":[],"mappings":"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"}
@@ -284,7 +284,7 @@ import { type Millis } from "../Time.ts";
284
284
  import { type ExtractTyped, type Id, type InferType, type LiteralType, type Name, type ObjectType, type Typed } from "../Type.ts";
285
285
  import type { CreateWebSocketDep, WebSocketError } from "../WebSocket.ts";
286
286
  import type { BroadcastChannel, SharedWorker as CommonSharedWorker, CreateBroadcastChannelDep, CreateMessageChannelDep, NativeMessagePort, SharedWorkerSelf, WorkerDeps } from "../Worker.ts";
287
- import type { DbWorkerInit, UnsupportedDbVersionError } from "./Db.ts";
287
+ import type { DatabaseHeldError, DbWorkerInit, UnsupportedDbVersionError } from "./Db.ts";
288
288
  import type { DevicePersistence } from "./Evolu.ts";
289
289
  import type { Owner, OwnerId, SyncOwner } from "./Owner.ts";
290
290
  import { type ApplyProtocolMessageAsClientResult, type ProtocolChangeTooLargeError, type ProtocolError, type ProtocolInvalidDataError, type ProtocolMessage, type ProtocolTimestampMismatchError } from "./Protocol.ts";
@@ -322,7 +322,7 @@ export type SharedWorkerOutput = DbWorkerInit | {
322
322
  * could not be stored, or another build keeps this worker waiting.
323
323
  */
324
324
  readonly type: "Error";
325
- readonly error: OtherBuildRunningError | UnknownError | UnsupportedDbVersionError;
325
+ readonly error: DatabaseHeldError | OtherBuildRunningError | UnknownError | UnsupportedDbVersionError;
326
326
  } | {
327
327
  /**
328
328
  * Sent to a tab that connects while the worker waits for the build lock;
@@ -485,7 +485,7 @@ export interface ActiveSyncTenant extends Typed<"Active"> {
485
485
  */
486
486
  export interface RefusedSyncTenant extends Typed<"Refused"> {
487
487
  readonly name: Name;
488
- readonly error: UnsupportedDbVersionError;
488
+ readonly error: DatabaseHeldError | UnsupportedDbVersionError;
489
489
  }
490
490
  /**
491
491
  * An owner registered by any instance of an {@link ActiveSyncTenant}: `Writable`
@@ -1024,7 +1024,7 @@ export type DbWorkerOutput = {
1024
1024
  } | {
1025
1025
  /** Startup was refused; the worker is releasing its resources. */
1026
1026
  readonly type: "LeaderRefused";
1027
- readonly error: UnsupportedDbVersionError;
1027
+ readonly error: DatabaseHeldError | UnsupportedDbVersionError;
1028
1028
  } | {
1029
1029
  readonly type: "OnQueuedResponse";
1030
1030
  readonly attemptId: Id;
@@ -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":"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"}
@@ -1299,6 +1299,11 @@ const createEvoluTenant = ({ name, consoleLevel, sqliteSchema, encryptionKey, },
1299
1299
  // tell tabs that connect later without starting another worker.
1300
1300
  if (dbWorker.type === "Leading") {
1301
1301
  assertNotSame(dbWorker.port, currentDbWorkerPort);
1302
+ // The leader may still hold the database lock: browsers deliver
1303
+ // a refusal before a worker requested later can lead, but the
1304
+ // tenant does not rely on that order. Tell it to dispose, so it
1305
+ // releases the lock.
1306
+ dbWorker.port.postMessage({ type: "Dispose" });
1302
1307
  dbWorker.port[Symbol.dispose]();
1303
1308
  }
1304
1309
  currentDbWorkerPort[Symbol.dispose]();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evolu/common",
3
- "version": "8.18.0",
3
+ "version": "8.19.0",
4
4
  "description": "TypeScript library and local-first platform",
5
5
  "keywords": [
6
6
  "evolu",
package/src/Sqlite.ts CHANGED
@@ -188,7 +188,7 @@ export interface SqliteQueryOptions {
188
188
  * statements can improve performance for repeated queries by reusing the
189
189
  * compiled query.
190
190
  *
191
- * See: {@link https://sqlite.org/wasm/doc/trunk/api-oo1.md#db-prepare}.
191
+ * See: {@link https://sqlite.org/c3ref/prepare.html}.
192
192
  */
193
193
  readonly prepare?: boolean;
194
194
  }
package/src/index.ts CHANGED
@@ -51,7 +51,10 @@ export * from "./WebSocket.ts";
51
51
  export * from "./Worker.ts";
52
52
 
53
53
  // Local-first essentials.
54
- export type { UnsupportedDbVersionError } from "./local-first/Db.ts";
54
+ export type {
55
+ DatabaseHeldError,
56
+ UnsupportedDbVersionError,
57
+ } from "./local-first/Db.ts";
55
58
  export {
56
59
  AppName,
57
60
  createEvolu,
@@ -23,8 +23,10 @@
23
23
  * version 1. A newer stored version refuses startup with
24
24
  * {@link UnsupportedDbVersionError}. The refusal returns from the startup
25
25
  * transaction before anything is written and is posted to the SharedWorker; the
26
- * worker then exits and releases its resources. The single version row is
27
- * created in the same transaction as the other system tables.
26
+ * worker then exits and releases its resources. A database whose files another
27
+ * context keeps holding refuses startup the same way, before it is opened, with
28
+ * {@link DatabaseHeldError}; see {@link WaitForDatabaseRelease}. The single
29
+ * version row is created in the same transaction as the other system tables.
28
30
  *
29
31
  * Code released before the version record existed never reads it. It recognizes
30
32
  * an initialized database by the `evolu_version` table alone, so it opens a
@@ -195,7 +197,28 @@ export interface CreateDbWorkerDep {
195
197
  export type DbWorkerDeps = WorkerDeps &
196
198
  CreateBroadcastChannelDep &
197
199
  LockManagerDep &
198
- CreateSqliteDriverDep;
200
+ CreateSqliteDriverDep &
201
+ Partial<WaitForDatabaseReleaseDep>;
202
+
203
+ /**
204
+ * Waits until no other context holds the files of the persistent database
205
+ * `name`, and fails with {@link DatabaseHeldError} when they stay held.
206
+ *
207
+ * {@link startDbWorker} calls it, except for a memory-only database, while it
208
+ * holds the database's leader lock and before it opens the database. Only a
209
+ * context that ended without closing the database can then hold its files, and
210
+ * such a context can only release them, so the files stay free until the
211
+ * database opens. Platforms whose databases cannot be held this way, such as
212
+ * Node.js and React Native, omit it.
213
+ */
214
+ export type WaitForDatabaseRelease = (
215
+ name: Name,
216
+ ) => Task<void, DatabaseHeldError>;
217
+
218
+ /** Dependency wrapper for {@link WaitForDatabaseRelease}. */
219
+ export interface WaitForDatabaseReleaseDep {
220
+ readonly waitForDatabaseRelease: WaitForDatabaseRelease;
221
+ }
199
222
 
200
223
  /** The database version this code creates and supports; see the module doc. */
201
224
  const dbVersion = PositiveInt.orThrow(2);
@@ -216,6 +239,18 @@ export interface UnsupportedDbVersionError extends Typed<"UnsupportedDbVersionEr
216
239
  readonly supportedVersion: PositiveInt;
217
240
  }
218
241
 
242
+ /**
243
+ * Another context kept holding the database's files, so the database did not
244
+ * open; see {@link WaitForDatabaseRelease}.
245
+ *
246
+ * A browser can keep the files of a worker that ended without closing them
247
+ * until the browser restarts. Ask the user to close the app's other tabs or to
248
+ * restart the browser, then to reload the app.
249
+ */
250
+ export interface DatabaseHeldError extends Typed<"DatabaseHeldError"> {
251
+ readonly name: Name;
252
+ }
253
+
219
254
  /**
220
255
  * Starts the platform-agnostic Evolu DbWorker and owns its resources until
221
256
  * startup is refused, the worker receives a dispose message, the SharedWorker
@@ -259,6 +294,15 @@ export const startDbWorker =
259
294
 
260
295
  disposer.use(await run.ok(acquireLeaderLock(initMessage.name)));
261
296
 
297
+ if (!initMessage.memoryOnly && deps.waitForDatabaseRelease) {
298
+ const released = await run(deps.waitForDatabaseRelease(initMessage.name));
299
+ if (!released.ok) {
300
+ // Returning lets the disposer release the database lock.
301
+ port.postMessage({ type: "LeaderRefused", error: released.error });
302
+ return ok();
303
+ }
304
+ }
305
+
262
306
  const sqlite = disposer.use(
263
307
  await run.ok(
264
308
  createSqlite(
@@ -64,7 +64,11 @@ import type {
64
64
  CreateBroadcastChannelDep,
65
65
  CreateMessageChannelDep,
66
66
  } from "../Worker.ts";
67
- import type { CreateDbWorkerDep, UnsupportedDbVersionError } from "./Db.ts";
67
+ import type {
68
+ CreateDbWorkerDep,
69
+ DatabaseHeldError,
70
+ UnsupportedDbVersionError,
71
+ } from "./Db.ts";
68
72
  import type {
69
73
  AppOwner,
70
74
  Owner,
@@ -947,6 +951,9 @@ export type DevicePersistence = "Persisted" | "NotPersisted" | "Unknown";
947
951
  *
948
952
  * - {@link UnsupportedDbVersionError} blocks the app: the local data needs a newer
949
953
  * version of it. Ask the user to update the app or close all its tabs.
954
+ * - {@link DatabaseHeldError} blocks the app: another context keeps holding the
955
+ * local data, as a browser can until it restarts. Ask the user to close the
956
+ * app's other tabs or to restart the browser, then to reload the app.
950
957
  * - {@link OtherBuildRunningError} blocks the app while it lasts: another version
951
958
  * of the app holds the local data. Ask the user to close the app's other
952
959
  * tabs. It clears when the wait ends.
@@ -998,7 +1005,10 @@ export type DevicePersistence = "Persisted" | "NotPersisted" | "Unknown";
998
1005
  * @group Core
999
1006
  */
1000
1007
  export type EvoluError =
1001
- OtherBuildRunningError | UnknownError | UnsupportedDbVersionError;
1008
+ | DatabaseHeldError
1009
+ | OtherBuildRunningError
1010
+ | UnknownError
1011
+ | UnsupportedDbVersionError;
1002
1012
 
1003
1013
  /**
1004
1014
  * The largest {@link Mutation}, in bytes.
@@ -1071,9 +1081,10 @@ export interface EvoluErrorDep {
1071
1081
  * refusal to each tab once, including tabs that connect later, and starts no
1072
1082
  * replacement database workers. After all instances release that tenant and
1073
1083
  * it is disposed when idle, creating another instance retries startup and may
1074
- * send the refusal again. On the web, a refused tab first reloads once
1075
- * instead; see {@link UnsupportedDbVersionError}. Show that blocking message
1076
- * outside any query-loading boundary, so pending queries do not hide it.
1084
+ * send the refusal again. On the web, a tab refused with
1085
+ * {@link UnsupportedDbVersionError} first reloads once instead. Show that
1086
+ * blocking message outside any query-loading boundary, so pending queries do
1087
+ * not hide it.
1077
1088
  *
1078
1089
  * An {@link UnknownError} leaves Evolu in an unknown state, so the app can
1079
1090
  * only ask the user to close the tab. A failed shared worker closes itself,
@@ -1098,6 +1109,8 @@ export interface EvoluErrorDep {
1098
1109
  * switch (error.type) {
1099
1110
  * case "UnsupportedDbVersionError":
1100
1111
  * return "Your data requires a newer version of this app. Please update it.";
1112
+ * case "DatabaseHeldError":
1113
+ * return "Your data is still in use elsewhere. Close this app's other tabs or restart the browser, then reload this page.";
1101
1114
  * case "OtherBuildRunningError":
1102
1115
  * return "This app is open in another tab with a different version. Close that tab to continue.";
1103
1116
  * case "UnknownError":
@@ -21,7 +21,11 @@ import type { ConsoleEntry, ConsoleLevel } from "../Console.ts";
21
21
  import type { DecryptWithXChaCha20Poly1305Error } from "../Crypto.ts";
22
22
  import { createUnknownError, UnknownError } from "../Error.ts";
23
23
  import { isPlainObject } from "../Object.ts";
24
- import type { DbWorkerInit, UnsupportedDbVersionError } from "./Db.ts";
24
+ import type {
25
+ DatabaseHeldError,
26
+ DbWorkerInit,
27
+ UnsupportedDbVersionError,
28
+ } from "./Db.ts";
25
29
  import {
26
30
  createAppOwner,
27
31
  createOwnerSecret,
@@ -11442,4 +11446,36 @@ describe("startup refusal", () => {
11442
11446
  await testWaitForWorkerMessage();
11443
11447
  assertEqual(leaderInputs, [{ type: "Dispose" }]);
11444
11448
  });
11449
+
11450
+ const heldRefusal: DatabaseHeldError = {
11451
+ type: "DatabaseHeldError",
11452
+ name: testName,
11453
+ };
11454
+
11455
+ for (const error of [heldRefusal, refusal])
11456
+ it(`disposes a worker that acquired leadership before the ${error.type} refusal of a worker requested earlier arrived`, async () => {
11457
+ await using setup = await setupSharedWorker();
11458
+ await using disposer = new AsyncDisposableStack();
11459
+ const instance = await setup.createEvoluBeforeDbWorkerLeader();
11460
+ const initDbWorker = await setupTabLeader(setup, disposer);
11461
+ using leaderPort = testCreateMessagePort<DbWorkerOutput, DbWorkerInput>(
11462
+ initDbWorker.port,
11463
+ );
11464
+ const leaderInputs: Array<DbWorkerInput> = [];
11465
+ leaderPort.onMessage = (input) => {
11466
+ leaderInputs.push(input);
11467
+ };
11468
+
11469
+ // Browsers deliver the refusal first, because the refusing worker posts
11470
+ // it while it still holds the database lock the other one waits for.
11471
+ // The tenant does not depend on that order.
11472
+ leaderPort.postMessage({
11473
+ type: "LeaderAcquired",
11474
+ clock: createTimestamp(),
11475
+ });
11476
+ await testWaitForWorkerMessage();
11477
+ instance.dbWorkerPort.postMessage({ type: "LeaderRefused", error });
11478
+ await testWaitForWorkerMessage();
11479
+ assertEqual(leaderInputs, [{ type: "Dispose" }]);
11480
+ });
11445
11481
  });
@@ -352,7 +352,11 @@ import type {
352
352
  SharedWorkerSelf,
353
353
  WorkerDeps,
354
354
  } from "../Worker.ts";
355
- import type { DbWorkerInit, UnsupportedDbVersionError } from "./Db.ts";
355
+ import type {
356
+ DatabaseHeldError,
357
+ DbWorkerInit,
358
+ UnsupportedDbVersionError,
359
+ } from "./Db.ts";
356
360
  import type {
357
361
  DevicePersistence,
358
362
  Evolu,
@@ -428,7 +432,10 @@ export type SharedWorkerOutput =
428
432
  */
429
433
  readonly type: "Error";
430
434
  readonly error:
431
- OtherBuildRunningError | UnknownError | UnsupportedDbVersionError;
435
+ | DatabaseHeldError
436
+ | OtherBuildRunningError
437
+ | UnknownError
438
+ | UnsupportedDbVersionError;
432
439
  }
433
440
  | {
434
441
  /**
@@ -642,7 +649,7 @@ export interface ActiveSyncTenant extends Typed<"Active"> {
642
649
  */
643
650
  export interface RefusedSyncTenant extends Typed<"Refused"> {
644
651
  readonly name: Name;
645
- readonly error: UnsupportedDbVersionError;
652
+ readonly error: DatabaseHeldError | UnsupportedDbVersionError;
646
653
  }
647
654
 
648
655
  /**
@@ -1338,7 +1345,7 @@ export type DbWorkerOutput =
1338
1345
  | {
1339
1346
  /** Startup was refused; the worker is releasing its resources. */
1340
1347
  readonly type: "LeaderRefused";
1341
- readonly error: UnsupportedDbVersionError;
1348
+ readonly error: DatabaseHeldError | UnsupportedDbVersionError;
1342
1349
  }
1343
1350
  | {
1344
1351
  readonly type: "OnQueuedResponse";
@@ -2336,7 +2343,7 @@ const createEvoluTenant =
2336
2343
  }
2337
2344
 
2338
2345
  interface RefusedDbWorker extends Typed<"Refused"> {
2339
- readonly error: UnsupportedDbVersionError;
2346
+ readonly error: DatabaseHeldError | UnsupportedDbVersionError;
2340
2347
  }
2341
2348
 
2342
2349
  let dbWorker: DbWorkerState = { type: "Starting" };
@@ -2439,6 +2446,11 @@ const createEvoluTenant =
2439
2446
  // tell tabs that connect later without starting another worker.
2440
2447
  if (dbWorker.type === "Leading") {
2441
2448
  assertNotSame(dbWorker.port, currentDbWorkerPort);
2449
+ // The leader may still hold the database lock: browsers deliver
2450
+ // a refusal before a worker requested later can lead, but the
2451
+ // tenant does not rely on that order. Tell it to dispose, so it
2452
+ // releases the lock.
2453
+ dbWorker.port.postMessage({ type: "Dispose" });
2442
2454
  dbWorker.port[Symbol.dispose]();
2443
2455
  }
2444
2456
  currentDbWorkerPort[Symbol.dispose]();
@@ -2580,7 +2592,7 @@ const createEvoluTenant =
2580
2592
 
2581
2593
  const reportRefusal = (
2582
2594
  tabPort: TabPort,
2583
- error: UnsupportedDbVersionError,
2595
+ error: DatabaseHeldError | UnsupportedDbVersionError,
2584
2596
  ): void => {
2585
2597
  if (refusedTabPorts.has(tabPort)) return;
2586
2598
  refusedTabPorts.add(tabPort);