@livestore/adapter-node 0.4.0-dev.2 → 0.4.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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/client-session/adapter.d.ts +80 -3
- package/dist/client-session/adapter.d.ts.map +1 -1
- package/dist/client-session/adapter.js +142 -35
- package/dist/client-session/adapter.js.map +1 -1
- package/dist/devtools/vite-dev-server.d.ts +2 -2
- package/dist/devtools/vite-dev-server.d.ts.map +1 -1
- package/dist/devtools/vite-dev-server.js +3 -3
- package/dist/devtools/vite-dev-server.js.map +1 -1
- package/dist/leader-thread-shared.d.ts +5 -4
- package/dist/leader-thread-shared.d.ts.map +1 -1
- package/dist/leader-thread-shared.js +6 -4
- package/dist/leader-thread-shared.js.map +1 -1
- package/dist/make-leader-worker.d.ts +5 -2
- package/dist/make-leader-worker.d.ts.map +1 -1
- package/dist/make-leader-worker.js +42 -15
- package/dist/make-leader-worker.js.map +1 -1
- package/dist/worker-schema.d.ts +138 -41
- package/dist/worker-schema.d.ts.map +1 -1
- package/dist/worker-schema.js +44 -18
- package/dist/worker-schema.js.map +1 -1
- package/package.json +8 -8
- package/src/client-session/adapter.ts +195 -43
- package/src/devtools/vite-dev-server.ts +4 -6
- package/src/leader-thread-shared.ts +13 -9
- package/src/make-leader-worker.ts +59 -37
- package/src/worker-schema.ts +68 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-schema.js","sourceRoot":"","sources":["../src/worker-schema.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"worker-schema.js","sourceRoot":"","sources":["../src/worker-schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/adapter-node",
|
|
3
|
-
"version": "0.4.0-dev.
|
|
3
|
+
"version": "0.4.0-dev.21",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": {
|
|
@@ -9,19 +9,19 @@
|
|
|
9
9
|
"./worker": "./dist/make-leader-worker.js"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@livestore/devtools-vite": "0.4.0-dev.
|
|
12
|
+
"@livestore/devtools-vite": "0.4.0-dev.21",
|
|
13
13
|
"@opentelemetry/api": "1.9.0",
|
|
14
|
-
"vite": "7.
|
|
15
|
-
"@livestore/common": "0.4.0-dev.
|
|
16
|
-
"@livestore/
|
|
17
|
-
"@livestore/sqlite-wasm": "0.4.0-dev.
|
|
18
|
-
"@livestore/
|
|
14
|
+
"vite": "7.2.4",
|
|
15
|
+
"@livestore/common": "0.4.0-dev.21",
|
|
16
|
+
"@livestore/utils": "0.4.0-dev.21",
|
|
17
|
+
"@livestore/sqlite-wasm": "0.4.0-dev.21",
|
|
18
|
+
"@livestore/webmesh": "0.4.0-dev.21"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@rollup/plugin-commonjs": "^28.0.6",
|
|
22
22
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
23
23
|
"@rollup/plugin-terser": "^0.4.4",
|
|
24
|
-
"rollup": "^4.
|
|
24
|
+
"rollup": "^4.49.0"
|
|
25
25
|
},
|
|
26
26
|
"files": [
|
|
27
27
|
"package.json",
|
|
@@ -1,33 +1,38 @@
|
|
|
1
1
|
import { hostname } from 'node:os'
|
|
2
|
+
import path from 'node:path'
|
|
2
3
|
import * as WT from 'node:worker_threads'
|
|
3
4
|
import {
|
|
4
5
|
type Adapter,
|
|
5
6
|
type BootStatus,
|
|
6
7
|
ClientSessionLeaderThreadProxy,
|
|
7
|
-
|
|
8
|
+
IntentionalShutdownCause,
|
|
8
9
|
type LockStatus,
|
|
9
10
|
type MakeSqliteDb,
|
|
10
11
|
makeClientSession,
|
|
11
12
|
type SyncError,
|
|
12
13
|
type SyncOptions,
|
|
13
|
-
|
|
14
|
+
UnknownError,
|
|
14
15
|
} from '@livestore/common'
|
|
15
|
-
import { Eventlog, LeaderThreadCtx } from '@livestore/common/leader-thread'
|
|
16
|
+
import { Eventlog, LeaderThreadCtx, streamEventsWithSyncState } from '@livestore/common/leader-thread'
|
|
16
17
|
import type { LiveStoreSchema } from '@livestore/common/schema'
|
|
17
18
|
import { LiveStoreEvent } from '@livestore/common/schema'
|
|
18
19
|
import { loadSqlite3Wasm } from '@livestore/sqlite-wasm/load-wasm'
|
|
19
20
|
import { sqliteDbFactory } from '@livestore/sqlite-wasm/node'
|
|
21
|
+
import { omitUndefineds } from '@livestore/utils'
|
|
20
22
|
import {
|
|
21
23
|
Cause,
|
|
22
24
|
Effect,
|
|
23
25
|
Exit,
|
|
24
26
|
FetchHttpClient,
|
|
25
27
|
Fiber,
|
|
28
|
+
FileSystem,
|
|
26
29
|
Layer,
|
|
27
30
|
ParseResult,
|
|
28
31
|
Queue,
|
|
32
|
+
Schedule,
|
|
29
33
|
Schema,
|
|
30
34
|
Stream,
|
|
35
|
+
Subscribable,
|
|
31
36
|
SubscriptionRef,
|
|
32
37
|
Worker,
|
|
33
38
|
WorkerError,
|
|
@@ -50,6 +55,13 @@ export interface NodeAdapterOptions {
|
|
|
50
55
|
*/
|
|
51
56
|
sessionId?: string
|
|
52
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Warning: This will reset both the app and eventlog database. This should only be used during development.
|
|
60
|
+
*
|
|
61
|
+
* @default false
|
|
62
|
+
*/
|
|
63
|
+
resetPersistence?: boolean
|
|
64
|
+
|
|
53
65
|
devtools?: {
|
|
54
66
|
schemaPath: string | URL
|
|
55
67
|
/**
|
|
@@ -76,7 +88,43 @@ export interface NodeAdapterOptions {
|
|
|
76
88
|
}
|
|
77
89
|
}
|
|
78
90
|
|
|
79
|
-
/**
|
|
91
|
+
/**
|
|
92
|
+
* Creates a single-threaded LiveStore adapter for Node.js applications.
|
|
93
|
+
*
|
|
94
|
+
* This adapter runs the leader thread (persistence and sync) in the same thread as
|
|
95
|
+
* your application. Suitable for CLI tools, scripts, and applications where simplicity
|
|
96
|
+
* is preferred over maximum performance.
|
|
97
|
+
*
|
|
98
|
+
* For production servers or performance-critical applications, consider `makeWorkerAdapter`
|
|
99
|
+
* which runs persistence/sync in a separate worker thread.
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```ts
|
|
103
|
+
* import { makeAdapter } from '@livestore/adapter-node'
|
|
104
|
+
* import { makeWsSync } from '@livestore/sync-cf/client'
|
|
105
|
+
*
|
|
106
|
+
* const adapter = makeAdapter({
|
|
107
|
+
* storage: { type: 'fs', baseDirectory: './data' },
|
|
108
|
+
* sync: {
|
|
109
|
+
* backend: makeWsSync({ url: 'wss://api.example.com/sync' }),
|
|
110
|
+
* },
|
|
111
|
+
* })
|
|
112
|
+
* ```
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```ts
|
|
116
|
+
* // With DevTools support
|
|
117
|
+
* const adapter = makeAdapter({
|
|
118
|
+
* storage: { type: 'fs', baseDirectory: './data' },
|
|
119
|
+
* devtools: {
|
|
120
|
+
* schemaPath: new URL('./schema.ts', import.meta.url),
|
|
121
|
+
* port: 4242,
|
|
122
|
+
* },
|
|
123
|
+
* })
|
|
124
|
+
* ```
|
|
125
|
+
*
|
|
126
|
+
* @see https://livestore.dev/docs/reference/adapters/node for setup guide
|
|
127
|
+
*/
|
|
80
128
|
export const makeAdapter = ({
|
|
81
129
|
sync,
|
|
82
130
|
...options
|
|
@@ -85,17 +133,52 @@ export const makeAdapter = ({
|
|
|
85
133
|
}): Adapter => makeAdapterImpl({ ...options, leaderThread: { _tag: 'single-threaded', sync } })
|
|
86
134
|
|
|
87
135
|
/**
|
|
88
|
-
*
|
|
136
|
+
* Creates a multi-threaded LiveStore adapter for Node.js applications.
|
|
137
|
+
*
|
|
138
|
+
* This adapter runs the leader thread (persistence, sync, and heavy SQLite operations)
|
|
139
|
+
* in a separate worker thread, keeping your main thread responsive. Recommended for
|
|
140
|
+
* production servers and performance-critical applications.
|
|
141
|
+
*
|
|
142
|
+
* You must create a worker file that calls `makeLeaderWorker()` and pass its URL
|
|
143
|
+
* to this function.
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```ts
|
|
147
|
+
* // In your main file:
|
|
148
|
+
* import { makeWorkerAdapter } from '@livestore/adapter-node'
|
|
149
|
+
*
|
|
150
|
+
* const adapter = makeWorkerAdapter({
|
|
151
|
+
* storage: { type: 'fs', baseDirectory: './data' },
|
|
152
|
+
* workerUrl: new URL('./livestore.worker.ts', import.meta.url),
|
|
153
|
+
* })
|
|
154
|
+
* ```
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```ts
|
|
158
|
+
* // In livestore.worker.ts:
|
|
159
|
+
* import { makeLeaderWorker } from '@livestore/adapter-node/worker'
|
|
160
|
+
* import { schema } from './schema'
|
|
161
|
+
*
|
|
162
|
+
* makeLeaderWorker({ schema })
|
|
163
|
+
* ```
|
|
164
|
+
*
|
|
165
|
+
* @see https://livestore.dev/docs/reference/adapters/node for setup guide
|
|
89
166
|
*/
|
|
90
167
|
export const makeWorkerAdapter = ({
|
|
91
168
|
workerUrl,
|
|
169
|
+
workerExtraArgs,
|
|
92
170
|
...options
|
|
93
171
|
}: NodeAdapterOptions & {
|
|
94
172
|
/**
|
|
95
173
|
* Example: `new URL('./livestore.worker.ts', import.meta.url)`
|
|
96
174
|
*/
|
|
97
175
|
workerUrl: URL
|
|
98
|
-
|
|
176
|
+
/**
|
|
177
|
+
* Extra arguments to pass to the worker which can be accessed in the worker
|
|
178
|
+
* via `getWorkerArgs()`
|
|
179
|
+
*/
|
|
180
|
+
workerExtraArgs?: Schema.JsonValue
|
|
181
|
+
}): Adapter => makeAdapterImpl({ ...options, leaderThread: { _tag: 'multi-threaded', workerUrl, workerExtraArgs } })
|
|
99
182
|
|
|
100
183
|
const makeAdapterImpl = ({
|
|
101
184
|
storage,
|
|
@@ -104,6 +187,7 @@ const makeAdapterImpl = ({
|
|
|
104
187
|
// TODO make this dynamic and actually support multiple sessions
|
|
105
188
|
sessionId = 'static',
|
|
106
189
|
testing,
|
|
190
|
+
resetPersistence = false,
|
|
107
191
|
leaderThread: leaderThreadInput,
|
|
108
192
|
}: NodeAdapterOptions & {
|
|
109
193
|
leaderThread:
|
|
@@ -114,11 +198,13 @@ const makeAdapterImpl = ({
|
|
|
114
198
|
| {
|
|
115
199
|
_tag: 'multi-threaded'
|
|
116
200
|
workerUrl: URL
|
|
201
|
+
workerExtraArgs: Schema.JsonValue | undefined
|
|
117
202
|
}
|
|
118
203
|
}): Adapter =>
|
|
119
204
|
((adapterArgs) =>
|
|
120
205
|
Effect.gen(function* () {
|
|
121
|
-
const { storeId, devtoolsEnabled, shutdown, bootStatusQueue,
|
|
206
|
+
const { storeId, devtoolsEnabled, shutdown, bootStatusQueue, syncPayloadEncoded, syncPayloadSchema, schema } =
|
|
207
|
+
adapterArgs
|
|
122
208
|
|
|
123
209
|
yield* Queue.offer(bootStatusQueue, { stage: 'loading' })
|
|
124
210
|
|
|
@@ -135,6 +221,14 @@ const makeAdapterImpl = ({
|
|
|
135
221
|
|
|
136
222
|
const shutdownChannel = yield* makeShutdownChannel(storeId)
|
|
137
223
|
|
|
224
|
+
if (resetPersistence === true) {
|
|
225
|
+
yield* shutdownChannel
|
|
226
|
+
.send(IntentionalShutdownCause.make({ reason: 'adapter-reset' }))
|
|
227
|
+
.pipe(UnknownError.mapToUnknownError)
|
|
228
|
+
|
|
229
|
+
yield* resetNodePersistence({ storage, storeId })
|
|
230
|
+
}
|
|
231
|
+
|
|
138
232
|
yield* shutdownChannel.listen.pipe(
|
|
139
233
|
Stream.flatten(),
|
|
140
234
|
Stream.tap((cause) =>
|
|
@@ -173,22 +267,26 @@ const makeAdapterImpl = ({
|
|
|
173
267
|
clientId,
|
|
174
268
|
schema,
|
|
175
269
|
makeSqliteDb,
|
|
176
|
-
syncOptions: leaderThreadInput.sync,
|
|
177
|
-
syncPayload,
|
|
178
270
|
devtools: devtoolsOptions,
|
|
179
271
|
storage,
|
|
180
|
-
|
|
181
|
-
|
|
272
|
+
...omitUndefineds({
|
|
273
|
+
syncOptions: leaderThreadInput.sync,
|
|
274
|
+
syncPayloadEncoded,
|
|
275
|
+
syncPayloadSchema,
|
|
276
|
+
testing,
|
|
277
|
+
}),
|
|
278
|
+
}).pipe(UnknownError.mapToUnknownError)
|
|
182
279
|
: yield* makeWorkerLeaderThread({
|
|
183
280
|
shutdown,
|
|
184
281
|
storeId,
|
|
185
282
|
clientId,
|
|
186
283
|
sessionId,
|
|
187
284
|
workerUrl: leaderThreadInput.workerUrl,
|
|
285
|
+
workerExtraArgs: leaderThreadInput.workerExtraArgs,
|
|
188
286
|
storage,
|
|
189
287
|
devtools: devtoolsOptions,
|
|
190
288
|
bootStatusQueue,
|
|
191
|
-
|
|
289
|
+
syncPayloadEncoded,
|
|
192
290
|
})
|
|
193
291
|
|
|
194
292
|
syncInMemoryDb.import(initialSnapshot)
|
|
@@ -214,22 +312,52 @@ const makeAdapterImpl = ({
|
|
|
214
312
|
isLeader: true,
|
|
215
313
|
// Not really applicable for node as there is no "reload the app" concept
|
|
216
314
|
registerBeforeUnload: (_onBeforeUnload) => () => {},
|
|
315
|
+
origin: undefined,
|
|
217
316
|
})
|
|
218
317
|
|
|
219
318
|
return clientSession
|
|
220
319
|
}).pipe(
|
|
221
320
|
Effect.withSpan('@livestore/adapter-node:adapter'),
|
|
222
|
-
Effect.provide(PlatformNode.NodeFileSystem.layer),
|
|
223
|
-
Effect.provide(FetchHttpClient.layer),
|
|
321
|
+
Effect.provide(Layer.mergeAll(PlatformNode.NodeFileSystem.layer, FetchHttpClient.layer)),
|
|
224
322
|
)) satisfies Adapter
|
|
225
323
|
|
|
324
|
+
const resetNodePersistence = ({
|
|
325
|
+
storage,
|
|
326
|
+
storeId,
|
|
327
|
+
}: {
|
|
328
|
+
storage: WorkerSchema.StorageType
|
|
329
|
+
storeId: string
|
|
330
|
+
}): Effect.Effect<void, UnknownError, FileSystem.FileSystem> => {
|
|
331
|
+
if (storage.type !== 'fs') {
|
|
332
|
+
return Effect.void
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
const directory = path.join(storage.baseDirectory ?? '', storeId)
|
|
336
|
+
|
|
337
|
+
return Effect.gen(function* () {
|
|
338
|
+
const fs = yield* FileSystem.FileSystem
|
|
339
|
+
|
|
340
|
+
const directoryExists = yield* fs.exists(directory).pipe(UnknownError.mapToUnknownError)
|
|
341
|
+
|
|
342
|
+
if (directoryExists === false) {
|
|
343
|
+
return
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
yield* fs.remove(directory, { recursive: true }).pipe(UnknownError.mapToUnknownError)
|
|
347
|
+
}).pipe(
|
|
348
|
+
Effect.retry({ schedule: Schedule.exponentialBackoff10Sec }),
|
|
349
|
+
Effect.withSpan('@livestore/adapter-node:resetPersistence', { attributes: { directory } }),
|
|
350
|
+
)
|
|
351
|
+
}
|
|
352
|
+
|
|
226
353
|
const makeLocalLeaderThread = ({
|
|
227
354
|
storeId,
|
|
228
355
|
clientId,
|
|
229
356
|
schema,
|
|
230
357
|
makeSqliteDb,
|
|
231
358
|
syncOptions,
|
|
232
|
-
|
|
359
|
+
syncPayloadEncoded,
|
|
360
|
+
syncPayloadSchema,
|
|
233
361
|
storage,
|
|
234
362
|
devtools,
|
|
235
363
|
testing,
|
|
@@ -240,7 +368,8 @@ const makeLocalLeaderThread = ({
|
|
|
240
368
|
makeSqliteDb: MakeSqliteDb
|
|
241
369
|
syncOptions: SyncOptions | undefined
|
|
242
370
|
storage: WorkerSchema.StorageType
|
|
243
|
-
|
|
371
|
+
syncPayloadEncoded: Schema.JsonValue | undefined
|
|
372
|
+
syncPayloadSchema: Schema.Schema<any>
|
|
244
373
|
devtools: WorkerSchema.LeaderWorkerInnerInitialMessage['devtools']
|
|
245
374
|
testing?: {
|
|
246
375
|
overrides?: TestingOverrides
|
|
@@ -254,15 +383,17 @@ const makeLocalLeaderThread = ({
|
|
|
254
383
|
schema,
|
|
255
384
|
syncOptions,
|
|
256
385
|
storage,
|
|
257
|
-
|
|
386
|
+
syncPayloadEncoded,
|
|
387
|
+
syncPayloadSchema,
|
|
258
388
|
devtools,
|
|
259
389
|
makeSqliteDb,
|
|
260
|
-
testing: testing?.overrides,
|
|
390
|
+
...omitUndefineds({ testing: testing?.overrides }),
|
|
261
391
|
}).pipe(Layer.unwrapScoped),
|
|
262
392
|
)
|
|
263
393
|
|
|
264
394
|
return yield* Effect.gen(function* () {
|
|
265
|
-
const { dbState, dbEventlog, syncProcessor, extraIncomingMessagesQueue, initialState } =
|
|
395
|
+
const { dbState, dbEventlog, syncProcessor, extraIncomingMessagesQueue, initialState, networkStatus } =
|
|
396
|
+
yield* LeaderThreadCtx
|
|
266
397
|
|
|
267
398
|
const initialLeaderHead = Eventlog.getClientHeadFromDb(dbEventlog)
|
|
268
399
|
|
|
@@ -272,17 +403,24 @@ const makeLocalLeaderThread = ({
|
|
|
272
403
|
pull: ({ cursor }) => syncProcessor.pull({ cursor }),
|
|
273
404
|
push: (batch) =>
|
|
274
405
|
syncProcessor.push(
|
|
275
|
-
batch.map((item) => new LiveStoreEvent.EncodedWithMeta(item)),
|
|
406
|
+
batch.map((item) => new LiveStoreEvent.Client.EncodedWithMeta(item)),
|
|
276
407
|
{ waitForProcessing: true },
|
|
277
408
|
),
|
|
409
|
+
stream: (options) =>
|
|
410
|
+
streamEventsWithSyncState({
|
|
411
|
+
dbEventlog,
|
|
412
|
+
syncState: syncProcessor.syncState,
|
|
413
|
+
options,
|
|
414
|
+
}),
|
|
278
415
|
},
|
|
279
416
|
initialState: { leaderHead: initialLeaderHead, migrationsReport: initialState.migrationsReport },
|
|
280
417
|
export: Effect.sync(() => dbState.export()),
|
|
281
418
|
getEventlogData: Effect.sync(() => dbEventlog.export()),
|
|
282
|
-
|
|
419
|
+
syncState: syncProcessor.syncState,
|
|
283
420
|
sendDevtoolsMessage: (message) => extraIncomingMessagesQueue.offer(message),
|
|
421
|
+
networkStatus,
|
|
284
422
|
},
|
|
285
|
-
{ overrides: testing?.overrides?.clientSession?.leaderThreadProxy },
|
|
423
|
+
{ ...omitUndefineds({ overrides: testing?.overrides?.clientSession?.leaderThreadProxy }) },
|
|
286
424
|
)
|
|
287
425
|
|
|
288
426
|
const initialSnapshot = dbState.export()
|
|
@@ -297,21 +435,23 @@ const makeWorkerLeaderThread = ({
|
|
|
297
435
|
clientId,
|
|
298
436
|
sessionId,
|
|
299
437
|
workerUrl,
|
|
438
|
+
workerExtraArgs,
|
|
300
439
|
storage,
|
|
301
440
|
devtools,
|
|
302
441
|
bootStatusQueue,
|
|
303
|
-
|
|
442
|
+
syncPayloadEncoded,
|
|
304
443
|
testing,
|
|
305
444
|
}: {
|
|
306
|
-
shutdown: (cause: Exit.Exit<IntentionalShutdownCause,
|
|
445
|
+
shutdown: (cause: Exit.Exit<IntentionalShutdownCause, UnknownError | SyncError>) => Effect.Effect<void>
|
|
307
446
|
storeId: string
|
|
308
447
|
clientId: string
|
|
309
448
|
sessionId: string
|
|
310
449
|
workerUrl: URL
|
|
450
|
+
workerExtraArgs: Schema.JsonValue | undefined
|
|
311
451
|
storage: WorkerSchema.StorageType
|
|
312
452
|
devtools: WorkerSchema.LeaderWorkerInnerInitialMessage['devtools']
|
|
313
453
|
bootStatusQueue: Queue.Queue<BootStatus>
|
|
314
|
-
|
|
454
|
+
syncPayloadEncoded: Schema.JsonValue | undefined
|
|
315
455
|
testing?: {
|
|
316
456
|
overrides?: TestingOverrides
|
|
317
457
|
}
|
|
@@ -319,7 +459,7 @@ const makeWorkerLeaderThread = ({
|
|
|
319
459
|
Effect.gen(function* () {
|
|
320
460
|
const nodeWorker = new WT.Worker(workerUrl, {
|
|
321
461
|
execArgv: process.env.DEBUG_WORKER ? ['--inspect --enable-source-maps'] : ['--enable-source-maps'],
|
|
322
|
-
argv: [Schema.encodeSync(WorkerSchema.WorkerArgv)({ storeId, clientId, sessionId })],
|
|
462
|
+
argv: [Schema.encodeSync(WorkerSchema.WorkerArgv)({ storeId, clientId, sessionId, extraArgs: workerExtraArgs })],
|
|
323
463
|
})
|
|
324
464
|
const nodeWorkerLayer = yield* Layer.build(PlatformNode.NodeWorker.layer(() => nodeWorker))
|
|
325
465
|
|
|
@@ -332,11 +472,11 @@ const makeWorkerLeaderThread = ({
|
|
|
332
472
|
clientId,
|
|
333
473
|
storage,
|
|
334
474
|
devtools,
|
|
335
|
-
|
|
475
|
+
syncPayloadEncoded,
|
|
336
476
|
}),
|
|
337
477
|
}).pipe(
|
|
338
478
|
Effect.provide(nodeWorkerLayer),
|
|
339
|
-
|
|
479
|
+
UnknownError.mapToUnknownError,
|
|
340
480
|
Effect.tapErrorCause((cause) => shutdown(Exit.failCause(cause))),
|
|
341
481
|
Effect.withSpan('@livestore/adapter-node:adapter:setupLeaderThread'),
|
|
342
482
|
)
|
|
@@ -344,7 +484,7 @@ const makeWorkerLeaderThread = ({
|
|
|
344
484
|
const runInWorker = <TReq extends typeof WorkerSchema.LeaderWorkerInnerRequest.Type>(
|
|
345
485
|
req: TReq,
|
|
346
486
|
): TReq extends Schema.WithResult<infer A, infer _I, infer _E, infer _EI, infer R>
|
|
347
|
-
? Effect.Effect<A,
|
|
487
|
+
? Effect.Effect<A, UnknownError, R>
|
|
348
488
|
: never =>
|
|
349
489
|
(worker.executeEffect(req) as any).pipe(
|
|
350
490
|
Effect.logWarnIfTakesLongerThan({
|
|
@@ -353,26 +493,26 @@ const makeWorkerLeaderThread = ({
|
|
|
353
493
|
}),
|
|
354
494
|
Effect.withSpan(`@livestore/adapter-node:client-session:runInWorker:${req._tag}`),
|
|
355
495
|
Effect.mapError((cause) =>
|
|
356
|
-
Schema.is(
|
|
496
|
+
Schema.is(UnknownError)(cause)
|
|
357
497
|
? cause
|
|
358
498
|
: ParseResult.isParseError(cause) || Schema.is(WorkerError.WorkerError)(cause)
|
|
359
|
-
? new
|
|
499
|
+
? new UnknownError({ cause })
|
|
360
500
|
: cause,
|
|
361
501
|
),
|
|
362
|
-
Effect.catchAllDefect((cause) => new
|
|
502
|
+
Effect.catchAllDefect((cause) => new UnknownError({ cause })),
|
|
363
503
|
) as any
|
|
364
504
|
|
|
365
505
|
const runInWorkerStream = <TReq extends typeof WorkerSchema.LeaderWorkerInnerRequest.Type>(
|
|
366
506
|
req: TReq,
|
|
367
507
|
): TReq extends Schema.WithResult<infer A, infer _I, infer _E, infer _EI, infer R>
|
|
368
|
-
? Stream.Stream<A,
|
|
508
|
+
? Stream.Stream<A, UnknownError, R>
|
|
369
509
|
: never =>
|
|
370
510
|
worker.execute(req as any).pipe(
|
|
371
511
|
Stream.mapError((cause) =>
|
|
372
|
-
Schema.is(
|
|
512
|
+
Schema.is(UnknownError)(cause)
|
|
373
513
|
? cause
|
|
374
514
|
: ParseResult.isParseError(cause) || Schema.is(WorkerError.WorkerError)(cause)
|
|
375
|
-
? new
|
|
515
|
+
? new UnknownError({ cause })
|
|
376
516
|
: cause,
|
|
377
517
|
),
|
|
378
518
|
Stream.withSpan(`@livestore/adapter-node:client-session:runInWorkerStream:${req._tag}`),
|
|
@@ -397,7 +537,7 @@ const makeWorkerLeaderThread = ({
|
|
|
397
537
|
|
|
398
538
|
const bootResult = yield* runInWorker(new WorkerSchema.LeaderWorkerInnerGetRecreateSnapshot()).pipe(
|
|
399
539
|
Effect.timeout(10_000),
|
|
400
|
-
|
|
540
|
+
UnknownError.mapToUnknownError,
|
|
401
541
|
Effect.withSpan('@livestore/adapter-node:client-session:export'),
|
|
402
542
|
)
|
|
403
543
|
|
|
@@ -412,6 +552,11 @@ const makeWorkerLeaderThread = ({
|
|
|
412
552
|
attributes: { batchSize: batch.length },
|
|
413
553
|
}),
|
|
414
554
|
),
|
|
555
|
+
stream: (options) =>
|
|
556
|
+
runInWorkerStream(new WorkerSchema.LeaderWorkerInnerStreamEvents(options)).pipe(
|
|
557
|
+
Stream.withSpan('@livestore/adapter-node:client-session:streamEvents'),
|
|
558
|
+
Stream.orDie,
|
|
559
|
+
),
|
|
415
560
|
},
|
|
416
561
|
initialState: {
|
|
417
562
|
leaderHead: initialLeaderHead,
|
|
@@ -419,22 +564,29 @@ const makeWorkerLeaderThread = ({
|
|
|
419
564
|
},
|
|
420
565
|
export: runInWorker(new WorkerSchema.LeaderWorkerInnerExport()).pipe(
|
|
421
566
|
Effect.timeout(10_000),
|
|
422
|
-
|
|
567
|
+
UnknownError.mapToUnknownError,
|
|
423
568
|
Effect.withSpan('@livestore/adapter-node:client-session:export'),
|
|
424
569
|
),
|
|
425
570
|
getEventlogData: Effect.dieMessage('Not implemented'),
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
571
|
+
syncState: Subscribable.make({
|
|
572
|
+
get: runInWorker(new WorkerSchema.LeaderWorkerInnerGetLeaderSyncState()).pipe(
|
|
573
|
+
UnknownError.mapToUnknownError,
|
|
574
|
+
Effect.withSpan('@livestore/adapter-node:client-session:getLeaderSyncState'),
|
|
575
|
+
),
|
|
576
|
+
changes: runInWorkerStream(new WorkerSchema.LeaderWorkerInnerSyncStateStream()).pipe(Stream.orDie),
|
|
577
|
+
}),
|
|
430
578
|
sendDevtoolsMessage: (message) =>
|
|
431
579
|
runInWorker(new WorkerSchema.LeaderWorkerInnerExtraDevtoolsMessage({ message })).pipe(
|
|
432
|
-
|
|
580
|
+
UnknownError.mapToUnknownError,
|
|
433
581
|
Effect.withSpan('@livestore/adapter-node:client-session:devtoolsMessageForLeader'),
|
|
434
582
|
),
|
|
583
|
+
networkStatus: Subscribable.make({
|
|
584
|
+
get: runInWorker(new WorkerSchema.LeaderWorkerInnerGetNetworkStatus()).pipe(Effect.orDie),
|
|
585
|
+
changes: runInWorkerStream(new WorkerSchema.LeaderWorkerInnerNetworkStatusStream()).pipe(Stream.orDie),
|
|
586
|
+
}),
|
|
435
587
|
},
|
|
436
588
|
{
|
|
437
|
-
overrides: testing?.overrides?.clientSession?.leaderThreadProxy,
|
|
589
|
+
...omitUndefineds({ overrides: testing?.overrides?.clientSession?.leaderThreadProxy }),
|
|
438
590
|
},
|
|
439
591
|
)
|
|
440
592
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
2
|
|
|
3
3
|
import type { Devtools } from '@livestore/common'
|
|
4
|
-
import {
|
|
4
|
+
import { UnknownError } from '@livestore/common'
|
|
5
5
|
import { livestoreDevtoolsPlugin } from '@livestore/devtools-vite'
|
|
6
6
|
import { isReadonlyArray } from '@livestore/utils'
|
|
7
7
|
import { Effect } from '@livestore/utils/effect'
|
|
@@ -26,11 +26,11 @@ export type ViteDevtoolsOptions = {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
// NOTE this is currently also used in @livestore/devtools-expo
|
|
29
|
-
export const makeViteMiddleware = (options: ViteDevtoolsOptions): Effect.Effect<Vite.ViteDevServer,
|
|
29
|
+
export const makeViteMiddleware = (options: ViteDevtoolsOptions): Effect.Effect<Vite.ViteDevServer, UnknownError> =>
|
|
30
30
|
Effect.gen(function* () {
|
|
31
31
|
const cwd = process.cwd()
|
|
32
32
|
|
|
33
|
-
const hmrPort = yield* getFreePort.pipe(
|
|
33
|
+
const hmrPort = yield* getFreePort.pipe(UnknownError.mapToUnknownError)
|
|
34
34
|
|
|
35
35
|
const defaultViteConfig = Vite.defineConfig({
|
|
36
36
|
server: {
|
|
@@ -58,9 +58,7 @@ export const makeViteMiddleware = (options: ViteDevtoolsOptions): Effect.Effect<
|
|
|
58
58
|
|
|
59
59
|
const viteConfig = options.viteConfig?.(defaultViteConfig) ?? defaultViteConfig
|
|
60
60
|
|
|
61
|
-
const viteServer = yield* Effect.promise(() => Vite.createServer(viteConfig)).pipe(
|
|
62
|
-
UnexpectedError.mapToUnexpectedError,
|
|
63
|
-
)
|
|
61
|
+
const viteServer = yield* Effect.promise(() => Vite.createServer(viteConfig)).pipe(UnknownError.mapToUnknownError)
|
|
64
62
|
|
|
65
63
|
return viteServer
|
|
66
64
|
}).pipe(Effect.withSpan('@livestore/adapter-node:devtools:makeViteServer'))
|
|
@@ -7,7 +7,7 @@ if (process.execArgv.includes('--inspect')) {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
import type { ClientSessionLeaderThreadProxy, MakeSqliteDb, SqliteDb, SyncOptions } from '@livestore/common'
|
|
10
|
-
import { Devtools, liveStoreStorageFormatVersion, migrateDb,
|
|
10
|
+
import { Devtools, liveStoreStorageFormatVersion, migrateDb, UnknownError } from '@livestore/common'
|
|
11
11
|
import type { DevtoolsOptions, LeaderSqliteDb, LeaderThreadCtx } from '@livestore/common/leader-thread'
|
|
12
12
|
import { configureConnection, makeLeaderThreadLayer } from '@livestore/common/leader-thread'
|
|
13
13
|
import type { LiveStoreSchema } from '@livestore/common/schema'
|
|
@@ -30,7 +30,7 @@ export type TestingOverrides = {
|
|
|
30
30
|
dbEventlog: SqliteDb
|
|
31
31
|
dbState: SqliteDb
|
|
32
32
|
},
|
|
33
|
-
|
|
33
|
+
UnknownError
|
|
34
34
|
>
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -42,7 +42,8 @@ export interface MakeLeaderThreadArgs {
|
|
|
42
42
|
makeSqliteDb: MakeNodeSqliteDb
|
|
43
43
|
devtools: WorkerSchema.LeaderWorkerInnerInitialMessage['devtools']
|
|
44
44
|
schema: LiveStoreSchema
|
|
45
|
-
|
|
45
|
+
syncPayloadEncoded: Schema.JsonValue | undefined
|
|
46
|
+
syncPayloadSchema: Schema.Schema<any> | undefined
|
|
46
47
|
testing: TestingOverrides | undefined
|
|
47
48
|
}
|
|
48
49
|
|
|
@@ -54,11 +55,12 @@ export const makeLeaderThread = ({
|
|
|
54
55
|
storage,
|
|
55
56
|
devtools,
|
|
56
57
|
schema,
|
|
57
|
-
|
|
58
|
+
syncPayloadEncoded,
|
|
59
|
+
syncPayloadSchema,
|
|
58
60
|
testing,
|
|
59
61
|
}: MakeLeaderThreadArgs): Effect.Effect<
|
|
60
|
-
Layer.Layer<LeaderThreadCtx,
|
|
61
|
-
|
|
62
|
+
Layer.Layer<LeaderThreadCtx, UnknownError, Scope.Scope | HttpClient.HttpClient | FileSystem.FileSystem>,
|
|
63
|
+
UnknownError,
|
|
62
64
|
Scope.Scope
|
|
63
65
|
> =>
|
|
64
66
|
Effect.gen(function* () {
|
|
@@ -113,11 +115,12 @@ export const makeLeaderThread = ({
|
|
|
113
115
|
dbEventlog,
|
|
114
116
|
devtoolsOptions,
|
|
115
117
|
shutdownChannel,
|
|
116
|
-
|
|
118
|
+
syncPayloadEncoded,
|
|
119
|
+
syncPayloadSchema,
|
|
117
120
|
})
|
|
118
121
|
}).pipe(
|
|
119
122
|
Effect.tapCauseLogPretty,
|
|
120
|
-
|
|
123
|
+
UnknownError.mapToUnknownError,
|
|
121
124
|
Effect.withSpan('@livestore/adapter-node:makeLeaderThread', {
|
|
122
125
|
attributes: { storeId, clientId, storage, devtools, syncOptions },
|
|
123
126
|
}),
|
|
@@ -137,7 +140,7 @@ const makeDevtoolsOptions = ({
|
|
|
137
140
|
storeId: string
|
|
138
141
|
clientId: string
|
|
139
142
|
devtools: WorkerSchema.LeaderWorkerInnerInitialMessage['devtools']
|
|
140
|
-
}): Effect.Effect<DevtoolsOptions,
|
|
143
|
+
}): Effect.Effect<DevtoolsOptions, UnknownError, Scope.Scope> =>
|
|
141
144
|
Effect.gen(function* () {
|
|
142
145
|
if (devtools.enabled === false) {
|
|
143
146
|
return {
|
|
@@ -161,6 +164,7 @@ const makeDevtoolsOptions = ({
|
|
|
161
164
|
sessionId: 'static', // TODO make this dynamic
|
|
162
165
|
schemaAlias: devtools.schemaAlias,
|
|
163
166
|
isLeader: true,
|
|
167
|
+
origin: undefined,
|
|
164
168
|
}),
|
|
165
169
|
port: devtools.port,
|
|
166
170
|
host: devtools.host,
|