@livestore/sqlite-wasm 0.3.0-dev.1 → 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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/browser/mod.d.ts +7 -7
- 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/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-sqlite-db.js +181 -0
- package/dist/make-sqlite-db.js.map +1 -0
- package/dist/make-sync-db.d.ts.map +1 -1
- package/dist/make-sync-db.js +5 -0
- package/dist/make-sync-db.js.map +1 -1
- package/dist/node/mod.d.ts +7 -7
- package/dist/node/mod.d.ts.map +1 -1
- package/dist/node/mod.js +5 -5
- package/dist/node/mod.js.map +1 -1
- package/package.json +5 -5
- package/src/browser/mod.ts +10 -14
- package/src/index_.ts +1 -1
- package/src/{make-sync-db.ts → make-sqlite-db.ts} +23 -16
- package/src/node/mod.ts +10 -19
|
@@ -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,18 @@ 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
|
sqlite3.changeset_apply(dbPointer, data)
|
|
203
210
|
},
|
|
204
|
-
} satisfies
|
|
211
|
+
} satisfies SqliteDbChangeset
|
|
205
212
|
|
|
206
213
|
return changeset
|
|
207
214
|
},
|
|
208
|
-
} satisfies
|
|
215
|
+
} satisfies SqliteDb<TMetadata>
|
|
209
216
|
|
|
210
|
-
metadata.configureDb(
|
|
217
|
+
metadata.configureDb(sqliteDb)
|
|
211
218
|
|
|
212
|
-
return
|
|
219
|
+
return sqliteDb
|
|
213
220
|
}
|
package/src/node/mod.ts
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
type MakeSynchronousDatabase,
|
|
5
|
-
type PersistenceInfo,
|
|
6
|
-
type SynchronousDatabase,
|
|
7
|
-
UnexpectedError,
|
|
8
|
-
} from '@livestore/common'
|
|
3
|
+
import { type MakeSqliteDb, type PersistenceInfo, type SqliteDb, UnexpectedError } from '@livestore/common'
|
|
9
4
|
import { Effect, FileSystem } from '@livestore/utils/effect'
|
|
10
5
|
import type * as WaSqlite from '@livestore/wa-sqlite'
|
|
11
6
|
import type { MemoryVFS } from '@livestore/wa-sqlite/src/examples/MemoryVFS.js'
|
|
12
7
|
|
|
13
8
|
import { makeInMemoryDb } from '../in-memory-vfs.js'
|
|
14
|
-
import {
|
|
9
|
+
import { makeSqliteDb } from '../make-sqlite-db.js'
|
|
15
10
|
import { NodeFS } from './NodeFS.js'
|
|
16
11
|
|
|
17
12
|
export type NodeDatabaseMetadataInMemory = {
|
|
@@ -20,7 +15,7 @@ export type NodeDatabaseMetadataInMemory = {
|
|
|
20
15
|
dbPointer: number
|
|
21
16
|
persistenceInfo: PersistenceInfo
|
|
22
17
|
deleteDb: () => void
|
|
23
|
-
configureDb: (db:
|
|
18
|
+
configureDb: (db: SqliteDb) => void
|
|
24
19
|
}
|
|
25
20
|
|
|
26
21
|
export type NodeDatabaseMetadataFs = {
|
|
@@ -29,35 +24,31 @@ export type NodeDatabaseMetadataFs = {
|
|
|
29
24
|
dbPointer: number
|
|
30
25
|
persistenceInfo: PersistenceInfo<{ directory: string }>
|
|
31
26
|
deleteDb: () => void
|
|
32
|
-
configureDb: (db:
|
|
27
|
+
configureDb: (db: SqliteDb) => void
|
|
33
28
|
}
|
|
34
29
|
|
|
35
30
|
export type NodeDatabaseMetadata = NodeDatabaseMetadataInMemory | NodeDatabaseMetadataFs
|
|
36
31
|
|
|
37
32
|
export type NodeDatabaseInputInMemory = {
|
|
38
33
|
_tag: 'in-memory'
|
|
39
|
-
configureDb?: (db:
|
|
34
|
+
configureDb?: (db: SqliteDb) => void
|
|
40
35
|
}
|
|
41
36
|
|
|
42
37
|
export type NodeDatabaseInputFs = {
|
|
43
38
|
_tag: 'fs'
|
|
44
39
|
directory: string
|
|
45
40
|
fileName: string
|
|
46
|
-
configureDb?: (db:
|
|
41
|
+
configureDb?: (db: SqliteDb) => void
|
|
47
42
|
}
|
|
48
43
|
|
|
49
44
|
export type NodeDatabaseInput = NodeDatabaseInputInMemory | NodeDatabaseInputFs
|
|
50
45
|
|
|
51
|
-
export const
|
|
46
|
+
export const sqliteDbFactory = ({
|
|
52
47
|
sqlite3,
|
|
53
48
|
}: {
|
|
54
49
|
sqlite3: SQLiteAPI
|
|
55
50
|
}): Effect.Effect<
|
|
56
|
-
|
|
57
|
-
{ dbPointer: number; persistenceInfo: PersistenceInfo },
|
|
58
|
-
NodeDatabaseInput,
|
|
59
|
-
NodeDatabaseMetadata
|
|
60
|
-
>,
|
|
51
|
+
MakeSqliteDb<{ dbPointer: number; persistenceInfo: PersistenceInfo }, NodeDatabaseInput, NodeDatabaseMetadata>,
|
|
61
52
|
never,
|
|
62
53
|
FileSystem.FileSystem
|
|
63
54
|
> =>
|
|
@@ -67,7 +58,7 @@ export const syncDbFactory = ({
|
|
|
67
58
|
Effect.gen(function* () {
|
|
68
59
|
if (input._tag === 'in-memory') {
|
|
69
60
|
const { dbPointer, vfs } = makeInMemoryDb(sqlite3)
|
|
70
|
-
return
|
|
61
|
+
return makeSqliteDb<NodeDatabaseMetadataInMemory>({
|
|
71
62
|
sqlite3,
|
|
72
63
|
metadata: {
|
|
73
64
|
_tag: 'in-memory',
|
|
@@ -89,7 +80,7 @@ export const syncDbFactory = ({
|
|
|
89
80
|
|
|
90
81
|
const filePath = path.join(input.directory, input.fileName)
|
|
91
82
|
|
|
92
|
-
return
|
|
83
|
+
return makeSqliteDb<NodeDatabaseMetadataFs>({
|
|
93
84
|
sqlite3,
|
|
94
85
|
metadata: {
|
|
95
86
|
_tag: 'fs',
|