@livestore/adapter-node 0.4.0 → 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.
Files changed (41) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/client-session/adapter.d.ts +1 -1
  3. package/dist/client-session/adapter.d.ts.map +1 -1
  4. package/dist/client-session/adapter.js +58 -39
  5. package/dist/client-session/adapter.js.map +1 -1
  6. package/dist/devtools/devtools-server.d.ts.map +1 -1
  7. package/dist/devtools/devtools-server.js +12 -14
  8. package/dist/devtools/devtools-server.js.map +1 -1
  9. package/dist/devtools/vite-dev-server.d.ts +7 -11
  10. package/dist/devtools/vite-dev-server.d.ts.map +1 -1
  11. package/dist/devtools/vite-dev-server.js +5 -6
  12. package/dist/devtools/vite-dev-server.js.map +1 -1
  13. package/dist/leader-thread-shared.d.ts +4 -4
  14. package/dist/leader-thread-shared.d.ts.map +1 -1
  15. package/dist/leader-thread-shared.js +13 -12
  16. package/dist/leader-thread-shared.js.map +1 -1
  17. package/dist/make-leader-worker.d.ts +4 -4
  18. package/dist/make-leader-worker.d.ts.map +1 -1
  19. package/dist/make-leader-worker.js +62 -71
  20. package/dist/make-leader-worker.js.map +1 -1
  21. package/dist/rpc-worker.d.ts +8 -0
  22. package/dist/rpc-worker.d.ts.map +1 -0
  23. package/dist/rpc-worker.js +5 -0
  24. package/dist/rpc-worker.js.map +1 -0
  25. package/dist/webchannel.d.ts +1 -1
  26. package/dist/webchannel.d.ts.map +1 -1
  27. package/dist/webchannel.js +17 -18
  28. package/dist/webchannel.js.map +1 -1
  29. package/dist/worker-schema.d.ts +248 -212
  30. package/dist/worker-schema.d.ts.map +1 -1
  31. package/dist/worker-schema.js +62 -53
  32. package/dist/worker-schema.js.map +1 -1
  33. package/package.json +22 -31
  34. package/src/client-session/adapter.ts +104 -77
  35. package/src/devtools/devtools-server.ts +33 -30
  36. package/src/devtools/vite-dev-server.ts +7 -9
  37. package/src/leader-thread-shared.ts +24 -25
  38. package/src/make-leader-worker.ts +163 -127
  39. package/src/rpc-worker.ts +28 -0
  40. package/src/webchannel.ts +21 -28
  41. package/src/worker-schema.ts +115 -149
@@ -1,9 +1,9 @@
1
1
  import './thread-polyfill.ts';
2
- import type * as otel from '@opentelemetry/api';
3
2
  import type { SyncOptions } from '@livestore/common';
4
3
  import { LogConfig } from '@livestore/common';
5
4
  import type { LiveStoreSchema } from '@livestore/common/schema';
6
5
  import { Effect, Schema } from '@livestore/utils/effect';
6
+ import type * as otel from '@opentelemetry/api';
7
7
  import type { TestingOverrides } from './leader-thread-shared.ts';
8
8
  export type WorkerOptions = {
9
9
  schema: LiveStoreSchema;
@@ -15,13 +15,13 @@ export type WorkerOptions = {
15
15
  serviceName?: string;
16
16
  };
17
17
  testing?: TestingOverrides;
18
- } & LogConfig.WithLoggerOptions;
18
+ } & LogConfig.LoggerOptions;
19
19
  export declare const getWorkerArgs: () => {
20
20
  readonly clientId: string;
21
21
  readonly storeId: string;
22
22
  readonly sessionId: string;
23
- readonly extraArgs: Schema.JsonValue | undefined;
23
+ readonly extraArgs?: Schema.Json | undefined;
24
24
  };
25
25
  export declare const makeWorker: (options: WorkerOptions) => void;
