@livestore/adapter-expo 0.4.0-dev.1 → 0.4.0-dev.10

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/index.d.ts CHANGED
@@ -15,9 +15,12 @@ export type MakeDbOptions = {
15
15
  clientId?: string;
16
16
  /** @default 'static' */
17
17
  sessionId?: string;
18
+ /**
19
+ * Warning: This will reset both the app and eventlog database. This should only be used during development.
20
+ *
21
+ * @default false
22
+ */
23
+ resetPersistence?: boolean;
18
24
  };
19
- declare global {
20
- var RN$Bridgeless: boolean | undefined;
21
- }
22
25
  export declare const makePersistedAdapter: (options?: MakeDbOptions) => Adapter;
23
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AAEtB,OAAO,EACL,KAAK,OAAO,EAOZ,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAA;AAiB1B,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,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,aAAa,EAAE,OAAO,GAAG,SAAS,CAAA;CACvC;AAKD,eAAO,MAAM,oBAAoB,GAC9B,UAAS,aAAkB,KAAG,OA8EiF,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AAEtB,OAAO,EACL,KAAK,OAAO,EAQZ,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAA;AA2B1B,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,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAWD,eAAO,MAAM,oBAAoB,GAC9B,UAAS,aAAkB,KAAG,OA0FiF,CAAA"}
package/dist/index.js CHANGED
@@ -1,16 +1,22 @@
1
1
  import "./polyfill.js";
2
- import { ClientSessionLeaderThreadProxy, Devtools, liveStoreStorageFormatVersion, makeClientSession, UnexpectedError, } from '@livestore/common';
2
+ import { ClientSessionLeaderThreadProxy, Devtools, IntentionalShutdownCause, liveStoreStorageFormatVersion, makeClientSession, UnexpectedError, } from '@livestore/common';
3
3
  import { Eventlog, LeaderThreadCtx, makeLeaderThreadLayer } from '@livestore/common/leader-thread';
4
4
  import { LiveStoreEvent } from '@livestore/common/schema';
5
5
  import { shouldNeverHappen } from '@livestore/utils';
6
- import { Effect, Exit, FetchHttpClient, Fiber, Layer, Queue, Stream, SubscriptionRef } from '@livestore/utils/effect';
6
+ import { Effect, Exit, FetchHttpClient, Fiber, Layer, Queue, Schedule, Stream, SubscriptionRef, } from '@livestore/utils/effect';
7
7
  import * as Webmesh from '@livestore/webmesh';
8
8
  import * as ExpoApplication from 'expo-application';
9
9
  import * as SQLite from 'expo-sqlite';
10
10
  import * as RN from 'react-native';
11
11
  import { makeSqliteDb } from "./make-sqlite-db.js";
12
12
  import { makeShutdownChannel } from "./shutdown-channel.js";
13
- const IS_NEW_ARCH = globalThis.RN$Bridgeless === true;
13
+ // Expo Go with the New Architecture enables Fabric and TurboModules, but may not run in "bridgeless" mode.
14
+ // Rely on Fabric/TurboModules feature detection instead of RN$Bridgeless.
15
+ const IS_NEW_ARCH =
16
+ // Fabric global – set when the new renderer is enabled
17
+ Boolean(globalThis.nativeFabricUIManager) ||
18
+ // TurboModule proxy – indicates new arch TurboModules
19
+ Boolean(globalThis.__turboModuleProxy);
14
20
  // TODO refactor with leader-thread code from `@livestore/common/leader-thread`
15
21
  export const makePersistedAdapter = (options = {}) => (adapterArgs) => Effect.gen(function* () {
16
22
  if (IS_NEW_ARCH === false) {
@@ -19,12 +25,16 @@ export const makePersistedAdapter = (options = {}) => (adapterArgs) => Effect.ge
19
25
  });
20
26
  }
21
27
  const { schema, shutdown, devtoolsEnabled, storeId, bootStatusQueue, syncPayload } = adapterArgs;
22
- const { storage, clientId = yield* getDeviceId, sessionId = 'static', sync: syncOptions } = options;
28
+ const { storage, clientId = yield* getDeviceId, sessionId = 'static', sync: syncOptions, resetPersistence = false, } = options;
23
29
  yield* Queue.offer(bootStatusQueue, { stage: 'loading' });
