@livestore/adapter-expo 0.3.0-dev.17 → 0.3.0-dev.19
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/common.d.ts +0 -1
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +1 -87
- package/dist/common.js.map +1 -1
- package/dist/index.d.ts +15 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +125 -151
- package/dist/index.js.map +1 -1
- package/dist/make-sqlite-db.d.ts +20 -0
- package/dist/make-sqlite-db.d.ts.map +1 -0
- package/dist/make-sqlite-db.js +138 -0
- package/dist/make-sqlite-db.js.map +1 -0
- package/dist/shutdown-channel.d.ts +3 -0
- package/dist/shutdown-channel.d.ts.map +1 -0
- package/dist/shutdown-channel.js +8 -0
- package/dist/shutdown-channel.js.map +1 -0
- package/package.json +11 -6
- package/src/common.ts +2 -88
- package/src/index.ts +223 -219
- package/src/make-sqlite-db.ts +167 -0
- package/src/shutdown-channel.ts +10 -0
- package/tmp/pack.tgz +0 -0
- package/tsconfig.json +6 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { shouldNeverHappen } from '@livestore/utils';
|
|
2
|
+
import { Effect } from '@livestore/utils/effect';
|
|
3
|
+
import * as SQLite from 'expo-sqlite';
|
|
4
|
+
export const makeSqliteDb = (input) => Effect.gen(function* () {
|
|
5
|
+
// console.log('makeSqliteDb', input)
|
|
6
|
+
if (input._tag === 'in-memory') {
|
|
7
|
+
// const db = SQLite.openDatabaseSync(':memory:')
|
|
8
|
+
return makeSqliteDb_({
|
|
9
|
+
// db,
|
|
10
|
+
makeDb: () => SQLite.openDatabaseSync(':memory:'),
|
|
11
|
+
metadata: {
|
|
12
|
+
_tag: 'expo',
|
|
13
|
+
dbPointer: 0,
|
|
14
|
+
persistenceInfo: { fileName: ':memory:' },
|
|
15
|
+
input,
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
if (input._tag === 'expo') {
|
|
20
|
+
// const db = SQLite.openDatabaseSync(input.databaseName, {}, input.directory)
|
|
21
|
+
return makeSqliteDb_({
|
|
22
|
+
// db,
|
|
23
|
+
makeDb: () => SQLite.openDatabaseSync(input.databaseName, {}, input.directory),
|
|
24
|
+
metadata: {
|
|
25
|
+
_tag: 'expo',
|
|
26
|
+
dbPointer: 0,
|
|
27
|
+
persistenceInfo: { fileName: `${input.directory}/${input.databaseName}` },
|
|
28
|
+
input,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
const makeSqliteDb_ = ({
|
|
34
|
+
// db,
|
|
35
|
+
makeDb, metadata, }) => {
|
|
36
|
+
const stmts = [];
|
|
37
|
+
const dbRef = { current: makeDb() };
|
|
38
|
+
const sqliteDb = {
|
|
39
|
+
metadata,
|
|
40
|
+
_tag: 'SqliteDb',
|
|
41
|
+
prepare: (queryStr) => {
|
|
42
|
+
try {
|
|
43
|
+
const db = dbRef.current;
|
|
44
|
+
const dbStmt = db.prepareSync(queryStr);
|
|
45
|
+
const stmt = {
|
|
46
|
+
execute: (bindValues) => {
|
|
47
|
+
// console.log('execute', queryStr, bindValues)
|
|
48
|
+
const res = dbStmt.executeSync(bindValues ?? []);
|
|
49
|
+
res.resetSync();
|
|
50
|
+
return () => res.changes;
|
|
51
|
+
},
|
|
52
|
+
select: (bindValues) => {
|
|
53
|
+
const res = dbStmt.executeSync(bindValues ?? []);
|
|
54
|
+
try {
|
|
55
|
+
return res.getAllSync();
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
res.resetSync();
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
finalize: () => dbStmt.finalizeSync(),
|
|
62
|
+
sql: queryStr,
|
|
63
|
+
};
|
|
64
|
+
stmts.push(stmt);
|
|
65
|
+
return stmt;
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
console.error(`Error preparing statement: ${queryStr}`, e);
|
|
69
|
+
return shouldNeverHappen(`Error preparing statement: ${queryStr}`);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
execute: (queryStr, bindValues) => {
|
|
73
|
+
const db = dbRef.current;
|
|
74
|
+
const stmt = db.prepareSync(queryStr);
|
|
75
|
+
try {
|
|
76
|
+
const res = stmt.executeSync(bindValues ?? []);
|
|
77
|
+
return () => res.changes;
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
stmt.finalizeSync();
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
export: () => {
|
|
84
|
+
const db = dbRef.current;
|
|
85
|
+
return db.serializeSync();
|
|
86
|
+
},
|
|
87
|
+
select: (queryStr, bindValues) => {
|
|
88
|
+
const stmt = sqliteDb.prepare(queryStr);
|
|
89
|
+
const res = stmt.select(bindValues);
|
|
90
|
+
stmt.finalize();
|
|
91
|
+
return res;
|
|
92
|
+
},
|
|
93
|
+
// TODO
|
|
94
|
+
destroy: () => {
|
|
95
|
+
if (metadata.input._tag === 'expo') {
|
|
96
|
+
SQLite.deleteDatabaseSync(metadata.input.databaseName, metadata.input.directory);
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
close: () => {
|
|
100
|
+
const db = dbRef.current;
|
|
101
|
+
for (const stmt of stmts) {
|
|
102
|
+
stmt.finalize();
|
|
103
|
+
}
|
|
104
|
+
return db.closeSync();
|
|
105
|
+
},
|
|
106
|
+
import: (data) => {
|
|
107
|
+
if (!(data instanceof Uint8Array)) {
|
|
108
|
+
throw new TypeError('importing from an existing database is not yet supported in expo');
|
|
109
|
+
}
|
|
110
|
+
if (metadata.input._tag === 'expo') {
|
|
111
|
+
throw new Error('not implemented');
|
|
112
|
+
// SQLite.importDatabaseSync(metadata.input.databaseName, metadata.input.directory, _data)
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
dbRef.current.closeSync();
|
|
116
|
+
dbRef.current = SQLite.deserializeDatabaseSync(data);
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
session: () => {
|
|
120
|
+
return {
|
|
121
|
+
changeset: () => new Uint8Array(),
|
|
122
|
+
finish: () => { },
|
|
123
|
+
};
|
|
124
|
+
},
|
|
125
|
+
makeChangeset: (data) => {
|
|
126
|
+
return {
|
|
127
|
+
invert: () => {
|
|
128
|
+
return sqliteDb.makeChangeset(data);
|
|
129
|
+
},
|
|
130
|
+
apply: () => {
|
|
131
|
+
// TODO
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
return sqliteDb;
|
|
137
|
+
};
|
|
138
|
+
//# 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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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { WebChannel } from '@livestore/utils/effect';
|
|
2
|
+
export declare const makeShutdownChannel: (storeId: string) => import("effect/Effect").Effect<WebChannel.WebChannel<import("@livestore/common/dist/adapter-types.js").UnexpectedError | import("@livestore/common/dist/adapter-types.js").IntentionalShutdownCause, import("@livestore/common/dist/adapter-types.js").UnexpectedError | import("@livestore/common/dist/adapter-types.js").IntentionalShutdownCause, never>, never, import("effect/Scope").Scope>;
|
|
3
|
+
//# sourceMappingURL=shutdown-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown-channel.d.ts","sourceRoot":"","sources":["../src/shutdown-channel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAGpD,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,sYACyC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WebChannel } from '@livestore/utils/effect';
|
|
2
|
+
// TODO find an actual implementation for Expo
|
|
3
|
+
export const makeShutdownChannel = (storeId) => WebChannel.noopChannel();
|
|
4
|
+
// WebChannel.broadcastChannel({
|
|
5
|
+
// channelName: `livestore.shutdown.${storeId}`,
|
|
6
|
+
// schema: ShutdownChannel.All,
|
|
7
|
+
// })
|
|
8
|
+
//# sourceMappingURL=shutdown-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown-channel.js","sourceRoot":"","sources":["../src/shutdown-channel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAE,EAAE,CACrD,UAAU,CAAC,WAAW,EAAoE,CAAA;AAC5F,gCAAgC;AAChC,kDAAkD;AAClD,iCAAiC;AACjC,KAAK"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/adapter-expo",
|
|
3
|
-
"version": "0.3.0-dev.
|
|
3
|
+
"version": "0.3.0-dev.19",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": {
|
|
@@ -12,22 +12,27 @@
|
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@opentelemetry/api": "1.9.0",
|
|
15
|
-
"@livestore/common": "0.3.0-dev.
|
|
16
|
-
"@livestore/devtools-expo-common": "0.3.0-dev.
|
|
17
|
-
"@livestore/utils": "0.3.0-dev.
|
|
15
|
+
"@livestore/common": "0.3.0-dev.19",
|
|
16
|
+
"@livestore/devtools-expo-common": "0.3.0-dev.19",
|
|
17
|
+
"@livestore/utils": "0.3.0-dev.19",
|
|
18
|
+
"@livestore/webmesh": "0.3.0-dev.19"
|
|
18
19
|
},
|
|
19
20
|
"devDependencies": {
|
|
20
21
|
"expo-file-system": "*",
|
|
21
|
-
"expo-sqlite": "^15.
|
|
22
|
+
"expo-sqlite": "^15.1.2"
|
|
22
23
|
},
|
|
23
24
|
"peerDependencies": {
|
|
24
25
|
"expo-file-system": "*",
|
|
25
|
-
"expo-sqlite": "
|
|
26
|
+
"expo-sqlite": "^15.1.2"
|
|
26
27
|
},
|
|
27
28
|
"publishConfig": {
|
|
28
29
|
"access": "public"
|
|
29
30
|
},
|
|
31
|
+
"scripts_": {
|
|
32
|
+
"postinstall": "This is needed to avoid a Expo/PNPM related issue"
|
|
33
|
+
},
|
|
30
34
|
"scripts": {
|
|
35
|
+
"postinstall": "rm -f node_modules/expo-sqlite",
|
|
31
36
|
"test": "echo No tests yet"
|
|
32
37
|
}
|
|
33
38
|
}
|
package/src/common.ts
CHANGED
|
@@ -1,95 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { base64
|
|
1
|
+
import type { SqliteDb } from '@livestore/common'
|
|
2
|
+
import { base64 } from '@livestore/utils'
|
|
3
3
|
import { Effect } from '@livestore/utils/effect'
|
|
4
4
|
import * as ExpoFS from 'expo-file-system'
|
|
5
5
|
import type * as SQLite from 'expo-sqlite'
|
|
6
6
|
|
|
7
|
-
export const makeSqliteDb = (db: SQLite.SQLiteDatabase): SqliteDb => {
|
|
8
|
-
const stmts: PreparedStatement[] = []
|
|
9
|
-
|
|
10
|
-
const sqliteDb: SqliteDb<any> = {
|
|
11
|
-
metadata: { fileName: db.databasePath },
|
|
12
|
-
_tag: 'SqliteDb',
|
|
13
|
-
prepare: (queryStr) => {
|
|
14
|
-
try {
|
|
15
|
-
const dbStmt = db.prepareSync(queryStr)
|
|
16
|
-
const stmt = {
|
|
17
|
-
execute: (bindValues) => {
|
|
18
|
-
// console.log('execute', queryStr, bindValues)
|
|
19
|
-
const res = dbStmt.executeSync(bindValues ?? ([] as any))
|
|
20
|
-
res.resetSync()
|
|
21
|
-
return () => res.changes
|
|
22
|
-
},
|
|
23
|
-
select: (bindValues) => {
|
|
24
|
-
const res = dbStmt.executeSync(bindValues ?? ([] as any))
|
|
25
|
-
try {
|
|
26
|
-
return res.getAllSync() as any
|
|
27
|
-
} finally {
|
|
28
|
-
res.resetSync()
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
finalize: () => dbStmt.finalizeSync(),
|
|
32
|
-
sql: queryStr,
|
|
33
|
-
} satisfies PreparedStatement
|
|
34
|
-
stmts.push(stmt)
|
|
35
|
-
return stmt
|
|
36
|
-
} catch (e) {
|
|
37
|
-
console.error(`Error preparing statement: ${queryStr}`, e)
|
|
38
|
-
return shouldNeverHappen(`Error preparing statement: ${queryStr}`)
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
execute: (queryStr, bindValues) => {
|
|
42
|
-
const stmt = db.prepareSync(queryStr)
|
|
43
|
-
try {
|
|
44
|
-
const res = stmt.executeSync(bindValues ?? ([] as any))
|
|
45
|
-
return () => res.changes
|
|
46
|
-
} finally {
|
|
47
|
-
stmt.finalizeSync()
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
export: () => {
|
|
51
|
-
return db.serializeSync()
|
|
52
|
-
},
|
|
53
|
-
select: (queryStr, bindValues) => {
|
|
54
|
-
const stmt = sqliteDb.prepare(queryStr)
|
|
55
|
-
const res = stmt.select(bindValues)
|
|
56
|
-
stmt.finalize()
|
|
57
|
-
return res as any
|
|
58
|
-
},
|
|
59
|
-
// TODO
|
|
60
|
-
destroy: () => {},
|
|
61
|
-
close: () => {
|
|
62
|
-
for (const stmt of stmts) {
|
|
63
|
-
stmt.finalize()
|
|
64
|
-
}
|
|
65
|
-
return db.closeSync()
|
|
66
|
-
},
|
|
67
|
-
import: () => {
|
|
68
|
-
throw new Error('Not implemented')
|
|
69
|
-
// TODO properly implement this as it seems to require importing to a temporary in-memory db,
|
|
70
|
-
// save it to a file, and then reopen the DB from that file? (see `overwriteDbFile` below)
|
|
71
|
-
},
|
|
72
|
-
session: () => {
|
|
73
|
-
return {
|
|
74
|
-
changeset: () => new Uint8Array(),
|
|
75
|
-
finish: () => {},
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
makeChangeset: (data) => {
|
|
79
|
-
return {
|
|
80
|
-
invert: () => {
|
|
81
|
-
return sqliteDb.makeChangeset(data)
|
|
82
|
-
},
|
|
83
|
-
apply: () => {
|
|
84
|
-
// TODO
|
|
85
|
-
},
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
} satisfies SqliteDb
|
|
89
|
-
|
|
90
|
-
return sqliteDb
|
|
91
|
-
}
|
|
92
|
-
|
|
93
7
|
export type DbPairRef = {
|
|
94
8
|
current:
|
|
95
9
|
| {
|