26
- export declare const makeWorkerEffect: (options: WorkerOptions) => Effect.Effect<void, import("@effect/platform/WorkerError").WorkerError, never>;
26
+ export declare const makeWorkerEffect: (options: WorkerOptions) => Effect.Effect<never, import("effect/unstable/workers/WorkerError").WorkerError, never>;
27
27
  //# sourceMappingURL=make-leader-worker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"make-leader-worker.d.ts","sourceRoot":"","sources":["../src/make-leader-worker.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAA;AAQ7B,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAgB,MAAM,mBAAmB,CAAA;AAG3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAI/D,OAAO,EAAE,MAAM,EAAsC,MAAM,EAAwB,MAAM,yBAAyB,CAAA;AAGlH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAIjE,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACtC,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;QACpB,8CAA8C;QAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC3B,GAAG,SAAS,CAAC,iBAAiB,CAAA;AAE/B,eAAO,MAAM,aAAa;;;;;CAAqE,CAAA;AAE/F,eAAO,MAAM,UAAU,GAAI,SAAS,aAAa,SAEhD,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,SAAS,aAAa,mFAwItD,CAAA"}
1
+ {"version":3,"file":"make-leader-worker.d.ts","sourceRoot":"","sources":["../src/make-leader-worker.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAA;AAQ7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAgB,MAAM,mBAAmB,CAAA;AAG3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAK/D,OAAO,EACL,MAAM,EAQN,MAAM,EAGP,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAIjE,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACtC,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;QACpB,8CAA8C;QAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC3B,GAAG,SAAS,CAAC,aAAa,CAAA;AAE3B,eAAO,MAAM,aAAa;;;;;CAAqE,CAAA;AAE/F,eAAO,MAAM,UAAU,GAAI,SAAS,aAAa,SAEhD,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,SAAS,aAAa,2FA6BtD,CAAA"}
@@ -9,7 +9,8 @@ import { Eventlog, LeaderThreadCtx, streamEventsWithSyncState } from '@livestore
9
9
  import { LiveStoreEvent } from '@livestore/common/schema';
10
10
  import { loadSqlite3Wasm } from '@livestore/sqlite-wasm/load-wasm';
11
11
  import { sqliteDbFactory } from '@livestore/sqlite-wasm/node';
12
- import { Effect, FetchHttpClient, Layer, OtelTracer, Schema, Stream, WorkerRunner } from '@livestore/utils/effect';
12
+ import { isDevEnv } from '@livestore/utils';
13
+ import { Effect, FetchHttpClient, Layer, OtelTracer, Queue, References, RpcServer, RpcWorker, Schema, Scope, Stream, } from '@livestore/utils/effect';
13
14
  import { PlatformNode } from '@livestore/utils/node';
14
15
  import { makeLeaderThread } from "./leader-thread-shared.js";
15
16
  import * as WorkerSchema from "./worker-schema.js";
@@ -19,93 +20,83 @@ export const makeWorker = (options) => {
19
20
  };
20
21
  export const makeWorkerEffect = (options) => {
21
22
  const TracingLive = options.otelOptions?.tracer !== undefined
22
- ? Layer.unwrapEffect(Effect.map(OtelTracer.make, Layer.setTracer)).pipe(Layer.provideMerge(Layer.succeed(OtelTracer.OtelTracer, options.otelOptions.tracer)))
23
- : undefined;
23
+ ? OtelTracer.layerWithoutOtelTracer.pipe(Layer.provideMerge(Layer.succeed(OtelTracer.OtelTracer, options.otelOptions.tracer)))
24
+ : Layer.empty;
24
25
  // Merge the runtime dependencies once so we can provide them together without chaining Effect.provide.
25
- const runtimeLayer = Layer.mergeAll(FetchHttpClient.layer, PlatformNode.NodeFileSystem.layer, TracingLive ?? Layer.empty);
26
- return WorkerRunner.layerSerialized(WorkerSchema.LeaderWorkerInnerRequest, {
27
- InitialMessage: (args) => Effect.gen(function* () {
28
- const sqlite3 = yield* Effect.promise(() => loadSqlite3Wasm()).pipe(Effect.withSpan('@livestore/adapter-node:leader-thread:loadSqlite3Wasm'));
29
- const makeSqliteDb = yield* sqliteDbFactory({ sqlite3 });
30
- return yield* makeLeaderThread({
31
- ...args,
32
- syncOptions: options.sync,
33
- schema: options.schema,
34
- testing: options.testing,
35
- makeSqliteDb,
36
- syncPayloadEncoded: args.syncPayloadEncoded,
37
- syncPayloadSchema: options.syncPayloadSchema,
38
- });
39
- }).pipe(Layer.unwrapScoped),
40
- PushToLeader: ({ batch }) => Effect.andThen(LeaderThreadCtx, (_) => _.syncProcessor.push(batch.map((item) => new LiveStoreEvent.Client.EncodedWithMeta(item)),
41
- // We'll wait in order to keep back pressure on the client session
42
- { waitForProcessing: true })).pipe(Effect.uninterruptible, Effect.withSpan('@livestore/adapter-node:worker:PushToLeader')),
43
- BootStatusStream: () => Effect.andThen(LeaderThreadCtx, (_) => Stream.fromQueue(_.bootStatusQueue)).pipe(Stream.unwrap),
26
+ const runtimeLayer = Layer.mergeAll(FetchHttpClient.layer, PlatformNode.NodeFileSystem.layer, TracingLive);
27
+ return RpcServer.make(WorkerSchema.LeaderWorkerInnerRpcs).pipe(Effect.provide(makeWorkerRunnerInner(options)), Effect.provide(RpcServer.layerProtocolWorkerRunner), Effect.provide(PlatformNode.NodeWorkerRunner.layer), Effect.scoped, Effect.tapCauseLogPretty, Effect.annotateLogs({
28
+ thread: options.otelOptions?.serviceName ?? 'livestore-node-leader-thread',
29
+ processId: process.pid,
30
+ }), Effect.provide(Layer.mergeAll(options.logger ?? Layer.empty, Layer.succeed(References.MinimumLogLevel, options.logLevel ?? (isDevEnv() === true ? 'Debug' : 'Info')))), Effect.provide(runtimeLayer));
31
+ };
32
+ const makeWorkerRunnerInner = (options) => WorkerSchema.LeaderWorkerInnerRpcs.toLayer(Effect.gen(function* () {
33
+ const leaderThreadScope = yield* Scope.make();
34
+ yield* Effect.addFinalizer((exit) => Scope.close(leaderThreadScope, exit));
35
+ const leaderThreadContextOnce = yield* Effect.cached(Effect.gen(function* () {
36
+ const { storeId, clientId, storage, devtools, syncPayloadEncoded } = yield* RpcWorker.initialMessage(WorkerSchema.LeaderWorkerInnerInitialMessage.payloadSchema);
37
+ const sqlite3 = yield* Effect.promise(() => loadSqlite3Wasm()).pipe(Effect.withSpan('@livestore/adapter-node:leader-thread:loadSqlite3Wasm'));
38
+ const makeSqliteDb = yield* sqliteDbFactory({ sqlite3 });
39
+ const layer = yield* makeLeaderThread({
40
+ storeId,
41
+ clientId,
42
+ storage,
43
+ devtools,
44
+ syncOptions: options.sync,
45
+ schema: options.schema,
46
+ testing: options.testing,
47
+ makeSqliteDb,
48
+ syncPayloadEncoded,
49
+ syncPayloadSchema: options.syncPayloadSchema,
50
+ });
51
+ return yield* Layer.buildWithScope(layer, leaderThreadScope);
52
+ }).pipe(Scope.provide(leaderThreadScope), Effect.tapCauseLogPretty, UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-node:worker:InitialMessage'), Effect.orDie));
53
+ const provideLeaderThread = (effect) => Effect.gen(function* () {
54
+ const leaderThreadContext = yield* leaderThreadContextOnce;
55
+ return yield* effect.pipe(Effect.provide(leaderThreadContext));
56
+ });
57
+ return WorkerSchema.LeaderWorkerInnerRpcs.of({
58
+ GetRecreateSnapshot: () => Effect.gen(function* () {
59
+ const workerCtx = yield* LeaderThreadCtx;
60
+ const snapshot = workerCtx.dbState.export();
61
+ return { snapshot, migrationsReport: workerCtx.initialState.migrationsReport };
62
+ }).pipe(provideLeaderThread, Effect.withSpan('@livestore/adapter-node:worker:GetRecreateSnapshot')),
44
63
  PullStream: ({ cursor }) => Effect.gen(function* () {
45
64
  const { syncProcessor } = yield* LeaderThreadCtx;
46
65
  return syncProcessor.pull({ cursor });
47
- }).pipe(Stream.unwrapScoped),
48
- StreamEvents: (options) => LeaderThreadCtx.pipe(Effect.map(({ dbEventlog, syncProcessor }) => {
49
- const { _tag: _ignored, ...payload } = options;
50
- const streamOptions = payload;
51
- return streamEventsWithSyncState({
52
- dbEventlog,
53
- syncState: syncProcessor.syncState,
54
- options: streamOptions,
55
- });
56
- }), Stream.unwrapScoped, Stream.withSpan('@livestore/adapter-node:worker:StreamEvents')),
57
- Export: () => Effect.andThen(LeaderThreadCtx, (_) => _.dbState.export()).pipe(Effect.withSpan('@livestore/adapter-node:worker:Export')),
58
- ExportEventlog: () => Effect.andThen(LeaderThreadCtx, (_) => _.dbEventlog.export()).pipe(Effect.withSpan('@livestore/adapter-node:worker:ExportEventlog')),
59
- GetLeaderHead: Effect.fn('@livestore/adapter-node:worker:GetLeaderHead')(function* () {
66
+ }).pipe(provideLeaderThread, Stream.unwrap),
67
+ PushToLeader: ({ batch }) => Effect.andThen(LeaderThreadCtx, ({ syncProcessor }) => syncProcessor.push(batch.map((event) => new LiveStoreEvent.Client.EncodedWithMeta(event)))).pipe(provideLeaderThread, Effect.uninterruptible, Effect.withSpan('@livestore/adapter-node:worker:PushToLeader')),
68
+ StreamEvents: (options) => LeaderThreadCtx.pipe(Effect.map(({ dbEventlog, syncProcessor }) => streamEventsWithSyncState({
69
+ dbEventlog,
70
+ syncState: syncProcessor.syncState,
71
+ options: options,
72
+ })), provideLeaderThread, Stream.unwrap, Stream.withSpan('@livestore/adapter-node:worker:StreamEvents')),
73
+ Export: () => LeaderThreadCtx.pipe(Effect.flatMap((_) => Effect.sync(() => _.dbState.export())), provideLeaderThread, Effect.withSpan('@livestore/adapter-node:worker:Export')),
74
+ ExportEventlog: () => LeaderThreadCtx.pipe(Effect.flatMap((_) => Effect.sync(() => _.dbEventlog.export())), provideLeaderThread, Effect.withSpan('@livestore/adapter-node:worker:ExportEventlog')),
75
+ BootStatusStream: () => LeaderThreadCtx.pipe(Effect.map((_) => Stream.fromQueue(_.bootStatusQueue)), provideLeaderThread, Stream.unwrap),
76
+ GetLeaderHead: () => Effect.gen(function* () {
60
77
  const workerCtx = yield* LeaderThreadCtx;
61
78
  return Eventlog.getClientHeadFromDb(workerCtx.dbEventlog);
62
- }),
63
- GetLeaderSyncState: Effect.fn('@livestore/adapter-node:worker:GetLeaderSyncState')(function* () {
79
+ }).pipe(provideLeaderThread, Effect.withSpan('@livestore/adapter-node:worker:GetLeaderHead')),
80
+ GetLeaderSyncState: () => Effect.gen(function* () {
64
81
  const workerCtx = yield* LeaderThreadCtx;
65
82
  return yield* workerCtx.syncProcessor.syncState;
66
- }),
83
+ }).pipe(provideLeaderThread, Effect.withSpan('@livestore/adapter-node:worker:GetLeaderSyncState')),
67
84
  SyncStateStream: () => Effect.gen(function* () {
68
85
  const workerCtx = yield* LeaderThreadCtx;
69
86
  return workerCtx.syncProcessor.syncState.changes;
70
- }).pipe(Stream.unwrapScoped),
71
- GetNetworkStatus: Effect.fn('@livestore/adapter-node:worker:GetNetworkStatus')(function* () {
87
+ }).pipe(provideLeaderThread, Stream.unwrap),
88
+ GetNetworkStatus: () => Effect.gen(function* () {
72
89
  const workerCtx = yield* LeaderThreadCtx;
73
90
  return yield* workerCtx.networkStatus;
74
- }),
91
+ }).pipe(provideLeaderThread, Effect.withSpan('@livestore/adapter-node:worker:GetNetworkStatus')),
75
92
  NetworkStatusStream: () => Effect.gen(function* () {
76
93
  const workerCtx = yield* LeaderThreadCtx;
77
94
  return workerCtx.networkStatus.changes;
78
- }).pipe(Stream.unwrapScoped),
79
- GetRecreateSnapshot: Effect.fn('@livestore/adapter-node:worker:GetRecreateSnapshot')(function* () {
80
- const workerCtx = yield* LeaderThreadCtx;
81
- // const result = yield* Deferred.await(workerCtx.initialSetupDeferred)
82
- // NOTE we can only return the cached snapshot once as it's transferred (i.e. disposed), so we need to set it to undefined
83
- // const cachedSnapshot =
84
- // result._tag === 'Recreate' ? yield* Ref.getAndSet(result.snapshotRef, undefined) : undefined
85
- // return cachedSnapshot ?? workerCtx.db.export()
86
- const snapshot = workerCtx.dbState.export();
87
- return { snapshot, migrationsReport: workerCtx.initialState.migrationsReport };
88
- }),
95
+ }).pipe(provideLeaderThread, Stream.unwrap),
89
96
  Shutdown: Effect.fn('@livestore/adapter-node:worker:Shutdown')(function* () {
90
- // const { db, dbEventlog } = yield* LeaderThreadCtx
91
97
  yield* Effect.logDebug('[@livestore/adapter-node:worker] Shutdown');
92
- // if (devtools.enabled) {
93
- // yield* FiberSet.clear(devtools.connections)
94
- // }
95
- // db.close()
96
- // dbEventlog.close()
97
- // Buy some time for Otel to flush
98
- // TODO find a cleaner way to do this
99
- // yield* Effect.sleep(1000)
100
98
  }),
101
- ExtraDevtoolsMessage: ({ message }) => Effect.andThen(LeaderThreadCtx, (_) => _.extraIncomingMessagesQueue.offer(message)).pipe(Effect.withSpan('@livestore/adapter-node:worker:ExtraDevtoolsMessage')),
102
- }).pipe(Layer.provide(PlatformNode.NodeWorkerRunner.layer), WorkerRunner.launch, Effect.scoped, Effect.tapCauseLogPretty, Effect.annotateLogs({
103
- thread: options.otelOptions?.serviceName ?? 'livestore-node-leader-thread',
104
- processId: process.pid,
105
- }), LogConfig.withLoggerConfig({ logger: options.logger, logLevel: options.logLevel }, { threadName: options.otelOptions?.serviceName ?? 'livestore-node-leader-thread' }),
106
- // TODO bring back with Effect 4 once it's easier to work with replacing loggers.
107
- // We basically only want to provide this logger if it's replacing the default logger, not if there's a custom logger already provided.
108
- // Effect.provide(Logger.prettyWithThread(options.otelOptions?.serviceName ?? 'livestore-node-leader-thread')),
109
- Effect.provide(runtimeLayer));
110
- };
99
+ ExtraDevtoolsMessage: ({ message }) => Effect.andThen(LeaderThreadCtx, (_) => Queue.offer(_.extraIncomingMessagesQueue, message)).pipe(provideLeaderThread, Effect.asVoid, Effect.withSpan('@livestore/adapter-node:worker:ExtraDevtoolsMessage')),
100
+ });
101
+ }));
111
102
  //# sourceMappingURL=make-leader-worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"make-leader-worker.js","sourceRoot":"","sources":["../src/make-leader-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"make-leader-worker.js","sourceRoot":"","sources":["../src/make-leader-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Effect, RpcClientError, Stream } from '@livestore/utils/effect';
