@livestore/sqlite-wasm 0.3.0-dev.10 → 0.3.0-dev.11

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.
@@ -1,4 +1,4 @@
1
- import type { MakeSynchronousDatabase, PersistenceInfo, SynchronousDatabase } from '@livestore/common';
1
+ import type { MakeSqliteDb, PersistenceInfo, SqliteDb } from '@livestore/common';
2
2
  import type { MemoryVFS } from '@livestore/wa-sqlite/src/examples/MemoryVFS.js';
3
3
  import type { AccessHandlePoolVFS } from './opfs/AccessHandlePoolVFS.js';
4
4
  export * from './opfs/opfs-sah-pool.js';
@@ -8,7 +8,7 @@ export type WebDatabaseMetadataInMemory = {
8
8
  dbPointer: number;
9
9
  persistenceInfo: PersistenceInfo;
10
10
  deleteDb: () => void;
11
- configureDb: (db: SynchronousDatabase) => void;
11
+ configureDb: (db: SqliteDb) => void;
12
12
  };
13
13
  export type WebDatabaseMetadataOpfs = {
14
14
  _tag: 'opfs';
@@ -20,24 +20,24 @@ export type WebDatabaseMetadataOpfs = {
20
20
  opfsFileName: string;
21
21
  }>;
22
22
  deleteDb: () => void;
23
- configureDb: (db: SynchronousDatabase) => void;
23
+ configureDb: (db: SqliteDb) => void;
24
24
  };
25
25
  export type WebDatabaseMetadata = WebDatabaseMetadataInMemory | WebDatabaseMetadataOpfs;
26
26
  export type WebDatabaseInputInMemory = {
27
27
  _tag: 'in-memory';
28
- configureDb?: (db: SynchronousDatabase) => void;
28
+ configureDb?: (db: SqliteDb) => void;
29
29
  };
30
30
  export type WebDatabaseInputOpfs = {
31
31
  _tag: 'opfs';
32
32
  /** Filename of the database file (only used when exporting/downloading the database) */
33
33
  fileName: string;
34
34
  opfsDirectory: string;
35
- configureDb?: (db: SynchronousDatabase) => void;
35
+ configureDb?: (db: SqliteDb) => void;
36
36
  };
37
37
  export type WebDatabaseInput = WebDatabaseInputInMemory | WebDatabaseInputOpfs;
38
- export declare const syncDbFactory: ({ sqlite3, }: {
38
+ export declare const sqliteDbFactory: ({ sqlite3, }: {
39
39
  sqlite3: SQLiteAPI;
40
- }) => MakeSynchronousDatabase<{
40
+ }) => MakeSqliteDb<{
41
41
  dbPointer: number;
42
42
  persistenceInfo: PersistenceInfo;
43
43
  }, WebDatabaseInput, WebDatabaseMetadata>;
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/browser/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAEtG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAA;AAI/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAGxE,cAAc,yBAAyB,CAAA;AAEvC,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,WAAW,CAAA;IACjB,GAAG,EAAE,SAAS,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAA;IAChC,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAC/C,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,mBAAmB,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAC;QAC/B,aAAa,EAAE,MAAM,CAAA;QACrB,mCAAmC;QACnC,YAAY,EAAE,MAAM,CAAA;KACrB,CAAC,CAAA;IACF,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAC/C,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,2BAA2B,GAAG,uBAAuB,CAAA;AAEvF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAChD,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAChD,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,GAAG,oBAAoB,CAAA;AAE9E,eAAO,MAAM,aAAa,iBAGrB;IACD,OAAO,EAAE,SAAS,CAAA;CACnB,KAAG,uBAAuB,CACzB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,EACvD,gBAAgB,EAChB,mBAAmB,CAsDjB,CAAA"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/browser/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEhF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAA;AAI/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAGxE,cAAc,yBAAyB,CAAA;AAEvC,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,WAAW,CAAA;IACjB,GAAG,EAAE,SAAS,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAA;IAChC,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,mBAAmB,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAC;QAC/B,aAAa,EAAE,MAAM,CAAA;QACrB,mCAAmC;QACnC,YAAY,EAAE,MAAM,CAAA;KACrB,CAAC,CAAA;IACF,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,2BAA2B,GAAG,uBAAuB,CAAA;AAEvF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,GAAG,oBAAoB,CAAA;AAE9E,eAAO,MAAM,eAAe,iBAGvB;IACD,OAAO,EAAE,SAAS,CAAA;CACnB,KAAG,YAAY,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,EAAE,gBAAgB,EAAE,mBAAmB,CAqD3G,CAAA"}
@@ -1,12 +1,12 @@
1
1
  import { Effect, Hash } from '@livestore/utils/effect';
