@livestore/adapter-expo 0.3.0-dev.22 → 0.3.0-dev.24
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/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -4
- package/dist/index.js.map +1 -1
- package/dist/make-sqlite-db.d.ts +2 -2
- package/dist/make-sqlite-db.d.ts.map +1 -1
- package/dist/make-sqlite-db.js +30 -41
- package/dist/make-sqlite-db.js.map +1 -1
- package/dist/polyfill.d.ts +7 -0
- package/dist/polyfill.d.ts.map +1 -0
- package/dist/polyfill.js +13 -0
- package/dist/polyfill.js.map +1 -0
- package/dist/polyfills.d.ts +7 -0
- package/dist/polyfills.d.ts.map +1 -0
- package/dist/polyfills.js +13 -0
- package/dist/polyfills.js.map +1 -0
- package/package.json +7 -7
- package/src/index.ts +26 -5
- package/src/make-sqlite-db.ts +34 -43
- package/src/polyfill.ts +12 -0
- package/tmp/pack.tgz +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import './polyfill.js';
|
|
1
2
|
import type { Adapter, SyncOptions } from '@livestore/common';
|
|
2
3
|
export type MakeDbOptions = {
|
|
3
4
|
sync?: SyncOptions;
|
|
@@ -15,5 +16,8 @@ export type MakeDbOptions = {
|
|
|
15
16
|
/** @default 'expo' */
|
|
16
17
|
sessionId?: string;
|
|
17
18
|
};
|
|
18
|
-
|
|
19
|
+
declare global {
|
|
20
|
+
var RN$Bridgeless: boolean | undefined;
|
|
21
|
+
}
|
|
22
|
+
export declare const makePersistedAdapter: (options?: MakeDbOptions) => Adapter;
|
|
19
23
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAKP,WAAW,EACZ,MAAM,mBAAmB,CAAA;AAgB1B,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,OAAO,CAAC,EAAE;QACR;;;;;WAKG;QACH,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IAED,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AAEtB,OAAO,KAAK,EACV,OAAO,EAKP,WAAW,EACZ,MAAM,mBAAmB,CAAA;AAgB1B,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,OAAO,CAAC,EAAE;QACR;;;;;WAKG;QACH,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IAED,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,aAAa,EAAE,OAAO,GAAG,SAAS,CAAA;CACvC;AAKD,eAAO,MAAM,oBAAoB,GAC9B,UAAS,aAAkB,KAAG,OAyF5B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import './polyfill.js';
|
|
1
2
|
import { Devtools, liveStoreStorageFormatVersion, UnexpectedError } from '@livestore/common';
|
|
2
3
|
import { getClientHeadFromDb, LeaderThreadCtx, makeLeaderThreadLayer } from '@livestore/common/leader-thread';
|
|
3
4
|
import { MutationEvent } from '@livestore/common/schema';
|
|
@@ -6,8 +7,14 @@ import { Cause, Effect, FetchHttpClient, Fiber, Layer, Queue, Stream, Subscripti
|
|
|
6
7
|
import * as SQLite from 'expo-sqlite';
|
|
7
8
|
import { makeSqliteDb } from './make-sqlite-db.js';
|
|
8
9
|
import { makeShutdownChannel } from './shutdown-channel.js';
|
|
10
|
+
const IS_NEW_ARCH = globalThis.RN$Bridgeless === true;
|
|
9
11
|
// TODO refactor with leader-thread code from `@livestore/common/leader-thread`
|
|
10
|
-
export const
|
|
12
|
+
export const makePersistedAdapter = (options = {}) => ({ schema, connectDevtoolsToStore, shutdown, devtoolsEnabled, storeId, bootStatusQueue, syncPayload }) => Effect.gen(function* () {
|
|
13
|
+
if (IS_NEW_ARCH === false) {
|
|
14
|
+
return yield* UnexpectedError.make({
|
|
15
|
+
cause: new Error('The LiveStore Expo adapter requires the new React Native architecture (aka Fabric). See https://docs.expo.dev/guides/new-architecture'),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
11
18
|
const { storage, clientId = 'expo', sessionId = 'expo', sync: syncOptions } = options;
|
|
12
19
|
yield* Queue.offer(bootStatusQueue, { stage: 'loading' });
|
|
13
20
|
const lockStatus = yield* SubscriptionRef.make('has-lock');
|
|
@@ -30,6 +37,7 @@ export const makeAdapter = (options = {}) => ({ schema, connectDevtoolsToStore,
|
|
|
30
37
|
devtoolsEnabled,
|
|
31
38
|
devtoolsWebmeshNode,
|
|
32
39
|
bootStatusQueue,
|
|
40
|
+
syncPayload,
|
|
33
41
|
});
|
|
34
42
|
const sqliteDb = yield* makeSqliteDb({ _tag: 'in-memory' });
|
|
35
43
|
sqliteDb.import(initialSnapshot);
|
|
@@ -63,14 +71,14 @@ export const makeAdapter = (options = {}) => ({ schema, connectDevtoolsToStore,
|
|
|
63
71
|
}
|
|
64
72
|
return clientSession;
|
|
65
73
|
}).pipe(Effect.mapError((cause) => (cause._tag === 'LiveStore.UnexpectedError' ? cause : new UnexpectedError({ cause }))), Effect.tapCauseLogPretty);
|
|
66
|
-
const makeLeaderThread = ({ storeId, clientId, sessionId, schema, makeSqliteDb, syncOptions, storage, devtoolsEnabled, devtoolsWebmeshNode, bootStatusQueue: bootStatusQueueClientSession, }) => Effect.gen(function* () {
|
|
74
|
+
const makeLeaderThread = ({ storeId, clientId, sessionId, schema, makeSqliteDb, syncOptions, storage, devtoolsEnabled, devtoolsWebmeshNode, bootStatusQueue: bootStatusQueueClientSession, syncPayload, }) => Effect.gen(function* () {
|
|
67
75
|
const subDirectory = storage.subDirectory ? storage.subDirectory.replace(/\/$/, '') + '/' : '';
|
|
68
76
|
const pathJoin = (...paths) => paths.join('/').replaceAll(/\/+/g, '/');
|
|
69
77
|
const directory = pathJoin(SQLite.defaultDatabaseDirectory, subDirectory, storeId);
|
|
70
78
|
const readModelDatabaseName = `${'livestore-'}${schema.hash}@${liveStoreStorageFormatVersion}.db`;
|
|
71
79
|
const dbMutationLogPath = `${'livestore-'}mutationlog@${liveStoreStorageFormatVersion}.db`;
|
|
72
|
-
const dbReadModel = yield* makeSqliteDb({ _tag: '
|
|
73
|
-
const dbMutationLog = yield* makeSqliteDb({ _tag: '
|
|
80
|
+
const dbReadModel = yield* makeSqliteDb({ _tag: 'file', databaseName: readModelDatabaseName, directory });
|
|
81
|
+
const dbMutationLog = yield* makeSqliteDb({ _tag: 'file', databaseName: dbMutationLogPath, directory });
|
|
74
82
|
const devtoolsOptions = yield* makeDevtoolsOptions({
|
|
75
83
|
devtoolsEnabled,
|
|
76
84
|
dbReadModel,
|
|
@@ -91,6 +99,7 @@ const makeLeaderThread = ({ storeId, clientId, sessionId, schema, makeSqliteDb,
|
|
|
91
99
|
shutdownChannel: yield* makeShutdownChannel(storeId),
|
|
92
100
|
storeId,
|
|
93
101
|
syncOptions,
|
|
102
|
+
syncPayload,
|
|
94
103
|
}).pipe(Layer.provideMerge(FetchHttpClient.layer)));
|
|
95
104
|
return yield* Effect.gen(function* () {
|
|
96
105
|
const { dbReadModel: db, dbMutationLog, syncProcessor, connectedClientSessionPullQueues, extraIncomingMessagesQueue, initialState, bootStatusQueue, } = yield* LeaderThreadCtx;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/make-sqlite-db.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { type MakeSqliteDb, type PersistenceInfo } from '@livestore/common';
|
|
2
2
|
type Metadata = {
|
|
3
|
-
_tag: '
|
|
3
|
+
_tag: 'file';
|
|
4
4
|
dbPointer: number;
|
|
5
5
|
persistenceInfo: PersistenceInfo;
|
|
6
6
|
input: ExpoDatabaseInput;
|
|
7
7
|
};
|
|
8
8
|
type ExpoDatabaseInput = {
|
|
9
|
-
_tag: '
|
|
9
|
+
_tag: 'file';
|
|
10
10
|
databaseName: string;
|
|
11
11
|
directory: string;
|
|
12
12
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-sqlite-db.d.ts","sourceRoot":"","sources":["../src/make-sqlite-db.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EAIrB,MAAM,mBAAmB,CAAA;AAS1B,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAA;IAChC,KAAK,EAAE,iBAAiB,CAAA;CACzB,CAAA;AAED,KAAK,iBAAiB,GAClB;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB,GACD;IACE,IAAI,EAAE,WAAW,CAAA;CAClB,CAAA;AAEL,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAAC,CAAA;AAErG,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"make-sqlite-db.d.ts","sourceRoot":"","sources":["../src/make-sqlite-db.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EAIrB,MAAM,mBAAmB,CAAA;AAS1B,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAA;IAChC,KAAK,EAAE,iBAAiB,CAAA;CACzB,CAAA;AAED,KAAK,iBAAiB,GAClB;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB,GACD;IACE,IAAI,EAAE,WAAW,CAAA;CAClB,CAAA;AAEL,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAAC,CAAA;AAErG,eAAO,MAAM,YAAY,EAAE,gBA8BvB,CAAA"}
|
package/dist/make-sqlite-db.js
CHANGED
|
@@ -1,33 +1,28 @@
|
|
|
1
1
|
import { SqliteError, } from '@livestore/common';
|
|
2
2
|
import { shouldNeverHappen } from '@livestore/utils';
|
|
3
3
|
import { Effect } from '@livestore/utils/effect';
|
|
4
|
-
// TODO remove `expo-file-system` dependency once expo-sqlite supports `import`
|
|
5
|
-
// @ts-expect-error package misses `exports`
|
|
6
|
-
import * as ExpoFs from 'expo-file-system/src/next';
|
|
7
4
|
// import * as ExpoFs from 'expo-file-system'
|
|
8
5
|
import * as SQLite from 'expo-sqlite';
|
|
9
6
|
export const makeSqliteDb = (input) => Effect.gen(function* () {
|
|
10
7
|
// console.log('makeSqliteDb', input)
|
|
11
8
|
if (input._tag === 'in-memory') {
|
|
12
|
-
|
|
9
|
+
const db = SQLite.openDatabaseSync(':memory:');
|
|
13
10
|
return makeSqliteDb_({
|
|
14
|
-
|
|
15
|
-
makeDb: () => SQLite.openDatabaseSync(':memory:'),
|
|
11
|
+
db,
|
|
16
12
|
metadata: {
|
|
17
|
-
_tag: '
|
|
13
|
+
_tag: 'file',
|
|
18
14
|
dbPointer: 0,
|
|
19
15
|
persistenceInfo: { fileName: ':memory:' },
|
|
20
16
|
input,
|
|
21
17
|
},
|
|
22
18
|
});
|
|
23
19
|
}
|
|
24
|
-
if (input._tag === '
|
|
25
|
-
|
|
20
|
+
if (input._tag === 'file') {
|
|
21
|
+
const db = SQLite.openDatabaseSync(input.databaseName, {}, input.directory);
|
|
26
22
|
return makeSqliteDb_({
|
|
27
|
-
|
|
28
|
-
makeDb: () => SQLite.openDatabaseSync(input.databaseName, {}, input.directory),
|
|
23
|
+
db,
|
|
29
24
|
metadata: {
|
|
30
|
-
_tag: '
|
|
25
|
+
_tag: 'file',
|
|
31
26
|
dbPointer: 0,
|
|
32
27
|
persistenceInfo: { fileName: `${input.directory}/${input.databaseName}` },
|
|
33
28
|
input,
|
|
@@ -35,17 +30,13 @@ export const makeSqliteDb = (input) => Effect.gen(function* () {
|
|
|
35
30
|
});
|
|
36
31
|
}
|
|
37
32
|
});
|
|
38
|
-
const makeSqliteDb_ = ({
|
|
39
|
-
// db,
|
|
40
|
-
makeDb, metadata, }) => {
|
|
33
|
+
const makeSqliteDb_ = ({ db, metadata, }) => {
|
|
41
34
|
const stmts = new Set();
|
|
42
|
-
const dbRef = { current: makeDb(), count: 0 };
|
|
43
35
|
const sqliteDb = {
|
|
44
36
|
metadata,
|
|
45
37
|
_tag: 'SqliteDb',
|
|
46
38
|
prepare: (queryStr) => {
|
|
47
39
|
try {
|
|
48
|
-
const db = dbRef.current;
|
|
49
40
|
const dbStmt = db.prepareSync(queryStr);
|
|
50
41
|
const stmt = {
|
|
51
42
|
execute: (bindValues) => {
|
|
@@ -78,7 +69,6 @@ makeDb, metadata, }) => {
|
|
|
78
69
|
}
|
|
79
70
|
},
|
|
80
71
|
execute: (queryStr, bindValues) => {
|
|
81
|
-
const db = dbRef.current;
|
|
82
72
|
const stmt = db.prepareSync(queryStr);
|
|
83
73
|
try {
|
|
84
74
|
const res = stmt.executeSync(bindValues ?? []);
|
|
@@ -89,7 +79,6 @@ makeDb, metadata, }) => {
|
|
|
89
79
|
}
|
|
90
80
|
},
|
|
91
81
|
export: () => {
|
|
92
|
-
const db = dbRef.current;
|
|
93
82
|
return db.serializeSync();
|
|
94
83
|
},
|
|
95
84
|
select: (queryStr, bindValues) => {
|
|
@@ -99,14 +88,13 @@ makeDb, metadata, }) => {
|
|
|
99
88
|
return res;
|
|
100
89
|
},
|
|
101
90
|
destroy: () => {
|
|
102
|
-
|
|
103
|
-
|
|
91
|
+
sqliteDb.close();
|
|
92
|
+
if (metadata.input._tag === 'file') {
|
|
104
93
|
SQLite.deleteDatabaseSync(metadata.input.databaseName, metadata.input.directory);
|
|
105
94
|
}
|
|
106
95
|
},
|
|
107
96
|
close: () => {
|
|
108
97
|
try {
|
|
109
|
-
const db = dbRef.current;
|
|
110
98
|
for (const stmt of stmts) {
|
|
111
99
|
stmt.finalize();
|
|
112
100
|
}
|
|
@@ -116,7 +104,7 @@ makeDb, metadata, }) => {
|
|
|
116
104
|
catch (cause) {
|
|
117
105
|
throw new SqliteError({
|
|
118
106
|
cause,
|
|
119
|
-
note: `Error closing database ${metadata.input._tag === '
|
|
107
|
+
note: `Error closing database ${metadata.input._tag === 'file' ? metadata.input.databaseName : 'in-memory'}`,
|
|
120
108
|
});
|
|
121
109
|
// console.error('Error closing database', metadata.input, e, dbCount)
|
|
122
110
|
}
|
|
@@ -125,36 +113,37 @@ makeDb, metadata, }) => {
|
|
|
125
113
|
if (!(data instanceof Uint8Array)) {
|
|
126
114
|
throw new TypeError('importing from an existing database is not yet supported in expo');
|
|
127
115
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
stmts.clear();
|
|
133
|
-
prevDb.closeSync();
|
|
134
|
-
if (metadata.input._tag === 'expo') {
|
|
135
|
-
const file = new ExpoFs.File(metadata.input.directory, metadata.input.databaseName);
|
|
136
|
-
file.write(data);
|
|
137
|
-
dbRef.count++;
|
|
138
|
-
dbRef.current = makeDb();
|
|
116
|
+
try {
|
|
117
|
+
const tmpDb = SQLite.deserializeDatabaseSync(data);
|
|
118
|
+
SQLite.backupDatabaseSync({ sourceDatabase: tmpDb, destDatabase: db });
|
|
119
|
+
tmpDb.closeSync();
|
|
139
120
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
121
|
+
catch (cause) {
|
|
122
|
+
throw new SqliteError({
|
|
123
|
+
cause,
|
|
124
|
+
note: `Error importing database ${metadata.input._tag === 'file' ? metadata.input.databaseName : 'in-memory'}`,
|
|
125
|
+
});
|
|
143
126
|
}
|
|
144
127
|
},
|
|
145
128
|
session: () => {
|
|
129
|
+
const session = db.createSessionSync();
|
|
130
|
+
session.attachSync(null);
|
|
146
131
|
return {
|
|
147
|
-
changeset: () =>
|
|
148
|
-
finish: () =>
|
|
132
|
+
changeset: () => session.createChangesetSync(),
|
|
133
|
+
finish: () => session.closeSync(),
|
|
149
134
|
};
|
|
150
135
|
},
|
|
151
136
|
makeChangeset: (data) => {
|
|
137
|
+
const session = db.createSessionSync();
|
|
138
|
+
// NOTE we're not actually attaching this particular session as we only need it to create and
|
|
139
|
+
// apply an inverted changeset
|
|
152
140
|
return {
|
|
153
141
|
invert: () => {
|
|
154
|
-
|
|
142
|
+
const inverted = session.invertChangesetSync(data);
|
|
143
|
+
return sqliteDb.makeChangeset(inverted);
|
|
155
144
|
},
|
|
156
145
|
apply: () => {
|
|
157
|
-
|
|
146
|
+
session.applyChangesetSync(data);
|
|
158
147
|
},
|
|
159
148
|
};
|
|
160
149
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-sqlite-db.js","sourceRoot":"","sources":["../src/make-sqlite-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"make-sqlite-db.js","sourceRoot":"","sources":["../src/make-sqlite-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill.d.ts","sourceRoot":"","sources":["../src/polyfill.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
package/dist/polyfill.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Current limitations in Expo/React Native/Hermes that need workarounds:
|
|
3
|
+
*
|
|
4
|
+
* - No support for `Array.toSorted`: https://github.com/facebook/hermes/pull/1298
|
|
5
|
+
*/
|
|
6
|
+
// eslint-disable-next-line unicorn/no-typeof-undefined
|
|
7
|
+
if (typeof Array.prototype.toSorted === 'undefined') {
|
|
8
|
+
Array.prototype.toSorted = function (compareFn) {
|
|
9
|
+
return this.sort(compareFn);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=polyfill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill.js","sourceRoot":"","sources":["../src/polyfill.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uDAAuD;AACvD,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;IACpD,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,SAAS;QAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC7B,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfills.d.ts","sourceRoot":"","sources":["../src/polyfills.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Current limitations in Expo/React Native/Hermes that need workarounds:
|
|
3
|
+
*
|
|
4
|
+
* - No support for `Array.toSorted`: https://github.com/facebook/hermes/pull/1298
|
|
5
|
+
*/
|
|
6
|
+
// eslint-disable-next-line unicorn/no-typeof-undefined
|
|
7
|
+
if (typeof Array.prototype.toSorted === 'undefined') {
|
|
8
|
+
Array.prototype.toSorted = function (compareFn) {
|
|
9
|
+
return this.sort(compareFn);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=polyfills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfills.js","sourceRoot":"","sources":["../src/polyfills.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uDAAuD;AACvD,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;IACpD,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,SAAS;QAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC7B,CAAC,CAAA;AACH,CAAC"}
|
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.24",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": {
|
|
@@ -12,18 +12,18 @@
|
|
|
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/
|
|
18
|
-
"@livestore/
|
|
15
|
+
"@livestore/common": "0.3.0-dev.24",
|
|
16
|
+
"@livestore/devtools-expo-common": "0.3.0-dev.24",
|
|
17
|
+
"@livestore/utils": "0.3.0-dev.24",
|
|
18
|
+
"@livestore/webmesh": "0.3.0-dev.24"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"expo-file-system": "*",
|
|
22
|
-
"expo-sqlite": "^15.
|
|
22
|
+
"expo-sqlite": "^15.2.0-canary-20250325-0a15ab6"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"expo-file-system": "*",
|
|
26
|
-
"expo-sqlite": "~15.
|
|
26
|
+
"expo-sqlite": "~15.2.0-canary-20250325-0a15ab6"
|
|
27
27
|
},
|
|
28
28
|
"publishConfig": {
|
|
29
29
|
"access": "public"
|
package/src/index.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import './polyfill.js'
|
|
2
|
+
|
|
1
3
|
import type {
|
|
2
4
|
Adapter,
|
|
3
5
|
BootStatus,
|
|
@@ -12,7 +14,7 @@ import { getClientHeadFromDb, LeaderThreadCtx, makeLeaderThreadLayer } from '@li
|
|
|
12
14
|
import type { LiveStoreSchema } from '@livestore/common/schema'
|
|
13
15
|
import { MutationEvent } from '@livestore/common/schema'
|
|
14
16
|
import * as DevtoolsExpo from '@livestore/devtools-expo-common/web-channel'
|
|
15
|
-
import type { Scope } from '@livestore/utils/effect'
|
|
17
|
+
import type { Schema, Scope } from '@livestore/utils/effect'
|
|
16
18
|
import { Cause, Effect, FetchHttpClient, Fiber, Layer, Queue, Stream, SubscriptionRef } from '@livestore/utils/effect'
|
|
17
19
|
import type { MeshNode } from '@livestore/webmesh'
|
|
18
20
|
import * as SQLite from 'expo-sqlite'
|
|
@@ -39,11 +41,26 @@ export type MakeDbOptions = {
|
|
|
39
41
|
sessionId?: string
|
|
40
42
|
}
|
|
41
43
|
|
|
44
|
+
declare global {
|
|
45
|
+
// eslint-disable-next-line no-var
|
|
46
|
+
var RN$Bridgeless: boolean | undefined
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const IS_NEW_ARCH = globalThis.RN$Bridgeless === true
|
|
50
|
+
|
|
42
51
|
// TODO refactor with leader-thread code from `@livestore/common/leader-thread`
|
|
43
|
-
export const
|
|
52
|
+
export const makePersistedAdapter =
|
|
44
53
|
(options: MakeDbOptions = {}): Adapter =>
|
|
45
|
-
({ schema, connectDevtoolsToStore, shutdown, devtoolsEnabled, storeId, bootStatusQueue }) =>
|
|
54
|
+
({ schema, connectDevtoolsToStore, shutdown, devtoolsEnabled, storeId, bootStatusQueue, syncPayload }) =>
|
|
46
55
|
Effect.gen(function* () {
|
|
56
|
+
if (IS_NEW_ARCH === false) {
|
|
57
|
+
return yield* UnexpectedError.make({
|
|
58
|
+
cause: new Error(
|
|
59
|
+
'The LiveStore Expo adapter requires the new React Native architecture (aka Fabric). See https://docs.expo.dev/guides/new-architecture',
|
|
60
|
+
),
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
|
|
47
64
|
const { storage, clientId = 'expo', sessionId = 'expo', sync: syncOptions } = options
|
|
48
65
|
|
|
49
66
|
yield* Queue.offer(bootStatusQueue, { stage: 'loading' })
|
|
@@ -79,6 +96,7 @@ export const makeAdapter =
|
|
|
79
96
|
devtoolsEnabled,
|
|
80
97
|
devtoolsWebmeshNode,
|
|
81
98
|
bootStatusQueue,
|
|
99
|
+
syncPayload,
|
|
82
100
|
})
|
|
83
101
|
|
|
84
102
|
const sqliteDb = yield* makeSqliteDb({ _tag: 'in-memory' })
|
|
@@ -134,6 +152,7 @@ const makeLeaderThread = ({
|
|
|
134
152
|
devtoolsEnabled,
|
|
135
153
|
devtoolsWebmeshNode,
|
|
136
154
|
bootStatusQueue: bootStatusQueueClientSession,
|
|
155
|
+
syncPayload,
|
|
137
156
|
}: {
|
|
138
157
|
storeId: string
|
|
139
158
|
clientId: string
|
|
@@ -147,6 +166,7 @@ const makeLeaderThread = ({
|
|
|
147
166
|
devtoolsEnabled: boolean
|
|
148
167
|
devtoolsWebmeshNode: MeshNode | undefined
|
|
149
168
|
bootStatusQueue: Queue.Queue<BootStatus>
|
|
169
|
+
syncPayload: Schema.JsonValue | undefined
|
|
150
170
|
}) =>
|
|
151
171
|
Effect.gen(function* () {
|
|
152
172
|
const subDirectory = storage.subDirectory ? storage.subDirectory.replace(/\/$/, '') + '/' : ''
|
|
@@ -156,8 +176,8 @@ const makeLeaderThread = ({
|
|
|
156
176
|
const readModelDatabaseName = `${'livestore-'}${schema.hash}@${liveStoreStorageFormatVersion}.db`
|
|
157
177
|
const dbMutationLogPath = `${'livestore-'}mutationlog@${liveStoreStorageFormatVersion}.db`
|
|
158
178
|
|
|
159
|
-
const dbReadModel = yield* makeSqliteDb({ _tag: '
|
|
160
|
-
const dbMutationLog = yield* makeSqliteDb({ _tag: '
|
|
179
|
+
const dbReadModel = yield* makeSqliteDb({ _tag: 'file', databaseName: readModelDatabaseName, directory })
|
|
180
|
+
const dbMutationLog = yield* makeSqliteDb({ _tag: 'file', databaseName: dbMutationLogPath, directory })
|
|
161
181
|
|
|
162
182
|
const devtoolsOptions = yield* makeDevtoolsOptions({
|
|
163
183
|
devtoolsEnabled,
|
|
@@ -181,6 +201,7 @@ const makeLeaderThread = ({
|
|
|
181
201
|
shutdownChannel: yield* makeShutdownChannel(storeId),
|
|
182
202
|
storeId,
|
|
183
203
|
syncOptions,
|
|
204
|
+
syncPayload,
|
|
184
205
|
}).pipe(Layer.provideMerge(FetchHttpClient.layer)),
|
|
185
206
|
)
|
|
186
207
|
|