@livestore/adapter-node 0.4.0-dev.9 → 0.5.0-dev.0
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 +69 -3
- package/dist/client-session/adapter.d.ts.map +1 -1
- package/dist/client-session/adapter.js +160 -62
- package/dist/client-session/adapter.js.map +1 -1
- package/dist/devtools/devtools-server.d.ts.map +1 -1
- package/dist/devtools/devtools-server.js +25 -19
- package/dist/devtools/devtools-server.js.map +1 -1
- package/dist/devtools/mod.d.ts +1 -1
- package/dist/devtools/mod.d.ts.map +1 -1
- package/dist/devtools/mod.js +1 -1
- package/dist/devtools/mod.js.map +1 -1
- package/dist/devtools/vite-dev-server.d.ts +22 -4
- package/dist/devtools/vite-dev-server.d.ts.map +1 -1
- package/dist/devtools/vite-dev-server.js +45 -11
- package/dist/devtools/vite-dev-server.js.map +1 -1
- package/dist/leader-thread-shared.d.ts +8 -7
- package/dist/leader-thread-shared.d.ts.map +1 -1
- package/dist/leader-thread-shared.js +19 -16
- package/dist/leader-thread-shared.js.map +1 -1
- package/dist/make-leader-worker.d.ts +5 -3
- package/dist/make-leader-worker.d.ts.map +1 -1
- package/dist/make-leader-worker.js +75 -59
- package/dist/make-leader-worker.js.map +1 -1
- package/dist/rpc-worker.d.ts +8 -0
- package/dist/rpc-worker.d.ts.map +1 -0
- package/dist/rpc-worker.js +5 -0
- package/dist/rpc-worker.js.map +1 -0
- package/dist/shutdown-channel.d.ts.map +1 -1
- package/dist/shutdown-channel.js.map +1 -1
- package/dist/webchannel.d.ts +1 -1
- package/dist/webchannel.d.ts.map +1 -1
- package/dist/webchannel.js +17 -18
- package/dist/webchannel.js.map +1 -1
- package/dist/worker-schema.d.ts +274 -138
- package/dist/worker-schema.d.ts.map +1 -1
- package/dist/worker-schema.js +79 -45
- package/dist/worker-schema.js.map +1 -1
- package/package.json +51 -20
- package/src/client-session/adapter.ts +228 -124
- package/src/devtools/devtools-server.ts +50 -35
- package/src/devtools/mod.ts +1 -1
- package/src/devtools/vite-dev-server.ts +65 -15
- package/src/leader-thread-shared.ts +37 -34
- package/src/make-leader-worker.ts +164 -115
- package/src/rpc-worker.ts +28 -0
- package/src/shutdown-channel.ts +1 -0
- package/src/webchannel.ts +21 -28
- package/src/worker-schema.ts +132 -117
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { URL } from 'node:url';
|
|
1
2
|
import { type Adapter, type SyncOptions } from '@livestore/common';
|
|
2
3
|
import { Schema } from '@livestore/utils/effect';
|
|
3
4
|
import type { TestingOverrides } from '../leader-thread-shared.ts';
|
|
@@ -41,12 +42,77 @@ export interface NodeAdapterOptions {
|
|
|
41
42
|
overrides?: TestingOverrides;
|
|
42
43
|
};
|
|
43
44
|
}
|
|
44
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Creates a single-threaded LiveStore adapter for Node.js applications.
|
|
47
|
+
*
|
|
48
|
+
* This adapter runs the leader thread (persistence and sync) in the same thread as
|
|
49
|
+
* your application. Suitable for CLI tools, scripts, and applications where simplicity
|
|
50
|
+
* is preferred over maximum performance.
|
|
51
|
+
*
|
|
52
|
+
* For production servers or performance-critical applications, consider `makeWorkerAdapter`
|
|
53
|
+
* which runs persistence/sync in a separate worker thread.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* import { makeAdapter } from '@livestore/adapter-node'
|
|
58
|
+
* import { makeWsSync } from '@livestore/sync-cf/client'
|
|
59
|
+
*
|
|
60
|
+
* const adapter = makeAdapter({
|
|
61
|
+
* storage: { type: 'fs', baseDirectory: './data' },
|
|
62
|
+
* sync: {
|
|
63
|
+
* backend: makeWsSync({ url: 'wss://api.example.com/sync' }),
|
|
64
|
+
* },
|
|
65
|
+
* })
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* // With DevTools support
|
|
71
|
+
* const adapter = makeAdapter({
|
|
72
|
+
* storage: { type: 'fs', baseDirectory: './data' },
|
|
73
|
+
* devtools: {
|
|
74
|
+
* schemaPath: new URL('./schema.ts', import.meta.url),
|
|
75
|
+
* port: 4242,
|
|
76
|
+
* },
|
|
77
|
+
* })
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* @see https://livestore.dev/docs/reference/adapters/node for setup guide
|
|
81
|
+
*/
|
|
45
82
|
export declare const makeAdapter: ({ sync, ...options }: NodeAdapterOptions & {
|
|
46
83
|
sync?: SyncOptions;
|
|
47
84
|
}) => Adapter;
|
|
48
85
|
/**
|
|
49
|
-
*
|
|
86
|
+
* Creates a multi-threaded LiveStore adapter for Node.js applications.
|
|
87
|
+
*
|
|
88
|
+
* This adapter runs the leader thread (persistence, sync, and heavy SQLite operations)
|
|
89
|
+
* in a separate worker thread, keeping your main thread responsive. Recommended for
|
|
90
|
+
* production servers and performance-critical applications.
|
|
91
|
+
*
|
|
92
|
+
* You must create a worker file that calls `makeLeaderWorker()` and pass its URL
|
|
93
|
+
* to this function.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* // In your main file:
|
|
98
|
+
* import { makeWorkerAdapter } from '@livestore/adapter-node'
|
|
99
|
+
*
|
|
100
|
+
* const adapter = makeWorkerAdapter({
|
|
101
|
+
* storage: { type: 'fs', baseDirectory: './data' },
|
|
102
|
+
* workerUrl: new URL('./livestore.worker.ts', import.meta.url),
|
|
103
|
+
* })
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* // In livestore.worker.ts:
|
|
109
|
+
* import { makeLeaderWorker } from '@livestore/adapter-node/worker'
|
|
110
|
+
* import { schema } from './schema'
|
|
111
|
+
*
|
|
112
|
+
* makeLeaderWorker({ schema })
|
|
113
|
+
* ```
|
|
114
|
+
*
|
|
115
|
+
* @see https://livestore.dev/docs/reference/adapters/node for setup guide
|
|
50
116
|
*/
|
|
51
117
|
export declare const makeWorkerAdapter: ({ workerUrl, workerExtraArgs, ...options }: NodeAdapterOptions & {
|
|
52
118
|
/**
|
|
@@ -57,6 +123,6 @@ export declare const makeWorkerAdapter: ({ workerUrl, workerExtraArgs, ...option
|
|
|
57
123
|
* Extra arguments to pass to the worker which can be accessed in the worker
|
|
58
124
|
* via `getWorkerArgs()`
|
|
59
125
|
*/
|
|
60
|
-
workerExtraArgs?: Schema.
|
|
126
|
+
workerExtraArgs?: Schema.Json;
|
|
61
127
|
}) => Adapter;
|
|
62
128
|
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/client-session/adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/client-session/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAGnC,OAAO,EACL,KAAK,OAAO,EAOZ,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAA;AAO1B,OAAO,EAYL,MAAM,EAKP,MAAM,yBAAyB,CAAA;AAIhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAIlE,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAA;AAEnD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,YAAY,CAAC,WAAW,CAAA;IACjC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE1B,QAAQ,CAAC,EAAE;QACT,UAAU,EAAE,MAAM,GAAG,GAAG,CAAA;QACxB;;;;WAIG;QACH,IAAI,CAAC,EAAE,MAAM,CAAA;QACb;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAA;QACb;;;;WAIG;QACH,yBAAyB,CAAC,EAAE,OAAO,CAAA;KACpC,CAAA;IAED,uCAAuC;IACvC,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,gBAAgB,CAAA;KAC7B,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,WAAW,GAAI,sBAGzB,kBAAkB,GAAG;IACtB,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB,KAAG,OAA2F,CAAA;AAE/F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,iBAAiB,GAAI,4CAI/B,kBAAkB,GAAG;IACtB;;OAEG;IACH,SAAS,EAAE,GAAG,CAAA;IACd;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,IAAI,CAAA;CAC9B,KAAG,OAAgH,CAAA"}
|
|
@@ -1,28 +1,94 @@
|
|
|
1
1
|
import { hostname } from 'node:os';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import * as WT from 'node:worker_threads';
|
|
4
|
-
import { ClientSessionLeaderThreadProxy, IntentionalShutdownCause, makeClientSession,
|
|
5
|
-
import { Eventlog, LeaderThreadCtx } from '@livestore/common/leader-thread';
|
|
4
|
+
import { ClientSessionLeaderThreadProxy, IntentionalShutdownCause, makeClientSession, UnknownError, } from '@livestore/common';
|
|
5
|
+
import { Eventlog, LeaderThreadCtx, streamEventsWithSyncState } from '@livestore/common/leader-thread';
|
|
6
6
|
import { LiveStoreEvent } from '@livestore/common/schema';
|
|
7
7
|
import { loadSqlite3Wasm } from '@livestore/sqlite-wasm/load-wasm';
|
|
8
8
|
import { sqliteDbFactory } from '@livestore/sqlite-wasm/node';
|
|
9
9
|
import { omitUndefineds } from '@livestore/utils';
|
|
10
|
-
import { Cause, Effect, Exit, FetchHttpClient, Fiber, FileSystem, Layer,
|
|
10
|
+
import { Cause, Effect, Exit, FetchHttpClient, Fiber, FileSystem, Layer, Queue, RpcClient, RpcWorker, Schedule, Schema, Scope, Stream, Subscribable, SubscriptionRef, } from '@livestore/utils/effect';
|
|
11
11
|
import { PlatformNode } from '@livestore/utils/node';
|
|
12
12
|
import * as Webmesh from '@livestore/webmesh';
|
|
13
13
|
import { makeLeaderThread } from "../leader-thread-shared.js";
|
|
14
|
+
import { dieOnRpcClientError, dieOnRpcClientErrorStream } from "../rpc-worker.js";
|
|
14
15
|
import { makeShutdownChannel } from "../shutdown-channel.js";
|
|
15
16
|
import * as WorkerSchema from "../worker-schema.js";
|
|
16
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Creates a single-threaded LiveStore adapter for Node.js applications.
|
|
19
|
+
*
|
|
20
|
+
* This adapter runs the leader thread (persistence and sync) in the same thread as
|
|
21
|
+
* your application. Suitable for CLI tools, scripts, and applications where simplicity
|
|
22
|
+
* is preferred over maximum performance.
|
|
23
|
+
*
|
|
24
|
+
* For production servers or performance-critical applications, consider `makeWorkerAdapter`
|
|
25
|
+
* which runs persistence/sync in a separate worker thread.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { makeAdapter } from '@livestore/adapter-node'
|
|
30
|
+
* import { makeWsSync } from '@livestore/sync-cf/client'
|
|
31
|
+
*
|
|
32
|
+
* const adapter = makeAdapter({
|
|
33
|
+
* storage: { type: 'fs', baseDirectory: './data' },
|
|
34
|
+
* sync: {
|
|
35
|
+
* backend: makeWsSync({ url: 'wss://api.example.com/sync' }),
|
|
36
|
+
* },
|
|
37
|
+
* })
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* // With DevTools support
|
|
43
|
+
* const adapter = makeAdapter({
|
|
44
|
+
* storage: { type: 'fs', baseDirectory: './data' },
|
|
45
|
+
* devtools: {
|
|
46
|
+
* schemaPath: new URL('./schema.ts', import.meta.url),
|
|
47
|
+
* port: 4242,
|
|
48
|
+
* },
|
|
49
|
+
* })
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @see https://livestore.dev/docs/reference/adapters/node for setup guide
|
|
53
|
+
*/
|
|
17
54
|
export const makeAdapter = ({ sync, ...options }) => makeAdapterImpl({ ...options, leaderThread: { _tag: 'single-threaded', sync } });
|
|
18
55
|
/**
|
|
19
|
-
*
|
|
56
|
+
* Creates a multi-threaded LiveStore adapter for Node.js applications.
|
|
57
|
+
*
|
|
58
|
+
* This adapter runs the leader thread (persistence, sync, and heavy SQLite operations)
|
|
59
|
+
* in a separate worker thread, keeping your main thread responsive. Recommended for
|
|
60
|
+
* production servers and performance-critical applications.
|
|
61
|
+
*
|
|
62
|
+
* You must create a worker file that calls `makeLeaderWorker()` and pass its URL
|
|
63
|
+
* to this function.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* // In your main file:
|
|
68
|
+
* import { makeWorkerAdapter } from '@livestore/adapter-node'
|
|
69
|
+
*
|
|
70
|
+
* const adapter = makeWorkerAdapter({
|
|
71
|
+
* storage: { type: 'fs', baseDirectory: './data' },
|
|
72
|
+
* workerUrl: new URL('./livestore.worker.ts', import.meta.url),
|
|
73
|
+
* })
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```ts
|
|
78
|
+
* // In livestore.worker.ts:
|
|
79
|
+
* import { makeLeaderWorker } from '@livestore/adapter-node/worker'
|
|
80
|
+
* import { schema } from './schema'
|
|
81
|
+
*
|
|
82
|
+
* makeLeaderWorker({ schema })
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* @see https://livestore.dev/docs/reference/adapters/node for setup guide
|
|
20
86
|
*/
|
|
21
87
|
export const makeWorkerAdapter = ({ workerUrl, workerExtraArgs, ...options }) => makeAdapterImpl({ ...options, leaderThread: { _tag: 'multi-threaded', workerUrl, workerExtraArgs } });
|
|
22
88
|
const makeAdapterImpl = ({ storage, devtools: devtoolsOptionsInput, clientId = hostname(),
|
|
23
89
|
// TODO make this dynamic and actually support multiple sessions
|
|
24
90
|
sessionId = 'static', testing, resetPersistence = false, leaderThread: leaderThreadInput, }) => ((adapterArgs) => Effect.gen(function* () {
|
|
25
|
-
const { storeId, devtoolsEnabled, shutdown, bootStatusQueue,
|
|
91
|
+
const { storeId, devtoolsEnabled, shutdown, bootStatusQueue, syncPayloadEncoded, syncPayloadSchema, schema } = adapterArgs;
|
|
26
92
|
yield* Queue.offer(bootStatusQueue, { stage: 'loading' });
|
|
27
93
|
const sqlite3 = yield* Effect.promise(() => loadSqlite3Wasm());
|
|
28
94
|
const makeSqliteDb = yield* sqliteDbFactory({ sqlite3 });
|
|
@@ -37,14 +103,14 @@ sessionId = 'static', testing, resetPersistence = false, leaderThread: leaderThr
|
|
|
37
103
|
if (resetPersistence === true) {
|
|
38
104
|
yield* shutdownChannel
|
|
39
105
|
.send(IntentionalShutdownCause.make({ reason: 'adapter-reset' }))
|
|
40
|
-
.pipe(
|
|
106
|
+
.pipe(UnknownError.mapToUnknownError);
|
|
41
107
|
yield* resetNodePersistence({ storage, storeId });
|
|
42
108
|
}
|
|
43
|
-
yield* shutdownChannel.listen.pipe(Stream.
|
|
109
|
+
yield* shutdownChannel.listen.pipe(Stream.mapEffect(Effect.fromResult), Stream.tap((cause) => shutdown(cause._tag === 'IntentionalShutdownCause' ? Exit.succeed(cause) : Exit.fail(cause))), Stream.runDrain, Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
44
110
|
const syncInMemoryDb = yield* makeSqliteDb({ _tag: 'in-memory' }).pipe(Effect.orDie);
|
|
45
111
|
// TODO actually implement this multi-session support
|
|
46
112
|
const lockStatus = yield* SubscriptionRef.make('has-lock');
|
|
47
|
-
const devtoolsOptions = devtoolsEnabled && devtoolsOptionsInput !== undefined
|
|
113
|
+
const devtoolsOptions = devtoolsEnabled === true && devtoolsOptionsInput !== undefined
|
|
48
114
|
? {
|
|
49
115
|
enabled: true,
|
|
50
116
|
schemaPath: typeof devtoolsOptionsInput.schemaPath === 'string'
|
|
@@ -66,10 +132,11 @@ sessionId = 'static', testing, resetPersistence = false, leaderThread: leaderThr
|
|
|
66
132
|
storage,
|
|
67
133
|
...omitUndefineds({
|
|
68
134
|
syncOptions: leaderThreadInput.sync,
|
|
69
|
-
|
|
135
|
+
syncPayloadEncoded,
|
|
136
|
+
syncPayloadSchema,
|
|
70
137
|
testing,
|
|
71
138
|
}),
|
|
72
|
-
}).pipe(
|
|
139
|
+
}).pipe(UnknownError.mapToUnknownError)
|
|
73
140
|
: yield* makeWorkerLeaderThread({
|
|
74
141
|
shutdown,
|
|
75
142
|
storeId,
|
|
@@ -80,8 +147,8 @@ sessionId = 'static', testing, resetPersistence = false, leaderThread: leaderThr
|
|
|
80
147
|
storage,
|
|
81
148
|
devtools: devtoolsOptions,
|
|
82
149
|
bootStatusQueue,
|
|
83
|
-
|
|
84
|
-
});
|
|
150
|
+
syncPayloadEncoded,
|
|
151
|
+
}).pipe(UnknownError.mapToUnknownError);
|
|
85
152
|
syncInMemoryDb.import(initialSnapshot);
|
|
86
153
|
syncInMemoryDb.debug.head = leaderThread.initialState.leaderHead;
|
|
87
154
|
const clientSession = yield* makeClientSession({
|
|
@@ -89,7 +156,7 @@ sessionId = 'static', testing, resetPersistence = false, leaderThread: leaderThr
|
|
|
89
156
|
sqliteDb: syncInMemoryDb,
|
|
90
157
|
webmeshMode: 'proxy',
|
|
91
158
|
connectWebmeshNode: Effect.fnUntraced(function* ({ webmeshNode }) {
|
|
92
|
-
if (devtoolsOptions.enabled) {
|
|
159
|
+
if (devtoolsOptions.enabled === true) {
|
|
93
160
|
yield* Webmesh.connectViaWebSocket({
|
|
94
161
|
node: webmeshNode,
|
|
95
162
|
url: `ws://${devtoolsOptions.host}:${devtoolsOptions.port}`,
|
|
@@ -104,6 +171,7 @@ sessionId = 'static', testing, resetPersistence = false, leaderThread: leaderThr
|
|
|
104
171
|
isLeader: true,
|
|
105
172
|
// Not really applicable for node as there is no "reload the app" concept
|
|
106
173
|
registerBeforeUnload: (_onBeforeUnload) => () => { },
|
|
174
|
+
origin: undefined,
|
|
107
175
|
});
|
|
108
176
|
return clientSession;
|
|
109
177
|
}).pipe(Effect.withSpan('@livestore/adapter-node:adapter'), Effect.provide(Layer.mergeAll(PlatformNode.NodeFileSystem.layer, FetchHttpClient.layer))));
|
|
@@ -114,92 +182,122 @@ const resetNodePersistence = ({ storage, storeId, }) => {
|
|
|
114
182
|
const directory = path.join(storage.baseDirectory ?? '', storeId);
|
|
115
183
|
return Effect.gen(function* () {
|
|
116
184
|
const fs = yield* FileSystem.FileSystem;
|
|
117
|
-
const directoryExists = yield* fs.exists(directory).pipe(
|
|
185
|
+
const directoryExists = yield* fs.exists(directory).pipe(UnknownError.mapToUnknownError);
|
|
118
186
|
if (directoryExists === false) {
|
|
119
187
|
return;
|
|
120
188
|
}
|
|
121
|
-
yield* fs.remove(directory, { recursive: true }).pipe(
|
|
189
|
+
yield* fs.remove(directory, { recursive: true }).pipe(UnknownError.mapToUnknownError);
|
|
122
190
|
}).pipe(Effect.retry({ schedule: Schedule.exponentialBackoff10Sec }), Effect.withSpan('@livestore/adapter-node:resetPersistence', { attributes: { directory } }));
|
|
123
191
|
};
|
|
124
|
-
const makeLocalLeaderThread = ({ storeId, clientId, schema, makeSqliteDb, syncOptions,
|
|
125
|
-
|
|
192
|
+
const makeLocalLeaderThread = ({ storeId, clientId, schema, makeSqliteDb, syncOptions, syncPayloadEncoded, syncPayloadSchema, storage, devtools, testing, }) => Effect.gen(function* () {
|
|
193
|
+
// The single-threaded node adapter runs the leader thread co-located in the same runtime as the
|
|
194
|
+
// client session. Unlike the worker adapters (where the leader lives on its own event loop and drains
|
|
195
|
+
// pushes independently), a co-located leader only makes progress when the surrounding fibers yield.
|
|
196
|
+
//
|
|
197
|
+
// We give the leader thread its own dedicated scope whose teardown finalizer is registered *before*
|
|
198
|
+
// `makeClientSession`. Finalizers run in reverse registration order, so on store shutdown the client
|
|
199
|
+
// session tears down first and only then is the leader thread scope closed — keeping the leader (and
|
|
200
|
+
// its SQLite connections) alive while the client-session pusher's in-flight batch is still being
|
|
201
|
+
// persisted. Building the leader into the ambient store scope instead (via `Layer.build`) interrupts
|
|
202
|
+
// the leader's push drainer concurrently with the client session, dropping the in-flight batch and
|
|
203
|
+
// causing silent data loss on commit-then-shutdown.
|
|
204
|
+
const leaderThreadScope = yield* Scope.make();
|
|
205
|
+
yield* Effect.addFinalizer((exit) => Scope.close(leaderThreadScope, exit));
|
|
206
|
+
const leaderThreadLayer = yield* makeLeaderThread({
|
|
126
207
|
storeId,
|
|
127
208
|
clientId,
|
|
128
209
|
schema,
|
|
129
210
|
syncOptions,
|
|
130
211
|
storage,
|
|
131
|
-
|
|
212
|
+
syncPayloadEncoded,
|
|
213
|
+
syncPayloadSchema,
|
|
132
214
|
devtools,
|
|
133
215
|
makeSqliteDb,
|
|
134
216
|
...omitUndefineds({ testing: testing?.overrides }),
|
|
135
|
-
}).pipe(
|
|
217
|
+
}).pipe(Scope.provide(leaderThreadScope));
|
|
218
|
+
const layer = yield* Layer.buildWithScope(leaderThreadLayer, leaderThreadScope);
|
|
136
219
|
return yield* Effect.gen(function* () {
|
|
137
|
-
const { dbState, dbEventlog, syncProcessor, extraIncomingMessagesQueue, initialState } = yield* LeaderThreadCtx;
|
|
220
|
+
const { dbState, dbEventlog, syncProcessor, extraIncomingMessagesQueue, initialState, networkStatus } = yield* LeaderThreadCtx;
|
|
138
221
|
const initialLeaderHead = Eventlog.getClientHeadFromDb(dbEventlog);
|
|
139
222
|
const leaderThread = ClientSessionLeaderThreadProxy.of({
|
|
140
223
|
events: {
|
|
141
224
|
pull: ({ cursor }) => syncProcessor.pull({ cursor }),
|
|
142
|
-
push: (batch) =>
|
|
225
|
+
push: (batch) =>
|
|
226
|
+
// Mirror the worker `PushToLeader` handler which runs the leader push uninterruptibly.
|
|
227
|
+
// Together with the dedicated `leaderThreadScope` above, this guarantees an in-flight batch is
|
|
228
|
+
// fully persisted by the (still-live) leader before the co-located pusher fiber is interrupted
|
|
229
|
+
// on store shutdown.
|
|
230
|
+
syncProcessor
|
|
231
|
+
.push(batch.map((item) => new LiveStoreEvent.Client.EncodedWithMeta(item)))
|
|
232
|
+
.pipe(Effect.uninterruptible),
|
|
233
|
+
stream: (options) => streamEventsWithSyncState({
|
|
234
|
+
dbEventlog,
|
|
235
|
+
syncState: syncProcessor.syncState,
|
|
236
|
+
options,
|
|
237
|
+
}),
|
|
238
|
+
},
|
|
239
|
+
initialState: {
|
|
240
|
+
leaderHead: initialLeaderHead,
|
|
241
|
+
migrationsReport: initialState.migrationsReport,
|
|
242
|
+
storageMode: 'persisted',
|
|
143
243
|
},
|
|
144
|
-
initialState: { leaderHead: initialLeaderHead, migrationsReport: initialState.migrationsReport },
|
|
145
244
|
export: Effect.sync(() => dbState.export()),
|
|
146
245
|
getEventlogData: Effect.sync(() => dbEventlog.export()),
|
|
147
|
-
|
|
148
|
-
sendDevtoolsMessage: (message) =>
|
|
246
|
+
syncState: syncProcessor.syncState,
|
|
247
|
+
sendDevtoolsMessage: (message) => Queue.offer(extraIncomingMessagesQueue, message),
|
|
248
|
+
networkStatus,
|
|
149
249
|
}, { ...omitUndefineds({ overrides: testing?.overrides?.clientSession?.leaderThreadProxy }) });
|
|
150
250
|
const initialSnapshot = dbState.export();
|
|
151
251
|
return { leaderThread, initialSnapshot };
|
|
152
252
|
}).pipe(Effect.provide(layer));
|
|
153
253
|
});
|
|
154
|
-
const makeWorkerLeaderThread = ({ shutdown, storeId, clientId, sessionId, workerUrl, workerExtraArgs, storage, devtools, bootStatusQueue,
|
|
254
|
+
const makeWorkerLeaderThread = ({ shutdown, storeId, clientId, sessionId, workerUrl, workerExtraArgs, storage, devtools, bootStatusQueue, syncPayloadEncoded, testing, }) => Effect.gen(function* () {
|
|
155
255
|
const nodeWorker = new WT.Worker(workerUrl, {
|
|
156
|
-
execArgv: process.env.DEBUG_WORKER ? ['--inspect --enable-source-maps'] : ['--enable-source-maps'],
|
|
157
|
-
argv: [
|
|
256
|
+
execArgv: process.env.DEBUG_WORKER !== undefined ? ['--inspect --enable-source-maps'] : ['--enable-source-maps'],
|
|
257
|
+
argv: [
|
|
258
|
+
yield* Schema.encodeEffect(WorkerSchema.WorkerArgv)({
|
|
259
|
+
storeId,
|
|
260
|
+
clientId,
|
|
261
|
+
sessionId,
|
|
262
|
+
extraArgs: workerExtraArgs,
|
|
263
|
+
}).pipe(Effect.orDie),
|
|
264
|
+
],
|
|
158
265
|
});
|
|
159
|
-
const
|
|
160
|
-
const worker = yield*
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
initialMessage: () => new WorkerSchema.LeaderWorkerInnerInitialMessage({
|
|
164
|
-
storeId,
|
|
165
|
-
clientId,
|
|
166
|
-
storage,
|
|
167
|
-
devtools,
|
|
168
|
-
syncPayload,
|
|
169
|
-
}),
|
|
170
|
-
}).pipe(Effect.provide(nodeWorkerLayer), UnexpectedError.mapToUnexpectedError, Effect.tapErrorCause((cause) => shutdown(Exit.failCause(cause))), Effect.withSpan('@livestore/adapter-node:adapter:setupLeaderThread'));
|
|
171
|
-
const runInWorker = (req) => worker.executeEffect(req).pipe(Effect.logWarnIfTakesLongerThan({
|
|
172
|
-
label: `@livestore/adapter-node:client-session:runInWorker:${req._tag}`,
|
|
266
|
+
const innerWorkerContext = yield* Layer.build(RpcClient.layerProtocolWorker({ size: 1, concurrency: 100 }).pipe(Layer.provide(PlatformNode.NodeWorker.layer(() => nodeWorker)), Layer.provide(RpcWorker.layerInitialMessage(WorkerSchema.LeaderWorkerInnerInitialMessage.payloadSchema, Effect.succeed({ storeId, clientId, storage, devtools, syncPayloadEncoded })))));
|
|
267
|
+
const worker = yield* RpcClient.make(WorkerSchema.LeaderWorkerInnerRpcs).pipe(Effect.provide(innerWorkerContext), UnknownError.mapToUnknownError, Effect.tapCause((cause) => shutdown(Exit.failCause(cause))), Effect.withSpan('@livestore/adapter-node:adapter:setupLeaderThread'));
|
|
268
|
+
const runInWorker = (tag, effect) => effect.pipe(dieOnRpcClientError, Effect.logWarnIfTakesLongerThan({
|
|
269
|
+
label: `@livestore/adapter-node:client-session:runInWorker:${tag}`,
|
|
173
270
|
duration: 2000,
|
|
174
|
-
}), Effect.withSpan(`@livestore/adapter-node:client-session:runInWorker:${
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
? cause
|
|
181
|
-
: ParseResult.isParseError(cause) || Schema.is(WorkerError.WorkerError)(cause)
|
|
182
|
-
? new UnexpectedError({ cause })
|
|
183
|
-
: cause), Stream.withSpan(`@livestore/adapter-node:client-session:runInWorkerStream:${req._tag}`));
|
|
184
|
-
const bootStatusFiber = yield* runInWorkerStream(new WorkerSchema.LeaderWorkerInnerBootStatusStream()).pipe(Stream.tap((bootStatus) => Queue.offer(bootStatusQueue, bootStatus)), Stream.runDrain, Effect.tapErrorCause((cause) => (Cause.isInterruptedOnly(cause) ? Effect.void : shutdown(Exit.failCause(cause)))), Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
185
|
-
yield* Queue.awaitShutdown(bootStatusQueue).pipe(Effect.andThen(Fiber.interrupt(bootStatusFiber)), Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
186
|
-
const initialLeaderHead = yield* runInWorker(new WorkerSchema.LeaderWorkerInnerGetLeaderHead());
|
|
187
|
-
const bootResult = yield* runInWorker(new WorkerSchema.LeaderWorkerInnerGetRecreateSnapshot()).pipe(Effect.timeout(10_000), UnexpectedError.mapToUnexpectedError, Effect.withSpan('@livestore/adapter-node:client-session:export'));
|
|
271
|
+
}), Effect.withSpan(`@livestore/adapter-node:client-session:runInWorker:${tag}`));
|
|
272
|
+
const runInWorkerStream = (tag, stream) => stream.pipe(dieOnRpcClientErrorStream, Stream.withSpan(`@livestore/adapter-node:client-session:runInWorkerStream:${tag}`));
|
|
273
|
+
const bootStatusFiber = yield* runInWorkerStream('BootStatusStream', worker.BootStatusStream({})).pipe(Stream.tap((bootStatus) => Queue.offer(bootStatusQueue, bootStatus)), Stream.runDrain, Effect.tapCause((cause) => Cause.hasInterruptsOnly(cause) === true ? Effect.void : shutdown(Exit.failCause(cause))), Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
274
|
+
yield* Queue.await(bootStatusQueue).pipe(Effect.andThen(Fiber.interrupt(bootStatusFiber)), Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
275
|
+
const initialLeaderHead = yield* runInWorker('GetLeaderHead', worker.GetLeaderHead({}));
|
|
276
|
+
const bootResult = yield* runInWorker('GetRecreateSnapshot', worker.GetRecreateSnapshot({})).pipe(Effect.timeoutOrDie(10_000), Effect.withSpan('@livestore/adapter-node:client-session:export'));
|
|
188
277
|
const leaderThread = ClientSessionLeaderThreadProxy.of({
|
|
189
278
|
events: {
|
|
190
|
-
pull: ({ cursor }) => runInWorkerStream(
|
|
191
|
-
push: (batch) => runInWorker(
|
|
279
|
+
pull: ({ cursor }) => runInWorkerStream('PullStream', worker.PullStream({ cursor })).pipe(Stream.orDie),
|
|
280
|
+
push: (batch) => runInWorker('PushToLeader', worker.PushToLeader({ batch })).pipe(Effect.withSpan('@livestore/adapter-node:client-session:pushToLeader', {
|
|
192
281
|
attributes: { batchSize: batch.length },
|
|
193
282
|
})),
|
|
283
|
+
stream: (options) => runInWorkerStream('StreamEvents', worker.StreamEvents(options)).pipe(Stream.withSpan('@livestore/adapter-node:client-session:streamEvents'), Stream.orDie),
|
|
194
284
|
},
|
|
195
285
|
initialState: {
|
|
196
286
|
leaderHead: initialLeaderHead,
|
|
197
287
|
migrationsReport: bootResult.migrationsReport,
|
|
288
|
+
storageMode: 'persisted',
|
|
198
289
|
},
|
|
199
|
-
export: runInWorker(
|
|
200
|
-
getEventlogData: Effect.
|
|
201
|
-
|
|
202
|
-
|
|
290
|
+
export: runInWorker('Export', worker.Export({})).pipe(Effect.timeoutOrDie(10_000), Effect.withSpan('@livestore/adapter-node:client-session:export')),
|
|
291
|
+
getEventlogData: Effect.die('Not implemented'),
|
|
292
|
+
syncState: Subscribable.make({
|
|
293
|
+
get: runInWorker('GetLeaderSyncState', worker.GetLeaderSyncState({})).pipe(Effect.withSpan('@livestore/adapter-node:client-session:getLeaderSyncState')),
|
|
294
|
+
changes: runInWorkerStream('SyncStateStream', worker.SyncStateStream({})).pipe(Stream.orDie),
|
|
295
|
+
}),
|
|
296
|
+
sendDevtoolsMessage: (message) => runInWorker('ExtraDevtoolsMessage', worker.ExtraDevtoolsMessage({ message })).pipe(Effect.withSpan('@livestore/adapter-node:client-session:devtoolsMessageForLeader')),
|
|
297
|
+
networkStatus: Subscribable.make({
|
|
298
|
+
get: runInWorker('GetNetworkStatus', worker.GetNetworkStatus({})).pipe(Effect.orDie),
|
|
299
|
+
changes: runInWorkerStream('NetworkStatusStream', worker.NetworkStatusStream({})).pipe(Stream.orDie),
|
|
300
|
+
}),
|
|
203
301
|
}, {
|
|
204
302
|
...omitUndefineds({ overrides: testing?.overrides?.clientSession?.leaderThreadProxy }),
|
|
205
303
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/client-session/adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/client-session/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools-server.d.ts","sourceRoot":"","sources":["../../src/devtools/devtools-server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAEL,MAAM,EAQP,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"devtools-server.d.ts","sourceRoot":"","sources":["../../src/devtools/devtools-server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAEL,MAAM,EAQP,MAAM,yBAAyB,CAAA;AAgBhC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,gDAKjC;IACD,UAAU,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IAC1C,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,GAAG,SAAS,CAAA;IAC/D,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,KAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAwGlD,CAAA"}
|
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
import http from 'node:http';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import {
|
|
3
|
+
import { LS_DEV } from '@livestore/utils';
|
|
4
4
|
import { Deferred, Effect, Exit, Headers, HttpMiddleware, HttpServer, HttpServerRequest, HttpServerResponse, Layer, } from '@livestore/utils/effect';
|
|
5
5
|
import { PlatformNode } from '@livestore/utils/node';
|
|
6
6
|
import { makeMeshNode, makeWebSocketEdge } from '@livestore/webmesh';
|
|
7
7
|
import { makeViteMiddleware } from "./vite-dev-server.js";
|
|
8
|
+
/**
|
|
9
|
+
* Determines if a request URL should be routed to the Vite middleware.
|
|
10
|
+
* Includes LiveStore devtools paths and Vite internal paths like `/@fs/`, `/@vite/`, etc.
|
|
11
|
+
*/
|
|
12
|
+
const shouldRouteToVite = (url) => url.startsWith('/_livestore') ||
|
|
13
|
+
url.startsWith('/@fs') ||
|
|
14
|
+
url.startsWith('/@vite') ||
|
|
15
|
+
url.startsWith('/@react-refresh');
|
|
8
16
|
/**
|
|
9
17
|
* Starts a devtools HTTP/WS server which serves ...
|
|
10
18
|
* - the Devtools UI via Vite
|
|
11
19
|
* - the Devtools Protocol via WebSocket Webmesh
|
|
12
20
|
*/
|
|
13
21
|
export const startDevtoolsServer = ({ schemaPath, clientSessionInfo, port, host, }) => Effect.gen(function* () {
|
|
14
|
-
const viteMiddleware = yield* makeViteMiddleware({
|
|
22
|
+
const viteMiddleware = yield* Effect.acquireRelease(makeViteMiddleware({
|
|
15
23
|
mode: { _tag: 'node', url: `http://${host}:${port}` },
|
|
16
|
-
schemaPath:
|
|
17
|
-
?
|
|
18
|
-
: path.resolve(process.cwd(), schemaPath),
|
|
24
|
+
schemaPath: typeof schemaPath === 'string'
|
|
25
|
+
? path.resolve(process.cwd(), schemaPath)
|
|
26
|
+
: schemaPath.map((schemaPath) => path.resolve(process.cwd(), schemaPath)),
|
|
19
27
|
viteConfig: (viteConfig) => {
|
|
20
|
-
if (LS_DEV) {
|
|
28
|
+
if (LS_DEV === true) {
|
|
21
29
|
viteConfig.server ??= {};
|
|
22
30
|
viteConfig.server.fs ??= {};
|
|
23
31
|
viteConfig.server.fs.strict = false;
|
|
@@ -26,12 +34,12 @@ export const startDevtoolsServer = ({ schemaPath, clientSessionInfo, port, host,
|
|
|
26
34
|
}
|
|
27
35
|
return viteConfig;
|
|
28
36
|
},
|
|
29
|
-
})
|
|
37
|
+
}), (viteMiddleware) => Effect.promise(() => viteMiddleware.close()));
|
|
30
38
|
const relayNodeName = 'ws';
|
|
31
39
|
const node = yield* makeMeshNode(relayNodeName);
|
|
32
40
|
const handler = Effect.gen(function* () {
|
|
33
41
|
const req = yield* HttpServerRequest.HttpServerRequest;
|
|
34
|
-
if (Headers.has(req.headers, 'upgrade')) {
|
|
42
|
+
if (Headers.has(req.headers, 'upgrade') === true) {
|
|
35
43
|
// yield* Effect.logDebug(`WS Relay ${relayNodeName}: WS upgrade request ${req.url}`)
|
|
36
44
|
const socket = yield* req.upgrade;
|
|
37
45
|
const { webChannel, from } = yield* makeWebSocketEdge({
|
|
@@ -41,37 +49,35 @@ export const startDevtoolsServer = ({ schemaPath, clientSessionInfo, port, host,
|
|
|
41
49
|
});
|
|
42
50
|
// To handle websocket closing, we need to race the `webChannel.closedDeferred` to properly interrupt the handler
|
|
43
51
|
yield* Effect.raceFirst(Effect.gen(function* () {
|
|
44
|
-
yield* node
|
|
45
|
-
|
|
46
|
-
.pipe(Effect.acquireRelease(() => node.removeEdge(from).pipe(Effect.orDie)));
|
|
47
|
-
if (LS_DEV) {
|
|
52
|
+
yield* Effect.acquireRelease(node.addEdge({ target: from, edgeChannel: webChannel, replaceIfExists: true }), () => node.removeEdge(from).pipe(Effect.orDie));
|
|
53
|
+
if (LS_DEV === true) {
|
|
48
54
|
yield* Effect.log(`WS Relay ${relayNodeName}: added edge from '${from}'`);
|
|
49
55
|
yield* Effect.addFinalizerLog(`WS Relay ${relayNodeName}: removed edge from '${from}'`);
|
|
50
56
|
}
|
|
51
57
|
// We want to keep the websocket open until the client disconnects or the server shuts down
|
|
52
58
|
return yield* Effect.never;
|
|
53
|
-
}), webChannel.closedDeferred);
|
|
59
|
+
}), Deferred.await(webChannel.closedDeferred));
|
|
54
60
|
return HttpServerResponse.empty({ status: 101 });
|
|
55
61
|
}
|
|
56
62
|
else {
|
|
57
63
|
if (req.url === '/' || req.url === '') {
|
|
58
64
|
return HttpServerResponse.redirect('/_livestore/node');
|
|
59
65
|
}
|
|
60
|
-
else if (req.url
|
|
66
|
+
else if (shouldRouteToVite(req.url) === true) {
|
|
61
67
|
// Here we're delegating to the Vite middleware
|
|
62
68
|
// TODO replace this once @effect/platform-node supports Node HTTP middlewares
|
|
63
69
|
const nodeReq = PlatformNode.NodeHttpServerRequest.toIncomingMessage(req);
|
|
64
70
|
const nodeRes = PlatformNode.NodeHttpServerRequest.toServerResponse(req);
|
|
65
71
|
const deferred = yield* Deferred.make();
|
|
66
|
-
viteMiddleware.middlewares(nodeReq, nodeRes, () => Deferred.
|
|
67
|
-
yield* deferred;
|
|
72
|
+
viteMiddleware.middlewares(nodeReq, nodeRes, () => Deferred.doneUnsafe(deferred, Exit.void));
|
|
73
|
+
yield* Deferred.await(deferred);
|
|
68
74
|
// The response is already sent, so we need to return an empty response (which won't be sent)
|
|
69
75
|
return HttpServerResponse.empty();
|
|
70
76
|
}
|
|
71
77
|
}
|
|
72
78
|
return HttpServerResponse.text('Not found');
|
|
73
|
-
}).pipe(Effect.tapCauseLogPretty, Effect.interruptible);
|
|
74
|
-
const sessionSuffix = clientSessionInfo
|
|
79
|
+
}).pipe(Effect.tapCauseLogPretty, Effect.interruptible, HttpMiddleware.withLoggerDisabled);
|
|
80
|
+
const sessionSuffix = clientSessionInfo !== undefined
|
|
75
81
|
? `/${clientSessionInfo.storeId}/${clientSessionInfo.clientId}/${clientSessionInfo.sessionId}/${clientSessionInfo.schemaAlias}`
|
|
76
82
|
: '?autoconnect';
|
|
77
83
|
// Use `localhost` instead of `0.0.0.0` as it doesn't have the `navigator.locks` web adapter limitation (https://share.cleanshot.com/nHBnmk6S)
|
|
@@ -80,5 +86,5 @@ export const startDevtoolsServer = ({ schemaPath, clientSessionInfo, port, host,
|
|
|
80
86
|
return HttpServer.serve(handler, HttpMiddleware.logger);
|
|
81
87
|
}).pipe(Effect.withSpan('@livestore/adapter-node:startDevtoolsServer', {
|
|
82
88
|
attributes: { clientSessionInfo, port, host, schemaPath },
|
|
83
|
-
}),
|
|
89
|
+
}), Layer.unwrap, Layer.provide(PlatformNode.NodeHttpServer.layer(() => http.createServer(), { port, host })), Layer.launch, Effect.orDie);
|
|
84
90
|
//# sourceMappingURL=devtools-server.js.map
|