@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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/browser/mod.d.ts +9 -8
- package/dist/browser/mod.d.ts.map +1 -1
- package/dist/browser/mod.js +4 -4
- package/dist/browser/mod.js.map +1 -1
- package/dist/browser/opfs/index.d.ts.map +1 -1
- package/dist/browser/opfs/opfs-sah-pool.d.ts.map +1 -1
- package/dist/in-memory-vfs.d.ts.map +1 -1
- package/dist/index_.d.ts +1 -1
- package/dist/index_.d.ts.map +1 -1
- package/dist/index_.js +1 -1
- package/dist/index_.js.map +1 -1
- package/dist/make-sqlite-db.d.ts +11 -0
- package/dist/make-sqlite-db.d.ts.map +1 -0
- package/dist/{make-sync-db.js → make-sqlite-db.js} +28 -12
- package/dist/make-sqlite-db.js.map +1 -0
- package/dist/node/mod.d.ts +10 -9
- package/dist/node/mod.d.ts.map +1 -1
- package/dist/node/mod.js +11 -9
- package/dist/node/mod.js.map +1 -1
- package/package.json +11 -6
- package/src/browser/mod.ts +16 -18
- package/src/index_.ts +1 -1
- package/src/{make-sync-db.ts → make-sqlite-db.ts} +34 -17
- package/src/node/mod.ts +23 -27
- package/.netlify/state.json +0 -3
- package/dist/make-sync-db.d.ts +0 -11
- package/dist/make-sync-db.d.ts.map +0 -1
- package/dist/make-sync-db.js.map +0 -1
- package/tsconfig.json +0 -10
package/dist/browser/mod.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
35
|
+
configureDb?: (db: SqliteDb) => void;
|
|
36
36
|
};
|
|
37
37
|
export type WebDatabaseInput = WebDatabaseInputInMemory | WebDatabaseInputOpfs;
|
|
38
|
-
export
|
|
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,
|
|
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"}
|
package/dist/browser/mod.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Effect, Hash } from '@livestore/utils/effect';
|
|
2
2
|
import { makeInMemoryDb } from '../in-memory-vfs.js';
|
|
3
|
-
import {
|
|
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
|
|
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
|
|
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
|
|
35
|
+
return makeSqliteDb({
|
|
36
36
|
sqlite3,
|
|
37
37
|
metadata: {
|
|
38
38
|
_tag: 'opfs',
|
package/dist/browser/mod.js.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
package/dist/index_.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index_.d.ts","sourceRoot":"","sources":["../src/index_.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,
|
|
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
package/dist/index_.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index_.js","sourceRoot":"","sources":["../src/index_.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,
|
|
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
|
|
4
|
+
export const makeSqliteDb = ({ sqlite3, metadata, }) => {
|
|
5
5
|
const preparedStmts = [];
|
|
6
6
|
const { dbPointer } = metadata;
|
|
7
|
-
|
|
8
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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(
|
|
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
|
|
169
|
+
return sqliteDb.makeChangeset(inverted);
|
|
165
170
|
},
|
|
166
171
|
apply: () => {
|
|
167
|
-
|
|
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(
|
|
174
|
-
return
|
|
189
|
+
metadata.configureDb(sqliteDb);
|
|
190
|
+
return sqliteDb;
|
|
175
191
|
};
|
|
176
|
-
//# sourceMappingURL=make-
|
|
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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"}
|
package/dist/node/mod.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
32
|
+
configureDb?: (db: SqliteDb) => void;
|
|
33
33
|
};
|
|
34
34
|
export type NodeDatabaseInput = NodeDatabaseInputInMemory | NodeDatabaseInputFs;
|
|
35
|
-
export
|
|
36
|
-
sqlite3: SQLiteAPI;
|
|
37
|
-
}) => Effect.Effect<MakeSynchronousDatabase<{
|
|
35
|
+
export type MakeNodeSqliteDb = MakeSqliteDb<{
|
|
38
36
|
dbPointer: number;
|
|
39
37
|
persistenceInfo: PersistenceInfo;
|
|
40
|
-
}, NodeDatabaseInput, NodeDatabaseMetadata
|
|
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
|
package/dist/node/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
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
|
|
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 {
|
|
5
|
+
import { makeSqliteDb } from '../make-sqlite-db.js';
|
|
6
6
|
import { NodeFS } from './NodeFS.js';
|
|
7
|
-
export const
|
|
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
|
|
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
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
60
|
+
const vfs = nodeFsVfsMap.get(vfsName);
|
|
61
|
+
return { dbPointer, vfs };
|
|
60
62
|
}).pipe(UnexpectedError.mapToUnexpectedError);
|
|
61
63
|
//# sourceMappingURL=mod.js.map
|
package/dist/node/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAA0D,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC3G,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AA0CpC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,OAAO,GAGR,EAAiE,EAAE,CAClE,MAAM,CAAC,OAAO,CACZ,UAAU,CAAC,UAAU,EACrB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAChB,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,CAA+B;YAChD,OAAO;YACP,QAAQ,EAAE;gBACR,IAAI,EAAE,WAAW;gBACjB,GAAG;gBACH,SAAS;gBACT,eAAe,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;gBACzC,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;aAC7C;SACF,CAAQ,CAAA;IACX,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC;QAC7C,OAAO;QACP,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,EAAE;KACH,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAE3D,OAAO,YAAY,CAAyB;QAC1C,OAAO;QACP,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI;YACV,GAAG;YACH,SAAS;YACT,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;YACzE,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACtC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;SAC7C;KACF,CAAC,CAAA;AACJ,CAAC,CAAC,CACL,CAAA;AAEH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAA;AAE9C,MAAM,YAAY,GAAG,CAAC,EACpB,OAAO,EACP,QAAQ,EACR,SAAS,EACT,EAAE,GAMH,EAAE,EAAE,CACH,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,6EAA6E;IAC7E,mFAAmF;IACnF,MAAM,OAAO,GAAG,WAAW,SAAS,EAAE,CAAA;IACtC,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;QACxC,4FAA4F;QAC5F,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,OAAO,EAAG,OAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QACzE,kCAAkC;QAClC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACtC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEvD,MAAM,oBAAoB,GAAG,EAAE,CAAA;IAC/B,IAAI,QAAQ,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,mCAAmC,oBAAoB,cAAc,CAAC,CAAA;IAC7G,CAAC;IAED,2EAA2E;IAC3E,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IAEnE,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAE,CAAA;IAEtC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAA;AAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/sqlite-wasm",
|
|
3
|
-
"version": "0.3.0-dev.
|
|
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.
|
|
26
|
-
"@livestore/
|
|
27
|
-
"@livestore/
|
|
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/
|
|
31
|
-
"@types/
|
|
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
|
},
|
package/src/browser/mod.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
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 {
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
46
|
+
configureDb?: (db: SqliteDb) => void
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
export type WebDatabaseInput = WebDatabaseInputInMemory | WebDatabaseInputOpfs
|
|
50
50
|
|
|
51
|
-
export
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
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
|
|
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-
|
|
2
|
+
export * from './make-sqlite-db.js'
|
|
@@ -2,20 +2,20 @@ import type {
|
|
|
2
2
|
PersistenceInfo,
|
|
3
3
|
PreparedBindValues,
|
|
4
4
|
PreparedStatement,
|
|
5
|
-
|
|
6
|
-
|
|
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
|
|
13
|
+
export const makeSqliteDb = <
|
|
14
14
|
TMetadata extends {
|
|
15
15
|
dbPointer: number
|
|
16
16
|
persistenceInfo: PersistenceInfo
|
|
17
17
|
deleteDb: () => void
|
|
18
|
-
configureDb: (db:
|
|
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
|
-
}):
|
|
26
|
+
}): SqliteDb<TMetadata> => {
|
|
27
27
|
const preparedStmts: PreparedStatement[] = []
|
|
28
28
|
const { dbPointer } = metadata
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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(
|
|
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
|
|
206
|
+
return sqliteDb.makeChangeset(inverted)
|
|
200
207
|
},
|
|
201
208
|
apply: () => {
|
|
202
|
-
|
|
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
|
|
221
|
+
} satisfies SqliteDbChangeset
|
|
205
222
|
|
|
206
223
|
return changeset
|
|
207
224
|
},
|
|
208
|
-
} satisfies
|
|
225
|
+
} satisfies SqliteDb<TMetadata>
|
|
209
226
|
|
|
210
|
-
metadata.configureDb(
|
|
227
|
+
metadata.configureDb(sqliteDb)
|
|
211
228
|
|
|
212
|
-
return
|
|
229
|
+
return sqliteDb
|
|
213
230
|
}
|