@livestore/adapter-expo 0.3.0-dev.19 → 0.3.0-dev.21

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAA6D,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAmBxH,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;AAGD,eAAO,MAAM,WAAW,GACrB,UAAS,aAAkB,KAAG,OAkE5B,CAAA"}
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;AAGD,eAAO,MAAM,WAAW,GACrB,UAAS,aAAkB,KAAG,OAgF5B,CAAA"}
package/dist/index.js CHANGED
@@ -1,19 +1,20 @@
1
1
  import { Devtools, liveStoreStorageFormatVersion, UnexpectedError } from '@livestore/common';
2
2
  import { getClientHeadFromDb, LeaderThreadCtx, makeLeaderThreadLayer } from '@livestore/common/leader-thread';
3
3
  import { MutationEvent } from '@livestore/common/schema';
4
- import { makeChannelForConnectedMeshNode, makeExpoDevtoolsConnectedMeshNode, } from '@livestore/devtools-expo-common/web-channel';
5
- import { Cause, Effect, FetchHttpClient, Layer, Stream, SubscriptionRef } from '@livestore/utils/effect';
4
+ import * as DevtoolsExpo from '@livestore/devtools-expo-common/web-channel';
5
+ import { Cause, Effect, FetchHttpClient, Fiber, Layer, Queue, Stream, SubscriptionRef } from '@livestore/utils/effect';
6
6
  import * as SQLite from 'expo-sqlite';
7
7
  import { makeSqliteDb } from './make-sqlite-db.js';
8
8
  import { makeShutdownChannel } from './shutdown-channel.js';
9
9
  // TODO refactor with leader-thread code from `@livestore/common/leader-thread`
