@livestore/adapter-web 0.4.0-dev.2 → 0.4.0-dev.20
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/in-memory/in-memory-adapter.d.ts +15 -5
- package/dist/in-memory/in-memory-adapter.d.ts.map +1 -1
- package/dist/in-memory/in-memory-adapter.js +29 -15
- package/dist/in-memory/in-memory-adapter.js.map +1 -1
- package/dist/web-worker/client-session/client-session-devtools.d.ts +1 -1
- package/dist/web-worker/client-session/client-session-devtools.d.ts.map +1 -1
- package/dist/web-worker/client-session/client-session-devtools.js +14 -3
- package/dist/web-worker/client-session/client-session-devtools.js.map +1 -1
- package/dist/web-worker/client-session/persisted-adapter.d.ts +15 -0
- package/dist/web-worker/client-session/persisted-adapter.d.ts.map +1 -1
- package/dist/web-worker/client-session/persisted-adapter.js +67 -46
- package/dist/web-worker/client-session/persisted-adapter.js.map +1 -1
- package/dist/web-worker/client-session/sqlite-loader.d.ts +2 -0
- package/dist/web-worker/client-session/sqlite-loader.d.ts.map +1 -0
- package/dist/web-worker/client-session/sqlite-loader.js +16 -0
- package/dist/web-worker/client-session/sqlite-loader.js.map +1 -0
- package/dist/web-worker/common/persisted-sqlite.d.ts +23 -7
- package/dist/web-worker/common/persisted-sqlite.d.ts.map +1 -1
- package/dist/web-worker/common/persisted-sqlite.js +114 -76
- package/dist/web-worker/common/persisted-sqlite.js.map +1 -1
- package/dist/web-worker/common/shutdown-channel.d.ts +3 -2
- package/dist/web-worker/common/shutdown-channel.d.ts.map +1 -1
- package/dist/web-worker/common/shutdown-channel.js +2 -2
- package/dist/web-worker/common/shutdown-channel.js.map +1 -1
- package/dist/web-worker/common/worker-disconnect-channel.d.ts +2 -6
- package/dist/web-worker/common/worker-disconnect-channel.d.ts.map +1 -1
- package/dist/web-worker/common/worker-disconnect-channel.js +3 -2
- package/dist/web-worker/common/worker-disconnect-channel.js.map +1 -1
- package/dist/web-worker/common/worker-schema.d.ts +103 -58
- package/dist/web-worker/common/worker-schema.d.ts.map +1 -1
- package/dist/web-worker/common/worker-schema.js +48 -36
- package/dist/web-worker/common/worker-schema.js.map +1 -1
- package/dist/web-worker/leader-worker/make-leader-worker.d.ts +4 -2
- package/dist/web-worker/leader-worker/make-leader-worker.d.ts.map +1 -1
- package/dist/web-worker/leader-worker/make-leader-worker.js +47 -21
- package/dist/web-worker/leader-worker/make-leader-worker.js.map +1 -1
- package/dist/web-worker/shared-worker/make-shared-worker.d.ts +2 -1
- package/dist/web-worker/shared-worker/make-shared-worker.d.ts.map +1 -1
- package/dist/web-worker/shared-worker/make-shared-worker.js +65 -49
- package/dist/web-worker/shared-worker/make-shared-worker.js.map +1 -1
- package/dist/web-worker/vite-dev-polyfill.js +1 -0
- package/dist/web-worker/vite-dev-polyfill.js.map +1 -1
- package/package.json +8 -9
- package/src/in-memory/in-memory-adapter.ts +36 -20
- package/src/web-worker/ambient.d.ts +7 -24
- package/src/web-worker/client-session/client-session-devtools.ts +18 -3
- package/src/web-worker/client-session/persisted-adapter.ts +112 -59
- package/src/web-worker/client-session/sqlite-loader.ts +19 -0
- package/src/web-worker/common/persisted-sqlite.ts +219 -113
- package/src/web-worker/common/shutdown-channel.ts +10 -3
- package/src/web-worker/common/worker-disconnect-channel.ts +10 -3
- package/src/web-worker/common/worker-schema.ts +62 -35
- package/src/web-worker/leader-worker/make-leader-worker.ts +58 -33
- package/src/web-worker/shared-worker/make-shared-worker.ts +95 -75
- package/src/web-worker/vite-dev-polyfill.ts +1 -0
- package/dist/opfs-utils.d.ts +0 -5
- package/dist/opfs-utils.d.ts.map +0 -1
- package/dist/opfs-utils.js +0 -43
- package/dist/opfs-utils.js.map +0 -1
- package/src/opfs-utils.ts +0 -61
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { Devtools,
|
|
1
|
+
import { Devtools, LogConfig, UnknownError } from '@livestore/common';
|
|
2
2
|
import { configureConnection, Eventlog, LeaderThreadCtx, makeLeaderThreadLayer } from '@livestore/common/leader-thread';
|
|
3
3
|
import { LiveStoreEvent } from '@livestore/common/schema';
|
|
4
4
|
import * as WebmeshWorker from '@livestore/devtools-web-common/worker';
|
|
5
5
|
import { sqliteDbFactory } from '@livestore/sqlite-wasm/browser';
|
|
6
6
|
import { loadSqlite3Wasm } from '@livestore/sqlite-wasm/load-wasm';
|
|
7
7
|
import { isDevEnv, LS_DEV } from '@livestore/utils';
|
|
8
|
-
import {
|
|
9
|
-
import
|
|
10
|
-
import { getStateDbFileName, sanitizeOpfsDir } from "../common/persisted-sqlite.js";
|
|
8
|
+
import { Effect, FetchHttpClient, identity, Layer, OtelTracer, Scheduler, Stream, TaskTracing, WorkerRunner, } from '@livestore/utils/effect';
|
|
9
|
+
import { BrowserWorkerRunner, Opfs } from '@livestore/utils/effect/browser';
|
|
10
|
+
import { cleanupOldStateDbFiles, getStateDbFileName, sanitizeOpfsDir } from "../common/persisted-sqlite.js";
|
|
11
11
|
import { makeShutdownChannel } from "../common/shutdown-channel.js";
|
|
12
12
|
import * as WorkerSchema from "../common/worker-schema.js";
|
|
13
13
|
if (isDevEnv()) {
|
|
14
14
|
globalThis.__debugLiveStoreUtils = {
|
|
15
|
-
opfs:
|
|
15
|
+
opfs: Opfs.debugUtils,
|
|
16
16
|
blobUrl: (buffer) => URL.createObjectURL(new Blob([buffer], { type: 'application/octet-stream' })),
|
|
17
17
|
runSync: (effect) => Effect.runSync(effect),
|
|
18
18
|
runFork: (effect) => Effect.runFork(effect),
|
|
@@ -25,29 +25,33 @@ export const makeWorkerEffect = (options) => {
|
|
|
25
25
|
const TracingLive = options.otelOptions?.tracer
|
|
26
26
|
? Layer.unwrapEffect(Effect.map(OtelTracer.make, Layer.setTracer)).pipe(Layer.provideMerge(Layer.succeed(OtelTracer.OtelTracer, options.otelOptions.tracer)))
|
|
27
27
|
: undefined;
|
|
28
|
-
|
|
28
|
+
const runtimeLayer = Layer.mergeAll(FetchHttpClient.layer, TracingLive ?? Layer.empty);
|
|
29
|
+
return makeWorkerRunnerOuter(options).pipe(Layer.provide(BrowserWorkerRunner.layer), WorkerRunner.launch, Effect.scoped, Effect.tapCauseLogPretty, Effect.annotateLogs({ thread: self.name }), Effect.provide(runtimeLayer), LS_DEV ? TaskTracing.withAsyncTaggingTracing((name) => console.createTask(name)) : identity,
|
|
29
30
|
// We're using this custom scheduler to improve op batching behaviour and reduce the overhead
|
|
30
31
|
// of the Effect fiber runtime given we have different tradeoffs on a worker thread.
|
|
31
32
|
// Despite the "message channel" name, is has nothing to do with the `incomingRequestsPort` above.
|
|
32
33
|
Effect.withScheduler(Scheduler.messageChannel()),
|
|
33
34
|
// We're increasing the Effect ops limit here to allow for larger chunks of operations at a time
|
|
34
|
-
Effect.withMaxOpsBeforeYield(4096),
|
|
35
|
+
Effect.withMaxOpsBeforeYield(4096), LogConfig.withLoggerConfig({ logger: options.logger, logLevel: options.logLevel }, { threadName: self.name }));
|
|
35
36
|
};
|
|
36
37
|
const makeWorkerRunnerOuter = (workerOptions) => WorkerRunner.layerSerialized(WorkerSchema.LeaderWorkerOuterInitialMessage, {
|
|
37
38
|
// Port coming from client session and forwarded via the shared worker
|
|
38
39
|
InitialMessage: ({ port: incomingRequestsPort, storeId, clientId }) => Effect.gen(function* () {
|
|
39
|
-
yield* makeWorkerRunnerInner(workerOptions).pipe(Layer.provide(BrowserWorkerRunner.layerMessagePort(incomingRequestsPort)), WorkerRunner.launch, Effect.scoped, Effect.withSpan('@livestore/adapter-web:worker:wrapper:InitialMessage:innerFiber'), Effect.tapCauseLogPretty, Effect.provide(WebmeshWorker.CacheService.layer({
|
|
40
|
+
yield* makeWorkerRunnerInner(workerOptions).pipe(Layer.provide(BrowserWorkerRunner.layerMessagePort(incomingRequestsPort)), WorkerRunner.launch, Effect.scoped, Effect.withSpan('@livestore/adapter-web:worker:wrapper:InitialMessage:innerFiber'), Effect.tapCauseLogPretty, Effect.provide(Layer.mergeAll(Opfs.Opfs.Default, WebmeshWorker.CacheService.layer({
|
|
41
|
+
nodeName: Devtools.makeNodeName.client.leader({ storeId, clientId }),
|
|
42
|
+
}))), Effect.forkScoped);
|
|
40
43
|
return Layer.empty;
|
|
41
44
|
}).pipe(Effect.withSpan('@livestore/adapter-web:worker:wrapper:InitialMessage'), Layer.unwrapScoped),
|
|
42
45
|
});
|
|
43
|
-
const makeWorkerRunnerInner = ({ schema, sync: syncOptions }) => WorkerRunner.layerSerialized(WorkerSchema.LeaderWorkerInnerRequest, {
|
|
44
|
-
InitialMessage: ({ storageOptions, storeId, clientId, devtoolsEnabled, debugInstanceId,
|
|
46
|
+
const makeWorkerRunnerInner = ({ schema, sync: syncOptions, syncPayloadSchema }) => WorkerRunner.layerSerialized(WorkerSchema.LeaderWorkerInnerRequest, {
|
|
47
|
+
InitialMessage: ({ storageOptions, storeId, clientId, devtoolsEnabled, debugInstanceId, syncPayloadEncoded }) => Effect.gen(function* () {
|
|
45
48
|
const sqlite3 = yield* Effect.promise(() => loadSqlite3Wasm());
|
|
46
49
|
const makeSqliteDb = sqliteDbFactory({ sqlite3 });
|
|
50
|
+
const opfsDirectory = yield* sanitizeOpfsDir(storageOptions.directory, storeId);
|
|
47
51
|
const runtime = yield* Effect.runtime();
|
|
48
52
|
const makeDb = (kind) => makeSqliteDb({
|
|
49
53
|
_tag: 'opfs',
|
|
50
|
-
opfsDirectory
|
|
54
|
+
opfsDirectory,
|
|
51
55
|
fileName: kind === 'state' ? getStateDbFileName(schema) : 'eventlog.db',
|
|
52
56
|
configureDb: (db) => configureConnection(db, {
|
|
53
57
|
// The persisted databases use the AccessHandlePoolVFS which always uses a single database connection.
|
|
@@ -62,6 +66,15 @@ const makeWorkerRunnerInner = ({ schema, sync: syncOptions }) => WorkerRunner.la
|
|
|
62
66
|
const [dbState, dbEventlog] = yield* Effect.all([makeDb('state'), makeDb('eventlog')], {
|
|
63
67
|
concurrency: 2,
|
|
64
68
|
});
|
|
69
|
+
// Clean up old state database files after successful database creation
|
|
70
|
+
// This prevents OPFS file pool capacity exhaustion from accumulated state db files after schema changes/migrations
|
|
71
|
+
if (dbState.metadata._tag === 'opfs') {
|
|
72
|
+
yield* cleanupOldStateDbFiles({
|
|
73
|
+
vfs: dbState.metadata.vfs,
|
|
74
|
+
currentSchema: schema,
|
|
75
|
+
opfsDirectory: dbState.metadata.persistenceInfo.opfsDirectory,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
65
78
|
const devtoolsOptions = yield* makeDevtoolsOptions({ devtoolsEnabled, dbState, dbEventlog });
|
|
66
79
|
const shutdownChannel = yield* makeShutdownChannel(storeId);
|
|
67
80
|
return makeLeaderThreadLayer({
|
|
@@ -74,9 +87,10 @@ const makeWorkerRunnerInner = ({ schema, sync: syncOptions }) => WorkerRunner.la
|
|
|
74
87
|
dbEventlog,
|
|
75
88
|
devtoolsOptions,
|
|
76
89
|
shutdownChannel,
|
|
77
|
-
|
|
90
|
+
syncPayloadEncoded,
|
|
91
|
+
syncPayloadSchema,
|
|
78
92
|
});
|
|
79
|
-
}).pipe(Effect.tapCauseLogPretty,
|
|
93
|
+
}).pipe(Effect.tapCauseLogPretty, UnknownError.mapToUnknownError, Effect.withPerformanceMeasure('@livestore/adapter-web:worker:InitialMessage'), Effect.withSpan('@livestore/adapter-web:worker:InitialMessage'), Effect.annotateSpans({ debugInstanceId }), Layer.unwrapScoped),
|
|
80
94
|
GetRecreateSnapshot: () => Effect.gen(function* () {
|
|
81
95
|
const workerCtx = yield* LeaderThreadCtx;
|
|
82
96
|
// NOTE we can only return the cached snapshot once as it's transferred (i.e. disposed), so we need to set it to undefined
|
|
@@ -85,32 +99,44 @@ const makeWorkerRunnerInner = ({ schema, sync: syncOptions }) => WorkerRunner.la
|
|
|
85
99
|
// return cachedSnapshot ?? workerCtx.db.export()
|
|
86
100
|
const snapshot = workerCtx.dbState.export();
|
|
87
101
|
return { snapshot, migrationsReport: workerCtx.initialState.migrationsReport };
|
|
88
|
-
}).pipe(
|
|
102
|
+
}).pipe(UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-web:worker:GetRecreateSnapshot')),
|
|
89
103
|
PullStream: ({ cursor }) => Effect.gen(function* () {
|
|
90
104
|
const { syncProcessor } = yield* LeaderThreadCtx;
|
|
91
105
|
return syncProcessor.pull({ cursor });
|
|
92
106
|
}).pipe(Stream.unwrapScoped),
|
|
93
|
-
PushToLeader: ({ batch }) => Effect.andThen(LeaderThreadCtx, ({ syncProcessor }) => syncProcessor.push(batch.map((event) => new LiveStoreEvent.EncodedWithMeta(event)),
|
|
107
|
+
PushToLeader: ({ batch }) => Effect.andThen(LeaderThreadCtx, ({ syncProcessor }) => syncProcessor.push(batch.map((event) => new LiveStoreEvent.Client.EncodedWithMeta(event)),
|
|
94
108
|
// We'll wait in order to keep back pressure on the client session
|
|
95
109
|
{ waitForProcessing: true })).pipe(Effect.uninterruptible, Effect.withSpan('@livestore/adapter-web:worker:PushToLeader')),
|
|
96
|
-
Export: () => Effect.andThen(LeaderThreadCtx, (_) => _.dbState.export()).pipe(
|
|
97
|
-
ExportEventlog: () => Effect.andThen(LeaderThreadCtx, (_) => _.dbEventlog.export()).pipe(
|
|
110
|
+
Export: () => Effect.andThen(LeaderThreadCtx, (_) => _.dbState.export()).pipe(UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-web:worker:Export')),
|
|
111
|
+
ExportEventlog: () => Effect.andThen(LeaderThreadCtx, (_) => _.dbEventlog.export()).pipe(UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-web:worker:ExportEventlog')),
|
|
98
112
|
BootStatusStream: () => Effect.andThen(LeaderThreadCtx, (_) => Stream.fromQueue(_.bootStatusQueue)).pipe(Stream.unwrap),
|
|
99
113
|
GetLeaderHead: () => Effect.gen(function* () {
|
|
100
114
|
const workerCtx = yield* LeaderThreadCtx;
|
|
101
115
|
return Eventlog.getClientHeadFromDb(workerCtx.dbEventlog);
|
|
102
|
-
}).pipe(
|
|
116
|
+
}).pipe(UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-web:worker:GetLeaderHead')),
|
|
103
117
|
GetLeaderSyncState: () => Effect.gen(function* () {
|
|
104
118
|
const workerCtx = yield* LeaderThreadCtx;
|
|
105
119
|
return yield* workerCtx.syncProcessor.syncState;
|
|
106
|
-
}).pipe(
|
|
120
|
+
}).pipe(UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-web:worker:GetLeaderSyncState')),
|
|
121
|
+
SyncStateStream: () => Effect.gen(function* () {
|
|
122
|
+
const workerCtx = yield* LeaderThreadCtx;
|
|
123
|
+
return workerCtx.syncProcessor.syncState.changes;
|
|
124
|
+
}).pipe(Stream.unwrapScoped),
|
|
125
|
+
GetNetworkStatus: () => Effect.gen(function* () {
|
|
126
|
+
const workerCtx = yield* LeaderThreadCtx;
|
|
127
|
+
return yield* workerCtx.networkStatus;
|
|
128
|
+
}).pipe(UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-web:worker:GetNetworkStatus')),
|
|
129
|
+
NetworkStatusStream: () => Effect.gen(function* () {
|
|
130
|
+
const workerCtx = yield* LeaderThreadCtx;
|
|
131
|
+
return workerCtx.networkStatus.changes;
|
|
132
|
+
}).pipe(Stream.unwrapScoped),
|
|
107
133
|
Shutdown: () => Effect.gen(function* () {
|
|
108
134
|
yield* Effect.logDebug('[@livestore/adapter-web:worker] Shutdown');
|
|
109
135
|
// Buy some time for Otel to flush
|
|
110
136
|
// TODO find a cleaner way to do this
|
|
111
137
|
yield* Effect.sleep(300);
|
|
112
|
-
}).pipe(
|
|
113
|
-
ExtraDevtoolsMessage: ({ message }) => Effect.andThen(LeaderThreadCtx, (_) => _.extraIncomingMessagesQueue.offer(message)).pipe(
|
|
138
|
+
}).pipe(UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-web:worker:Shutdown')),
|
|
139
|
+
ExtraDevtoolsMessage: ({ message }) => Effect.andThen(LeaderThreadCtx, (_) => _.extraIncomingMessagesQueue.offer(message)).pipe(UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-web:worker:ExtraDevtoolsMessage')),
|
|
114
140
|
'DevtoolsWebCommon.CreateConnection': WebmeshWorker.CreateConnection,
|
|
115
141
|
});
|
|
116
142
|
const makeDevtoolsOptions = ({ devtoolsEnabled, dbState, dbEventlog, }) => Effect.gen(function* () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-leader-worker.js","sourceRoot":"","sources":["../../../src/web-worker/leader-worker/make-leader-worker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"make-leader-worker.js","sourceRoot":"","sources":["../../../src/web-worker/leader-worker/make-leader-worker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAEvH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,aAAa,MAAM,uCAAuC,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,EACL,MAAM,EACN,eAAe,EACf,QAAQ,EACR,KAAK,EACL,UAAU,EACV,SAAS,EAET,MAAM,EACN,WAAW,EACX,YAAY,GACb,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAA;AAG3E,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC3G,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,YAAY,MAAM,4BAA4B,CAAA;AAW1D,IAAI,QAAQ,EAAE,EAAE,CAAC;IACf,UAAU,CAAC,qBAAqB,GAAG;QACjC,IAAI,EAAE,IAAI,CAAC,UAAU;QACrB,OAAO,EAAE,CAAC,MAA+B,EAAE,EAAE,CAC3C,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAC/E,OAAO,EAAE,CAAC,MAAsC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3E,OAAO,EAAE,CAAC,MAAsC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;KAC5E,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAsB,EAAE,EAAE;IACnD,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,EAAE;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,MAAM;QAC7C,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACnE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CACrF;QACH,CAAC,CAAC,SAAS,CAAA;IAEb,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,CAAA;IAEtF,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,CACxC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,EACxC,YAAY,CAAC,MAAM,EACnB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAC1C,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAC5B,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAE,OAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;IACpG,6FAA6F;IAC7F,oFAAoF;IACpF,kGAAkG;IAClG,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;IAChD,gGAAgG;IAChG,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAClC,SAAS,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAC9G,CAAA;AACH,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,CAC5B,aAA4B,EACsE,EAAE,CACpG,YAAY,CAAC,eAAe,CAAC,YAAY,CAAC,+BAA+B,EAAE;IACzE,sEAAsE;IACtE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CACpE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,IAAI,CAC9C,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,EACzE,YAAY,CAAC,MAAM,EACnB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,CAAC,iEAAiE,CAAC,EAClF,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,OAAO,CACZ,KAAK,CAAC,QAAQ,CACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EACjB,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC;YAC/B,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;SACrE,CAAC,CACH,CACF,EACD,MAAM,CAAC,UAAU,CAClB,CAAA;QAED,OAAO,KAAK,CAAC,KAAK,CAAA;IACpB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,sDAAsD,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;CACvG,CAAC,CAAA;AAEJ,MAAM,qBAAqB,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAiB,EAAE,EAAE,CAChG,YAAY,CAAC,eAAe,CAAC,YAAY,CAAC,wBAAwB,EAAE;IAClE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAC9G,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAA;QAC9D,MAAM,YAAY,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;QACjD,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAC/E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAS,CAAA;QAE9C,MAAM,MAAM,GAAG,CAAC,IAA0B,EAAE,EAAE,CAC5C,YAAY,CAAC;YACX,IAAI,EAAE,MAAM;YACZ,aAAa;YACb,QAAQ,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa;YACvE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAClB,mBAAmB,CAAC,EAAE,EAAE;gBACtB,uGAAuG;gBACvG,oGAAoG;gBACpG,+GAA+G;gBAC/G,wEAAwE;gBACxE,4BAA4B;gBAC5B,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;SACnD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAEhG,oEAAoE;QACpE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE;YACrF,WAAW,EAAE,CAAC;SACf,CAAC,CAAA;QAEF,uEAAuE;QACvE,mHAAmH;QACnH,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACrC,KAAK,CAAC,CAAC,sBAAsB,CAAC;gBAC5B,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG;gBACzB,aAAa,EAAE,MAAM;gBACrB,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa;aAC9D,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAA;QAC5F,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QAE3D,OAAO,qBAAqB,CAAC;YAC3B,MAAM;YACN,OAAO;YACP,QAAQ;YACR,YAAY;YACZ,WAAW;YACX,OAAO;YACP,UAAU;YACV,eAAe;YACf,eAAe;YACf,kBAAkB;YAClB,iBAAiB;SAClB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,iBAAiB,EACxB,YAAY,CAAC,iBAAiB,EAC9B,MAAM,CAAC,sBAAsB,CAAC,8CAA8C,CAAC,EAC7E,MAAM,CAAC,QAAQ,CAAC,8CAA8C,CAAC,EAC/D,MAAM,CAAC,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC,EACzC,KAAK,CAAC,YAAY,CACnB;IACH,mBAAmB,EAAE,GAAG,EAAE,CACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;QAExC,0HAA0H;QAC1H,yBAAyB;QACzB,iGAAiG;QAEjG,iDAAiD;QAEjD,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;QAC3C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAA;IAChF,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,mDAAmD,CAAC,CAAC;IAC/G,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;QAChD,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IACvC,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,YAAY,CAGpB;IACH,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAC1B,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CACpD,aAAa,CAAC,IAAI,CAChB,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACtE,kEAAkE;IAClE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC5B,CACF,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CAAC;IAC/F,MAAM,EAAE,GAAG,EAAE,CACX,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC7D,YAAY,CAAC,iBAAiB,EAC9B,MAAM,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CACxD;IACH,cAAc,EAAE,GAAG,EAAE,CACnB,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAChE,YAAY,CAAC,iBAAiB,EAC9B,MAAM,CAAC,QAAQ,CAAC,8CAA8C,CAAC,CAChE;IACH,gBAAgB,EAAE,GAAG,EAAE,CACrB,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACjG,aAAa,EAAE,GAAG,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;QACxC,OAAO,QAAQ,CAAC,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,6CAA6C,CAAC,CAAC;IACzG,kBAAkB,EAAE,GAAG,EAAE,CACvB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;QACxC,OAAO,KAAK,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAA;IACjD,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,kDAAkD,CAAC,CAAC;IAC9G,eAAe,EAAE,GAAG,EAAE,CACpB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;QACxC,OAAO,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAA;IAClD,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;IAC9B,gBAAgB,EAAE,GAAG,EAAE,CACrB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;QACxC,OAAO,KAAK,CAAC,CAAC,SAAS,CAAC,aAAa,CAAA;IACvC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,gDAAgD,CAAC,CAAC;IAC5G,mBAAmB,EAAE,GAAG,EAAE,CACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;QACxC,OAAO,SAAS,CAAC,aAAa,CAAC,OAAO,CAAA;IACxC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;IAC9B,QAAQ,EAAE,GAAG,EAAE,CACb,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAA;QAElE,kCAAkC;QAClC,qCAAqC;QACrC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC;IACpG,oBAAoB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACpC,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,0BAA0B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACtF,YAAY,CAAC,iBAAiB,EAC9B,MAAM,CAAC,QAAQ,CAAC,oDAAoD,CAAC,CACtE;IACH,oCAAoC,EAAE,aAAa,CAAC,gBAAgB;CACrE,CAAC,CAAA;AAEJ,MAAM,mBAAmB,GAAG,CAAC,EAC3B,eAAe,EACf,OAAO,EACP,UAAU,GAKX,EAA0F,EAAE,CAC3F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,eAAe,KAAK,KAAK,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,YAAY,CAAA;IAElD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACxB,MAAM,eAAe,GAAG;gBACtB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe;gBACvC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe;aAC9C,CAAA;YAED,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;QAClD,CAAC,CAAC;KACH,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-shared-worker.d.ts","sourceRoot":"","sources":["../../../src/web-worker/shared-worker/make-shared-worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"make-shared-worker.d.ts","sourceRoot":"","sources":["../../../src/web-worker/shared-worker/make-shared-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAkC,MAAM,mBAAmB,CAAA;AAsQvF,eAAO,MAAM,UAAU,GAAI,UAAU,SAAS,CAAC,iBAAiB,KAAG,IAoBlE,CAAA"}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import { Devtools,
|
|
1
|
+
import { Devtools, LogConfig, liveStoreVersion, UnknownError } from '@livestore/common';
|
|
2
2
|
import * as DevtoolsWeb from '@livestore/devtools-web-common/web-channel';
|
|
3
3
|
import * as WebmeshWorker from '@livestore/devtools-web-common/worker';
|
|
4
4
|
import { isDevEnv, isNotUndefined, LS_DEV } from '@livestore/utils';
|
|
5
|
-
import {
|
|
5
|
+
import { Deferred, Effect, Exit, FetchHttpClient, identity, Layer, ParseResult, Ref, Schema, Scope, Stream, SubscriptionRef, TaskTracing, Worker, WorkerError, WorkerRunner, } from '@livestore/utils/effect';
|
|
6
|
+
import { BrowserWorker, BrowserWorkerRunner } from '@livestore/utils/effect/browser';
|
|
6
7
|
import { makeShutdownChannel } from "../common/shutdown-channel.js";
|
|
7
8
|
import * as WorkerSchema from "../common/worker-schema.js";
|
|
9
|
+
// Extract from `livestore-shared-worker-${storeId}`
|
|
10
|
+
const storeId = self.name.replace('livestore-shared-worker-', '');
|
|
11
|
+
// We acquire a lock that is held as long as this shared worker is alive.
|
|
12
|
+
// This way, when the shared worker is terminated (e.g. by the browser when the page is closed),
|
|
13
|
+
// the lock is released and any thread waiting for the lock can be notified.
|
|
14
|
+
const LIVESTORE_SHARED_WORKER_TERMINATION_LOCK = `livestore-shared-worker-termination-lock-${storeId}`;
|
|
15
|
+
navigator.locks.request(LIVESTORE_SHARED_WORKER_TERMINATION_LOCK, { steal: true },
|
|
16
|
+
// We use a never-resolving promise to hold the lock
|
|
17
|
+
async () => new Promise(() => { }));
|
|
8
18
|
if (isDevEnv()) {
|
|
9
19
|
globalThis.__debugLiveStoreUtils = {
|
|
10
20
|
blobUrl: (buffer) => URL.createObjectURL(new Blob([buffer], { type: 'application/octet-stream' })),
|
|
@@ -14,9 +24,10 @@ if (isDevEnv()) {
|
|
|
14
24
|
}
|
|
15
25
|
const makeWorkerRunner = Effect.gen(function* () {
|
|
16
26
|
const leaderWorkerContextSubRef = yield* SubscriptionRef.make(undefined);
|
|
17
|
-
const initialMessagePayloadDeferredRef = yield* Deferred.make().pipe(Effect.andThen(Ref.make));
|
|
18
27
|
const waitForWorker = SubscriptionRef.waitUntil(leaderWorkerContextSubRef, isNotUndefined).pipe(Effect.map((_) => _.worker));
|
|
19
|
-
const forwardRequest = (req) =>
|
|
28
|
+
const forwardRequest = (req) =>
|
|
29
|
+
// Forward the request to the active worker and normalize platform errors into UnknownError.
|
|
30
|
+
waitForWorker.pipe(
|
|
20
31
|
// Effect.logBefore(`forwardRequest: ${req._tag}`),
|
|
21
32
|
Effect.andThen((worker) => worker.executeEffect(req)),
|
|
22
33
|
// Effect.tap((_) => Effect.log(`forwardRequest: ${req._tag}`, _)),
|
|
@@ -24,11 +35,11 @@ const makeWorkerRunner = Effect.gen(function* () {
|
|
|
24
35
|
Effect.interruptible, Effect.logWarnIfTakesLongerThan({
|
|
25
36
|
label: `@livestore/adapter-web:shared-worker:forwardRequest:${req._tag}`,
|
|
26
37
|
duration: 500,
|
|
27
|
-
}), Effect.mapError((cause) => Schema.is(
|
|
38
|
+
}), Effect.mapError((cause) => Schema.is(UnknownError)(cause)
|
|
28
39
|
? cause
|
|
29
40
|
: ParseResult.isParseError(cause) || Schema.is(WorkerError.WorkerError)(cause)
|
|
30
|
-
? new
|
|
31
|
-
: cause), Effect.catchAllDefect((cause) => new
|
|
41
|
+
? new UnknownError({ cause })
|
|
42
|
+
: cause), Effect.catchAllDefect((cause) => new UnknownError({ cause })), Effect.tapCauseLogPretty);
|
|
32
43
|
const forwardRequestStream = (req) => Effect.gen(function* () {
|
|
33
44
|
yield* Effect.logDebug(`forwardRequestStream: ${req._tag}`);
|
|
34
45
|
const { worker, scope } = yield* SubscriptionRef.waitUntil(leaderWorkerContextSubRef, isNotUndefined);
|
|
@@ -43,7 +54,7 @@ const makeWorkerRunner = Effect.gen(function* () {
|
|
|
43
54
|
return Stream.empty;
|
|
44
55
|
}).pipe(Stream.unwrap);
|
|
45
56
|
return Stream.merge(stream, scopeShutdownStream, { haltStrategy: 'either' });
|
|
46
|
-
}).pipe(Effect.interruptible,
|
|
57
|
+
}).pipe(Effect.interruptible, UnknownError.mapToUnknownError, Effect.tapCauseLogPretty, Stream.unwrap, Stream.ensuring(Effect.logDebug(`shutting down stream for ${req._tag}`)), UnknownError.mapToUnknownErrorStream);
|
|
47
58
|
const resetCurrentWorkerCtx = Effect.gen(function* () {
|
|
48
59
|
const prevWorker = yield* SubscriptionRef.get(leaderWorkerContextSubRef);
|
|
49
60
|
if (prevWorker !== undefined) {
|
|
@@ -56,59 +67,62 @@ const makeWorkerRunner = Effect.gen(function* () {
|
|
|
56
67
|
}));
|
|
57
68
|
}
|
|
58
69
|
}).pipe(Effect.withSpan('@livestore/adapter-web:shared-worker:resetCurrentWorkerCtx'));
|
|
59
|
-
// const devtoolsWebBridge = yield* makeDevtoolsWebBridge
|
|
60
70
|
const reset = Effect.gen(function* () {
|
|
61
71
|
yield* Effect.logDebug('reset');
|
|
62
|
-
|
|
63
|
-
yield* Ref.set(
|
|
72
|
+
// Clear cached invariants so a fresh configuration can be accepted after shutdown
|
|
73
|
+
yield* Ref.set(invariantsRef, undefined);
|
|
74
|
+
// Tear down current leader worker context
|
|
64
75
|
yield* resetCurrentWorkerCtx;
|
|
65
|
-
// yield* devtoolsWebBridge.reset
|
|
66
76
|
});
|
|
77
|
+
// Cache first-applied invariants to enforce stability across leader transitions
|
|
78
|
+
const InvariantsSchema = Schema.Struct({
|
|
79
|
+
storeId: Schema.String,
|
|
80
|
+
storageOptions: WorkerSchema.StorageType,
|
|
81
|
+
syncPayloadEncoded: Schema.UndefinedOr(Schema.JsonValue),
|
|
82
|
+
liveStoreVersion: Schema.Literal(liveStoreVersion),
|
|
83
|
+
devtoolsEnabled: Schema.Boolean,
|
|
84
|
+
});
|
|
85
|
+
const invariantsRef = yield* Ref.make(undefined);
|
|
86
|
+
const sameInvariants = Schema.equivalence(InvariantsSchema);
|
|
67
87
|
return WorkerRunner.layerSerialized(WorkerSchema.SharedWorkerRequest, {
|
|
68
|
-
InitialMessage: (message) => Effect.gen(function* () {
|
|
69
|
-
if (message.payload._tag === 'FromWebBridge')
|
|
70
|
-
return;
|
|
71
|
-
const initialMessagePayloadDeferred = yield* Ref.get(initialMessagePayloadDeferredRef);
|
|
72
|
-
const deferredAlreadyDone = yield* Deferred.isDone(initialMessagePayloadDeferred);
|
|
73
|
-
const initialMessage = message.payload.initialMessage;
|
|
74
|
-
if (deferredAlreadyDone) {
|
|
75
|
-
const previousInitialMessage = yield* Deferred.await(initialMessagePayloadDeferred);
|
|
76
|
-
const messageSchema = WorkerSchema.LeaderWorkerInnerInitialMessage.pipe(Schema.omit('devtoolsEnabled', 'debugInstanceId'));
|
|
77
|
-
const isEqual = Schema.equivalence(messageSchema);
|
|
78
|
-
if (isEqual(initialMessage, previousInitialMessage.initialMessage) === false) {
|
|
79
|
-
const diff = Schema.debugDiff(messageSchema)(previousInitialMessage.initialMessage, initialMessage);
|
|
80
|
-
return yield* new UnexpectedError({
|
|
81
|
-
cause: 'Initial message already sent and was different now',
|
|
82
|
-
payload: {
|
|
83
|
-
diff,
|
|
84
|
-
previousInitialMessage: previousInitialMessage.initialMessage,
|
|
85
|
-
newInitialMessage: initialMessage,
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
yield* Deferred.succeed(initialMessagePayloadDeferred, message.payload);
|
|
92
|
-
}
|
|
93
|
-
}),
|
|
94
88
|
// Whenever the client session leader changes (and thus creates a new leader thread), the new client session leader
|
|
95
89
|
// sends a new MessagePort to the shared worker which proxies messages to the new leader thread.
|
|
96
|
-
UpdateMessagePort: ({ port }) => Effect.gen(function* () {
|
|
97
|
-
|
|
90
|
+
UpdateMessagePort: ({ port, initial, liveStoreVersion: clientLiveStoreVersion }) => Effect.gen(function* () {
|
|
91
|
+
// Enforce invariants: storeId, storageOptions, syncPayloadEncoded, liveStoreVersion must remain stable
|
|
92
|
+
const invariants = {
|
|
93
|
+
storeId: initial.storeId,
|
|
94
|
+
storageOptions: initial.storageOptions,
|
|
95
|
+
syncPayloadEncoded: initial.syncPayloadEncoded,
|
|
96
|
+
liveStoreVersion: clientLiveStoreVersion,
|
|
97
|
+
devtoolsEnabled: initial.devtoolsEnabled,
|
|
98
|
+
};
|
|
99
|
+
const prev = yield* Ref.get(invariantsRef);
|
|
100
|
+
// Early return on mismatch to keep happy path linear
|
|
101
|
+
if (prev !== undefined && !sameInvariants(prev, invariants)) {
|
|
102
|
+
const diff = Schema.debugDiff(InvariantsSchema)(prev, invariants);
|
|
103
|
+
return yield* new UnknownError({
|
|
104
|
+
cause: 'Store invariants changed across leader transitions',
|
|
105
|
+
payload: { diff, previous: prev, next: invariants },
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// First writer records invariants
|
|
109
|
+
if (prev === undefined) {
|
|
110
|
+
yield* Ref.set(invariantsRef, invariants);
|
|
111
|
+
}
|
|
98
112
|
yield* resetCurrentWorkerCtx;
|
|
99
113
|
const scope = yield* Scope.make();
|
|
100
114
|
yield* Effect.gen(function* () {
|
|
101
|
-
const shutdownChannel = yield* makeShutdownChannel(
|
|
115
|
+
const shutdownChannel = yield* makeShutdownChannel(initial.storeId);
|
|
102
116
|
yield* shutdownChannel.listen.pipe(Stream.flatten(), Stream.tap(() => reset), Stream.runDrain, Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
103
117
|
const workerLayer = yield* Layer.build(BrowserWorker.layer(() => port));
|
|
104
118
|
const worker = yield* Worker.makePoolSerialized({
|
|
105
119
|
size: 1,
|
|
106
120
|
concurrency: 100,
|
|
107
|
-
initialMessage: () =>
|
|
121
|
+
initialMessage: () => initial,
|
|
108
122
|
}).pipe(Effect.provide(workerLayer), Effect.withSpan('@livestore/adapter-web:shared-worker:makeWorkerProxyFromPort'));
|
|
109
123
|
// Prepare the web mesh connection for leader worker to be able to connect to the devtools
|
|
110
124
|
const { node } = yield* WebmeshWorker.CacheService;
|
|
111
|
-
const { storeId, clientId } =
|
|
125
|
+
const { storeId, clientId } = initial;
|
|
112
126
|
yield* DevtoolsWeb.connectViaWorker({
|
|
113
127
|
node,
|
|
114
128
|
worker,
|
|
@@ -116,7 +130,7 @@ const makeWorkerRunner = Effect.gen(function* () {
|
|
|
116
130
|
}).pipe(Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
117
131
|
yield* SubscriptionRef.set(leaderWorkerContextSubRef, { worker, scope });
|
|
118
132
|
}).pipe(Effect.tapCauseLogPretty, Scope.extend(scope), Effect.forkIn(scope));
|
|
119
|
-
}).pipe(Effect.withSpan('@livestore/adapter-web:shared-worker:updateMessagePort'),
|
|
133
|
+
}).pipe(Effect.withSpan('@livestore/adapter-web:shared-worker:updateMessagePort'), UnknownError.mapToUnknownError, Effect.tapCauseLogPretty),
|
|
120
134
|
// Proxied requests
|
|
121
135
|
BootStatusStream: forwardRequestStream,
|
|
122
136
|
PushToLeader: forwardRequest,
|
|
@@ -126,21 +140,23 @@ const makeWorkerRunner = Effect.gen(function* () {
|
|
|
126
140
|
ExportEventlog: forwardRequest,
|
|
127
141
|
Setup: forwardRequest,
|
|
128
142
|
GetLeaderSyncState: forwardRequest,
|
|
143
|
+
SyncStateStream: forwardRequestStream,
|
|
129
144
|
GetLeaderHead: forwardRequest,
|
|
145
|
+
GetNetworkStatus: forwardRequest,
|
|
146
|
+
NetworkStatusStream: forwardRequestStream,
|
|
130
147
|
Shutdown: forwardRequest,
|
|
131
148
|
ExtraDevtoolsMessage: forwardRequest,
|
|
132
149
|
// Accept devtools connections (from leader and client sessions)
|
|
133
150
|
'DevtoolsWebCommon.CreateConnection': WebmeshWorker.CreateConnection,
|
|
134
151
|
});
|
|
135
152
|
}).pipe(Layer.unwrapScoped);
|
|
136
|
-
export const makeWorker = () => {
|
|
137
|
-
|
|
138
|
-
const storeId = self.name.replace('livestore-shared-worker-', '');
|
|
153
|
+
export const makeWorker = (options) => {
|
|
154
|
+
const runtimeLayer = Layer.mergeAll(FetchHttpClient.layer, WebmeshWorker.CacheService.layer({ nodeName: DevtoolsWeb.makeNodeName.sharedWorker({ storeId }) }));
|
|
139
155
|
makeWorkerRunner.pipe(Layer.provide(BrowserWorkerRunner.layer),
|
|
140
156
|
// WorkerRunner.launch,
|
|
141
|
-
Layer.launch, Effect.scoped, Effect.tapCauseLogPretty, Effect.annotateLogs({ thread: self.name }), Effect.provide(
|
|
157
|
+
Layer.launch, Effect.scoped, Effect.tapCauseLogPretty, Effect.annotateLogs({ thread: self.name }), Effect.provide(runtimeLayer), LS_DEV ? TaskTracing.withAsyncTaggingTracing((name) => console.createTask(name)) : identity,
|
|
142
158
|
// TODO remove type-cast (currently needed to silence a tsc bug)
|
|
143
|
-
(_) => _,
|
|
159
|
+
(_) => _, LogConfig.withLoggerConfig(options, { threadName: self.name }), Effect.runFork);
|
|
144
160
|
};
|
|
145
161
|
makeWorker();
|
|
146
162
|
//# sourceMappingURL=make-shared-worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-shared-worker.js","sourceRoot":"","sources":["../../../src/web-worker/shared-worker/make-shared-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"make-shared-worker.js","sourceRoot":"","sources":["../../../src/web-worker/shared-worker/make-shared-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
globalThis.$RefreshReg$ = () => { };
|
|
4
4
|
// @ts-expect-error TODO remove when Vite does proper treeshaking during dev
|
|
5
5
|
globalThis.$RefreshSig$ = () => (type) => type;
|
|
6
|
+
// biome-ignore lint/suspicious/noTsIgnore: sometimes @types/node is there, sometimes not.
|
|
6
7
|
// @ts-ignore
|
|
7
8
|
globalThis.process = globalThis.process ?? { env: {} };
|
|
8
9
|
globalThis.document = globalThis?.document ?? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-dev-polyfill.js","sourceRoot":"","sources":["../../src/web-worker/vite-dev-polyfill.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,4EAA4E;AAC5E,UAAU,CAAC,YAAY,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAClC,4EAA4E;AAC5E,UAAU,CAAC,YAAY,GAAG,GAAG,EAAE,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAA;AAEnD,aAAa;AACb,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAA;AAEtD,UAAU,CAAC,QAAQ,GAAI,UAAkB,EAAE,QAAQ,IAAI;IACrD,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE;IAC1B,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QACpB,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC;QACtB,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;KACV,CAAC;IACF,IAAI,EAAE;QACJ,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;KAC3B;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;KACtB;CACF,CAAA;AAED,UAAU,CAAC,MAAM,GAAG,UAAU,EAAE,MAAM,IAAI;IACxC,cAAc,EAAE,MAAM,cAAc;KAAG;IACvC,eAAe,EAAE,MAAM,eAAe;KAAG;IACzC,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,EAAE;KACb;IACD,QAAQ,EAAE,UAAU,CAAC,QAAQ;CAC9B,CAAA;AAED,UAAU,CAAC,WAAW,GAAG,UAAU,EAAE,WAAW,IAAI,MAAM,WAAW;CAAG,CAAA"}
|
|
1
|
+
{"version":3,"file":"vite-dev-polyfill.js","sourceRoot":"","sources":["../../src/web-worker/vite-dev-polyfill.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,4EAA4E;AAC5E,UAAU,CAAC,YAAY,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAClC,4EAA4E;AAC5E,UAAU,CAAC,YAAY,GAAG,GAAG,EAAE,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAA;AAEnD,0FAA0F;AAC1F,aAAa;AACb,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAA;AAEtD,UAAU,CAAC,QAAQ,GAAI,UAAkB,EAAE,QAAQ,IAAI;IACrD,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE;IAC1B,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QACpB,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC;QACtB,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;KACV,CAAC;IACF,IAAI,EAAE;QACJ,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;KAC3B;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;KACtB;CACF,CAAA;AAED,UAAU,CAAC,MAAM,GAAG,UAAU,EAAE,MAAM,IAAI;IACxC,cAAc,EAAE,MAAM,cAAc;KAAG;IACvC,eAAe,EAAE,MAAM,eAAe;KAAG;IACzC,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,EAAE;KACb;IACD,QAAQ,EAAE,UAAU,CAAC,QAAQ;CAC9B,CAAA;AAED,UAAU,CAAC,WAAW,GAAG,UAAU,EAAE,WAAW,IAAI,MAAM,WAAW;CAAG,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/adapter-web",
|
|
3
|
-
"version": "0.4.0-dev.
|
|
3
|
+
"version": "0.4.0-dev.20",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": {
|
|
@@ -8,19 +8,18 @@
|
|
|
8
8
|
"./worker": "./dist/web-worker/leader-worker/make-leader-worker.js",
|
|
9
9
|
"./worker-vite-dev-polyfill": "./dist/web-worker/vite-dev-polyfill.js",
|
|
10
10
|
"./shared-worker": "./dist/web-worker/shared-worker/make-shared-worker.js",
|
|
11
|
-
"./sqlite": "./dist/sqlite/index.js"
|
|
12
|
-
"./opfs-utils": "./dist/opfs-utils.js"
|
|
11
|
+
"./sqlite": "./dist/sqlite/index.js"
|
|
13
12
|
},
|
|
14
13
|
"dependencies": {
|
|
15
14
|
"@opentelemetry/api": "1.9.0",
|
|
16
|
-
"@livestore/common": "0.4.0-dev.
|
|
17
|
-
"@livestore/
|
|
18
|
-
"@livestore/
|
|
19
|
-
"@livestore/
|
|
20
|
-
"@livestore/
|
|
15
|
+
"@livestore/common": "0.4.0-dev.20",
|
|
16
|
+
"@livestore/sqlite-wasm": "0.4.0-dev.20",
|
|
17
|
+
"@livestore/webmesh": "0.4.0-dev.20",
|
|
18
|
+
"@livestore/utils": "0.4.0-dev.20",
|
|
19
|
+
"@livestore/devtools-web-common": "0.4.0-dev.20"
|
|
21
20
|
},
|
|
22
21
|
"devDependencies": {
|
|
23
|
-
"@types/chrome": "
|
|
22
|
+
"@types/chrome": "0.1.4",
|
|
24
23
|
"@types/wicg-file-system-access": "^2023.10.6",
|
|
25
24
|
"vitest": "3.2.4"
|
|
26
25
|
},
|