2
+ export type WithoutRpcClientError<E> = E extends {
3
+ readonly _tag: infer Tag;
4
+ } ? 'RpcClientError' extends Tag ? never : E : E;
5
+ export declare const isRpcClientError: (error: unknown) => error is RpcClientError.RpcClientError;
6
+ export declare const dieOnRpcClientError: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, WithoutRpcClientError<E>, R>;
7
+ export declare const dieOnRpcClientErrorStream: <A, E, R>(stream: Stream.Stream<A, E, R>) => Stream.Stream<A, WithoutRpcClientError<E>, R>;
8
+ //# sourceMappingURL=rpc-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-worker.d.ts","sourceRoot":"","sources":["../src/rpc-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAU,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhF,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,CAAA;CAAE,GACzE,gBAAgB,SAAS,GAAG,GAC1B,KAAK,GACL,CAAC,GACH,CAAC,CAAA;AAEL,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,cAAc,CAAC,cACzB,CAAA;AAEjD,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAGK,CAAA;AAEpD,eAAO,MAAM,yBAAyB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC/C,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAOK,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { Effect, RpcClientError, Schema, Stream } from '@livestore/utils/effect';
2
+ export const isRpcClientError = (error) => Schema.is(RpcClientError.RpcClientError)(error);
3
+ export const dieOnRpcClientError = (effect) => effect.pipe(Effect.catchIf(isRpcClientError, (error) => Effect.die(error)));
4
+ export const dieOnRpcClientErrorStream = (stream) => stream.pipe(Stream.catchIf(isRpcClientError, (error) => Stream.die(error), (error) => Stream.fail(error)));
5
+ //# sourceMappingURL=rpc-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-worker.js","sourceRoot":"","sources":["../src/rpc-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAQhF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAA0C,EAAE,CACzF,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAA8B,EACiB,EAAE,CAChD,MAAwF,CAAC,IAAI,CAC5F,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CACd,CAAA;AAEpD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,MAA8B,EACiB,EAAE,CAChD,MAAwF,CAAC,IAAI,CAC5F,MAAM,CAAC,OAAO,CACZ,gBAAgB,EAChB,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAC5B,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAC9B,CAC+C,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { Effect, Schema, Scope, WebChannel } from '@livestore/utils/effect';
2
2
  export declare const makeBroadcastChannel: <Msg, MsgEncoded>({ channelName, schema, }: {
3
3
  channelName: string;
4
- schema: Schema.Schema<Msg, MsgEncoded>;
4
+ schema: Schema.Codec<Msg, MsgEncoded>;
5
5
  }) => Effect.Effect<WebChannel.WebChannel<Msg, Msg>, never, Scope.Scope>;
