@livestore/livestore 0.3.0-dev.5 → 0.3.0-dev.51
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/QueryCache.d.ts.map +1 -1
- package/dist/SqliteDbWrapper.d.ts +60 -0
- package/dist/SqliteDbWrapper.d.ts.map +1 -0
- package/dist/{SynchronousDatabaseWrapper.js → SqliteDbWrapper.js} +69 -34
- package/dist/SqliteDbWrapper.js.map +1 -0
- package/dist/effect/LiveStore.d.ts +6 -34
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +10 -12
- 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 +69 -29
- package/dist/live-queries/base-class.d.ts.map +1 -1
- package/dist/live-queries/base-class.js +60 -14
- package/dist/live-queries/base-class.js.map +1 -1
- package/dist/live-queries/client-document-get-query.d.ts +12 -0
- package/dist/live-queries/client-document-get-query.d.ts.map +1 -0
- package/dist/live-queries/client-document-get-query.js +18 -0
- package/dist/live-queries/client-document-get-query.js.map +1 -0
- package/dist/live-queries/computed.d.ts +13 -15
- package/dist/live-queries/computed.d.ts.map +1 -1
- package/dist/live-queries/computed.js +37 -15
- package/dist/live-queries/computed.js.map +1 -1
- package/dist/live-queries/db-query.d.ts +93 -0
- package/dist/live-queries/db-query.d.ts.map +1 -0
- package/dist/live-queries/{db.js → db-query.js} +113 -40
- package/dist/live-queries/db-query.js.map +1 -0
- package/dist/live-queries/db-query.test.d.ts +2 -0
- package/dist/live-queries/db-query.test.d.ts.map +1 -0
- package/dist/live-queries/db-query.test.js +133 -0
- package/dist/live-queries/db-query.test.js.map +1 -0
- 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/live-queries/signal.d.ts +25 -0
- package/dist/live-queries/signal.d.ts.map +1 -0
- package/dist/live-queries/signal.js +50 -0
- package/dist/live-queries/signal.js.map +1 -0
- package/dist/live-queries/signal.test.d.ts +2 -0
- package/dist/live-queries/signal.test.d.ts.map +1 -0
- package/dist/live-queries/signal.test.js +25 -0
- package/dist/live-queries/signal.test.js.map +1 -0
- package/dist/mod.d.ts +14 -0
- package/dist/mod.d.ts.map +1 -0
- package/dist/mod.js +13 -0
- package/dist/mod.js.map +1 -0
- package/dist/reactive.d.ts +23 -17
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +23 -19
- package/dist/reactive.js.map +1 -1
- package/dist/reactive.test.js +1 -1
- package/dist/reactive.test.js.map +1 -1
- package/dist/store/create-store.d.ts +70 -12
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/create-store.js +68 -19
- package/dist/store/create-store.js.map +1 -1
- package/dist/store/devtools.d.ts +5 -4
- package/dist/store/devtools.d.ts.map +1 -1
- package/dist/store/devtools.js +92 -40
- package/dist/store/devtools.js.map +1 -1
- package/dist/store/store-types.d.ts +54 -42
- package/dist/store/store-types.d.ts.map +1 -1
- package/dist/store/store-types.js +2 -5
- package/dist/store/store-types.js.map +1 -1
- package/dist/store/store.d.ts +141 -35
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +322 -154
- package/dist/store/store.js.map +1 -1
- package/dist/utils/data-structures.d.ts.map +1 -1
- package/dist/utils/dev.d.ts.map +1 -1
- package/dist/utils/dev.js +6 -1
- package/dist/utils/dev.js.map +1 -1
- package/dist/utils/function-string.d.ts +7 -0
- package/dist/utils/function-string.d.ts.map +1 -0
- package/dist/utils/function-string.js +9 -0
- package/dist/utils/function-string.js.map +1 -0
- package/dist/utils/stack-info.d.ts.map +1 -1
- package/dist/utils/stack-info.js +6 -1
- package/dist/utils/stack-info.js.map +1 -1
- package/dist/utils/stack-info.test.js +54 -1
- package/dist/utils/stack-info.test.js.map +1 -1
- package/dist/utils/tests/fixture.d.ts +59 -216
- package/dist/utils/tests/fixture.d.ts.map +1 -1
- package/dist/utils/tests/fixture.js +23 -18
- package/dist/utils/tests/fixture.js.map +1 -1
- package/dist/utils/tests/mod.d.ts +1 -0
- package/dist/utils/tests/mod.d.ts.map +1 -1
- package/dist/utils/tests/mod.js +1 -0
- package/dist/utils/tests/mod.js.map +1 -1
- package/dist/utils/tests/otel.d.ts.map +1 -1
- package/dist/utils/tests/otel.js +8 -3
- package/dist/utils/tests/otel.js.map +1 -1
- package/package.json +29 -26
- package/src/{SynchronousDatabaseWrapper.ts → SqliteDbWrapper.ts} +92 -42
- package/src/effect/LiveStore.ts +27 -64
- package/src/effect/{index.ts → mod.ts} +2 -3
- package/src/internal/mod.ts +2 -0
- package/src/live-queries/__snapshots__/{db.test.ts.snap → db-query.test.ts.snap} +241 -45
- package/src/live-queries/base-class.ts +170 -53
- package/src/live-queries/client-document-get-query.ts +52 -0
- package/src/live-queries/computed.ts +51 -33
- package/src/live-queries/db-query.test.ts +192 -0
- package/src/live-queries/{db.ts → db-query.ts} +171 -82
- package/src/live-queries/mod.ts +4 -0
- package/src/live-queries/signal.test.ts +40 -0
- package/src/live-queries/signal.ts +81 -0
- package/src/mod.ts +51 -0
- package/src/reactive.test.ts +1 -1
- package/src/reactive.ts +66 -43
- package/src/store/create-store.ts +188 -62
- package/src/store/devtools.ts +124 -46
- package/src/store/store-types.ts +54 -43
- package/src/store/store.ts +457 -237
- package/src/utils/dev.ts +6 -1
- package/src/utils/function-string.ts +12 -0
- package/src/utils/stack-info.test.ts +58 -1
- package/src/utils/stack-info.ts +6 -1
- package/src/utils/tests/fixture.ts +22 -31
- package/src/utils/tests/mod.ts +1 -0
- package/src/utils/tests/otel.ts +10 -3
- package/dist/SynchronousDatabaseWrapper.d.ts +0 -41
- package/dist/SynchronousDatabaseWrapper.d.ts.map +0 -1
- package/dist/SynchronousDatabaseWrapper.js.map +0 -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/global-state.d.ts +0 -14
- package/dist/global-state.d.ts.map +0 -1
- package/dist/global-state.js +0 -16
- package/dist/global-state.js.map +0 -1
- package/dist/index.d.ts +0 -20
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -16
- package/dist/index.js.map +0 -1
- package/dist/live-queries/db.d.ts +0 -66
- package/dist/live-queries/db.d.ts.map +0 -1
- package/dist/live-queries/db.js.map +0 -1
- package/dist/live-queries/db.test.d.ts +0 -2
- package/dist/live-queries/db.test.d.ts.map +0 -1
- package/dist/live-queries/db.test.js +0 -118
- package/dist/live-queries/db.test.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 -122
- package/dist/live-queries/graphql.js.map +0 -1
- package/dist/row-query-utils.d.ts +0 -17
- package/dist/row-query-utils.d.ts.map +0 -1
- package/dist/row-query-utils.js +0 -30
- package/dist/row-query-utils.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/global-state.ts +0 -20
- package/src/index.ts +0 -66
- package/src/live-queries/db.test.ts +0 -154
- package/src/live-queries/graphql.ts +0 -219
- package/src/row-query-utils.ts +0 -65
- package/src/utils/otel.ts +0 -9
- package/tsconfig.json +0 -18
- package/vitest.config.js +0 -9
@@ -1,12 +1,9 @@
|
|
1
|
-
import type { ClientSession, IntentionalShutdownCause, UnexpectedError } from '@livestore/common';
|
2
|
-
import type {
|
3
|
-
import type {
|
4
|
-
import {
|
1
|
+
import type { ClientSession, IntentionalShutdownCause, StoreInterrupted, UnexpectedError } from '@livestore/common';
|
2
|
+
import type { EventSequenceNumber, LiveStoreEvent, LiveStoreSchema } from '@livestore/common/schema';
|
3
|
+
import type { Effect, Runtime, Scope } from '@livestore/utils/effect';
|
4
|
+
import { Deferred } from '@livestore/utils/effect';
|
5
5
|
import type * as otel from '@opentelemetry/api';
|
6
|
-
import type { GraphQLSchema } from 'graphql';
|
7
|
-
import type { ReactivityGraph } from '../live-queries/base-class.js';
|
8
6
|
import type { DebugRefreshReasonBase } from '../reactive.js';
|
9
|
-
import type { SynchronousDatabaseWrapper } from '../SynchronousDatabaseWrapper.js';
|
10
7
|
import type { StackInfo } from '../utils/stack-info.js';
|
11
8
|
import type { Store } from './store.js';
|
12
9
|
export type LiveStoreContext = LiveStoreContextRunning | {
|
@@ -14,53 +11,39 @@ export type LiveStoreContext = LiveStoreContextRunning | {
|
|
14
11
|
error: UnexpectedError | unknown;
|
15
12
|
} | {
|
16
13
|
stage: 'shutdown';
|
17
|
-
cause: IntentionalShutdownCause |
|
14
|
+
cause: IntentionalShutdownCause | StoreInterrupted;
|
18
15
|
};
|
19
|
-
|
20
|
-
|
21
|
-
}>;
|
22
|
-
export declare class StoreAbort extends StoreAbort_base {
|
23
|
-
}
|
24
|
-
declare const StoreInterrupted_base: Schema.TaggedErrorClass<StoreInterrupted, "LiveStore.StoreInterrupted", {
|
25
|
-
readonly _tag: Schema.tag<"LiveStore.StoreInterrupted">;
|
26
|
-
}>;
|
27
|
-
export declare class StoreInterrupted extends StoreInterrupted_base {
|
28
|
-
}
|
29
|
-
export type ShutdownDeferred = Deferred.Deferred<void, UnexpectedError | IntentionalShutdownCause | StoreInterrupted | StoreAbort>;
|
16
|
+
export type ShutdownDeferred = Deferred.Deferred<void, UnexpectedError | IntentionalShutdownCause | StoreInterrupted>;
|
17
|
+
export declare const makeShutdownDeferred: Effect.Effect<ShutdownDeferred>;
|
30
18
|
export type LiveStoreContextRunning = {
|
31
19
|
stage: 'running';
|
32
20
|
store: Store;
|
33
21
|
};
|
34
|
-
export type BaseGraphQLContext = {
|
35
|
-
queriedTables: Set<string>;
|
36
|
-
/** Needed by Pothos Otel plugin for resolver tracing to work */
|
37
|
-
otelContext?: otel.Context;
|
38
|
-
};
|
39
|
-
export type GraphQLOptions<TContext> = {
|
40
|
-
schema: GraphQLSchema;
|
41
|
-
makeContext: (db: SynchronousDatabaseWrapper, tracer: otel.Tracer, sessionId: string) => TContext;
|
42
|
-
};
|
43
22
|
export type OtelOptions = {
|
44
23
|
tracer: otel.Tracer;
|
45
24
|
rootSpanContext: otel.Context;
|
46
25
|
};
|
47
|
-
export type StoreOptions<
|
26
|
+
export type StoreOptions<TSchema extends LiveStoreSchema = LiveStoreSchema, TContext = {}> = {
|
48
27
|
clientSession: ClientSession;
|
49
28
|
schema: TSchema;
|
50
29
|
storeId: string;
|
51
|
-
|
30
|
+
context: TContext;
|
52
31
|
otelOptions: OtelOptions;
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
32
|
+
effectContext: {
|
33
|
+
runtime: Runtime.Runtime<Scope.Scope>;
|
34
|
+
lifetimeScope: Scope.Scope;
|
35
|
+
};
|
36
|
+
confirmUnsavedChanges: boolean;
|
57
37
|
batchUpdates: (runUpdates: () => void) => void;
|
58
|
-
|
38
|
+
params: {
|
39
|
+
leaderPushBatchSize: number;
|
40
|
+
};
|
41
|
+
__runningInDevtools: boolean;
|
59
42
|
};
|
60
43
|
export type RefreshReason = DebugRefreshReasonBase | {
|
61
|
-
_tag: '
|
62
|
-
/** The
|
63
|
-
|
44
|
+
_tag: 'commit';
|
45
|
+
/** The events that were applied */
|
46
|
+
events: ReadonlyArray<LiveStoreEvent.AnyDecoded | LiveStoreEvent.PartialAnyDecoded>;
|
64
47
|
/** The tables that were written to by the event */
|
65
48
|
writeTables: ReadonlyArray<string>;
|
66
49
|
} | {
|
@@ -68,26 +51,55 @@ export type RefreshReason = DebugRefreshReasonBase | {
|
|
68
51
|
api: string;
|
69
52
|
label?: string;
|
70
53
|
stackInfo?: StackInfo;
|
54
|
+
} | {
|
55
|
+
_tag: 'subscribe.initial';
|
56
|
+
label?: string;
|
57
|
+
} | {
|
58
|
+
_tag: 'subscribe.update';
|
59
|
+
label?: string;
|
71
60
|
} | {
|
72
61
|
_tag: 'manual';
|
73
62
|
label?: string;
|
74
63
|
};
|
75
64
|
export type QueryDebugInfo = {
|
76
|
-
_tag:
|
65
|
+
_tag: string;
|
77
66
|
label: string;
|
78
67
|
query: string;
|
79
68
|
durationMs: number;
|
80
69
|
};
|
81
70
|
export type StoreOtel = {
|
82
71
|
tracer: otel.Tracer;
|
83
|
-
|
72
|
+
rootSpanContext: otel.Context;
|
73
|
+
commitsSpanContext: otel.Context;
|
84
74
|
queriesSpanContext: otel.Context;
|
85
75
|
};
|
86
|
-
export type
|
76
|
+
export type StoreCommitOptions = {
|
87
77
|
label?: string;
|
88
78
|
skipRefresh?: boolean;
|
89
79
|
spanLinks?: otel.Link[];
|
90
80
|
otelContext?: otel.Context;
|
91
81
|
};
|
92
|
-
export {
|
82
|
+
export type StoreEventsOptions<TSchema extends LiveStoreSchema> = {
|
83
|
+
/**
|
84
|
+
* By default only new events are returned.
|
85
|
+
* Use this to get all events from a specific point in time.
|
86
|
+
*/
|
87
|
+
cursor?: EventSequenceNumber.EventSequenceNumber;
|
88
|
+
/**
|
89
|
+
* Only include events of the given names
|
90
|
+
* @default undefined (include all)
|
91
|
+
*/
|
92
|
+
filter?: ReadonlyArray<keyof TSchema['_EventDefMapType']>;
|
93
|
+
/**
|
94
|
+
* Whether to include client-only events or only return synced events
|
95
|
+
* @default true
|
96
|
+
*/
|
97
|
+
includeClientOnly?: boolean;
|
98
|
+
/**
|
99
|
+
* Exclude own events that have not been pushed to the sync backend yet
|
100
|
+
* @default false
|
101
|
+
*/
|
102
|
+
excludeUnpushed?: boolean;
|
103
|
+
};
|
104
|
+
export type Unsubscribe = () => void;
|
93
105
|
//# sourceMappingURL=store-types.d.ts.map
|
@@ -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,eAAe,EAAE,MAAM,mBAAmB,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,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AACpG,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,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;AACrH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAG9D,CAAA;AAEH,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,aAAa,EAAE;QACb,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACrC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAA;KAC3B,CAAA;IACD,qBAAqB,EAAE,OAAO,CAAA;IAC9B,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IAC9C,MAAM,EAAE;QACN,mBAAmB,EAAE,MAAM,CAAA;KAC5B,CAAA;IACD,mBAAmB,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,aAAa,GACrB,sBAAsB,GACtB;IACE,IAAI,EAAE,QAAQ,CAAA;IACd,mCAAmC;IACnC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAA;IAEnF,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,eAAe,EAAE,IAAI,CAAC,OAAO,CAAA;IAC7B,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAA;IAChC,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,kBAAkB,CAAC,OAAO,SAAS,eAAe,IAAI;IAChE;;;OAGG;IACH,MAAM,CAAC,EAAE,mBAAmB,CAAC,mBAAmB,CAAA;IAChD;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAA;IACzD;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAA"}
|
@@ -1,6 +1,3 @@
|
|
1
|
-
import {
|
2
|
-
export
|
3
|
-
}
|
4
|
-
export class StoreInterrupted extends Schema.TaggedError()('LiveStore.StoreInterrupted', {}) {
|
5
|
-
}
|
1
|
+
import { Deferred } from '@livestore/utils/effect';
|
2
|
+
export const makeShutdownDeferred = Deferred.make();
|
6
3
|
//# sourceMappingURL=store-types.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"store-types.js","sourceRoot":"","sources":["../../src/store/store-types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"store-types.js","sourceRoot":"","sources":["../../src/store/store-types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAmBlD,MAAM,CAAC,MAAM,oBAAoB,GAAoC,QAAQ,CAAC,IAAI,EAG/E,CAAA"}
|
package/dist/store/store.d.ts
CHANGED
@@ -1,50 +1,68 @@
|
|
1
|
-
import type { ClientSession, ParamsObject, QueryBuilder, UnexpectedError } from '@livestore/common';
|
1
|
+
import type { ClientSession, ClientSessionSyncProcessor, ParamsObject, QueryBuilder, UnexpectedError } from '@livestore/common';
|
2
2
|
import type { LiveStoreSchema } from '@livestore/common/schema';
|
3
|
-
import {
|
3
|
+
import { LiveStoreEvent } from '@livestore/common/schema';
|
4
4
|
import type { Scope } from '@livestore/utils/effect';
|
5
|
-
import { Cause, Inspectable } from '@livestore/utils/effect';
|
5
|
+
import { Cause, Effect, Inspectable, Stream } from '@livestore/utils/effect';
|
6
6
|
import * as otel from '@opentelemetry/api';
|
7
|
-
import {
|
8
|
-
import type { LiveQuery, QueryContext, ReactivityGraph } from '../live-queries/base-class.js';
|
7
|
+
import type { LiveQuery, LiveQueryDef, ReactivityGraph, ReactivityGraphContext, SignalDef } from '../live-queries/base-class.js';
|
9
8
|
import type { Ref } from '../reactive.js';
|
10
|
-
import {
|
9
|
+
import { SqliteDbWrapper } from '../SqliteDbWrapper.js';
|
11
10
|
import { ReferenceCountedSet } from '../utils/data-structures.js';
|
12
|
-
import type {
|
13
|
-
|
11
|
+
import type { StackInfo } from '../utils/stack-info.js';
|
12
|
+
import type { RefreshReason, StoreCommitOptions, StoreEventsOptions, StoreOptions, StoreOtel, Unsubscribe } from './store-types.js';
|
13
|
+
export declare class Store<TSchema extends LiveStoreSchema = LiveStoreSchema, TContext = {}> extends Inspectable.Class {
|
14
14
|
readonly storeId: string;
|
15
15
|
reactivityGraph: ReactivityGraph;
|
16
|
-
|
16
|
+
sqliteDbWrapper: SqliteDbWrapper;
|
17
17
|
clientSession: ClientSession;
|
18
18
|
schema: LiveStoreSchema;
|
19
|
-
|
20
|
-
graphQLContext?: TGraphQLContext;
|
19
|
+
context: TContext;
|
21
20
|
otel: StoreOtel;
|
22
21
|
/**
|
23
22
|
* Note we're using `Ref<null>` here as we don't care about the value but only about *that* something has changed.
|
24
23
|
* This only works in combination with `equal: () => false` which will always trigger a refresh.
|
25
24
|
*/
|
26
25
|
tableRefs: {
|
27
|
-
[key: string]: Ref<null,
|
26
|
+
[key: string]: Ref<null, ReactivityGraphContext, RefreshReason>;
|
28
27
|
};
|
29
|
-
private
|
28
|
+
private effectContext;
|
30
29
|
/** RC-based set to see which queries are currently subscribed to */
|
31
30
|
activeQueries: ReferenceCountedSet<LiveQuery<any>>;
|
32
|
-
readonly
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
private constructor();
|
37
|
-
static createStore: <TGraphQLContext_1 extends BaseGraphQLContext, TSchema_1 extends LiveStoreSchema = LiveStoreSchema>(storeOptions: StoreOptions<TGraphQLContext_1, TSchema_1>, parentSpan: otel.Span) => Store<TGraphQLContext_1, TSchema_1>;
|
31
|
+
readonly __eventSchema: LiveStoreEvent.ForEventDefRecord<TSchema["_EventDefMapType"]>;
|
32
|
+
readonly syncProcessor: ClientSessionSyncProcessor;
|
33
|
+
readonly boot: Effect.Effect<void, UnexpectedError, Scope.Scope>;
|
34
|
+
constructor({ clientSession, schema, otelOptions, context, batchUpdates, storeId, effectContext, params, confirmUnsavedChanges, __runningInDevtools, }: StoreOptions<TSchema, TContext>);
|
38
35
|
get sessionId(): string;
|
36
|
+
get clientId(): string;
|
39
37
|
/**
|
40
38
|
* Subscribe to the results of a query
|
41
39
|
* Returns a function to cancel the subscription.
|
40
|
+
*
|
41
|
+
* @example
|
42
|
+
* ```ts
|
43
|
+
* const unsubscribe = store.subscribe(query$, { onUpdate: (result) => console.log(result) })
|
44
|
+
* ```
|
42
45
|
*/
|
43
|
-
subscribe: <TResult>(query
|
46
|
+
subscribe: <TResult>(query: LiveQueryDef<TResult, "def" | "signal-def"> | LiveQuery<TResult>, options: {
|
47
|
+
/** Called when the query result has changed */
|
48
|
+
onUpdate: (value: TResult) => void;
|
49
|
+
onSubscribe?: (query$: LiveQuery<TResult>) => void;
|
50
|
+
/** Gets called after the query subscription has been removed */
|
51
|
+
onUnsubsubscribe?: () => void;
|
44
52
|
label?: string;
|
53
|
+
/**
|
54
|
+
* Skips the initial `onUpdate` callback
|
55
|
+
* @default false
|
56
|
+
*/
|
57
|
+
skipInitialRun?: boolean;
|
45
58
|
otelContext?: otel.Context;
|
59
|
+
/** If provided, the stack info will be added to the `activeSubscriptions` set of the query */
|
60
|
+
stackInfo?: StackInfo;
|
61
|
+
}) => Unsubscribe;
|
62
|
+
subscribeStream: <TResult>(query$: LiveQueryDef<TResult>, options?: {
|
63
|
+
label?: string;
|
46
64
|
skipInitialRun?: boolean;
|
47
|
-
} | undefined) =>
|
65
|
+
} | undefined) => Stream.Stream<TResult>;
|
48
66
|
/**
|
49
67
|
* Synchronously queries the database without creating a LiveQuery.
|
50
68
|
* This is useful for queries that don't need to be reactive.
|
@@ -59,36 +77,124 @@ export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGrap
|
|
59
77
|
* const completedTodos = store.query({ query: 'SELECT * FROM todo WHERE complete = 1', bindValues: {} })
|
60
78
|
* ```
|
61
79
|
*/
|
62
|
-
query: <TResult>(query: QueryBuilder<TResult, any, any> | LiveQuery<TResult
|
80
|
+
query: <TResult>(query: QueryBuilder<TResult, any, any> | LiveQuery<TResult> | LiveQueryDef<TResult> | SignalDef<TResult> | {
|
63
81
|
query: string;
|
64
82
|
bindValues: ParamsObject;
|
65
83
|
}, options?: {
|
66
84
|
otelContext?: otel.Context;
|
85
|
+
debugRefreshReason?: RefreshReason;
|
67
86
|
}) => TResult;
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
87
|
+
/**
|
88
|
+
* Set the value of a signal
|
89
|
+
*
|
90
|
+
* @example
|
91
|
+
* ```ts
|
92
|
+
* const count$ = signal(0, { label: 'count$' })
|
93
|
+
* store.setSignal(count$, 2)
|
94
|
+
* ```
|
95
|
+
*
|
96
|
+
* @example
|
97
|
+
* ```ts
|
98
|
+
* const count$ = signal(0, { label: 'count$' })
|
99
|
+
* store.setSignal(count$, (prev) => prev + 1)
|
100
|
+
* ```
|
101
|
+
*/
|
102
|
+
setSignal: <T>(signalDef: SignalDef<T>, value: T | ((prev: T) => T)) => void;
|
103
|
+
/**
|
104
|
+
* Commit a list of events to the store which will immediately update the local database
|
105
|
+
* and sync the events across other clients (similar to a `git commit`).
|
106
|
+
*
|
107
|
+
* @example
|
108
|
+
* ```ts
|
109
|
+
* store.commit(events.todoCreated({ id: nanoid(), text: 'Make coffee' }))
|
110
|
+
* ```
|
111
|
+
*
|
112
|
+
* You can call `commit` with multiple events to apply them in a single database transaction.
|
113
|
+
*
|
114
|
+
* @example
|
115
|
+
* ```ts
|
116
|
+
* const todoId = nanoid()
|
117
|
+
* store.commit(
|
118
|
+
* events.todoCreated({ id: todoId, text: 'Make coffee' }),
|
119
|
+
* events.todoCompleted({ id: todoId }))
|
120
|
+
* ```
|
121
|
+
*
|
122
|
+
* For more advanced transaction scenarios, you can pass a synchronous function to `commit` which will receive a callback
|
123
|
+
* to which you can pass multiple events to be committed in the same database transaction.
|
124
|
+
* Under the hood this will simply collect all events and apply them in a single database transaction.
|
125
|
+
*
|
126
|
+
* @example
|
127
|
+
* ```ts
|
128
|
+
* store.commit((commit) => {
|
129
|
+
* const todoId = nanoid()
|
130
|
+
* if (Math.random() > 0.5) {
|
131
|
+
* commit(events.todoCreated({ id: todoId, text: 'Make coffee' }))
|
132
|
+
* } else {
|
133
|
+
* commit(events.todoCompleted({ id: todoId }))
|
134
|
+
* }
|
135
|
+
* })
|
136
|
+
* ```
|
137
|
+
*
|
138
|
+
* When committing a large batch of events, you can also skip the database refresh to improve performance
|
139
|
+
* and call `store.manualRefresh()` after all events have been committed.
|
140
|
+
*
|
141
|
+
* @example
|
142
|
+
* ```ts
|
143
|
+
* const todos = [
|
144
|
+
* { id: nanoid(), text: 'Make coffee' },
|
145
|
+
* { id: nanoid(), text: 'Buy groceries' },
|
146
|
+
* // ... 1000 more todos
|
147
|
+
* ]
|
148
|
+
* for (const todo of todos) {
|
149
|
+
* store.commit({ skipRefresh: true }, events.todoCreated({ id: todo.id, text: todo.text }))
|
150
|
+
* }
|
151
|
+
* store.manualRefresh()
|
152
|
+
* ```
|
153
|
+
*/
|
154
|
+
commit: {
|
155
|
+
<const TCommitArg extends ReadonlyArray<LiveStoreEvent.PartialForSchema<TSchema>>>(...list: TCommitArg): void;
|
156
|
+
(txn: <const TCommitArg extends ReadonlyArray<LiveStoreEvent.PartialForSchema<TSchema>>>(...list: TCommitArg) => void): void;
|
157
|
+
<const TCommitArg extends ReadonlyArray<LiveStoreEvent.PartialForSchema<TSchema>>>(options: StoreCommitOptions, ...list: TCommitArg): void;
|
158
|
+
(options: StoreCommitOptions, txn: <const TCommitArg extends ReadonlyArray<LiveStoreEvent.PartialForSchema<TSchema>>>(...list: TCommitArg) => void): void;
|
73
159
|
};
|
74
160
|
/**
|
75
|
-
*
|
161
|
+
* Returns an async iterable of events.
|
162
|
+
*
|
163
|
+
* @example
|
164
|
+
* ```ts
|
165
|
+
* for await (const event of store.events()) {
|
166
|
+
* console.log(event)
|
167
|
+
* }
|
168
|
+
* ```
|
169
|
+
*
|
170
|
+
* @example
|
171
|
+
* ```ts
|
172
|
+
* // Get all events from the beginning of time
|
173
|
+
* for await (const event of store.events({ cursor: EventSequenceNumber.ROOT })) {
|
174
|
+
* console.log(event)
|
175
|
+
* }
|
176
|
+
* ```
|
177
|
+
*/
|
178
|
+
events: (_options?: StoreEventsOptions<TSchema>) => AsyncIterable<LiveStoreEvent.ForSchema<TSchema>>;
|
179
|
+
eventsStream: (_options?: StoreEventsOptions<TSchema>) => Stream.Stream<LiveStoreEvent.ForSchema<TSchema>>;
|
180
|
+
/**
|
181
|
+
* This can be used in combination with `skipRefresh` when committing events.
|
76
182
|
* We might need a better solution for this. Let's see.
|
77
183
|
*/
|
78
184
|
manualRefresh: (options?: {
|
79
185
|
label?: string;
|
80
186
|
}) => void;
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
187
|
+
/**
|
188
|
+
* Shuts down the store and closes the client session.
|
189
|
+
*
|
190
|
+
* This is called automatically when the store was created using the React or Effect API.
|
191
|
+
*/
|
192
|
+
shutdown: (cause?: Cause.Cause<UnexpectedError>) => Promise<void>;
|
87
193
|
toJSON: () => {
|
88
194
|
_tag: string;
|
89
195
|
reactivityGraph: import("../reactive.js").ReactiveGraphSnapshot;
|
90
196
|
};
|
91
197
|
private runEffectFork;
|
92
|
-
private
|
198
|
+
private getCommitArgs;
|
93
199
|
}
|
94
200
|
//# sourceMappingURL=store.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
|