10
- export const makeAdapter = (options = {}) => ({ schema, connectDevtoolsToStore, shutdown, devtoolsEnabled, storeId, bootStatusQueue, debugInstanceId }) => Effect.gen(function* () {
10
+ export const makeAdapter = (options = {}) => ({ schema, connectDevtoolsToStore, shutdown, devtoolsEnabled, storeId, bootStatusQueue }) => Effect.gen(function* () {
11
11
  const { storage, clientId = 'expo', sessionId = 'expo', sync: syncOptions } = options;
12
+ yield* Queue.offer(bootStatusQueue, { stage: 'loading' });
12
13
  const lockStatus = yield* SubscriptionRef.make('has-lock');
13
14
  const shutdownChannel = yield* makeShutdownChannel(storeId);
14
15
  yield* shutdownChannel.listen.pipe(Stream.flatten(), Stream.tap((error) => Effect.sync(() => shutdown(Cause.fail(error)))), Stream.runDrain, Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
15
16
  const devtoolsWebmeshNode = devtoolsEnabled
16
- ? yield* makeExpoDevtoolsConnectedMeshNode({
17
+ ? yield* DevtoolsExpo.makeExpoDevtoolsConnectedMeshNode({
17
18
  nodeName: `expo-${storeId}-${clientId}-${sessionId}`,
18
19
  target: `devtools-${storeId}-${clientId}-${sessionId}`,
19
20
  })
@@ -28,6 +29,7 @@ export const makeAdapter = (options = {}) => ({ schema, connectDevtoolsToStore,
28
29
  storage: storage ?? {},
29
30
  devtoolsEnabled,
30
31
  devtoolsWebmeshNode,
32
+ bootStatusQueue,
31
33
  });
32
34
  const sqliteDb = yield* makeSqliteDb({ _tag: 'in-memory' });
33
35
  sqliteDb.import(initialSnapshot);
@@ -42,7 +44,15 @@ export const makeAdapter = (options = {}) => ({ schema, connectDevtoolsToStore,
42
44
  };
43
45
  if (devtoolsEnabled) {
44
46
  yield* Effect.gen(function* () {
45
- const storeDevtoolsChannel = yield* makeChannelForConnectedMeshNode({
47
+ const sessionInfoChannel = yield* DevtoolsExpo.makeExpoDevtoolsBroadcastChannel({
48
+ channelName: 'devtools-expo-session-info',
49
+ schema: Devtools.SessionInfo.Message,
50
+ });
51
+ yield* Devtools.SessionInfo.provideSessionInfo({
52
+ webChannel: sessionInfoChannel,
53
+ sessionInfo: Devtools.SessionInfo.SessionInfo.make({ clientId, sessionId, storeId }),
54
+ }).pipe(Effect.tapCauseLogPretty, Effect.forkScoped);
55
+ const storeDevtoolsChannel = yield* DevtoolsExpo.makeChannelForConnectedMeshNode({
46
56
  target: `devtools-${storeId}-${clientId}-${sessionId}`,
47
57
  node: devtoolsWebmeshNode,
48
58
  schema: { listen: Devtools.ClientSession.MessageToApp, send: Devtools.ClientSession.MessageFromApp },
@@ -53,7 +63,7 @@ export const makeAdapter = (options = {}) => ({ schema, connectDevtoolsToStore,
53
63
  }
54
64
  return clientSession;
55
65
  }).pipe(Effect.mapError((cause) => (cause._tag === 'LiveStore.UnexpectedError' ? cause : new UnexpectedError({ cause }))), Effect.tapCauseLogPretty);
56
- const makeLeaderThread = ({ storeId, clientId, sessionId, schema, makeSqliteDb, syncOptions, storage, devtoolsEnabled, devtoolsWebmeshNode, }) => Effect.gen(function* () {
66
+ const makeLeaderThread = ({ storeId, clientId, sessionId, schema, makeSqliteDb, syncOptions, storage, devtoolsEnabled, devtoolsWebmeshNode, bootStatusQueue: bootStatusQueueClientSession, }) => Effect.gen(function* () {
57
67
  const subDirectory = storage.subDirectory ? storage.subDirectory.replace(/\/$/, '') + '/' : '';
58
68
  const pathJoin = (...paths) => paths.join('/').replaceAll(/\/+/g, '/');
59
69
  const directory = pathJoin(SQLite.defaultDatabaseDirectory, subDirectory, storeId);
@@ -83,7 +93,9 @@ const makeLeaderThread = ({ storeId, clientId, sessionId, schema, makeSqliteDb,
83
93
  syncOptions,
84
94
  }).pipe(Layer.provideMerge(FetchHttpClient.layer)));
85
95
  return yield* Effect.gen(function* () {
86
- const { dbReadModel: db, dbMutationLog, syncProcessor, connectedClientSessionPullQueues, extraIncomingMessagesQueue, initialState, } = yield* LeaderThreadCtx;
96
+ const { dbReadModel: db, dbMutationLog, syncProcessor, connectedClientSessionPullQueues, extraIncomingMessagesQueue, initialState, bootStatusQueue, } = yield* LeaderThreadCtx;
97
+ const bootStatusFiber = yield* Queue.takeBetween(bootStatusQueue, 1, 1000).pipe(Effect.tap((bootStatus) => Queue.offerAll(bootStatusQueueClientSession, bootStatus)), Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
98
+ yield* Queue.awaitShutdown(bootStatusQueueClientSession).pipe(Effect.andThen(Fiber.interrupt(bootStatusFiber)), Effect.tapCauseLogPretty, Effect.forkScoped);
87
99
  const initialLeaderHead = getClientHeadFromDb(dbMutationLog);
88
100
  const pullQueue = yield* connectedClientSessionPullQueues.makeQueue(initialLeaderHead);
89
101
  const leaderThread = {
@@ -114,18 +126,14 @@ const makeDevtoolsOptions = ({ devtoolsEnabled, dbReadModel, dbMutationLog, stor
114
126
  return {
115
127
  enabled: true,
116
128
  makeBootContext: Effect.gen(function* () {
129
+ const devtoolsWebChannel = yield* DevtoolsExpo.makeChannelForConnectedMeshNode({
130
+ node: devtoolsWebmeshNode,
131
+ target: `devtools-${storeId}-${clientId}-${sessionId}`,
132
+ schema: { listen: Devtools.Leader.MessageToApp, send: Devtools.Leader.MessageFromApp },
133
+ channelType: 'leader',
134
+ });
117
135
  return {
118
- // devtoolsWebChannel: yield* makeExpoDevtoolsChannel({
119
- // nodeName: `leader-${storeId}-${clientId}`,
120
- devtoolsWebChannel: yield* makeChannelForConnectedMeshNode({
121
- node: devtoolsWebmeshNode,
122
- target: `devtools-${storeId}-${clientId}-${sessionId}`,
123
- schema: {
124
- listen: Devtools.Leader.MessageToApp,
125
- send: Devtools.Leader.MessageFromApp,
126
- },
127
- channelType: 'leader',
128
- }),
136
+ devtoolsWebChannel,
129
137
  persistenceInfo: {
130
138
  readModel: dbReadModel.metadata.persistenceInfo,
131
139
  mutationLog: dbMutationLog.metadata.persistenceInfo,
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,4 +1,4 @@
1
- import type { MakeSqliteDb, PersistenceInfo } from '@livestore/common';
1
+ import { type MakeSqliteDb, type PersistenceInfo } from '@livestore/common';
2
2
  type Metadata = {
3
3
  _tag: 'expo';
4
4
  dbPointer: number;
@@ -1 +1 @@
1
- {"version":3,"file":"make-sqlite-db.d.ts","sourceRoot":"","sources":["../src/make-sqlite-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAA+B,MAAM,mBAAmB,CAAA;AAKnG,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,gBAgCvB,CAAA"}
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,gBAgCvB,CAAA"}
@@ -1,5 +1,10 @@
1
+ import { SqliteError, } from '@livestore/common';
1
2
  import { shouldNeverHappen } from '@livestore/utils';
2
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
+ // import * as ExpoFs from 'expo-file-system'
3
8
  import * as SQLite from 'expo-sqlite';
4
9
  export const makeSqliteDb = (input) => Effect.gen(function* () {
5
10
  // console.log('makeSqliteDb', input)
@@ -33,8 +38,8 @@ export const makeSqliteDb = (input) => Effect.gen(function* () {
33
38
  const makeSqliteDb_ = ({
34
39
  // db,
35
40
  makeDb, metadata, }) => {
36
- const stmts = [];
37
- const dbRef = { current: makeDb() };
41
+ const stmts = new Set();
42
+ const dbRef = { current: makeDb(), count: 0 };
38
43
  const sqliteDb = {
39
44
  metadata,
40
45
  _tag: 'SqliteDb',
@@ -58,10 +63,13 @@ makeDb, metadata, }) => {
58
63
  res.resetSync();
59
64
  }
60
65
  },
61
- finalize: () => dbStmt.finalizeSync(),
66
+ finalize: () => {
67
+ dbStmt.finalizeSync();
68
+ stmts.delete(stmt);
69
+ },
62
70
  sql: queryStr,
63
71
  };
64
- stmts.push(stmt);
72
+ stmts.add(stmt);
65
73
  return stmt;
66
74
  }
67
75
  catch (e) {
@@ -90,29 +98,47 @@ makeDb, metadata, }) => {
90
98
  stmt.finalize();
91
99
  return res;
92
100
  },
93
- // TODO
94
101
  destroy: () => {
95
102
  if (metadata.input._tag === 'expo') {
103
+ sqliteDb.close();
96
104
  SQLite.deleteDatabaseSync(metadata.input.databaseName, metadata.input.directory);
97
105
  }
98
106
  },
99
107
  close: () => {
100
- const db = dbRef.current;
101
- for (const stmt of stmts) {
102
- stmt.finalize();
108
+ try {
109
+ const db = dbRef.current;
110
+ for (const stmt of stmts) {
111
+ stmt.finalize();
112
+ }
113
+ stmts.clear();
114
+ db.closeSync();
115
+ }
116
+ catch (cause) {
117
+ throw new SqliteError({
118
+ cause,
119
+ note: `Error closing database ${metadata.input._tag === 'expo' ? metadata.input.databaseName : 'in-memory'}`,
120
+ });
121
+ // console.error('Error closing database', metadata.input, e, dbCount)
103
122
  }
104
- return db.closeSync();
105
123
  },
106
124
  import: (data) => {
107
125
  if (!(data instanceof Uint8Array)) {
108
126
  throw new TypeError('importing from an existing database is not yet supported in expo');
109
127
  }
128
+ const prevDb = dbRef.current;
129
+ for (const stmt of stmts) {
130
+ stmt.finalize();
131
+ }
132
+ stmts.clear();
133
+ prevDb.closeSync();
110
134
  if (metadata.input._tag === 'expo') {
111
- throw new Error('not implemented');
112
- // SQLite.importDatabaseSync(metadata.input.databaseName, metadata.input.directory, _data)
135
+ const file = new ExpoFs.File(metadata.input.directory, metadata.input.databaseName);
136
+ file.write(data);
137
+ dbRef.count++;
138
+ dbRef.current = makeDb();
113
139
  }
114
140
  else {
115
- dbRef.current.closeSync();
141
+ dbRef.count++;
116
142
  dbRef.current = SQLite.deserializeDatabaseSync(data);
117
143
  }
118
144
  },
@@ -1 +1 @@
1
- {"version":3,"file":"make-sqlite-db.js","sourceRoot":"","sources":["../src/make-sqlite-db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"make-sqlite-db.js","sourceRoot":"","sources":["../src/make-sqlite-db.ts"],"names":[],"mappings":"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"}
@@ -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,sYACyC,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,sYAI/C,CAAA"}
@@ -1,8 +1,8 @@
1
+ import { ShutdownChannel } from '@livestore/common/leader-thread';
1
2
  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
- // })
3
+ // Once we'll implement multi-threading for the Expo adapter, we'll need to implement a multi-threaded version of this
4
+ export const makeShutdownChannel = (storeId) => WebChannel.sameThreadChannel({
5
+ channelName: `livestore.shutdown.${storeId}`,
6
+ schema: ShutdownChannel.All,
7
+ });
8
8
  //# sourceMappingURL=shutdown-channel.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"shutdown-channel.js","sourceRoot":"","sources":["../src/shutdown-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD,sHAAsH;AACtH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAE,EAAE,CACrD,UAAU,CAAC,iBAAiB,CAAC;IAC3B,WAAW,EAAE,sBAAsB,OAAO,EAAE;IAC5C,MAAM,EAAE,eAAe,CAAC,GAAG;CAC5B,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/adapter-expo",
3
- "version": "0.3.0-dev.19",
3
+ "version": "0.3.0-dev.21",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -12,10 +12,10 @@
12
12
  "types": "./dist/index.d.ts",
13
13
  "dependencies": {
14
14
  "@opentelemetry/api": "1.9.0",
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"
15
+ "@livestore/common": "0.3.0-dev.21",
16
+ "@livestore/devtools-expo-common": "0.3.0-dev.21",
17
+ "@livestore/utils": "0.3.0-dev.21",
18
+ "@livestore/webmesh": "0.3.0-dev.21"
19
19
  },
20
20
  "devDependencies": {
21
21
  "expo-file-system": "*",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "peerDependencies": {
25
25
  "expo-file-system": "*",
26
- "expo-sqlite": "^15.1.2"
26
+ "expo-sqlite": "~15.1.2"
27
27
  },
28
28
  "publishConfig": {
29
29
  "access": "public"
package/src/index.ts CHANGED
@@ -1,15 +1,19 @@
1
- import type { Adapter, ClientSession, ClientSessionLeaderThreadProxy, LockStatus, SyncOptions } from '@livestore/common'
1
+ import type {
2
+ Adapter,
3
+ BootStatus,
4
+ ClientSession,
5
+ ClientSessionLeaderThreadProxy,
6
+ LockStatus,
7
+ SyncOptions,
8
+ } from '@livestore/common'
2
9
  import { Devtools, liveStoreStorageFormatVersion, UnexpectedError } from '@livestore/common'
3
10
  import type { DevtoolsOptions, LeaderSqliteDb } from '@livestore/common/leader-thread'
4
11
  import { getClientHeadFromDb, LeaderThreadCtx, makeLeaderThreadLayer } from '@livestore/common/leader-thread'
5
12
  import type { LiveStoreSchema } from '@livestore/common/schema'
6
13
  import { MutationEvent } from '@livestore/common/schema'
7
- import {
8
- makeChannelForConnectedMeshNode,
9
- makeExpoDevtoolsConnectedMeshNode,
10
- } from '@livestore/devtools-expo-common/web-channel'
14
+ import * as DevtoolsExpo from '@livestore/devtools-expo-common/web-channel'
11
15
  import type { Scope } from '@livestore/utils/effect'
12
- import { Cause, Effect, FetchHttpClient, Layer, Stream, SubscriptionRef } from '@livestore/utils/effect'
16
+ import { Cause, Effect, FetchHttpClient, Fiber, Layer, Queue, Stream, SubscriptionRef } from '@livestore/utils/effect'
13
17
  import type { MeshNode } from '@livestore/webmesh'
14
18
  import * as SQLite from 'expo-sqlite'
15
19
 
@@ -38,10 +42,12 @@ export type MakeDbOptions = {
38
42
  // TODO refactor with leader-thread code from `@livestore/common/leader-thread`
39
43
  export const makeAdapter =
40
44
  (options: MakeDbOptions = {}): Adapter =>
41
- ({ schema, connectDevtoolsToStore, shutdown, devtoolsEnabled, storeId, bootStatusQueue, debugInstanceId }) =>
45
+ ({ schema, connectDevtoolsToStore, shutdown, devtoolsEnabled, storeId, bootStatusQueue }) =>
42
46
  Effect.gen(function* () {
43
47
  const { storage, clientId = 'expo', sessionId = 'expo', sync: syncOptions } = options
44
48
 
49
+ yield* Queue.offer(bootStatusQueue, { stage: 'loading' })
50
+
45
51
  const lockStatus = yield* SubscriptionRef.make<LockStatus>('has-lock')
46
52
 
47
53
  const shutdownChannel = yield* makeShutdownChannel(storeId)
@@ -56,7 +62,7 @@ export const makeAdapter =
56
62
  )
57
63
 
58
64
  const devtoolsWebmeshNode = devtoolsEnabled
59
- ? yield* makeExpoDevtoolsConnectedMeshNode({
65
+ ? yield* DevtoolsExpo.makeExpoDevtoolsConnectedMeshNode({
60
66
  nodeName: `expo-${storeId}-${clientId}-${sessionId}`,
61
67
  target: `devtools-${storeId}-${clientId}-${sessionId}`,
62
68
  })
@@ -72,6 +78,7 @@ export const makeAdapter =
72
78
  storage: storage ?? {},
73
79
  devtoolsEnabled,
74
80
  devtoolsWebmeshNode,
81
+ bootStatusQueue,
75
82
  })
76
83
 
77
84
  const sqliteDb = yield* makeSqliteDb({ _tag: 'in-memory' })
@@ -89,12 +96,23 @@ export const makeAdapter =
89
96
 
90
97
  if (devtoolsEnabled) {
91
98
  yield* Effect.gen(function* () {
92
- const storeDevtoolsChannel = yield* makeChannelForConnectedMeshNode({
99
+ const sessionInfoChannel = yield* DevtoolsExpo.makeExpoDevtoolsBroadcastChannel({
100
+ channelName: 'devtools-expo-session-info',
101
+ schema: Devtools.SessionInfo.Message,
102
+ })
103
+
104
+ yield* Devtools.SessionInfo.provideSessionInfo({
105
+ webChannel: sessionInfoChannel,
106
+ sessionInfo: Devtools.SessionInfo.SessionInfo.make({ clientId, sessionId, storeId }),
107
+ }).pipe(Effect.tapCauseLogPretty, Effect.forkScoped)
108
+
109
+ const storeDevtoolsChannel = yield* DevtoolsExpo.makeChannelForConnectedMeshNode({
93
110
  target: `devtools-${storeId}-${clientId}-${sessionId}`,
94
111
  node: devtoolsWebmeshNode!,
95
112
  schema: { listen: Devtools.ClientSession.MessageToApp, send: Devtools.ClientSession.MessageFromApp },
96
113
  channelType: 'clientSession',
97
114
  })
115
+
98
116
  yield* connectDevtoolsToStore(storeDevtoolsChannel)
99
117
  }).pipe(Effect.tapCauseLogPretty, Effect.forkScoped)
100
118
  }
@@ -115,6 +133,7 @@ const makeLeaderThread = ({
115
133
  storage,
116
134
  devtoolsEnabled,
117
135
  devtoolsWebmeshNode,
136
+ bootStatusQueue: bootStatusQueueClientSession,
118
137
  }: {
119
138
  storeId: string
120
139
  clientId: string
@@ -127,6 +146,7 @@ const makeLeaderThread = ({
127
146
  }
128
147
  devtoolsEnabled: boolean
129
148
  devtoolsWebmeshNode: MeshNode | undefined
149
+ bootStatusQueue: Queue.Queue<BootStatus>
130
150
  }) =>
131
151
  Effect.gen(function* () {
132
152
  const subDirectory = storage.subDirectory ? storage.subDirectory.replace(/\/$/, '') + '/' : ''
@@ -172,8 +192,22 @@ const makeLeaderThread = ({
172
192
  connectedClientSessionPullQueues,
173
193
  extraIncomingMessagesQueue,
174
194
  initialState,
195
+ bootStatusQueue,
175
196
  } = yield* LeaderThreadCtx
176
197
 
198
+ const bootStatusFiber = yield* Queue.takeBetween(bootStatusQueue, 1, 1000).pipe(
199
+ Effect.tap((bootStatus) => Queue.offerAll(bootStatusQueueClientSession, bootStatus)),
200
+ Effect.interruptible,
201
+ Effect.tapCauseLogPretty,
202
+ Effect.forkScoped,
203
+ )
204
+
205
+ yield* Queue.awaitShutdown(bootStatusQueueClientSession).pipe(
206
+ Effect.andThen(Fiber.interrupt(bootStatusFiber)),
207
+ Effect.tapCauseLogPretty,
208
+ Effect.forkScoped,
209
+ )
210
+
177
211
  const initialLeaderHead = getClientHeadFromDb(dbMutationLog)
178
212
  const pullQueue = yield* connectedClientSessionPullQueues.makeQueue(initialLeaderHead)
179
213
 
@@ -232,18 +266,15 @@ const makeDevtoolsOptions = ({
232
266
  return {
233
267
  enabled: true,
234
268
  makeBootContext: Effect.gen(function* () {
269
+ const devtoolsWebChannel = yield* DevtoolsExpo.makeChannelForConnectedMeshNode({
270
+ node: devtoolsWebmeshNode!,
271
+ target: `devtools-${storeId}-${clientId}-${sessionId}`,
272
+ schema: { listen: Devtools.Leader.MessageToApp, send: Devtools.Leader.MessageFromApp },
273
+ channelType: 'leader',
274
+ })
275
+
235
276
  return {
236
- // devtoolsWebChannel: yield* makeExpoDevtoolsChannel({
237
- // nodeName: `leader-${storeId}-${clientId}`,
238
- devtoolsWebChannel: yield* makeChannelForConnectedMeshNode({
239
- node: devtoolsWebmeshNode!,
240
- target: `devtools-${storeId}-${clientId}-${sessionId}`,
241
- schema: {
242
- listen: Devtools.Leader.MessageToApp,
243
- send: Devtools.Leader.MessageFromApp,
244
- },
245
- channelType: 'leader',
246
- }),
277
+ devtoolsWebChannel,
247
278
  persistenceInfo: {
248
279
  readModel: dbReadModel.metadata.persistenceInfo,
249
280
  mutationLog: dbMutationLog.metadata.persistenceInfo,
@@ -1,6 +1,16 @@
1
- import type { MakeSqliteDb, PersistenceInfo, PreparedStatement, SqliteDb } from '@livestore/common'
1
+ import {
2
+ type MakeSqliteDb,
3
+ type PersistenceInfo,
4
+ type PreparedStatement,
5
+ type SqliteDb,
6
+ SqliteError,
7
+ } from '@livestore/common'
2
8
  import { shouldNeverHappen } from '@livestore/utils'
3
9
  import { Effect } from '@livestore/utils/effect'
10
+ // TODO remove `expo-file-system` dependency once expo-sqlite supports `import`
11
+ // @ts-expect-error package misses `exports`
12
+ import * as ExpoFs from 'expo-file-system/src/next'
13
+ // import * as ExpoFs from 'expo-file-system'
4
14
  import * as SQLite from 'expo-sqlite'
5
15
 
6
16
  type Metadata = {
@@ -65,8 +75,8 @@ const makeSqliteDb_ = <TMetadata extends Metadata>({
65
75
  makeDb: () => SQLite.SQLiteDatabase
66
76
  metadata: TMetadata
67
77
  }): SqliteDb<TMetadata> => {
68
- const stmts: PreparedStatement[] = []
69
- const dbRef = { current: makeDb() }
78
+ const stmts: Set<PreparedStatement> = new Set()
79
+ const dbRef = { current: makeDb(), count: 0 }
70
80
 
71
81
  const sqliteDb: SqliteDb<TMetadata> = {
72
82
  metadata,
@@ -90,10 +100,13 @@ const makeSqliteDb_ = <TMetadata extends Metadata>({
90
100
  res.resetSync()
91
101
  }
92
102
  },
93
- finalize: () => dbStmt.finalizeSync(),
103
+ finalize: () => {
104
+ dbStmt.finalizeSync()
105
+ stmts.delete(stmt)
106
+ },
94
107
  sql: queryStr,
95
108
  } satisfies PreparedStatement
96
- stmts.push(stmt)
109
+ stmts.add(stmt)
97
110
  return stmt
98
111
  } catch (e) {
99
112
  console.error(`Error preparing statement: ${queryStr}`, e)
@@ -120,28 +133,49 @@ const makeSqliteDb_ = <TMetadata extends Metadata>({
120
133
  stmt.finalize()
121
134
  return res as any
122
135
  },
123
- // TODO
124
136
  destroy: () => {
125
137
  if (metadata.input._tag === 'expo') {
138
+ sqliteDb.close()
126
139
  SQLite.deleteDatabaseSync(metadata.input.databaseName, metadata.input.directory)
127
140
  }
128
141
  },
129
142
  close: () => {
130
- const db = dbRef.current
131
- for (const stmt of stmts) {
132
- stmt.finalize()
143
+ try {
144
+ const db = dbRef.current
145
+ for (const stmt of stmts) {
146
+ stmt.finalize()
147
+ }
148
+ stmts.clear()
149
+
150
+ db.closeSync()
151
+ } catch (cause) {
152
+ throw new SqliteError({
153
+ cause,
154
+ note: `Error closing database ${metadata.input._tag === 'expo' ? metadata.input.databaseName : 'in-memory'}`,
155
+ })
156
+ // console.error('Error closing database', metadata.input, e, dbCount)
133
157
  }
134
- return db.closeSync()
135
158
  },
136
159
  import: (data) => {
137
160
  if (!(data instanceof Uint8Array)) {
138
161
  throw new TypeError('importing from an existing database is not yet supported in expo')
139
162
  }
163
+
164
+ const prevDb = dbRef.current
165
+ for (const stmt of stmts) {
166
+ stmt.finalize()
167
+ }
168
+ stmts.clear()
169
+ prevDb.closeSync()
170
+
140
171
  if (metadata.input._tag === 'expo') {
141
- throw new Error('not implemented')
142
- // SQLite.importDatabaseSync(metadata.input.databaseName, metadata.input.directory, _data)
172
+ const file = new ExpoFs.File(metadata.input.directory, metadata.input.databaseName)
173
+ file.write(data)
174
+
175
+ dbRef.count++
176
+ dbRef.current = makeDb()
143
177
  } else {
144
- dbRef.current.closeSync()
178
+ dbRef.count++
145
179
  dbRef.current = SQLite.deserializeDatabaseSync(data)
146
180
  }
147
181
  },
@@ -1,10 +1,9 @@
1
- import type { ShutdownChannel } from '@livestore/common/leader-thread'
1
+ import { ShutdownChannel } from '@livestore/common/leader-thread'
2
2
  import { WebChannel } from '@livestore/utils/effect'
3
3
 
4
- // TODO find an actual implementation for Expo
4
+ // Once we'll implement multi-threading for the Expo adapter, we'll need to implement a multi-threaded version of this
5
5
  export const makeShutdownChannel = (storeId: string) =>
6
- WebChannel.noopChannel<typeof ShutdownChannel.All.Type, typeof ShutdownChannel.All.Type>()
7
- // WebChannel.broadcastChannel({
8
- // channelName: `livestore.shutdown.${storeId}`,
9
- // schema: ShutdownChannel.All,
10
- // })
6
+ WebChannel.sameThreadChannel({
7
+ channelName: `livestore.shutdown.${storeId}`,
8
+ schema: ShutdownChannel.All,
9
+ })
package/dist/common.d.ts DELETED
@@ -1,12 +0,0 @@
1
- import type { SqliteDb } from '@livestore/common';
2
- import { Effect } from '@livestore/utils/effect';
3
- import type * as SQLite from 'expo-sqlite';
4
- export type DbPairRef = {
5
- current: {
6
- db: SQLite.SQLiteDatabase;
7
- sqliteDb: SqliteDb;
8
- } | undefined;
9
- };
10
- export declare const getDbFilePath: (dbName: string) => string;
11
- export declare const overwriteDbFile: (dbName: string, data: Uint8Array) => Effect.Effect<void, never, never>;
12
- //# sourceMappingURL=common.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,KAAK,MAAM,MAAM,aAAa,CAAA;AAE1C,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EACH;QACE,EAAE,EAAE,MAAM,CAAC,cAAc,CAAA;QACzB,QAAQ,EAAE,QAAQ,CAAA;KACnB,GACD,SAAS,CAAA;CACd,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,WAE3C,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,MAAM,UAAU,sCAS5D,CAAA"}
package/dist/common.js DELETED
@@ -1,14 +0,0 @@
1
- import { base64 } from '@livestore/utils';
2
- import { Effect } from '@livestore/utils/effect';
3
- import * as ExpoFS from 'expo-file-system';
4
- export const getDbFilePath = (dbName) => {
5
- return `${ExpoFS.documentDirectory}SQLite/${dbName}`;
6
- };
7
- export const overwriteDbFile = (dbName, data) => Effect.gen(function* () {
8
- const path = getDbFilePath(dbName);
9
- yield* Effect.promise(() => ExpoFS.deleteAsync(path, { idempotent: true }));
10
- // TODO avoid converting to string once the ExpoFS API supports binary data
11
- const b64String = base64.encode(data);
12
- yield* Effect.promise(() => ExpoFS.writeAsStringAsync(path, b64String, { encoding: ExpoFS.EncodingType.Base64 }));
13
- });
14
- //# sourceMappingURL=common.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAY1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE;IAC9C,OAAO,GAAG,MAAM,CAAC,iBAAiB,UAAU,MAAM,EAAE,CAAA;AACtD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,IAAgB,EAAE,EAAE,CAClE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IAElC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAE3E,2EAA2E;IAC3E,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AACnH,CAAC,CAAC,CAAA"}