6
6
  //# sourceMappingURL=webchannel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webchannel.d.ts","sourceRoot":"","sources":["../src/webchannel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAY,MAAM,EAAQ,MAAM,EAAE,KAAK,EAAU,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEnG,eAAO,MAAM,oBAAoB,GAAI,GAAG,EAAE,UAAU,EAAE,0BAGnD;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;CACvC,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAyDlE,CAAA"}
1
+ {"version":3,"file":"webchannel.d.ts","sourceRoot":"","sources":["../src/webchannel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,MAAM,EAAe,MAAM,EAAE,KAAK,EAAU,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE1G,eAAO,MAAM,oBAAoB,GAAI,GAAG,EAAE,UAAU,EAAE,0BAGnD;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;CACtC,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAmDlE,CAAA"}
@@ -1,4 +1,4 @@
1
- import { Deferred, Effect, Exit, Schema, Scope, Stream, WebChannel } from '@livestore/utils/effect';
1
+ import { Deferred, Effect, Exit, Queue, Schema, Scope, Stream, WebChannel } from '@livestore/utils/effect';
2
2
  export const makeBroadcastChannel = ({ channelName, schema, }) => Effect.scopeWithCloseable((scope) => Effect.gen(function* () {
3
3
  if (globalThis.BroadcastChannel === undefined) {
4
4
  yield* Effect.logWarning('BroadcastChannel is not supported in this environment. Using a NoopChannel instead.');
@@ -7,27 +7,26 @@ export const makeBroadcastChannel = ({ channelName, schema, }) => Effect.scopeWi
7
7
  // NOTE we're using `globalThis.BroadcastChannel` here because `BroadcastChannel`
8
8
  // from `node:worker_threads` is not yet stable in Deno
9
9
  const channel = new globalThis.BroadcastChannel(channelName);
10
- yield* Effect.addFinalizer(() => Effect.try(() => channel.close()).pipe(Effect.ignoreLogged));
11
- const send = (message) => Effect.gen(function* () {
12
- const messageEncoded = yield* Schema.encode(schema)(message);
13
- channel.postMessage(messageEncoded);
14
- });
15
- // TODO also listen to `messageerror` in parallel
16
- // const listen = Stream.fromEventListener<MessageEvent>(channel, 'message').pipe(
17
- // Stream.map((_) => Schema.decodeEither(listenSchema)(_.data)),
18
- // )
19
- const listen = Stream.asyncPush((emit) => Effect.acquireRelease(Effect.gen(function* () {
20
- channel.onmessage = (event) => {
21
- return emit.single(Schema.decodeEither(schema)(event.data));
22
- };
23
- return channel;
24
- }), (channel) => Effect.sync(() => {
10
+ yield* Effect.addFinalizer(() => Effect.try(() => {
25
11
  // NOTE not all BroadcastChannel implementations have the `unref` method
26
12
  if (typeof channel.unref === 'function') {
27
13
  channel.unref();
28
14
  }
29
- })));
30
- const closedDeferred = yield* Deferred.make().pipe(Effect.acquireRelease(Deferred.done(Exit.void)));
15
+ channel.close();
16
+ }).pipe(Effect.ignore));
17
+ const send = (message) => Effect.gen(function* () {
18
+ const messageEncoded = yield* Schema.encodeEffect(schema)(message);
19
+ channel.postMessage(messageEncoded);
20
+ });
21
+ // In Effect v4, forking a consumer is not a readiness handshake. Install the message
22
+ // listener while constructing the channel and buffer into a scoped queue so early messages
23
+ // are not lost before `listen` is pulled.
24
+ const messageQueue = yield* Effect.acquireRelease(Queue.unbounded(), Queue.shutdown);
25
+ channel.onmessage = (event) => {
26
+ Queue.offerUnsafe(messageQueue, event.data);
27
+ };
28
+ const listen = Stream.fromQueue(messageQueue).pipe(Stream.map((data) => Schema.decodeUnknownResult(schema)(data)));
29
+ const closedDeferred = yield* Effect.acquireRelease(Deferred.make(), Deferred.done(Exit.void));
31
30
  const supportsTransferables = false;
32
31
  return {
33
32
  [WebChannel.WebChannelSymbol]: WebChannel.WebChannelSymbol,
@@ -1 +1 @@
1
- {"version":3,"file":"webchannel.js","sourceRoot":"","sources":["../src/webchannel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEnG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAkB,EACpD,WAAW,EACX,MAAM,GAIP,EAAsE,EAAE,CACvE,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,UAAU,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC9C,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,qFAAqF,CAAC,CAAA;QAC/G,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAA2C,CAAA;IACpF,CAAC;IAED,iFAAiF;IACjF,uDAAuD;IACvD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAgC,CAAA;IAE3F,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;IAE7F,MAAM,IAAI,GAAG,CAAC,OAAY,EAAE,EAAE,CAC5B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAA;QAC5D,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEJ,iDAAiD;IACjD,kFAAkF;IAClF,kEAAkE;IAClE,IAAI;IAEJ,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAA6C,CAAC,IAAI,EAAE,EAAE,CACnF,MAAM,CAAC,cAAc,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,OAAO,CAAC,SAAS,GAAG,CAAC,KAAU,EAAE,EAAE;YACjC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7D,CAAC,CAAA;QAED,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,EACF,CAAC,OAAO,EAAE,EAAE,CACV,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,wEAAwE;QACxE,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CACL,CACF,CAAA;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACzG,MAAM,qBAAqB,GAAG,KAAK,CAAA;IAEnC,OAAO;QACL,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,gBAAgB;QAC1D,IAAI;QACJ,MAAM;QACN,cAAc;QACd,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;QACxC,qBAAqB;QACrB,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;KACxC,CAAA;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,+BAA+B,WAAW,GAAG,CAAC,CAAC,CACxE,CAAA"}
1
+ {"version":3,"file":"webchannel.js","sourceRoot":"","sources":["../src/webchannel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE1G,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAkB,EACpD,WAAW,EACX,MAAM,GAIP,EAAsE,EAAE,CACvE,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,UAAU,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC9C,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,qFAAqF,CAAC,CAAA;QAC/G,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAA2C,CAAA;IACpF,CAAC;IAED,iFAAiF;IACjF,uDAAuD;IACvD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAgC,CAAA;IAE3F,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;QACd,wEAAwE;QACxE,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CACvB,CAAA;IAED,MAAM,IAAI,GAAG,CAAC,OAAY,EAAE,EAAE,CAC5B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAA;QAClE,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEJ,qFAAqF;IACrF,2FAA2F;IAC3F,0CAA0C;IAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC7F,OAAO,CAAC,SAAS,GAAG,CAAC,KAAU,EAAE,EAAE;QACjC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAElH,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACpG,MAAM,qBAAqB,GAAG,KAAK,CAAA;IAEnC,OAAO;QACL,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,gBAAgB;QAC1D,IAAI;QACJ,MAAM;QACN,cAAc;QACd,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;QACxC,qBAAqB;QACrB,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;KACxC,CAAA;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,+BAA+B,WAAW,GAAG,CAAC,CAAC,CACxE,CAAA"}