@livestore/livestore 0.3.0-dev.19 → 0.3.0-dev.22
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/SqliteDbWrapper.d.ts.map +1 -1
- package/dist/SqliteDbWrapper.js +1 -2
- package/dist/SqliteDbWrapper.js.map +1 -1
- package/dist/effect/LiveStore.d.ts +6 -38
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +6 -18
- package/dist/effect/LiveStore.js.map +1 -1
- package/dist/effect/mod.d.ts +3 -0
- package/dist/effect/mod.d.ts.map +1 -0
- package/dist/effect/mod.js +3 -0
- package/dist/effect/mod.js.map +1 -0
- package/dist/internal/mod.d.ts +3 -0
- package/dist/internal/mod.d.ts.map +1 -0
- package/dist/internal/mod.js +3 -0
- package/dist/internal/mod.js.map +1 -0
- package/dist/live-queries/base-class.d.ts +10 -6
- package/dist/live-queries/base-class.d.ts.map +1 -1
- package/dist/live-queries/base-class.js.map +1 -1
- package/dist/live-queries/computed.d.ts.map +1 -1
- package/dist/live-queries/computed.js +1 -1
- package/dist/live-queries/computed.js.map +1 -1
- package/dist/live-queries/db-query.d.ts.map +1 -1
- package/dist/live-queries/db-query.js +1 -2
- package/dist/live-queries/db-query.js.map +1 -1
- package/dist/live-queries/db-query.test.js +4 -1
- package/dist/live-queries/db-query.test.js.map +1 -1
- package/dist/live-queries/mod.d.ts +5 -0
- package/dist/live-queries/mod.d.ts.map +1 -0
- package/dist/live-queries/mod.js +5 -0
- package/dist/live-queries/mod.js.map +1 -0
- package/dist/{index.d.ts → mod.d.ts} +3 -8
- package/dist/mod.d.ts.map +1 -0
- package/dist/{index.js → mod.js} +2 -6
- package/dist/mod.js.map +1 -0
- package/dist/store/create-store.d.ts +42 -9
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/create-store.js +14 -5
- package/dist/store/create-store.js.map +1 -1
- package/dist/store/devtools.d.ts.map +1 -1
- package/dist/store/devtools.js +40 -15
- package/dist/store/devtools.js.map +1 -1
- package/dist/store/store-types.d.ts +4 -14
- package/dist/store/store-types.d.ts.map +1 -1
- package/dist/store/store.d.ts +4 -6
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +5 -9
- package/dist/store/store.js.map +1 -1
- package/dist/utils/tests/fixture.d.ts +1 -1
- package/dist/utils/tests/fixture.d.ts.map +1 -1
- package/dist/utils/tests/fixture.js.map +1 -1
- package/package.json +20 -22
- package/src/SqliteDbWrapper.ts +8 -2
- package/src/effect/LiveStore.ts +22 -70
- package/src/effect/{index.ts → mod.ts} +2 -3
- package/src/internal/mod.ts +2 -0
- package/src/live-queries/base-class.ts +12 -7
- package/src/live-queries/computed.ts +1 -1
- package/src/live-queries/db-query.test.ts +4 -1
- package/src/live-queries/db-query.ts +1 -1
- package/src/live-queries/mod.ts +4 -0
- package/src/{index.ts → mod.ts} +3 -35
- package/src/store/create-store.ts +66 -21
- package/src/store/devtools.ts +43 -15
- package/src/store/store-types.ts +4 -20
- package/src/store/store.ts +10 -24
- package/src/utils/tests/fixture.ts +1 -1
- package/dist/effect/index.d.ts +0 -2
- package/dist/effect/index.d.ts.map +0 -1
- package/dist/effect/index.js +0 -2
- package/dist/effect/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/live-queries/graphql.d.ts +0 -49
- package/dist/live-queries/graphql.d.ts.map +0 -1
- package/dist/live-queries/graphql.js +0 -147
- package/dist/live-queries/graphql.js.map +0 -1
- package/dist/utils/otel.d.ts +0 -4
- package/dist/utils/otel.d.ts.map +0 -1
- package/dist/utils/otel.js +0 -6
- package/dist/utils/otel.js.map +0 -1
- package/src/live-queries/graphql.ts +0 -244
- package/src/utils/otel.ts +0 -9
|
@@ -1,20 +1,45 @@
|
|
|
1
1
|
import type { Adapter, BootStatus, MigrationsReport } from '@livestore/common';
|
|
2
2
|
import { UnexpectedError } from '@livestore/common';
|
|
3
3
|
import type { LiveStoreSchema } from '@livestore/common/schema';
|
|
4
|
-
import { Effect, OtelTracer, Scope } from '@livestore/utils/effect';
|
|
4
|
+
import { Context, Deferred, Effect, Layer, OtelTracer, Scope } from '@livestore/utils/effect';
|
|
5
5
|
import * as otel from '@opentelemetry/api';
|
|
6
|
-
import { LiveStoreContextRunning } from '../effect/index.js';
|
|
7
6
|
import { Store } from './store.js';
|
|
8
|
-
import type {
|
|
7
|
+
import type { LiveStoreContextRunning as LiveStoreContextRunning_, OtelOptions, ShutdownDeferred } from './store-types.js';
|
|
9
8
|
export declare const DEFAULT_PARAMS: {
|
|
10
9
|
leaderPushBatchSize: number;
|
|
11
10
|
};
|
|
12
|
-
|
|
11
|
+
declare const LiveStoreContextRunning_base: Context.TagClass<LiveStoreContextRunning, "@livestore/livestore/effect/LiveStoreContextRunning", LiveStoreContextRunning_>;
|
|
12
|
+
export declare class LiveStoreContextRunning extends LiveStoreContextRunning_base {
|
|
13
|
+
static fromDeferred: Layer.Layer<LiveStoreContextRunning, UnexpectedError, DeferredStoreContext>;
|
|
14
|
+
}
|
|
15
|
+
declare const DeferredStoreContext_base: Context.TagClass<DeferredStoreContext, "@livestore/livestore/effect/DeferredStoreContext", Deferred.Deferred<LiveStoreContextRunning_, UnexpectedError>>;
|
|
16
|
+
export declare class DeferredStoreContext extends DeferredStoreContext_base {
|
|
17
|
+
}
|
|
18
|
+
export type LiveStoreContextProps<TSchema extends LiveStoreSchema, TContext = {}> = {
|
|
19
|
+
schema: TSchema;
|
|
20
|
+
/**
|
|
21
|
+
* The `storeId` can be used to isolate multiple stores from each other.
|
|
22
|
+
* So it can be useful for multi-tenancy scenarios.
|
|
23
|
+
*
|
|
24
|
+
* The `storeId` is also used for persistence.
|
|
25
|
+
*
|
|
26
|
+
* @default 'default'
|
|
27
|
+
*/
|
|
28
|
+
storeId?: string;
|
|
29
|
+
/** Can be useful for custom live query implementations (e.g. see `@livestore/graphql`) */
|
|
30
|
+
context?: TContext;
|
|
31
|
+
boot?: (store: Store<TSchema, TContext>) => Effect.Effect<void, unknown, OtelTracer.OtelTracer | LiveStoreContextRunning>;
|
|
32
|
+
adapter: Adapter;
|
|
33
|
+
disableDevtools?: boolean;
|
|
34
|
+
onBootStatus?: (status: BootStatus) => void;
|
|
35
|
+
batchUpdates: (run: () => void) => void;
|
|
36
|
+
};
|
|
37
|
+
export interface CreateStoreOptions<TSchema extends LiveStoreSchema, TContext = {}> {
|
|
13
38
|
schema: TSchema;
|
|
14
39
|
adapter: Adapter;
|
|
15
40
|
storeId: string;
|
|
16
|
-
|
|
17
|
-
boot?: (store: Store<
|
|
41
|
+
context?: TContext;
|
|
42
|
+
boot?: (store: Store<TSchema, TContext>, ctx: {
|
|
18
43
|
migrationsReport: MigrationsReport;
|
|
19
44
|
parentSpan: otel.Span;
|
|
20
45
|
}) => void | Promise<void> | Effect.Effect<void, unknown, OtelTracer.OtelTracer | LiveStoreContextRunning>;
|
|
@@ -22,6 +47,13 @@ export interface CreateStoreOptions<TGraphQLContext extends BaseGraphQLContext,
|
|
|
22
47
|
disableDevtools?: boolean;
|
|
23
48
|
onBootStatus?: (status: BootStatus) => void;
|
|
24
49
|
shutdownDeferred?: ShutdownDeferred;
|
|
50
|
+
/**
|
|
51
|
+
* Currently only used in the web adapter:
|
|
52
|
+
* If true, registers a beforeunload event listener to confirm unsaved changes.
|
|
53
|
+
*
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
56
|
+
confirmUnsavedChanges?: boolean;
|
|
25
57
|
params?: {
|
|
26
58
|
leaderPushBatchSize?: number;
|
|
27
59
|
};
|
|
@@ -30,9 +62,10 @@ export interface CreateStoreOptions<TGraphQLContext extends BaseGraphQLContext,
|
|
|
30
62
|
};
|
|
31
63
|
}
|
|
32
64
|
/** Create a new LiveStore Store */
|
|
33
|
-
export declare const createStorePromise: <
|
|
65
|
+
export declare const createStorePromise: <TSchema extends LiveStoreSchema = LiveStoreSchema, TContext = {}>({ signal, otelOptions, ...options }: CreateStoreOptions<TSchema, TContext> & {
|
|
34
66
|
signal?: AbortSignal;
|
|
35
67
|
otelOptions?: Partial<OtelOptions>;
|
|
36
|
-
}) => Promise<Store<
|
|
37
|
-
export declare const createStore: <
|
|
68
|
+
}) => Promise<Store<TSchema, TContext>>;
|
|
69
|
+
export declare const createStore: <TSchema extends LiveStoreSchema = LiveStoreSchema, TContext = {}>({ schema, adapter, storeId, context, boot, batchUpdates, disableDevtools, onBootStatus, shutdownDeferred, params, debug, confirmUnsavedChanges, }: CreateStoreOptions<TSchema, TContext>) => Effect.Effect<Store<TSchema, TContext>, UnexpectedError, Scope.Scope | OtelTracer.OtelTracer>;
|
|
70
|
+
export {};
|
|
38
71
|
//# sourceMappingURL=create-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-store.d.ts","sourceRoot":"","sources":["../../src/store/create-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EAIV,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAe,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAW,eAAe,EAAiB,MAAM,0BAA0B,CAAA;AAGvF,OAAO,
|
|
1
|
+
{"version":3,"file":"create-store.d.ts","sourceRoot":"","sources":["../../src/store/create-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import { provideOtel, UnexpectedError } from '@livestore/common';
|
|
2
2
|
import { LS_DEV } from '@livestore/utils';
|
|
3
|
-
import { Deferred, Effect, Exit, identity, Layer, Logger, LogLevel, MutableHashMap, OtelTracer, Queue, Runtime, Scope, TaskTracing, } from '@livestore/utils/effect';
|
|
3
|
+
import { Context, Deferred, Effect, Exit, identity, Layer, Logger, LogLevel, MutableHashMap, OtelTracer, Queue, Runtime, Scope, TaskTracing, } from '@livestore/utils/effect';
|
|
4
4
|
import { nanoid } from '@livestore/utils/nanoid';
|
|
5
5
|
import * as otel from '@opentelemetry/api';
|
|
6
|
-
import { LiveStoreContextRunning } from '../effect/index.js';
|
|
7
6
|
import { connectDevtoolsToStore } from './devtools.js';
|
|
8
7
|
import { Store } from './store.js';
|
|
9
8
|
export const DEFAULT_PARAMS = {
|
|
10
9
|
leaderPushBatchSize: 1,
|
|
11
10
|
};
|
|
11
|
+
export class LiveStoreContextRunning extends Context.Tag('@livestore/livestore/effect/LiveStoreContextRunning')() {
|
|
12
|
+
static fromDeferred = Effect.gen(function* () {
|
|
13
|
+
const deferred = yield* DeferredStoreContext;
|
|
14
|
+
const ctx = yield* deferred;
|
|
15
|
+
return Layer.succeed(LiveStoreContextRunning, ctx);
|
|
16
|
+
}).pipe(Layer.unwrapScoped);
|
|
17
|
+
}
|
|
18
|
+
export class DeferredStoreContext extends Context.Tag('@livestore/livestore/effect/DeferredStoreContext')() {
|
|
19
|
+
}
|
|
12
20
|
/** Create a new LiveStore Store */
|
|
13
21
|
export const createStorePromise = async ({ signal, otelOptions, ...options }) => Effect.gen(function* () {
|
|
14
22
|
const scope = yield* Scope.make();
|
|
@@ -21,8 +29,8 @@ export const createStorePromise = async ({ signal, otelOptions, ...options }) =>
|
|
|
21
29
|
return yield* createStore({ ...options }).pipe(Scope.extend(scope));
|
|
22
30
|
}).pipe(Effect.withSpan('createStore', {
|
|
23
31
|
attributes: { storeId: options.storeId, disableDevtools: options.disableDevtools },
|
|
24
|
-
}), provideOtel({ parentSpanContext: otelOptions?.rootSpanContext, otelTracer: otelOptions?.tracer }), Effect.tapCauseLogPretty, Effect.annotateLogs({ thread: 'window' }), Effect.provide(Logger.
|
|
25
|
-
export const createStore = ({ schema, adapter, storeId,
|
|
32
|
+
}), provideOtel({ parentSpanContext: otelOptions?.rootSpanContext, otelTracer: otelOptions?.tracer }), Effect.tapCauseLogPretty, Effect.annotateLogs({ thread: 'window' }), Effect.provide(Logger.prettyWithThread('window')), Logger.withMinimumLogLevel(LogLevel.Debug), Effect.runPromise);
|
|
33
|
+
export const createStore = ({ schema, adapter, storeId, context = {}, boot, batchUpdates, disableDevtools, onBootStatus, shutdownDeferred, params, debug, confirmUnsavedChanges = true, }) => Effect.gen(function* () {
|
|
26
34
|
const lifetimeScope = yield* Scope.make();
|
|
27
35
|
yield* validateStoreId(storeId);
|
|
28
36
|
yield* Effect.addFinalizer((_) => Scope.close(lifetimeScope, _));
|
|
@@ -70,12 +78,13 @@ export const createStore = ({ schema, adapter, storeId, graphQLOptions, boot, ba
|
|
|
70
78
|
const store = new Store({
|
|
71
79
|
clientSession,
|
|
72
80
|
schema,
|
|
73
|
-
|
|
81
|
+
context,
|
|
74
82
|
otelOptions: { tracer: otelTracer, rootSpanContext: otelRootSpanContext },
|
|
75
83
|
disableDevtools,
|
|
76
84
|
unsyncedMutationEvents,
|
|
77
85
|
lifetimeScope,
|
|
78
86
|
runtime,
|
|
87
|
+
confirmUnsavedChanges,
|
|
79
88
|
// NOTE during boot we're not yet executing mutations in a batched context
|
|
80
89
|
// but only set the provided `batchUpdates` function after boot
|
|
81
90
|
batchUpdates: (run) => run(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-store.js","sourceRoot":"","sources":["../../src/store/create-store.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EACL,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,cAAc,EACd,UAAU,EACV,KAAK,EACL,OAAO,EACP,KAAK,EACL,WAAW,GACZ,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create-store.js","sourceRoot":"","sources":["../../src/store/create-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.d.ts","sourceRoot":"","sources":["../../src/store/devtools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAwB,MAAM,mBAAmB,CAAA;AACxG,OAAO,EAAE,QAAQ,EAAoB,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,MAAM,EAAU,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"devtools.d.ts","sourceRoot":"","sources":["../../src/store/devtools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAwB,MAAM,mBAAmB,CAAA;AACxG,OAAO,EAAE,QAAQ,EAAoB,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,MAAM,EAAU,MAAM,yBAAyB,CAAA;AAGxD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEtE,KAAK,MAAM,GAAG;IACZ,aAAa,EAAE,aAAa,CAAA;IAC5B,eAAe,EAAE,eAAe,CAAA;IAChC,eAAe,EAAE,eAAe,CAAA;IAChC,aAAa,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IAClD,aAAa,EAAE,0BAA0B,CAAA;CAC1C,CAAA;AAeD,eAAO,MAAM,sBAAsB,GAAI,kCAGpC;IACD,oBAAoB,EAAE,UAAU,CAAC,UAAU,CACzC,QAAQ,CAAC,aAAa,CAAC,YAAY,EACnC,QAAQ,CAAC,aAAa,CAAC,cAAc,CACtC,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;CACd,uEAgRsG,CAAA"}
|
package/dist/store/devtools.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Devtools, liveStoreVersion, UnexpectedError } from '@livestore/common';
|
|
2
2
|
import { throttle } from '@livestore/utils';
|
|
3
3
|
import { Effect, Stream } from '@livestore/utils/effect';
|
|
4
|
+
import { nanoid } from '@livestore/utils/nanoid';
|
|
4
5
|
import { NOT_REFRESHED_YET } from '../reactive.js';
|
|
5
6
|
import { emptyDebugInfo as makeEmptyDebugInfo } from '../SqliteDbWrapper.js';
|
|
6
7
|
// When running this code in Node.js, we need to use `setTimeout` instead of `requestAnimationFrame`
|
|
@@ -20,6 +21,7 @@ export const connectDevtoolsToStore = ({ storeDevtoolsChannel, store, }) => Effe
|
|
|
20
21
|
debugInfoHistorySubscriptions.forEach((unsub) => unsub());
|
|
21
22
|
syncHeadClientSessionSubscriptions.forEach((unsub) => unsub());
|
|
22
23
|
}));
|
|
24
|
+
const handledRequestIds = new Set();
|
|
23
25
|
const sendToDevtools = (message) => storeDevtoolsChannel.send(message).pipe(Effect.tapCauseLogPretty, Effect.runFork);
|
|
24
26
|
const onMessage = (decodedMessage) => {
|
|
25
27
|
// console.debug('@livestore/livestore:store:devtools:onMessage', decodedMessage)
|
|
@@ -32,26 +34,36 @@ export const connectDevtoolsToStore = ({ storeDevtoolsChannel, store, }) => Effe
|
|
|
32
34
|
return;
|
|
33
35
|
}
|
|
34
36
|
const requestId = decodedMessage.requestId;
|
|
37
|
+
// TODO we should try to move the duplicate message handling on the webmesh layer
|
|
38
|
+
// So far I could only observe this problem with webmesh proxy channels (e.g. for Expo)
|
|
39
|
+
// Proof: https://share.cleanshot.com/V9G87B0B
|
|
40
|
+
// Also see `leader-worker-devtools.ts` for same problem
|
|
41
|
+
if (handledRequestIds.has(requestId)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
handledRequestIds.add(requestId);
|
|
35
45
|
const requestIdleCallback = globalThis.requestIdleCallback ?? ((cb) => cb());
|
|
36
46
|
switch (decodedMessage._tag) {
|
|
37
47
|
case 'LSD.ClientSession.ReactivityGraphSubscribe': {
|
|
38
48
|
const includeResults = decodedMessage.includeResults;
|
|
49
|
+
const { subscriptionId } = decodedMessage;
|
|
39
50
|
const send = () =>
|
|
40
51
|
// In order to not add more work to the current tick, we use requestIdleCallback
|
|
41
52
|
// to send the reactivity graph updates to the devtools
|
|
42
53
|
requestIdleCallback(() => sendToDevtools(Devtools.ClientSession.ReactivityGraphRes.make({
|
|
43
54
|
reactivityGraph: store.reactivityGraph.getSnapshot({ includeResults }),
|
|
44
|
-
requestId,
|
|
55
|
+
requestId: nanoid(10),
|
|
45
56
|
clientId,
|
|
46
57
|
sessionId,
|
|
47
58
|
liveStoreVersion,
|
|
59
|
+
subscriptionId,
|
|
48
60
|
})), { timeout: 500 });
|
|
49
61
|
send();
|
|
50
62
|
// In some cases, there can be A LOT of reactivity graph updates in a short period of time
|
|
51
63
|
// so we throttle the updates to avoid sending too much data
|
|
52
64
|
// This might need to be tweaked further and possibly be exposed to the user in some way.
|
|
53
65
|
const throttledSend = throttle(send, 20);
|
|
54
|
-
reactivityGraphSubcriptions.set(
|
|
66
|
+
reactivityGraphSubcriptions.set(subscriptionId, store.reactivityGraph.subscribeToRefresh(throttledSend));
|
|
55
67
|
break;
|
|
56
68
|
}
|
|
57
69
|
case 'LSD.ClientSession.DebugInfoReq': {
|
|
@@ -65,6 +77,7 @@ export const connectDevtoolsToStore = ({ storeDevtoolsChannel, store, }) => Effe
|
|
|
65
77
|
break;
|
|
66
78
|
}
|
|
67
79
|
case 'LSD.ClientSession.DebugInfoHistorySubscribe': {
|
|
80
|
+
const { subscriptionId } = decodedMessage;
|
|
68
81
|
const buffer = [];
|
|
69
82
|
let hasStopped = false;
|
|
70
83
|
let tickHandle;
|
|
@@ -78,10 +91,11 @@ export const connectDevtoolsToStore = ({ storeDevtoolsChannel, store, }) => Effe
|
|
|
78
91
|
if (buffer.length > 10) {
|
|
79
92
|
sendToDevtools(Devtools.ClientSession.DebugInfoHistoryRes.make({
|
|
80
93
|
debugInfoHistory: buffer,
|
|
81
|
-
requestId,
|
|
94
|
+
requestId: nanoid(10),
|
|
82
95
|
clientId,
|
|
83
96
|
sessionId,
|
|
84
97
|
liveStoreVersion,
|
|
98
|
+
subscriptionId,
|
|
85
99
|
}));
|
|
86
100
|
buffer.length = 0;
|
|
87
101
|
}
|
|
@@ -97,14 +111,15 @@ export const connectDevtoolsToStore = ({ storeDevtoolsChannel, store, }) => Effe
|
|
|
97
111
|
tickHandle = undefined;
|
|
98
112
|
}
|
|
99
113
|
};
|
|
100
|
-
debugInfoHistorySubscriptions.set(
|
|
114
|
+
debugInfoHistorySubscriptions.set(subscriptionId, unsub);
|
|
101
115
|
break;
|
|
102
116
|
}
|
|
103
117
|
case 'LSD.ClientSession.DebugInfoHistoryUnsubscribe': {
|
|
118
|
+
const { subscriptionId } = decodedMessage;
|
|
104
119
|
// NOTE given WebMesh channels have persistent retry behaviour, it can happen that a previous
|
|
105
120
|
// WebMesh channel will send a unsubscribe message for an old requestId. Thus the `?.()` handling.
|
|
106
|
-
debugInfoHistorySubscriptions.get(
|
|
107
|
-
debugInfoHistorySubscriptions.delete(
|
|
121
|
+
debugInfoHistorySubscriptions.get(subscriptionId)?.();
|
|
122
|
+
debugInfoHistorySubscriptions.delete(subscriptionId);
|
|
108
123
|
break;
|
|
109
124
|
}
|
|
110
125
|
case 'LSD.ClientSession.DebugInfoResetReq': {
|
|
@@ -119,12 +134,15 @@ export const connectDevtoolsToStore = ({ storeDevtoolsChannel, store, }) => Effe
|
|
|
119
134
|
break;
|
|
120
135
|
}
|
|
121
136
|
case 'LSD.ClientSession.ReactivityGraphUnsubscribe': {
|
|
137
|
+
const { subscriptionId } = decodedMessage;
|
|
122
138
|
// NOTE given WebMesh channels have persistent retry behaviour, it can happen that a previous
|
|
123
139
|
// WebMesh channel will send a unsubscribe message for an old requestId. Thus the `?.()` handling.
|
|
124
|
-
reactivityGraphSubcriptions.get(
|
|
140
|
+
reactivityGraphSubcriptions.get(subscriptionId)?.();
|
|
141
|
+
reactivityGraphSubcriptions.delete(subscriptionId);
|
|
125
142
|
break;
|
|
126
143
|
}
|
|
127
144
|
case 'LSD.ClientSession.LiveQueriesSubscribe': {
|
|
145
|
+
const { subscriptionId } = decodedMessage;
|
|
128
146
|
const send = () => requestIdleCallback(() => sendToDevtools(Devtools.ClientSession.LiveQueriesRes.make({
|
|
129
147
|
liveQueries: [...store.activeQueries].map((q) => ({
|
|
130
148
|
_tag: q._tag,
|
|
@@ -137,40 +155,47 @@ export const connectDevtoolsToStore = ({ storeDevtoolsChannel, store, }) => Effe
|
|
|
137
155
|
: q.results$.previousResult,
|
|
138
156
|
activeSubscriptions: Array.from(q.activeSubscriptions),
|
|
139
157
|
})),
|
|
140
|
-
requestId,
|
|
158
|
+
requestId: nanoid(10),
|
|
141
159
|
liveStoreVersion,
|
|
142
160
|
clientId,
|
|
143
161
|
sessionId,
|
|
162
|
+
subscriptionId,
|
|
144
163
|
})), { timeout: 500 });
|
|
145
164
|
send();
|
|
146
165
|
// Same as in the reactivity graph subscription case above, we need to throttle the updates
|
|
147
166
|
const throttledSend = throttle(send, 20);
|
|
148
|
-
liveQueriesSubscriptions.set(
|
|
167
|
+
liveQueriesSubscriptions.set(subscriptionId, store.reactivityGraph.subscribeToRefresh(throttledSend));
|
|
149
168
|
break;
|
|
150
169
|
}
|
|
151
170
|
case 'LSD.ClientSession.LiveQueriesUnsubscribe': {
|
|
171
|
+
const { subscriptionId } = decodedMessage;
|
|
152
172
|
// NOTE given WebMesh channels have persistent retry behaviour, it can happen that a previous
|
|
153
173
|
// WebMesh channel will send a unsubscribe message for an old requestId. Thus the `?.()` handling.
|
|
154
|
-
liveQueriesSubscriptions.get(
|
|
155
|
-
liveQueriesSubscriptions.delete(
|
|
174
|
+
liveQueriesSubscriptions.get(subscriptionId)?.();
|
|
175
|
+
liveQueriesSubscriptions.delete(subscriptionId);
|
|
156
176
|
break;
|
|
157
177
|
}
|
|
158
178
|
case 'LSD.ClientSession.SyncHeadSubscribe': {
|
|
179
|
+
const { subscriptionId } = decodedMessage;
|
|
159
180
|
const send = (syncState) => sendToDevtools(Devtools.ClientSession.SyncHeadRes.make({
|
|
160
181
|
local: syncState.localHead,
|
|
161
182
|
upstream: syncState.upstreamHead,
|
|
162
|
-
requestId,
|
|
183
|
+
requestId: nanoid(10),
|
|
163
184
|
clientId,
|
|
164
185
|
sessionId,
|
|
165
186
|
liveStoreVersion,
|
|
187
|
+
subscriptionId,
|
|
166
188
|
}));
|
|
167
189
|
send(store.syncProcessor.syncState.pipe(Effect.runSync));
|
|
168
|
-
syncHeadClientSessionSubscriptions.set(
|
|
190
|
+
syncHeadClientSessionSubscriptions.set(subscriptionId, store.syncProcessor.syncState.changes.pipe(Stream.tap((syncState) => send(syncState)), Stream.runDrain, Effect.interruptible, Effect.tapCauseLogPretty, Effect.runCallback));
|
|
169
191
|
break;
|
|
170
192
|
}
|
|
171
193
|
case 'LSD.ClientSession.SyncHeadUnsubscribe': {
|
|
172
|
-
|
|
173
|
-
|
|
194
|
+
const { subscriptionId } = decodedMessage;
|
|
195
|
+
// NOTE given WebMesh channels have persistent retry behaviour, it can happen that a previous
|
|
196
|
+
// WebMesh channel will send a unsubscribe message for an old requestId. Thus the `?.()` handling.
|
|
197
|
+
syncHeadClientSessionSubscriptions.get(subscriptionId)?.();
|
|
198
|
+
syncHeadClientSessionSubscriptions.delete(subscriptionId);
|
|
174
199
|
break;
|
|
175
200
|
}
|
|
176
201
|
default: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../src/store/devtools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../src/store/devtools.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,7 @@ import type { ClientSession, IntentionalShutdownCause, StoreInterrupted, Unexpec
|
|
|
2
2
|
import type { EventId, LiveStoreSchema, MutationEvent } from '@livestore/common/schema';
|
|
3
3
|
import type { Deferred, MutableHashMap, Runtime, Scope } from '@livestore/utils/effect';
|
|
4
4
|
import type * as otel from '@opentelemetry/api';
|
|
5
|
-
import type { GraphQLSchema } from 'graphql';
|
|
6
5
|
import type { DebugRefreshReasonBase } from '../reactive.js';
|
|
7
|
-
import type { SqliteDbWrapper } from '../SqliteDbWrapper.js';
|
|
8
6
|
import type { StackInfo } from '../utils/stack-info.js';
|
|
9
7
|
import type { Store } from './store.js';
|
|
10
8
|
export type LiveStoreContext = LiveStoreContextRunning | {
|
|
@@ -19,28 +17,20 @@ export type LiveStoreContextRunning = {
|
|
|
19
17
|
stage: 'running';
|
|
20
18
|
store: Store;
|
|
21
19
|
};
|
|
22
|
-
export type BaseGraphQLContext = {
|
|
23
|
-
queriedTables: Set<string>;
|
|
24
|
-
/** Needed by Pothos Otel plugin for resolver tracing to work */
|
|
25
|
-
otelContext?: otel.Context;
|
|
26
|
-
};
|
|
27
|
-
export type GraphQLOptions<TContext> = {
|
|
28
|
-
schema: GraphQLSchema;
|
|
29
|
-
makeContext: (db: SqliteDbWrapper, tracer: otel.Tracer, sessionId: string) => TContext;
|
|
30
|
-
};
|
|
31
20
|
export type OtelOptions = {
|
|
32
21
|
tracer: otel.Tracer;
|
|
33
22
|
rootSpanContext: otel.Context;
|
|
34
23
|
};
|
|
35
|
-
export type StoreOptions<
|
|
24
|
+
export type StoreOptions<TSchema extends LiveStoreSchema = LiveStoreSchema, TContext = {}> = {
|
|
36
25
|
clientSession: ClientSession;
|
|
37
26
|
schema: TSchema;
|
|
38
27
|
storeId: string;
|
|
39
|
-
|
|
28
|
+
context: TContext;
|
|
40
29
|
otelOptions: OtelOptions;
|
|
41
30
|
disableDevtools?: boolean;
|
|
42
31
|
lifetimeScope: Scope.Scope;
|
|
43
32
|
runtime: Runtime.Runtime<Scope.Scope>;
|
|
33
|
+
confirmUnsavedChanges: boolean;
|
|
44
34
|
batchUpdates: (runUpdates: () => void) => void;
|
|
45
35
|
unsyncedMutationEvents: MutableHashMap.MutableHashMap<EventId.EventId, MutationEvent.ForSchema<TSchema>>;
|
|
46
36
|
params: {
|
|
@@ -69,7 +59,7 @@ export type RefreshReason = DebugRefreshReasonBase | {
|
|
|
69
59
|
label?: string;
|
|
70
60
|
};
|
|
71
61
|
export type QueryDebugInfo = {
|
|
72
|
-
_tag:
|
|
62
|
+
_tag: string;
|
|
73
63
|
label: string;
|
|
74
64
|
query: string;
|
|
75
65
|
durationMs: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-types.d.ts","sourceRoot":"","sources":["../../src/store/store-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACvF,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"store-types.d.ts","sourceRoot":"","sources":["../../src/store/store-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACvF,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,MAAM,MAAM,gBAAgB,GACxB,uBAAuB,GACvB;IACE,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,eAAe,GAAG,OAAO,CAAA;CACjC,GACD;IACE,KAAK,EAAE,UAAU,CAAA;IACjB,KAAK,EAAE,wBAAwB,GAAG,gBAAgB,CAAA;CACnD,CAAA;AAEL,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,wBAAwB,GAAG,gBAAgB,CAAC,CAAA;AAErH,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;IACnB,eAAe,EAAE,IAAI,CAAC,OAAO,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,eAAe,GAAG,eAAe,EAAE,QAAQ,GAAG,EAAE,IAAI;IAC3F,aAAa,EAAE,aAAa,CAAA;IAC5B,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,QAAQ,CAAA;IACjB,WAAW,EAAE,WAAW,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,aAAa,EAAE,KAAK,CAAC,KAAK,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACrC,qBAAqB,EAAE,OAAO,CAAA;IAC9B,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IAE9C,sBAAsB,EAAE,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACxG,MAAM,EAAE;QACN,mBAAmB,EAAE,MAAM,CAAA;KAC5B,CAAA;CACF,CAAA;AAED,MAAM,MAAM,aAAa,GACrB,sBAAsB,GACtB;IACE,IAAI,EAAE,QAAQ,CAAA;IACd,sCAAsC;IACtC,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,UAAU,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAA;IAEpF,mDAAmD;IACnD,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACnC,GACD;IAEE,IAAI,EAAE,OAAO,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB,GACD;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtC,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;IACnB,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAA;IAClC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAA"}
|
package/dist/store/store.d.ts
CHANGED
|
@@ -4,21 +4,19 @@ import { MutationEvent } from '@livestore/common/schema';
|
|
|
4
4
|
import type { Scope } from '@livestore/utils/effect';
|
|
5
5
|
import { Effect, Inspectable, Stream } from '@livestore/utils/effect';
|
|
6
6
|
import * as otel from '@opentelemetry/api';
|
|
7
|
-
import { type GraphQLSchema } from 'graphql';
|
|
8
7
|
import type { ILiveQueryRefDef, LiveQuery, LiveQueryDef, ReactivityGraph, ReactivityGraphContext } from '../live-queries/base-class.js';
|
|
9
8
|
import type { Ref } from '../reactive.js';
|
|
10
9
|
import { SqliteDbWrapper } from '../SqliteDbWrapper.js';
|
|
11
10
|
import { ReferenceCountedSet } from '../utils/data-structures.js';
|
|
12
11
|
import type { StackInfo } from '../utils/stack-info.js';
|
|
13
|
-
import type {
|
|
14
|
-
export declare class Store<
|
|
12
|
+
import type { RefreshReason, StoreMutateOptions, StoreOptions, StoreOtel, Unsubscribe } from './store-types.js';
|
|
13
|
+
export declare class Store<TSchema extends LiveStoreSchema = LiveStoreSchema, TContext = {}> extends Inspectable.Class {
|
|
15
14
|
readonly storeId: string;
|
|
16
15
|
reactivityGraph: ReactivityGraph;
|
|
17
16
|
sqliteDbWrapper: SqliteDbWrapper;
|
|
18
17
|
clientSession: ClientSession;
|
|
19
18
|
schema: LiveStoreSchema;
|
|
20
|
-
|
|
21
|
-
graphQLContext?: TGraphQLContext;
|
|
19
|
+
context: TContext;
|
|
22
20
|
otel: StoreOtel;
|
|
23
21
|
/**
|
|
24
22
|
* Note we're using `Ref<null>` here as we don't care about the value but only about *that* something has changed.
|
|
@@ -35,7 +33,7 @@ export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGrap
|
|
|
35
33
|
readonly syncProcessor: ClientSessionSyncProcessor;
|
|
36
34
|
readonly lifetimeScope: Scope.Scope;
|
|
37
35
|
readonly boot: Effect.Effect<void, UnexpectedError, Scope.Scope>;
|
|
38
|
-
constructor({ clientSession, schema,
|
|
36
|
+
constructor({ clientSession, schema, otelOptions, context, disableDevtools, batchUpdates, unsyncedMutationEvents, storeId, lifetimeScope, runtime, params, confirmUnsavedChanges, }: StoreOptions<TSchema, TContext>);
|
|
39
37
|
get sessionId(): string;
|
|
40
38
|
get clientId(): string;
|
|
41
39
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,0BAA0B,EAC1B,YAAY,EAEZ,YAAY,EACZ,eAAe,EAChB,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
|
package/dist/store/store.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Devtools, getExecArgsFromMutation, getResultSchema, IntentionalShutdownCause, isQueryBuilder, liveStoreVersion, makeClientSessionSyncProcessor, prepareBindValues, QueryBuilderAstSymbol, replaceSessionIdSymbol, } from '@livestore/common';
|
|
1
|
+
import { Devtools, getDurationMsFromSpan, getExecArgsFromMutation, getResultSchema, IntentionalShutdownCause, isQueryBuilder, liveStoreVersion, makeClientSessionSyncProcessor, prepareBindValues, QueryBuilderAstSymbol, replaceSessionIdSymbol, } from '@livestore/common';
|
|
2
2
|
import { getMutationDef, MutationEvent, SCHEMA_META_TABLE, SCHEMA_MUTATIONS_META_TABLE, SESSION_CHANGESET_META_TABLE, } from '@livestore/common/schema';
|
|
3
3
|
import { assertNever, isDevEnv } from '@livestore/utils';
|
|
4
4
|
import { Cause, Data, Effect, Inspectable, MutableHashMap, OtelTracer, Runtime, Schema, Stream, } from '@livestore/utils/effect';
|
|
@@ -9,7 +9,6 @@ import { makeExecBeforeFirstRun } from '../row-query-utils.js';
|
|
|
9
9
|
import { SqliteDbWrapper } from '../SqliteDbWrapper.js';
|
|
10
10
|
import { ReferenceCountedSet } from '../utils/data-structures.js';
|
|
11
11
|
import { downloadBlob, exposeDebugUtils } from '../utils/dev.js';
|
|
12
|
-
import { getDurationMsFromSpan } from '../utils/otel.js';
|
|
13
12
|
if (isDevEnv()) {
|
|
14
13
|
exposeDebugUtils();
|
|
15
14
|
}
|
|
@@ -19,8 +18,7 @@ export class Store extends Inspectable.Class {
|
|
|
19
18
|
sqliteDbWrapper;
|
|
20
19
|
clientSession;
|
|
21
20
|
schema;
|
|
22
|
-
|
|
23
|
-
graphQLContext;
|
|
21
|
+
context;
|
|
24
22
|
otel;
|
|
25
23
|
/**
|
|
26
24
|
* Note we're using `Ref<null>` here as we don't care about the value but only about *that* something has changed.
|
|
@@ -37,13 +35,14 @@ export class Store extends Inspectable.Class {
|
|
|
37
35
|
lifetimeScope;
|
|
38
36
|
boot;
|
|
39
37
|
// #region constructor
|
|
40
|
-
constructor({ clientSession, schema,
|
|
38
|
+
constructor({ clientSession, schema, otelOptions, context, disableDevtools, batchUpdates, unsyncedMutationEvents, storeId, lifetimeScope, runtime, params, confirmUnsavedChanges, }) {
|
|
41
39
|
super();
|
|
42
40
|
this.storeId = storeId;
|
|
43
41
|
this.unsyncedMutationEvents = unsyncedMutationEvents;
|
|
44
42
|
this.sqliteDbWrapper = new SqliteDbWrapper({ otel: otelOptions, db: clientSession.sqliteDb });
|
|
45
43
|
this.clientSession = clientSession;
|
|
46
44
|
this.schema = schema;
|
|
45
|
+
this.context = context;
|
|
47
46
|
this.lifetimeScope = lifetimeScope;
|
|
48
47
|
this.runtime = runtime;
|
|
49
48
|
const reactivityGraph = makeReactivityGraph();
|
|
@@ -91,6 +90,7 @@ export class Store extends Inspectable.Class {
|
|
|
91
90
|
params: {
|
|
92
91
|
leaderPushBatchSize: params.leaderPushBatchSize,
|
|
93
92
|
},
|
|
93
|
+
confirmUnsavedChanges,
|
|
94
94
|
});
|
|
95
95
|
this.__mutationEventSchema = MutationEvent.makeMutationEventSchemaMemo(schema);
|
|
96
96
|
// TODO generalize the `tableRefs` concept to allow finer-grained refs
|
|
@@ -130,10 +130,6 @@ export class Store extends Inspectable.Class {
|
|
|
130
130
|
for (const tableName of allTableNames) {
|
|
131
131
|
this.tableRefs[tableName] = existingTableRefs.get(tableName) ?? this.makeTableRef(tableName);
|
|
132
132
|
}
|
|
133
|
-
if (graphQLOptions) {
|
|
134
|
-
this.graphQLSchema = graphQLOptions.schema;
|
|
135
|
-
this.graphQLContext = graphQLOptions.makeContext(this.sqliteDbWrapper, this.otel.tracer, clientSession.sessionId);
|
|
136
|
-
}
|
|
137
133
|
this.boot = Effect.gen(this, function* () {
|
|
138
134
|
yield* Effect.addFinalizer(() => Effect.sync(() => {
|
|
139
135
|
// Remove all table refs from the reactivity graph
|