24
30
  const lockStatus = yield* SubscriptionRef.make('has-lock');
25
31
  const shutdownChannel = yield* makeShutdownChannel(storeId);
32
+ if (resetPersistence === true) {
33
+ yield* shutdownChannel.send(IntentionalShutdownCause.make({ reason: 'adapter-reset' }));
34
+ yield* resetExpoPersistence({ storeId, storage, schema });
35
+ }
26
36
  yield* shutdownChannel.listen.pipe(Stream.flatten(), Stream.tap((cause) => shutdown(cause._tag === 'LiveStore.IntentionalShutdownCause' ? Exit.succeed(cause) : Exit.fail(cause))), Stream.runDrain, Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
27
- const devtoolsUrl = getDevtoolsUrl().toString();
37
+ const devtoolsUrl = devtoolsEnabled ? getDevtoolsUrl().toString() : 'ws://127.0.0.1:4242';
28
38
  const { leaderThread, initialSnapshot } = yield* makeLeaderThread({
29
39
  storeId,
30
40
  clientId,
@@ -67,14 +77,13 @@ export const makePersistedAdapter = (options = {}) => (adapterArgs) => Effect.ge
67
77
  return clientSession;
68
78
  }).pipe(UnexpectedError.mapToUnexpectedError, Effect.provide(FetchHttpClient.layer), Effect.tapCauseLogPretty);
69
79
  const makeLeaderThread = ({ storeId, clientId, schema, makeSqliteDb, syncOptions, storage, devtoolsEnabled, bootStatusQueue: bootStatusQueueClientSession, syncPayload, devtoolsUrl, }) => Effect.gen(function* () {
70
- const subDirectory = storage.subDirectory ? `${storage.subDirectory.replace(/\/$/, '')}/` : '';
71
- const pathJoin = (...paths) => paths.join('/').replaceAll(/\/+/g, '/');
72
- const directory = pathJoin(SQLite.defaultDatabaseDirectory, subDirectory, storeId);
73
- const schemaHashSuffix = schema.state.sqlite.migrations.strategy === 'manual' ? 'fixed' : schema.state.sqlite.hash.toString();
74
- const stateDatabaseName = `${'livestore-'}${schemaHashSuffix}@${liveStoreStorageFormatVersion}.db`;
75
- const dbEventlogPath = `${'livestore-'}eventlog@${liveStoreStorageFormatVersion}.db`;
80
+ const { directory, stateDatabaseName, eventlogDatabaseName } = resolveExpoPersistencePaths({
81
+ storeId,
82
+ storage,
83
+ schema,
84
+ });
76
85
  const dbState = yield* makeSqliteDb({ _tag: 'file', databaseName: stateDatabaseName, directory });
77
- const dbEventlog = yield* makeSqliteDb({ _tag: 'file', databaseName: dbEventlogPath, directory });
86
+ const dbEventlog = yield* makeSqliteDb({ _tag: 'file', databaseName: eventlogDatabaseName, directory });
78
87
  const devtoolsOptions = yield* makeDevtoolsOptions({
79
88
  devtoolsEnabled,
80
89
  devtoolsUrl,
@@ -97,7 +106,7 @@ const makeLeaderThread = ({ storeId, clientId, schema, makeSqliteDb, syncOptions
97
106
  syncPayload,
98
107
  }).pipe(Layer.provideMerge(FetchHttpClient.layer)));
99
108
  return yield* Effect.gen(function* () {
100
- const { dbState: db, dbEventlog, syncProcessor, extraIncomingMessagesQueue, initialState, bootStatusQueue, } = yield* LeaderThreadCtx;
109
+ const { dbState: db, dbEventlog, syncProcessor, extraIncomingMessagesQueue, initialState, bootStatusQueue, networkStatus, } = yield* LeaderThreadCtx;
101
110
  const bootStatusFiber = yield* Queue.takeBetween(bootStatusQueue, 1, 1000).pipe(Effect.tap((bootStatus) => Queue.offerAll(bootStatusQueueClientSession, bootStatus)), Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
102
111
  yield* Queue.awaitShutdown(bootStatusQueueClientSession).pipe(Effect.andThen(Fiber.interrupt(bootStatusFiber)), Effect.tapCauseLogPretty, Effect.forkScoped);
103
112
  const initialLeaderHead = Eventlog.getClientHeadFromDb(dbEventlog);
@@ -113,11 +122,36 @@ const makeLeaderThread = ({ storeId, clientId, schema, makeSqliteDb, syncOptions
113
122
  getEventlogData: Effect.sync(() => dbEventlog.export()),
114
123
  getSyncState: syncProcessor.syncState,
115
124
  sendDevtoolsMessage: (message) => extraIncomingMessagesQueue.offer(message),
125
+ networkStatus,
116
126
  });
117
127
  const initialSnapshot = db.export();
118
128
  return { leaderThread, initialSnapshot };
119
129
  }).pipe(Effect.provide(layer));
120
130
  });
131
+ const resolveExpoPersistencePaths = ({ storeId, storage, schema, }) => {
132
+ const subDirectory = storage?.subDirectory ? `${storage.subDirectory.replace(/\/$/, '')}/` : '';
133
+ const pathJoin = (...paths) => paths.join('/').replaceAll(/\/+/g, '/');
134
+ const directory = pathJoin(SQLite.defaultDatabaseDirectory, subDirectory, storeId);
135
+ const schemaHashSuffix = schema.state.sqlite.migrations.strategy === 'manual' ? 'fixed' : schema.state.sqlite.hash.toString();
136
+ const stateDatabaseName = `livestore-${schemaHashSuffix}@${liveStoreStorageFormatVersion}.db`;
137
+ const eventlogDatabaseName = `livestore-eventlog@${liveStoreStorageFormatVersion}.db`;
138
+ return { directory, stateDatabaseName, eventlogDatabaseName };
139
+ };
140
+ const resetExpoPersistence = ({ storeId, storage, schema, }) => Effect.try({
141
+ try: () => {
142
+ const { directory, stateDatabaseName, eventlogDatabaseName } = resolveExpoPersistencePaths({
143
+ storeId,
144
+ storage,
145
+ schema,
146
+ });
147
+ SQLite.deleteDatabaseSync(stateDatabaseName, directory);
148
+ SQLite.deleteDatabaseSync(eventlogDatabaseName, directory);
149
+ },
150
+ catch: (cause) => new UnexpectedError({
151
+ cause,
152
+ note: `@livestore/adapter-expo: Failed to reset persistence for store ${storeId}`,
153
+ }),
154
+ }).pipe(Effect.retry({ schedule: Schedule.exponentialBackoff10Sec }), Effect.withSpan('@livestore/adapter-expo:resetPersistence', { attributes: { storeId } }));
121
155
  const makeDevtoolsOptions = ({ devtoolsEnabled, devtoolsUrl, dbState, dbEventlog, storeId, clientId, }) => Effect.sync(() => {
122
156
  if (devtoolsEnabled === false) {
123
157
  return {
@@ -157,15 +191,16 @@ const getDeviceId = Effect.gen(function* () {
157
191
  }
158
192
  });
159
193
  /**
160
- * Given that an Expo app is running in special environments (e.g. on a real device with separate IP address or in an Android emulator),
161
- * we need to determine the correct URL to connect to the devtools server.
194
+ * Determine the devtools WebSocket URL.
195
+ * Avoid relying on RN internal Devtools modules (deep imports), which can
196
+ * change across versions and caused crashes in dev. Prefer an explicit env var
197
+ * and fall back to localhost which works for iOS Simulator when
198
+ * `EXPO_USE_LOCALHOST=1` is set.
162
199
  */
163
200
  const getDevtoolsUrl = () => {
164
- const url = new URL(process.env.EXPO_PUBLIC_LIVESTORE_DEVTOOLS_URL ?? `ws://0.0.0.0:4242`);
165
- const port = url.port;
166
- const getDevServer = require('react-native/Libraries/Core/Devtools/getDevServer').default;
167
- const devServer = getDevServer().url.replace(/\/?$/, '');
168
- const devServerUrl = new URL(devServer);
169
- return new URL(`ws://${devServerUrl.hostname}:${port}`);
201
+ const fromEnv = process.env.EXPO_PUBLIC_LIVESTORE_DEVTOOLS_URL;
202
+ if (fromEnv && fromEnv.length > 0)
203
+ return new URL(fromEnv);
204
+ return new URL('ws://127.0.0.1:4242');
170
205
  };
171
206
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import { WebChannel } from '@livestore/utils/effect';
2
- export declare const makeShutdownChannel: (storeId: string) => import("effect/Effect").Effect<WebChannel.WebChannel<import("@livestore/common").UnexpectedError | import("@livestore/common").IntentionalShutdownCause | import("@livestore/common").SyncError, import("@livestore/common").UnexpectedError | import("@livestore/common").IntentionalShutdownCause | import("@livestore/common").SyncError, never>, never, import("effect/Scope").Scope>;
2
+ export declare const makeShutdownChannel: (storeId: string) => import("effect/Effect").Effect<WebChannel.WebChannel<import("@livestore/common").UnexpectedError | import("@livestore/common").IntentionalShutdownCause | import("@livestore/common").IsOfflineError | import("@livestore/common").InvalidPushError | import("@livestore/common").InvalidPullError | import("@livestore/common").MaterializeError, import("@livestore/common").UnexpectedError | import("@livestore/common").IntentionalShutdownCause | import("@livestore/common").IsOfflineError | import("@livestore/common").InvalidPushError | import("@livestore/common").InvalidPullError | import("@livestore/common").MaterializeError, never>, never, import("effect/Scope").Scope>;
3
3
  //# sourceMappingURL=shutdown-channel.d.ts.map
@@ -1 +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,8XAI/C,CAAA"}
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,kqBAI/C,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/adapter-expo",
3
- "version": "0.4.0-dev.1",
3
+ "version": "0.4.0-dev.10",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -8,15 +8,15 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@opentelemetry/api": "1.9.0",
11
- "@livestore/common": "0.4.0-dev.1",
12
- "@livestore/webmesh": "0.4.0-dev.1",
13
- "@livestore/utils": "0.4.0-dev.1"
11
+ "@livestore/common": "0.4.0-dev.10",
12
+ "@livestore/utils": "0.4.0-dev.10",
13
+ "@livestore/webmesh": "0.4.0-dev.10"
14
14
  },
15
15
  "devDependencies": {
16
- "expo-application": "^6.1.5",
17
- "expo-file-system": "^18.1.11",
18
- "expo-sqlite": "^15.2.14",
19
- "react-native": "^0.79.5"
16
+ "expo-application": "^7.0.7",
17
+ "expo-file-system": "^19.0.15",
18
+ "expo-sqlite": "^16.0.8",
19
+ "react-native": "^0.81.4"
20
20
  },
21
21
  "files": [
22
22
  "package.json",
@@ -25,9 +25,9 @@
25
25
  ],
26
26
  "license": "Apache-2.0",
27
27
  "peerDependencies": {
28
- "expo-application": "^6.1.5",
29
- "expo-file-system": "^18.1.11",
30
- "expo-sqlite": "^15.2.14"
28
+ "expo-application": "^7.0.7",
29
+ "expo-file-system": "^19.0.15",
30
+ "expo-sqlite": "^16.0.8"
31
31
  },
32
32
  "publishConfig": {
33
33
  "access": "public"
package/src/index.ts CHANGED
@@ -5,6 +5,7 @@ import {
5
5
  type BootStatus,
6
6
  ClientSessionLeaderThreadProxy,
7
7
  Devtools,
8
+ IntentionalShutdownCause,
8
9
  type LockStatus,
9
10
  liveStoreStorageFormatVersion,
10
11
  makeClientSession,
@@ -17,7 +18,17 @@ import type { LiveStoreSchema } from '@livestore/common/schema'
17
18
  import { LiveStoreEvent } from '@livestore/common/schema'
18
19
  import { shouldNeverHappen } from '@livestore/utils'
19
20
  import type { Schema, Scope } from '@livestore/utils/effect'
20
- import { Effect, Exit, FetchHttpClient, Fiber, Layer, Queue, Stream, SubscriptionRef } from '@livestore/utils/effect'
21
+ import {
22
+ Effect,
23
+ Exit,
24
+ FetchHttpClient,
25
+ Fiber,
26
+ Layer,
27
+ Queue,
28
+ Schedule,
29
+ Stream,
30
+ SubscriptionRef,
31
+ } from '@livestore/utils/effect'
21
32
  import * as Webmesh from '@livestore/webmesh'
22
33
  import * as ExpoApplication from 'expo-application'
23
34
  import * as SQLite from 'expo-sqlite'
@@ -43,13 +54,21 @@ export type MakeDbOptions = {
43
54
  clientId?: string
44
55
  /** @default 'static' */
45
56
  sessionId?: string
57
+ /**
58
+ * Warning: This will reset both the app and eventlog database. This should only be used during development.
59
+ *
60
+ * @default false
61
+ */
62
+ resetPersistence?: boolean
46
63
  }
47
64
 
48
- declare global {
49
- var RN$Bridgeless: boolean | undefined
50
- }
51
-
52
- const IS_NEW_ARCH = globalThis.RN$Bridgeless === true
65
+ // Expo Go with the New Architecture enables Fabric and TurboModules, but may not run in "bridgeless" mode.
66
+ // Rely on Fabric/TurboModules feature detection instead of RN$Bridgeless.
67
+ const IS_NEW_ARCH =
68
+ // Fabric global – set when the new renderer is enabled
69
+ Boolean((globalThis as any).nativeFabricUIManager) ||
70
+ // TurboModule proxy – indicates new arch TurboModules
71
+ Boolean((globalThis as any).__turboModuleProxy)
53
72
 
54
73
  // TODO refactor with leader-thread code from `@livestore/common/leader-thread`
55
74
  export const makePersistedAdapter =
@@ -66,7 +85,13 @@ export const makePersistedAdapter =
66
85
 
67
86
  const { schema, shutdown, devtoolsEnabled, storeId, bootStatusQueue, syncPayload } = adapterArgs
68
87
 
69
- const { storage, clientId = yield* getDeviceId, sessionId = 'static', sync: syncOptions } = options
88
+ const {
89
+ storage,
90
+ clientId = yield* getDeviceId,
91
+ sessionId = 'static',
92
+ sync: syncOptions,
93
+ resetPersistence = false,
94
+ } = options
70
95
 
71
96
  yield* Queue.offer(bootStatusQueue, { stage: 'loading' })
72
97
 
@@ -74,6 +99,12 @@ export const makePersistedAdapter =
74
99
 
75
100
  const shutdownChannel = yield* makeShutdownChannel(storeId)
76
101
 
102
+ if (resetPersistence === true) {
103
+ yield* shutdownChannel.send(IntentionalShutdownCause.make({ reason: 'adapter-reset' }))
104
+
105
+ yield* resetExpoPersistence({ storeId, storage, schema })
106
+ }
107
+
77
108
  yield* shutdownChannel.listen.pipe(
78
109
  Stream.flatten(),
79
110
  Stream.tap((cause) =>
@@ -85,7 +116,7 @@ export const makePersistedAdapter =
85
116
  Effect.forkScoped,
86
117
  )
87
118
 
88
- const devtoolsUrl = getDevtoolsUrl().toString()
119
+ const devtoolsUrl = devtoolsEnabled ? getDevtoolsUrl().toString() : 'ws://127.0.0.1:4242'
89
120
 
90
121
  const { leaderThread, initialSnapshot } = yield* makeLeaderThread({
91
122
  storeId,
@@ -159,17 +190,14 @@ const makeLeaderThread = ({
159
190
  devtoolsUrl: string
160
191
  }) =>
161
192
  Effect.gen(function* () {
162
- const subDirectory = storage.subDirectory ? `${storage.subDirectory.replace(/\/$/, '')}/` : ''
163
- const pathJoin = (...paths: string[]) => paths.join('/').replaceAll(/\/+/g, '/')
164
- const directory = pathJoin(SQLite.defaultDatabaseDirectory, subDirectory, storeId)
165
-
166
- const schemaHashSuffix =
167
- schema.state.sqlite.migrations.strategy === 'manual' ? 'fixed' : schema.state.sqlite.hash.toString()
168
- const stateDatabaseName = `${'livestore-'}${schemaHashSuffix}@${liveStoreStorageFormatVersion}.db`
169
- const dbEventlogPath = `${'livestore-'}eventlog@${liveStoreStorageFormatVersion}.db`
193
+ const { directory, stateDatabaseName, eventlogDatabaseName } = resolveExpoPersistencePaths({
194
+ storeId,
195
+ storage,
196
+ schema,
197
+ })
170
198
 
171
199
  const dbState = yield* makeSqliteDb({ _tag: 'file', databaseName: stateDatabaseName, directory })
172
- const dbEventlog = yield* makeSqliteDb({ _tag: 'file', databaseName: dbEventlogPath, directory })
200
+ const dbEventlog = yield* makeSqliteDb({ _tag: 'file', databaseName: eventlogDatabaseName, directory })
173
201
 
174
202
  const devtoolsOptions = yield* makeDevtoolsOptions({
175
203
  devtoolsEnabled,
@@ -204,6 +232,7 @@ const makeLeaderThread = ({
204
232
  extraIncomingMessagesQueue,
205
233
  initialState,
206
234
  bootStatusQueue,
235
+ networkStatus,
207
236
  } = yield* LeaderThreadCtx
208
237
 
209
238
  const bootStatusFiber = yield* Queue.takeBetween(bootStatusQueue, 1, 1000).pipe(
@@ -237,6 +266,7 @@ const makeLeaderThread = ({
237
266
  getEventlogData: Effect.sync(() => dbEventlog.export()),
238
267
  getSyncState: syncProcessor.syncState,
239
268
  sendDevtoolsMessage: (message) => extraIncomingMessagesQueue.offer(message),
269
+ networkStatus,
240
270
  })
241
271
 
242
272
  const initialSnapshot = db.export()
@@ -245,6 +275,57 @@ const makeLeaderThread = ({
245
275
  }).pipe(Effect.provide(layer))
246
276
  })
247
277
 
278
+ const resolveExpoPersistencePaths = ({
279
+ storeId,
280
+ storage,
281
+ schema,
282
+ }: {
283
+ storeId: string
284
+ storage: { subDirectory?: string } | undefined
285
+ schema: LiveStoreSchema
286
+ }) => {
287
+ const subDirectory = storage?.subDirectory ? `${storage.subDirectory.replace(/\/$/, '')}/` : ''
288
+ const pathJoin = (...paths: string[]) => paths.join('/').replaceAll(/\/+/g, '/')
289
+ const directory = pathJoin(SQLite.defaultDatabaseDirectory, subDirectory, storeId)
290
+
291
+ const schemaHashSuffix =
292
+ schema.state.sqlite.migrations.strategy === 'manual' ? 'fixed' : schema.state.sqlite.hash.toString()
293
+ const stateDatabaseName = `livestore-${schemaHashSuffix}@${liveStoreStorageFormatVersion}.db`
294
+ const eventlogDatabaseName = `livestore-eventlog@${liveStoreStorageFormatVersion}.db`
295
+
296
+ return { directory, stateDatabaseName, eventlogDatabaseName }
297
+ }
298
+
299
+ const resetExpoPersistence = ({
300
+ storeId,
301
+ storage,
302
+ schema,
303
+ }: {
304
+ storeId: string
305
+ storage: MakeDbOptions['storage']
306
+ schema: LiveStoreSchema
307
+ }) =>
308
+ Effect.try({
309
+ try: () => {
310
+ const { directory, stateDatabaseName, eventlogDatabaseName } = resolveExpoPersistencePaths({
311
+ storeId,
312
+ storage,
313
+ schema,
314
+ })
315
+
316
+ SQLite.deleteDatabaseSync(stateDatabaseName, directory)
317
+ SQLite.deleteDatabaseSync(eventlogDatabaseName, directory)
318
+ },
319
+ catch: (cause) =>
320
+ new UnexpectedError({
321
+ cause,
322
+ note: `@livestore/adapter-expo: Failed to reset persistence for store ${storeId}`,
323
+ }),
324
+ }).pipe(
325
+ Effect.retry({ schedule: Schedule.exponentialBackoff10Sec }),
326
+ Effect.withSpan('@livestore/adapter-expo:resetPersistence', { attributes: { storeId } }),
327
+ )
328
+
248
329
  const makeDevtoolsOptions = ({
249
330
  devtoolsEnabled,
250
331
  devtoolsUrl,