2
2
  import { makeInMemoryDb } from '../in-memory-vfs.js';
3
- import { makeSynchronousDatabase } from '../make-sync-db.js';
3
+ import { makeSqliteDb } from '../make-sqlite-db.js';
4
4
  import { makeOpfsDb } from './opfs/index.js';
5
5
  export * from './opfs/opfs-sah-pool.js';
6
- export const syncDbFactory = ({ sqlite3, }) => (input) => Effect.gen(function* () {
6
+ export const sqliteDbFactory = ({ sqlite3, }) => (input) => Effect.gen(function* () {
7
7
  if (input._tag === 'in-memory') {
8
8
  const { dbPointer, vfs } = makeInMemoryDb(sqlite3);
9
- return makeSynchronousDatabase({
9
+ return makeSqliteDb({
10
10
  sqlite3,
11
11
  metadata: {
12
12
  _tag: 'in-memory',
@@ -32,7 +32,7 @@ export const syncDbFactory = ({ sqlite3, }) => (input) => Effect.gen(function* (
32
32
  directory: input.opfsDirectory,
33
33
  fileName: dbFilename,
34
34
  });
35
- return makeSynchronousDatabase({
35
+ return makeSqliteDb({
36
36
  sqlite3,
37
37
  metadata: {
38
38
  _tag: 'opfs',
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/browser/mod.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAGtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,cAAc,yBAAyB,CAAA;AAyCvC,MAAM,CAAC,MAAM,aAAa,GACxB,CAAC,EACC,OAAO,GAGR,EAIC,EAAE,CACJ,CAAC,KAAuB,EAAE,EAAE,CAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QAClD,OAAO,uBAAuB,CAA8B;YAC1D,OAAO;YACP,QAAQ,EAAE;gBACR,IAAI,EAAE,WAAW;gBACjB,GAAG;gBACH,SAAS;gBACT,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;gBAC5C,eAAe,EAAE;oBACf,QAAQ,EAAE,UAAU;iBACrB;aACF;SACF,CAAQ,CAAA;IACX,CAAC;IAED,wCAAwC;IACxC,MAAM,sBAAsB,GAAG,EAAE,CAAA;IAEjC,IAAI,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAA;IAE/B,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;QACnD,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,yBAAyB,KAAK,CAAC,QAAQ,UAAU,sBAAsB,eAAe,KAAK,CAAC,QAAQ,CAAC,MAAM,cAAc,CAC1H,CAAA;QACD,UAAU,GAAG,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAA;IACvD,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;QAC3C,OAAO;QACP,SAAS,EAAE,KAAK,CAAC,aAAa;QAC9B,QAAQ,EAAE,UAAU;KACrB,CAAC,CAAA;IAEF,OAAO,uBAAuB,CAA0B;QACtD,OAAO;QACP,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM;YACZ,GAAG;YACH,SAAS;YACT,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC;YACrD,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;YAC5C,eAAe,EAAE;gBACf,QAAQ,EAAE,UAAU;gBACpB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC;aAC9C;SACF;KACF,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/browser/mod.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAGtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,cAAc,yBAAyB,CAAA;AAyCvC,MAAM,CAAC,MAAM,eAAe,GAC1B,CAAC,EACC,OAAO,GAGR,EAAgH,EAAE,CACnH,CAAC,KAAuB,EAAE,EAAE,CAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QAClD,OAAO,YAAY,CAA8B;YAC/C,OAAO;YACP,QAAQ,EAAE;gBACR,IAAI,EAAE,WAAW;gBACjB,GAAG;gBACH,SAAS;gBACT,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;gBAC5C,eAAe,EAAE;oBACf,QAAQ,EAAE,UAAU;iBACrB;aACF;SACF,CAAQ,CAAA;IACX,CAAC;IAED,wCAAwC;IACxC,MAAM,sBAAsB,GAAG,EAAE,CAAA;IAEjC,IAAI,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAA;IAE/B,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;QACnD,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,yBAAyB,KAAK,CAAC,QAAQ,UAAU,sBAAsB,eAAe,KAAK,CAAC,QAAQ,CAAC,MAAM,cAAc,CAC1H,CAAA;QACD,UAAU,GAAG,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAA;IACvD,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;QAC3C,OAAO;QACP,SAAS,EAAE,KAAK,CAAC,aAAa;QAC9B,QAAQ,EAAE,UAAU;KACrB,CAAC,CAAA;IAEF,OAAO,YAAY,CAA0B;QAC3C,OAAO;QACP,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM;YACZ,GAAG;YACH,SAAS;YACT,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC;YACrD,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;YAC5C,eAAe,EAAE;gBACf,QAAQ,EAAE,UAAU;gBACpB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC;aAC9C;SACF;KACF,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
package/dist/index_.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from '@livestore/wa-sqlite';
2
- export * from './make-sync-db.js';
2
+ export * from './make-sqlite-db.js';
3
3
  //# sourceMappingURL=index_.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index_.d.ts","sourceRoot":"","sources":["../src/index_.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index_.d.ts","sourceRoot":"","sources":["../src/index_.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA"}
package/dist/index_.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from '@livestore/wa-sqlite';
2
- export * from './make-sync-db.js';
2
+ export * from './make-sqlite-db.js';
3
3
  //# sourceMappingURL=index_.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index_.js","sourceRoot":"","sources":["../src/index_.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index_.js","sourceRoot":"","sources":["../src/index_.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { PersistenceInfo, SqliteDb } from '@livestore/common';
2
+ export declare const makeSqliteDb: <TMetadata extends {
3
+ dbPointer: number;
4
+ persistenceInfo: PersistenceInfo;
5
+ deleteDb: () => void;
6
+ configureDb: (db: SqliteDb<TMetadata>) => void;
7
+ }>({ sqlite3, metadata, }: {
8
+ sqlite3: SQLiteAPI;
9
+ metadata: TMetadata;
10
+ }) => SqliteDb<TMetadata>;
11
+ //# sourceMappingURL=make-sqlite-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-sqlite-db.d.ts","sourceRoot":"","sources":["../src/make-sqlite-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAGf,QAAQ,EAET,MAAM,mBAAmB,CAAA;AAM1B,eAAO,MAAM,YAAY,GACvB,SAAS,SAAS;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAA;IAChC,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,CAAA;CAC/C,0BAIA;IACD,OAAO,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;CACpB,KAAG,QAAQ,CAAC,SAAS,CAkMrB,CAAA"}
@@ -0,0 +1,181 @@
1
+ import { SqliteError } from '@livestore/common';
2
+ import * as SqliteConstants from '@livestore/wa-sqlite/src/sqlite-constants.js';
3
+ import { makeInMemoryDb } from './in-memory-vfs.js';
4
+ export const makeSqliteDb = ({ sqlite3, metadata, }) => {
5
+ const preparedStmts = [];
6
+ const { dbPointer } = metadata;
7
+ let isClosed = false;
8
+ const sqliteDb = {
9
+ _tag: 'SqliteDb',
10
+ metadata,
11
+ prepare: (queryStr) => {
12
+ try {
13
+ const stmts = sqlite3.statements(dbPointer, queryStr.trim(), { unscoped: true });
14
+ let isFinalized = false;
15
+ const preparedStmt = {
16
+ execute: (bindValues, options) => {
17
+ for (const stmt of stmts) {
18
+ if (bindValues !== undefined && Object.keys(bindValues).length > 0) {
19
+ sqlite3.bind_collection(stmt, bindValues);
20
+ }
21
+ try {
22
+ sqlite3.step(stmt);
23
+ }
24
+ finally {
25
+ if (options?.onRowsChanged) {
26
+ options.onRowsChanged(sqlite3.changes(dbPointer));
27
+ }
28
+ sqlite3.reset(stmt); // Reset is needed for next execution
29
+ }
30
+ }
31
+ },
32
+ select: (bindValues) => {
33
+ if (stmts.length !== 1) {
34
+ throw new SqliteError({
35
+ query: { bindValues, sql: queryStr },
36
+ code: -1,
37
+ cause: 'Expected only one statement when using `select`',
38
+ });
39
+ }
40
+ const stmt = stmts[0];
41
+ if (bindValues !== undefined && Object.keys(bindValues).length > 0) {
42
+ sqlite3.bind_collection(stmt, bindValues);
43
+ }
44
+ const results = [];
45
+ try {
46
+ // NOTE `column_names` only works for `SELECT` statements, ignoring other statements for now
47
+ let columns = undefined;
48
+ try {
49
+ columns = sqlite3.column_names(stmt);
50
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
51
+ }
52
+ catch (_e) { }
53
+ while (sqlite3.step(stmt) === SqliteConstants.SQLITE_ROW) {
54
+ if (columns !== undefined) {
55
+ const obj = {};
56
+ for (let i = 0; i < columns.length; i++) {
57
+ obj[columns[i]] = sqlite3.column(stmt, i);
58
+ }
59
+ results.push(obj);
60
+ }
61
+ }
62
+ }
63
+ catch (e) {
64
+ throw new SqliteError({
65
+ query: { bindValues, sql: queryStr },
66
+ code: e.code,
67
+ cause: e,
68
+ });
69
+ }
70
+ finally {
71
+ // reset the cached statement so we can use it again in the future
72
+ sqlite3.reset(stmt);
73
+ }
74
+ return results;
75
+ },
76
+ finalize: () => {
77
+ // Avoid double finalization which leads to a crash
78
+ if (isFinalized) {
79
+ return;
80
+ }
81
+ isFinalized = true;
82
+ for (const stmt of stmts) {
83
+ sqlite3.finalize(stmt);
84
+ }
85
+ },
86
+ sql: queryStr,
87
+ };
88
+ preparedStmts.push(preparedStmt);
89
+ return preparedStmt;
90
+ }
91
+ catch (e) {
92
+ throw new SqliteError({
93
+ query: { sql: queryStr, bindValues: {} },
94
+ code: e.code,
95
+ cause: e,
96
+ });
97
+ }
98
+ },
99
+ export: () => sqlite3.serialize(dbPointer, 'main'),
100
+ execute: (queryStr, bindValues, options) => {
101
+ const stmt = sqliteDb.prepare(queryStr);
102
+ stmt.execute(bindValues, options);
103
+ stmt.finalize();
104
+ },
105
+ select: (queryStr, bindValues) => {
106
+ const stmt = sqliteDb.prepare(queryStr);
107
+ const results = stmt.select(bindValues);
108
+ stmt.finalize();
109
+ return results;
110
+ },
111
+ destroy: () => {
112
+ sqliteDb.close();
113
+ metadata.deleteDb();
114
+ // if (metadata._tag === 'opfs') {
115
+ // metadata.vfs.resetAccessHandle(metadata.fileName)
116
+ // }
117
+ },
118
+ close: () => {
119
+ if (isClosed) {
120
+ return;
121
+ }
122
+ for (const stmt of preparedStmts) {
123
+ stmt.finalize();
124
+ }
125
+ sqlite3.close(dbPointer);
126
+ isClosed = true;
127
+ },
128
+ import: (source) => {
129
+ // https://www.sqlite.org/c3ref/c_deserialize_freeonclose.html
130
+ // #define SQLITE_DESERIALIZE_FREEONCLOSE 1 /* Call sqlite3_free() on close */
131
+ // #define SQLITE_DESERIALIZE_RESIZEABLE 2 /* Resize using sqlite3_realloc64() */
132
+ // #define SQLITE_DESERIALIZE_READONLY 4 /* Database is read-only */
133
+ const FREE_ON_CLOSE = 1;
134
+ const RESIZEABLE = 2;
135
+ // NOTE in case we'll have a future use-case where we need a read-only database, we can reuse this code below
136
+ // if (readOnly === true) {
137
+ // sqlite3.deserialize(db, 'main', bytes, bytes.length, bytes.length, FREE_ON_CLOSE | RESIZEABLE)
138
+ // } else {
139
+ if (source instanceof Uint8Array) {
140
+ const tmpDb = makeInMemoryDb(sqlite3);
141
+ // TODO find a way to do this more efficiently with sqlite to avoid either of the deserialize + backup call
142
+ // Maybe this can be done via the VFS API
143
+ sqlite3.deserialize(tmpDb.dbPointer, 'main', source, source.length, source.length, FREE_ON_CLOSE | RESIZEABLE);
144
+ sqlite3.backup(dbPointer, 'main', tmpDb.dbPointer, 'main');
145
+ sqlite3.close(tmpDb.dbPointer);
146
+ }
147
+ else {
148
+ sqlite3.backup(dbPointer, 'main', source.metadata.dbPointer, 'main');
149
+ }
150
+ metadata.configureDb(sqliteDb);
151
+ },
152
+ session: () => {
153
+ const sessionPointer = sqlite3.session_create(dbPointer, 'main');
154
+ sqlite3.session_attach(sessionPointer, null);
155
+ return {
156
+ changeset: () => {
157
+ const res = sqlite3.session_changeset(sessionPointer);
158
+ return res.changeset ?? undefined;
159
+ },
160
+ finish: () => {
161
+ sqlite3.session_delete(sessionPointer);
162
+ },
163
+ };
164
+ },
165
+ makeChangeset: (data) => {
166
+ const changeset = {
167
+ invert: () => {
168
+ const inverted = sqlite3.changeset_invert(data);
169
+ return sqliteDb.makeChangeset(inverted);
170
+ },
171
+ apply: () => {
172
+ sqlite3.changeset_apply(dbPointer, data);
173
+ },
174
+ };
175
+ return changeset;
176
+ },
177
+ };
178
+ metadata.configureDb(sqliteDb);
179
+ return sqliteDb;
180
+ };
181
+ //# sourceMappingURL=make-sqlite-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-sqlite-db.js","sourceRoot":"","sources":["../src/make-sqlite-db.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type MakeSynchronousDatabase, type PersistenceInfo, type SynchronousDatabase } from '@livestore/common';
1
+ import { type MakeSqliteDb, type PersistenceInfo, type SqliteDb } from '@livestore/common';
2
2
  import { Effect, FileSystem } from '@livestore/utils/effect';
3
3
  import type { MemoryVFS } from '@livestore/wa-sqlite/src/examples/MemoryVFS.js';
4
4
  import { NodeFS } from './NodeFS.js';
@@ -8,7 +8,7 @@ export type NodeDatabaseMetadataInMemory = {
8
8
  dbPointer: number;
9
9
  persistenceInfo: PersistenceInfo;
10
10
  deleteDb: () => void;
11
- configureDb: (db: SynchronousDatabase) => void;
11
+ configureDb: (db: SqliteDb) => void;
12
12
  };
13
13
  export type NodeDatabaseMetadataFs = {
14
14
  _tag: 'fs';
@@ -18,23 +18,23 @@ export type NodeDatabaseMetadataFs = {
18
18
  directory: string;
19
19
  }>;
20
20
  deleteDb: () => void;
21
- configureDb: (db: SynchronousDatabase) => void;
21
+ configureDb: (db: SqliteDb) => void;
22
22
  };
23
23
  export type NodeDatabaseMetadata = NodeDatabaseMetadataInMemory | NodeDatabaseMetadataFs;
24
24
  export type NodeDatabaseInputInMemory = {
25
25
  _tag: 'in-memory';
26
- configureDb?: (db: SynchronousDatabase) => void;
26
+ configureDb?: (db: SqliteDb) => void;
27
27
  };
28
28
  export type NodeDatabaseInputFs = {
29
29
  _tag: 'fs';
30
30
  directory: string;
31
31
  fileName: string;
32
- configureDb?: (db: SynchronousDatabase) => void;
32
+ configureDb?: (db: SqliteDb) => void;
33
33
  };
34
34
  export type NodeDatabaseInput = NodeDatabaseInputInMemory | NodeDatabaseInputFs;
35
- export declare const syncDbFactory: ({ sqlite3, }: {
35
+ export declare const sqliteDbFactory: ({ sqlite3, }: {
36
36
  sqlite3: SQLiteAPI;
37
- }) => Effect.Effect<MakeSynchronousDatabase<{
37
+ }) => Effect.Effect<MakeSqliteDb<{
38
38
  dbPointer: number;
39
39
  persistenceInfo: PersistenceInfo;
40
40
  }, NodeDatabaseInput, NodeDatabaseMetadata>, never, FileSystem.FileSystem>;
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAA;AAI/E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,WAAW,CAAA;IACjB,GAAG,EAAE,SAAS,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAA;IAChC,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAC/C,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,IAAI,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAC/C,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,4BAA4B,GAAG,sBAAsB,CAAA;AAExF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAChD,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,IAAI,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAChD,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,yBAAyB,GAAG,mBAAmB,CAAA;AAE/E,eAAO,MAAM,aAAa,iBAEvB;IACD,OAAO,EAAE,SAAS,CAAA;CACnB,KAAG,MAAM,CAAC,MAAM,CACf,uBAAuB,CACrB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,EACvD,iBAAiB,EACjB,oBAAoB,CACrB,EACD,KAAK,EACL,UAAU,CAAC,UAAU,CA0CpB,CAAA"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAmB,MAAM,mBAAmB,CAAA;AAC3G,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAA;AAI/E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,WAAW,CAAA;IACjB,GAAG,EAAE,SAAS,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAA;IAChC,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,IAAI,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,4BAA4B,GAAG,sBAAsB,CAAA;AAExF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,IAAI,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,yBAAyB,GAAG,mBAAmB,CAAA;AAE/E,eAAO,MAAM,eAAe,iBAEzB;IACD,OAAO,EAAE,SAAS,CAAA;CACnB,KAAG,MAAM,CAAC,MAAM,CACf,YAAY,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,EAC9G,KAAK,EACL,UAAU,CAAC,UAAU,CA0CpB,CAAA"}
package/dist/node/mod.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import path from 'node:path';
2
- import { UnexpectedError, } from '@livestore/common';
2
+ import { UnexpectedError } from '@livestore/common';
3
3
  import { Effect, FileSystem } from '@livestore/utils/effect';
4
4
  import { makeInMemoryDb } from '../in-memory-vfs.js';
5
- import { makeSynchronousDatabase } from '../make-sync-db.js';
5
+ import { makeSqliteDb } from '../make-sqlite-db.js';
6
6
  import { NodeFS } from './NodeFS.js';
7
- export const syncDbFactory = ({ sqlite3, }) => Effect.andThen(FileSystem.FileSystem, (fs) => (input) => Effect.gen(function* () {
7
+ export const sqliteDbFactory = ({ sqlite3, }) => Effect.andThen(FileSystem.FileSystem, (fs) => (input) => Effect.gen(function* () {
8
8
  if (input._tag === 'in-memory') {
9
9
  const { dbPointer, vfs } = makeInMemoryDb(sqlite3);
10
- return makeSynchronousDatabase({
10
+ return makeSqliteDb({
11
11
  sqlite3,
12
12
  metadata: {
13
13
  _tag: 'in-memory',
@@ -26,7 +26,7 @@ export const syncDbFactory = ({ sqlite3, }) => Effect.andThen(FileSystem.FileSys
26
26
  fs,
27
27
  });
28
28
  const filePath = path.join(input.directory, input.fileName);
29
- return makeSynchronousDatabase({
29
+ return makeSqliteDb({
30
30
  sqlite3,
31
31
  metadata: {
32
32
  _tag: 'fs',
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/sqlite-wasm",
3
- "version": "0.3.0-dev.10",
3
+ "version": "0.3.0-dev.11",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -23,8 +23,8 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "@livestore/wa-sqlite": "1.0.3-dev.7",
26
- "@livestore/common": "0.3.0-dev.10",
27
- "@livestore/utils": "0.3.0-dev.10"
26
+ "@livestore/common": "0.3.0-dev.11",
27
+ "@livestore/utils": "0.3.0-dev.11"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/chrome": "^0.0.299",
@@ -1,9 +1,9 @@
1
- import type { MakeSynchronousDatabase, PersistenceInfo, SynchronousDatabase } from '@livestore/common'
1
+ import type { MakeSqliteDb, PersistenceInfo, SqliteDb } from '@livestore/common'
2
2
  import { Effect, Hash } from '@livestore/utils/effect'
3
3
  import type { MemoryVFS } from '@livestore/wa-sqlite/src/examples/MemoryVFS.js'
4
4
 
5
5
  import { makeInMemoryDb } from '../in-memory-vfs.js'
6
- import { makeSynchronousDatabase } from '../make-sync-db.js'
6
+ import { makeSqliteDb } from '../make-sqlite-db.js'
7
7
  import type { AccessHandlePoolVFS } from './opfs/AccessHandlePoolVFS.js'
8
8
  import { makeOpfsDb } from './opfs/index.js'
9
9
 
@@ -15,7 +15,7 @@ export type WebDatabaseMetadataInMemory = {
15
15
  dbPointer: number
16
16
  persistenceInfo: PersistenceInfo
17
17
  deleteDb: () => void
18
- configureDb: (db: SynchronousDatabase) => void
18
+ configureDb: (db: SqliteDb) => void
19
19
  }
20
20
 
21
21
  export type WebDatabaseMetadataOpfs = {
@@ -28,14 +28,14 @@ export type WebDatabaseMetadataOpfs = {
28
28
  opfsFileName: string
29
29
  }>
30
30
  deleteDb: () => void
31
- configureDb: (db: SynchronousDatabase) => void
31
+ configureDb: (db: SqliteDb) => void
32
32
  }
33
33
 
34
34
  export type WebDatabaseMetadata = WebDatabaseMetadataInMemory | WebDatabaseMetadataOpfs
35
35
 
36
36
  export type WebDatabaseInputInMemory = {
37
37
  _tag: 'in-memory'
38
- configureDb?: (db: SynchronousDatabase) => void
38
+ configureDb?: (db: SqliteDb) => void
39
39
  }
40
40
 
41
41
  export type WebDatabaseInputOpfs = {
@@ -43,26 +43,22 @@ export type WebDatabaseInputOpfs = {
43
43
  /** Filename of the database file (only used when exporting/downloading the database) */
44
44
  fileName: string
45
45
  opfsDirectory: string
46
- configureDb?: (db: SynchronousDatabase) => void
46
+ configureDb?: (db: SqliteDb) => void
47
47
  }
48
48
 
49
49
  export type WebDatabaseInput = WebDatabaseInputInMemory | WebDatabaseInputOpfs
50
50
 
51
- export const syncDbFactory =
51
+ export const sqliteDbFactory =
52
52
  ({
53
53
  sqlite3,
54
54
  }: {
55
55
  sqlite3: SQLiteAPI
56
- }): MakeSynchronousDatabase<
57
- { dbPointer: number; persistenceInfo: PersistenceInfo },
58
- WebDatabaseInput,
59
- WebDatabaseMetadata
60
- > =>
56
+ }): MakeSqliteDb<{ dbPointer: number; persistenceInfo: PersistenceInfo }, WebDatabaseInput, WebDatabaseMetadata> =>
61
57
  (input: WebDatabaseInput) =>
62
58
  Effect.gen(function* () {
63
59
  if (input._tag === 'in-memory') {
64
60
  const { dbPointer, vfs } = makeInMemoryDb(sqlite3)
65
- return makeSynchronousDatabase<WebDatabaseMetadataInMemory>({
61
+ return makeSqliteDb<WebDatabaseMetadataInMemory>({
66
62
  sqlite3,
67
63
  metadata: {
68
64
  _tag: 'in-memory',
@@ -95,7 +91,7 @@ export const syncDbFactory =
95
91
  fileName: dbFilename,
96
92
  })
97
93
 
98
- return makeSynchronousDatabase<WebDatabaseMetadataOpfs>({
94
+ return makeSqliteDb<WebDatabaseMetadataOpfs>({
99
95
  sqlite3,
100
96
  metadata: {
101
97
  _tag: 'opfs',
package/src/index_.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export * from '@livestore/wa-sqlite'
2
- export * from './make-sync-db.js'
2
+ export * from './make-sqlite-db.js'
@@ -2,20 +2,20 @@ import type {
2
2
  PersistenceInfo,
3
3
  PreparedBindValues,
4
4
  PreparedStatement,
5
- SynchronousDatabase,
6
- SynchronousDatabaseChangeset,
5
+ SqliteDb,
6
+ SqliteDbChangeset,
7
7
  } from '@livestore/common'
8
8
  import { SqliteError } from '@livestore/common'
9
9
  import * as SqliteConstants from '@livestore/wa-sqlite/src/sqlite-constants.js'
10
10
 
11
11
  import { makeInMemoryDb } from './in-memory-vfs.js'
12
12
 
13
- export const makeSynchronousDatabase = <
13
+ export const makeSqliteDb = <
14
14
  TMetadata extends {
15
15
  dbPointer: number
16
16
  persistenceInfo: PersistenceInfo
17
17
  deleteDb: () => void
18
- configureDb: (db: SynchronousDatabase<TMetadata>) => void
18
+ configureDb: (db: SqliteDb<TMetadata>) => void
19
19
  },
20
20
  >({
21
21
  sqlite3,
@@ -23,14 +23,14 @@ export const makeSynchronousDatabase = <
23
23
  }: {
24
24
  sqlite3: SQLiteAPI
25
25
  metadata: TMetadata
26
- }): SynchronousDatabase<TMetadata> => {
26
+ }): SqliteDb<TMetadata> => {
27
27
  const preparedStmts: PreparedStatement[] = []
28
28
  const { dbPointer } = metadata
29
29
 
30
30
  let isClosed = false
31
31
 
32
- const syncDb: SynchronousDatabase<TMetadata> = {
33
- _tag: 'SynchronousDatabase',
32
+ const sqliteDb: SqliteDb<TMetadata> = {
33
+ _tag: 'SqliteDb',
34
34
  metadata,
35
35
  prepare: (queryStr) => {
36
36
  try {
@@ -131,18 +131,18 @@ export const makeSynchronousDatabase = <
131
131
  },
132
132
  export: () => sqlite3.serialize(dbPointer, 'main'),
133
133
  execute: (queryStr, bindValues, options) => {
134
- const stmt = syncDb.prepare(queryStr)
134
+ const stmt = sqliteDb.prepare(queryStr)
135
135
  stmt.execute(bindValues, options)
136
136
  stmt.finalize()
137
137
  },
138
138
  select: (queryStr, bindValues) => {
139
- const stmt = syncDb.prepare(queryStr)
139
+ const stmt = sqliteDb.prepare(queryStr)
140
140
  const results = stmt.select(bindValues)
141
141
  stmt.finalize()
142
142
  return results as ReadonlyArray<any>
143
143
  },
144
144
  destroy: () => {
145
- syncDb.close()
145
+ sqliteDb.close()
146
146
 
147
147
  metadata.deleteDb()
148
148
  // if (metadata._tag === 'opfs') {
@@ -183,7 +183,7 @@ export const makeSynchronousDatabase = <
183
183
  sqlite3.backup(dbPointer, 'main', source.metadata.dbPointer, 'main')
184
184
  }
185
185
 
186
- metadata.configureDb(syncDb)
186
+ metadata.configureDb(sqliteDb)
187
187
  },
188
188
  session: () => {
189
189
  const sessionPointer = sqlite3.session_create(dbPointer, 'main')
@@ -203,18 +203,18 @@ export const makeSynchronousDatabase = <
203
203
  const changeset = {
204
204
  invert: () => {
205
205
  const inverted = sqlite3.changeset_invert(data)
206
- return syncDb.makeChangeset(inverted)
206
+ return sqliteDb.makeChangeset(inverted)
207
207
  },
208
208
  apply: () => {
209
209
  sqlite3.changeset_apply(dbPointer, data)
210
210
  },
211
- } satisfies SynchronousDatabaseChangeset
211
+ } satisfies SqliteDbChangeset
212
212
 
213
213
  return changeset
214
214
  },
215
- } satisfies SynchronousDatabase<TMetadata>
215
+ } satisfies SqliteDb<TMetadata>
216
216
 
217
- metadata.configureDb(syncDb)
217
+ metadata.configureDb(sqliteDb)
218
218
 
219
- return syncDb
219
+ return sqliteDb
220
220
  }