@livestore/sqlite-wasm 0.3.0-dev.5 → 0.3.0-dev.50

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,25 +20,26 @@ 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, }: {
39
- sqlite3: SQLiteAPI;
40
- }) => MakeSynchronousDatabase<{
38
+ export type MakeWebSqliteDb = MakeSqliteDb<{
41
39
  dbPointer: number;
42
40
  persistenceInfo: PersistenceInfo;
43
41
  }, WebDatabaseInput, WebDatabaseMetadata>;
42
+ export declare const sqliteDbFactory: ({ sqlite3 }: {
43
+ sqlite3: SQLiteAPI;
44
+ }) => MakeWebSqliteDb;
44
45
  //# sourceMappingURL=mod.d.ts.map
@@ -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,MAAM,MAAM,eAAe,GAAG,YAAY,CACxC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,EACvD,gBAAgB,EAChB,mBAAmB,CACpB,CAAA;AAED,eAAO,MAAM,eAAe,GACzB,aAAa;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,KAAG,eAqDnC,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;AA+CvC,MAAM,CAAC,MAAM,eAAe,GAC1B,CAAC,EAAE,OAAO,EAA0B,EAAmB,EAAE,CACzD,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/opfs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,KAAK,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAK9D,eAAO,MAAM,UAAU,sCAIpB;IACD,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;;;gBAkBkC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/opfs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,KAAK,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAK9D,eAAO,MAAM,UAAU,GAAI,mCAIxB;IACD,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;;;gBAkBkC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"opfs-sah-pool.d.ts","sourceRoot":"","sources":["../../../src/browser/opfs/opfs-sah-pool.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,kBAAkB,OAAc,CAAA;AAO7C,eAAO,MAAM,qBAAqB,SAAgB,IAAI,KAAG,OAAO,CAAC,MAAM,CA+BtE,CAAA"}
1
+ {"version":3,"file":"opfs-sah-pool.d.ts","sourceRoot":"","sources":["../../../src/browser/opfs/opfs-sah-pool.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,kBAAkB,OAAc,CAAA;AAO7C,eAAO,MAAM,qBAAqB,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,MAAM,CA+BtE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory-vfs.d.ts","sourceRoot":"","sources":["../src/in-memory-vfs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAA;AAI1E,eAAO,MAAM,cAAc,YAAa,QAAQ,CAAC,SAAS;;;CAczD,CAAA"}
1
+ {"version":3,"file":"in-memory-vfs.d.ts","sourceRoot":"","sources":["../src/in-memory-vfs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAA;AAI1E,eAAO,MAAM,cAAc,GAAI,SAAS,QAAQ,CAAC,SAAS;;;CAczD,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,EACD,wBAGC;IACD,OAAO,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;CACpB,KAAG,QAAQ,CAAC,SAAS,CA4MrB,CAAA"}
@@ -1,11 +1,12 @@
1
1
  import { SqliteError } from '@livestore/common';
2
2
  import * as SqliteConstants from '@livestore/wa-sqlite/src/sqlite-constants.js';
3
3
  import { makeInMemoryDb } from './in-memory-vfs.js';
4
- export const makeSynchronousDatabase = ({ sqlite3, metadata, }) => {
4
+ export const makeSqliteDb = ({ sqlite3, metadata, }) => {
5
5
  const preparedStmts = [];
6
6
  const { dbPointer } = metadata;
7
- const syncDb = {
8
- _tag: 'SynchronousDatabase',
7
+ let isClosed = false;
8
+ const sqliteDb = {
9
+ _tag: 'SqliteDb',
9
10
  metadata,
10
11
  prepare: (queryStr) => {
11
12
  try {
@@ -97,28 +98,32 @@ export const makeSynchronousDatabase = ({ sqlite3, metadata, }) => {
97
98
  },
98
99
  export: () => sqlite3.serialize(dbPointer, 'main'),
99
100
  execute: (queryStr, bindValues, options) => {
100
- const stmt = syncDb.prepare(queryStr);
101
+ const stmt = sqliteDb.prepare(queryStr);
101
102
  stmt.execute(bindValues, options);
102
103
  stmt.finalize();
103
104
  },
104
105
  select: (queryStr, bindValues) => {
105
- const stmt = syncDb.prepare(queryStr);
106
+ const stmt = sqliteDb.prepare(queryStr);
106
107
  const results = stmt.select(bindValues);
107
108
  stmt.finalize();
108
109
  return results;
109
110
  },
110
111
  destroy: () => {
111
- syncDb.close();
112
+ sqliteDb.close();
112
113
  metadata.deleteDb();
113
114
  // if (metadata._tag === 'opfs') {
114
115
  // metadata.vfs.resetAccessHandle(metadata.fileName)
115
116
  // }
116
117
  },
117
118
  close: () => {
119
+ if (isClosed) {
120
+ return;
121
+ }
118
122
  for (const stmt of preparedStmts) {
119
123
  stmt.finalize();
120
124
  }
121
125
  sqlite3.close(dbPointer);
126
+ isClosed = true;
122
127
  },
123
128
  import: (source) => {
124
129
  // https://www.sqlite.org/c3ref/c_deserialize_freeonclose.html
@@ -142,7 +147,7 @@ export const makeSynchronousDatabase = ({ sqlite3, metadata, }) => {
142
147
  else {
143
148
  sqlite3.backup(dbPointer, 'main', source.metadata.dbPointer, 'main');
144
149
  }
145
- metadata.configureDb(syncDb);
150
+ metadata.configureDb(sqliteDb);
146
151
  },
147
152
  session: () => {
148
153
  const sessionPointer = sqlite3.session_create(dbPointer, 'main');
@@ -161,16 +166,27 @@ export const makeSynchronousDatabase = ({ sqlite3, metadata, }) => {
161
166
  const changeset = {
162
167
  invert: () => {
163
168
  const inverted = sqlite3.changeset_invert(data);
164
- return syncDb.makeChangeset(inverted);
169
+ return sqliteDb.makeChangeset(inverted);
165
170
  },
166
171
  apply: () => {
167
- sqlite3.changeset_apply(dbPointer, data);
172
+ try {
173
+ sqlite3.changeset_apply(dbPointer, data);
174
+ // @ts-expect-error data should be garbage collected after use
175
+ data = undefined;
176
+ }
177
+ catch (cause) {
178
+ throw new SqliteError({
179
+ code: cause.code ?? -1,
180
+ cause,
181
+ note: `Failed calling makeChangeset.apply`,
182
+ });
183
+ }
168
184
  },
169
185
  };
170
186
  return changeset;
171
187
  },
172
188
  };
173
- metadata.configureDb(syncDb);
174
- return syncDb;
189
+ metadata.configureDb(sqliteDb);
190
+ return sqliteDb;
175
191
  };
176
- //# sourceMappingURL=make-sync-db.js.map
192
+ //# 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,24 +18,25 @@ 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, }: {
36
- sqlite3: SQLiteAPI;
37
- }) => Effect.Effect<MakeSynchronousDatabase<{
35
+ export type MakeNodeSqliteDb = MakeSqliteDb<{
38
36
  dbPointer: number;
39
37
  persistenceInfo: PersistenceInfo;
40
- }, NodeDatabaseInput, NodeDatabaseMetadata>, never, FileSystem.FileSystem>;
38
+ }, NodeDatabaseInput, NodeDatabaseMetadata>;
39
+ export declare const sqliteDbFactory: ({ sqlite3, }: {
40
+ sqlite3: SQLiteAPI;
41
+ }) => Effect.Effect<MakeNodeSqliteDb, never, FileSystem.FileSystem>;
41
42
  //# sourceMappingURL=mod.d.ts.map
@@ -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,MAAM,MAAM,gBAAgB,GAAG,YAAY,CACzC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,EACvD,iBAAiB,EACjB,oBAAoB,CACrB,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,cAE7B;IACD,OAAO,EAAE,SAAS,CAAA;CACnB,KAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAyC7D,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',
@@ -38,16 +38,17 @@ export const syncDbFactory = ({ sqlite3, }) => Effect.andThen(FileSystem.FileSys
38
38
  },
39
39
  });
40
40
  }));
41
- let nodeFsVfs;
41
+ const nodeFsVfsMap = new Map();
42
42
  const makeNodeFsDb = ({ sqlite3, fileName, directory, fs, }) => Effect.gen(function* () {
43
43
  // NOTE to keep the filePath short, we use the directory name in the vfs name
44
44
  // If this is becoming a problem, we can use a hashed version of the directory name
45
45
  const vfsName = `node-fs-${directory}`;
46
- if (nodeFsVfs === undefined) {
46
+ if (nodeFsVfsMap.has(vfsName) === false) {
47
47
  // TODO refactor with Effect FileSystem instead of using `node:fs` directly inside of NodeFS
48
- nodeFsVfs = new NodeFS(vfsName, sqlite3.module, directory);
48
+ const nodeFsVfs = new NodeFS(vfsName, sqlite3.module, directory);
49
49
  // @ts-expect-error TODO fix types
50
50
  sqlite3.vfs_register(nodeFsVfs, false);
51
+ nodeFsVfsMap.set(vfsName, nodeFsVfs);
51
52
  }
52
53
  yield* fs.makeDirectory(directory, { recursive: true });
53
54
  const FILE_NAME_MAX_LENGTH = 56;
@@ -56,6 +57,7 @@ const makeNodeFsDb = ({ sqlite3, fileName, directory, fs, }) => Effect.gen(funct
56
57
  }
57
58
  // NOTE SQLite will return a "disk I/O error" if the file path is too long.
58
59
  const dbPointer = sqlite3.open_v2Sync(fileName, undefined, vfsName);
59
- return { dbPointer, vfs: nodeFsVfs };
60
+ const vfs = nodeFsVfsMap.get(vfsName);
61
+ return { dbPointer, vfs };
60
62
  }).pipe(UnexpectedError.mapToUnexpectedError);
61
63
  //# sourceMappingURL=mod.js.map
@@ -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.5",
3
+ "version": "0.3.0-dev.50",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -22,15 +22,20 @@
22
22
  }
23
23
  },
24
24
  "dependencies": {
25
- "@livestore/wa-sqlite": "1.0.3-dev.7",
26
- "@livestore/common": "0.3.0-dev.5",
27
- "@livestore/utils": "0.3.0-dev.5"
25
+ "@livestore/wa-sqlite": "1.0.5-dev.2",
26
+ "@livestore/utils": "0.3.0-dev.50",
27
+ "@livestore/common": "0.3.0-dev.50"
28
28
  },
29
29
  "devDependencies": {
30
- "@types/node": "22.10.5",
31
- "@types/chrome": "^0.0.279",
30
+ "@types/chrome": "^0.0.304",
31
+ "@types/node": "^22.15.17",
32
32
  "@types/wicg-file-system-access": "^2023.10.5"
33
33
  },
34
+ "files": [
35
+ "package.json",
36
+ "src",
37
+ "dist"
38
+ ],
34
39
  "publishConfig": {
35
40
  "access": "public"
36
41
  },
@@ -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,24 @@ 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 =
52
- ({
53
- sqlite3,
54
- }: {
55
- sqlite3: SQLiteAPI
56
- }): MakeSynchronousDatabase<
57
- { dbPointer: number; persistenceInfo: PersistenceInfo },
58
- WebDatabaseInput,
59
- WebDatabaseMetadata
60
- > =>
51
+ export type MakeWebSqliteDb = MakeSqliteDb<
52
+ { dbPointer: number; persistenceInfo: PersistenceInfo },
53
+ WebDatabaseInput,
54
+ WebDatabaseMetadata
55
+ >
56
+
57
+ export const sqliteDbFactory =
58
+ ({ sqlite3 }: { sqlite3: SQLiteAPI }): MakeWebSqliteDb =>
61
59
  (input: WebDatabaseInput) =>
62
60
  Effect.gen(function* () {
63
61
  if (input._tag === 'in-memory') {
64
62
  const { dbPointer, vfs } = makeInMemoryDb(sqlite3)
65
- return makeSynchronousDatabase<WebDatabaseMetadataInMemory>({
63
+ return makeSqliteDb<WebDatabaseMetadataInMemory>({
66
64
  sqlite3,
67
65
  metadata: {
68
66
  _tag: 'in-memory',
@@ -95,7 +93,7 @@ export const syncDbFactory =
95
93
  fileName: dbFilename,
96
94
  })
97
95
 
98
- return makeSynchronousDatabase<WebDatabaseMetadataOpfs>({
96
+ return makeSqliteDb<WebDatabaseMetadataOpfs>({
99
97
  sqlite3,
100
98
  metadata: {
101
99
  _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,12 +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
- const syncDb: SynchronousDatabase<TMetadata> = {
31
- _tag: 'SynchronousDatabase',
30
+ let isClosed = false
31
+
32
+ const sqliteDb: SqliteDb<TMetadata> = {
33
+ _tag: 'SqliteDb',
32
34
  metadata,
33
35
  prepare: (queryStr) => {
34
36
  try {
@@ -129,18 +131,18 @@ export const makeSynchronousDatabase = <
129
131
  },
130
132
  export: () => sqlite3.serialize(dbPointer, 'main'),
131
133
  execute: (queryStr, bindValues, options) => {
132
- const stmt = syncDb.prepare(queryStr)
134
+ const stmt = sqliteDb.prepare(queryStr)
133
135
  stmt.execute(bindValues, options)
134
136
  stmt.finalize()
135
137
  },
136
138
  select: (queryStr, bindValues) => {
137
- const stmt = syncDb.prepare(queryStr)
139
+ const stmt = sqliteDb.prepare(queryStr)
138
140
  const results = stmt.select(bindValues)
139
141
  stmt.finalize()
140
142
  return results as ReadonlyArray<any>
141
143
  },
142
144
  destroy: () => {
143
- syncDb.close()
145
+ sqliteDb.close()
144
146
 
145
147
  metadata.deleteDb()
146
148
  // if (metadata._tag === 'opfs') {
@@ -148,10 +150,15 @@ export const makeSynchronousDatabase = <
148
150
  // }
149
151
  },
150
152
  close: () => {
153
+ if (isClosed) {
154
+ return
155
+ }
156
+
151
157
  for (const stmt of preparedStmts) {
152
158
  stmt.finalize()
153
159
  }
154
160
  sqlite3.close(dbPointer)
161
+ isClosed = true
155
162
  },
156
163
  import: (source) => {
157
164
  // https://www.sqlite.org/c3ref/c_deserialize_freeonclose.html
@@ -176,7 +183,7 @@ export const makeSynchronousDatabase = <
176
183
  sqlite3.backup(dbPointer, 'main', source.metadata.dbPointer, 'main')
177
184
  }
178
185
 
179
- metadata.configureDb(syncDb)
186
+ metadata.configureDb(sqliteDb)
180
187
  },
181
188
  session: () => {
182
189
  const sessionPointer = sqlite3.session_create(dbPointer, 'main')
@@ -196,18 +203,28 @@ export const makeSynchronousDatabase = <
196
203
  const changeset = {
197
204
  invert: () => {
198
205
  const inverted = sqlite3.changeset_invert(data)
199
- return syncDb.makeChangeset(inverted)
206
+ return sqliteDb.makeChangeset(inverted)
200
207
  },
201
208
  apply: () => {
202
- sqlite3.changeset_apply(dbPointer, data)
209
+ try {
210
+ sqlite3.changeset_apply(dbPointer, data)
211
+ // @ts-expect-error data should be garbage collected after use
212
+ data = undefined
213
+ } catch (cause: any) {
214
+ throw new SqliteError({
215
+ code: cause.code ?? -1,
216
+ cause,
217
+ note: `Failed calling makeChangeset.apply`,
218
+ })
219
+ }
203
220
  },
204
- } satisfies SynchronousDatabaseChangeset
221
+ } satisfies SqliteDbChangeset
205
222
 
206
223
  return changeset
207
224
  },
208
- } satisfies SynchronousDatabase<TMetadata>
225
+ } satisfies SqliteDb<TMetadata>
209
226
 
210
- metadata.configureDb(syncDb)
227
+ metadata.configureDb(sqliteDb)
211
228
 
212
- return syncDb
229
+ return sqliteDb
213
230
  }