@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.
@@ -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,18 @@ 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
209
  sqlite3.changeset_apply(dbPointer, data)
203
210
  },
204
- } satisfies SynchronousDatabaseChangeset
211
+ } satisfies SqliteDbChangeset
205
212
 
206
213
  return changeset
207
214
  },
208
- } satisfies SynchronousDatabase<TMetadata>
215
+ } satisfies SqliteDb<TMetadata>
209
216
 
210
- metadata.configureDb(syncDb)
217
+ metadata.configureDb(sqliteDb)
211
218
 
212
- return syncDb
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 { makeSynchronousDatabase } from '../make-sync-db.js'
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: SynchronousDatabase) => void
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: SynchronousDatabase) => void
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: SynchronousDatabase) => void
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: SynchronousDatabase) => void
41
+ configureDb?: (db: SqliteDb) => void
47
42
  }
48
43
 
49
44
  export type NodeDatabaseInput = NodeDatabaseInputInMemory | NodeDatabaseInputFs
50
45
 
51
- export const syncDbFactory = ({
46
+ export const sqliteDbFactory = ({
52
47
  sqlite3,
53
48
  }: {
54
49
  sqlite3: SQLiteAPI
55
50
  }): Effect.Effect<
56
- MakeSynchronousDatabase<
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 makeSynchronousDatabase<NodeDatabaseMetadataInMemory>({
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 makeSynchronousDatabase<NodeDatabaseMetadataFs>({
83
+ return makeSqliteDb<NodeDatabaseMetadataFs>({
93
84
  sqlite3,
94
85
  metadata: {
95
86
  _tag: 'fs',