@livestore/sqlite-wasm 0.3.0-dev.8 → 0.3.0

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/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,45 +24,43 @@ 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 type MakeNodeSqliteDb = MakeSqliteDb<
47
+ { dbPointer: number; persistenceInfo: PersistenceInfo },
48
+ NodeDatabaseInput,
49
+ NodeDatabaseMetadata
50
+ >
51
+
52
+ export const sqliteDbFactory = ({
52
53
  sqlite3,
53
54
  }: {
54
55
  sqlite3: SQLiteAPI
55
- }): Effect.Effect<
56
- MakeSynchronousDatabase<
57
- { dbPointer: number; persistenceInfo: PersistenceInfo },
58
- NodeDatabaseInput,
59
- NodeDatabaseMetadata
60
- >,
61
- never,
62
- FileSystem.FileSystem
63
- > =>
56
+ }): Effect.Effect<MakeNodeSqliteDb, never, FileSystem.FileSystem> =>
64
57
  Effect.andThen(
65
58
  FileSystem.FileSystem,
66
59
  (fs) => (input) =>
67
60
  Effect.gen(function* () {
68
61
  if (input._tag === 'in-memory') {
69
62
  const { dbPointer, vfs } = makeInMemoryDb(sqlite3)
70
- return makeSynchronousDatabase<NodeDatabaseMetadataInMemory>({
63
+ return makeSqliteDb<NodeDatabaseMetadataInMemory>({
71
64
  sqlite3,
72
65
  metadata: {
73
66
  _tag: 'in-memory',
@@ -89,7 +82,7 @@ export const syncDbFactory = ({
89
82
 
90
83
  const filePath = path.join(input.directory, input.fileName)
91
84
 
92
- return makeSynchronousDatabase<NodeDatabaseMetadataFs>({
85
+ return makeSqliteDb<NodeDatabaseMetadataFs>({
93
86
  sqlite3,
94
87
  metadata: {
95
88
  _tag: 'fs',
@@ -103,7 +96,7 @@ export const syncDbFactory = ({
103
96
  }),
104
97
  )
105
98
 
106
- let nodeFsVfs: NodeFS | undefined
99
+ const nodeFsVfsMap = new Map<string, NodeFS>()
107
100
 
108
101
  const makeNodeFsDb = ({
109
102
  sqlite3,
@@ -120,11 +113,12 @@ const makeNodeFsDb = ({
120
113
  // NOTE to keep the filePath short, we use the directory name in the vfs name
121
114
  // If this is becoming a problem, we can use a hashed version of the directory name
122
115
  const vfsName = `node-fs-${directory}`
123
- if (nodeFsVfs === undefined) {
116
+ if (nodeFsVfsMap.has(vfsName) === false) {
124
117
  // TODO refactor with Effect FileSystem instead of using `node:fs` directly inside of NodeFS
125
- nodeFsVfs = new NodeFS(vfsName, (sqlite3 as any).module, directory)
118
+ const nodeFsVfs = new NodeFS(vfsName, (sqlite3 as any).module, directory)
126
119
  // @ts-expect-error TODO fix types
127
120
  sqlite3.vfs_register(nodeFsVfs, false)
121
+ nodeFsVfsMap.set(vfsName, nodeFsVfs)
128
122
  }
129
123
 
130
124
  yield* fs.makeDirectory(directory, { recursive: true })
@@ -137,5 +131,7 @@ const makeNodeFsDb = ({
137
131
  // NOTE SQLite will return a "disk I/O error" if the file path is too long.
138
132
  const dbPointer = sqlite3.open_v2Sync(fileName, undefined, vfsName)
139
133
 
140
- return { dbPointer, vfs: nodeFsVfs }
134
+ const vfs = nodeFsVfsMap.get(vfsName)!
135
+
136
+ return { dbPointer, vfs }
141
137
  }).pipe(UnexpectedError.mapToUnexpectedError)
@@ -1,3 +0,0 @@
1
- {
2
- "siteId": "7d10806a-dc4e-4216-a781-adde1adc649f"
3
- }
@@ -1,11 +0,0 @@
1
- import type { PersistenceInfo, SynchronousDatabase } from '@livestore/common';
2
- export declare const makeSynchronousDatabase: <TMetadata extends {
3
- dbPointer: number;
4
- persistenceInfo: PersistenceInfo;
5
- deleteDb: () => void;
6
- configureDb: (db: SynchronousDatabase<TMetadata>) => void;
7
- }>({ sqlite3, metadata, }: {
8
- sqlite3: SQLiteAPI;
9
- metadata: TMetadata;
10
- }) => SynchronousDatabase<TMetadata>;
11
- //# sourceMappingURL=make-sync-db.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"make-sync-db.d.ts","sourceRoot":"","sources":["../src/make-sync-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAGf,mBAAmB,EAEpB,MAAM,mBAAmB,CAAA;AAM1B,eAAO,MAAM,uBAAuB,GAClC,SAAS,SAAS;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAA;IAChC,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,EAAE,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,IAAI,CAAA;CAC1D,0BAIA;IACD,OAAO,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;CACpB,KAAG,mBAAmB,CAAC,SAAS,CAkMhC,CAAA"}
package/tsconfig.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "../../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "outDir": "./dist",
5
- "rootDir": "./src",
6
- "tsBuildInfoFile": "./dist/.tsbuildinfo",
7
- },
8
- "include": ["./src"],
9
- "references": [{ "path": "../common" }, { "path": "../utils" }]
10
- }