@livestore/livestore 0.0.54-dev.19 → 0.0.54-dev.21
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/MainDatabaseWrapper.d.ts +5 -3
- package/dist/MainDatabaseWrapper.d.ts.map +1 -1
- package/dist/MainDatabaseWrapper.js +3 -3
- package/dist/MainDatabaseWrapper.js.map +1 -1
- package/dist/__tests__/react/fixture.d.ts +3 -3
- package/dist/__tests__/react/fixture.d.ts.map +1 -1
- package/dist/__tests__/react/fixture.js +10 -8
- package/dist/__tests__/react/fixture.js.map +1 -1
- package/dist/effect/LiveStore.d.ts +2 -3
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +4 -2
- package/dist/effect/LiveStore.js.map +1 -1
- package/dist/global-state.d.ts +1 -1
- package/dist/global-state.d.ts.map +1 -1
- package/dist/global-state.js +2 -2
- package/dist/global-state.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/react/LiveStoreProvider.d.ts +3 -4
- package/dist/react/LiveStoreProvider.d.ts.map +1 -1
- package/dist/react/LiveStoreProvider.js +8 -13
- package/dist/react/LiveStoreProvider.js.map +1 -1
- package/dist/react/useRow.d.ts +2 -2
- package/dist/react/useRow.d.ts.map +1 -1
- package/dist/react/useRow.js +3 -3
- package/dist/react/useRow.js.map +1 -1
- package/dist/react/useRow.test.js +21 -21
- package/dist/react/useRow.test.js.map +1 -1
- package/dist/react/useTemporaryQuery.js +1 -1
- package/dist/react/useTemporaryQuery.js.map +1 -1
- package/dist/reactiveQueries/base-class.d.ts +6 -6
- package/dist/reactiveQueries/base-class.d.ts.map +1 -1
- package/dist/reactiveQueries/base-class.js +3 -3
- package/dist/reactiveQueries/base-class.js.map +1 -1
- package/dist/reactiveQueries/graphql.d.ts +8 -8
- package/dist/reactiveQueries/graphql.d.ts.map +1 -1
- package/dist/reactiveQueries/graphql.js +10 -10
- package/dist/reactiveQueries/graphql.js.map +1 -1
- package/dist/reactiveQueries/js.d.ts +6 -6
- package/dist/reactiveQueries/js.d.ts.map +1 -1
- package/dist/reactiveQueries/js.js +8 -8
- package/dist/reactiveQueries/js.js.map +1 -1
- package/dist/reactiveQueries/sql.d.ts +8 -8
- package/dist/reactiveQueries/sql.d.ts.map +1 -1
- package/dist/reactiveQueries/sql.js +11 -11
- package/dist/reactiveQueries/sql.js.map +1 -1
- package/dist/row-query.d.ts +2 -2
- package/dist/row-query.d.ts.map +1 -1
- package/dist/row-query.js +2 -2
- package/dist/row-query.js.map +1 -1
- package/dist/store.d.ts +17 -16
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +46 -50
- package/dist/store.js.map +1 -1
- package/package.json +5 -12
- package/src/MainDatabaseWrapper.ts +7 -6
- package/src/__tests__/react/fixture.tsx +11 -9
- package/src/effect/LiveStore.ts +6 -5
- package/src/global-state.ts +2 -2
- package/src/index.ts +7 -2
- package/src/react/LiveStoreProvider.tsx +10 -18
- package/src/react/useRow.test.tsx +21 -21
- package/src/react/useRow.ts +5 -5
- package/src/react/useTemporaryQuery.ts +2 -2
- package/src/reactiveQueries/base-class.ts +9 -9
- package/src/reactiveQueries/graphql.ts +19 -15
- package/src/reactiveQueries/js.ts +12 -12
- package/src/reactiveQueries/sql.ts +18 -18
- package/src/row-query.ts +6 -6
- package/src/store.ts +75 -69
|
@@ -2,7 +2,7 @@ import { prepareBindValues } from '@livestore/common';
|
|
|
2
2
|
import { shouldNeverHappen } from '@livestore/utils';
|
|
3
3
|
import { Schema, TreeFormatter } from '@livestore/utils/effect';
|
|
4
4
|
import * as otel from '@opentelemetry/api';
|
|
5
|
-
import {
|
|
5
|
+
import { globalReactivityGraph } from '../global-state.js';
|
|
6
6
|
import { getDurationMsFromSpan } from '../utils/otel.js';
|
|
7
7
|
import { LiveStoreQueryBase, makeGetAtomResult } from './base-class.js';
|
|
8
8
|
export const querySQL = (query, options) => new LiveStoreSQLQuery({
|
|
@@ -10,7 +10,7 @@ export const querySQL = (query, options) => new LiveStoreSQLQuery({
|
|
|
10
10
|
genQueryString: query,
|
|
11
11
|
queriedTables: options?.queriedTables,
|
|
12
12
|
bindValues: options?.bindValues,
|
|
13
|
-
|
|
13
|
+
reactivityGraph: options?.reactivityGraph,
|
|
14
14
|
map: options?.map,
|
|
15
15
|
queryInfo: { _tag: 'None' },
|
|
16
16
|
});
|
|
@@ -22,16 +22,16 @@ export class LiveStoreSQLQuery extends LiveStoreQueryBase {
|
|
|
22
22
|
/** A reactive thunk representing the query results */
|
|
23
23
|
results$;
|
|
24
24
|
label;
|
|
25
|
-
|
|
25
|
+
reactivityGraph;
|
|
26
26
|
/** Currently only used by `rowQuery` for lazy table migrations and eager default row insertion */
|
|
27
27
|
execBeforeFirstRun;
|
|
28
28
|
mapRows;
|
|
29
29
|
queryInfo;
|
|
30
|
-
constructor({ genQueryString, queriedTables, bindValues, label: label_,
|
|
30
|
+
constructor({ genQueryString, queriedTables, bindValues, label: label_, reactivityGraph, map, execBeforeFirstRun, queryInfo, }) {
|
|
31
31
|
super();
|
|
32
32
|
const label = label_ ?? genQueryString.toString();
|
|
33
33
|
this.label = `sql(${label})`;
|
|
34
|
-
this.
|
|
34
|
+
this.reactivityGraph = reactivityGraph ?? globalReactivityGraph;
|
|
35
35
|
this.execBeforeFirstRun = execBeforeFirstRun;
|
|
36
36
|
this.queryInfo = queryInfo ?? { _tag: 'None' };
|
|
37
37
|
this.mapRows =
|
|
@@ -67,7 +67,7 @@ Result:`, rows);
|
|
|
67
67
|
: shouldNeverHappen(`Invalid map function ${map}`);
|
|
68
68
|
let queryString$OrQueryString;
|
|
69
69
|
if (typeof genQueryString === 'function') {
|
|
70
|
-
queryString$OrQueryString = this.
|
|
70
|
+
queryString$OrQueryString = this.reactivityGraph.makeThunk((get, setDebugInfo, { rootOtelContext }, otelContext) => {
|
|
71
71
|
const startMs = performance.now();
|
|
72
72
|
const queryString = genQueryString(makeGetAtomResult(get, otelContext ?? rootOtelContext));
|
|
73
73
|
const durationMs = performance.now() - startMs;
|
|
@@ -81,7 +81,7 @@ Result:`, rows);
|
|
|
81
81
|
}
|
|
82
82
|
const queryLabel = `${label}:results`;
|
|
83
83
|
const queriedTablesRef = { current: queriedTables };
|
|
84
|
-
const results$ = this.
|
|
84
|
+
const results$ = this.reactivityGraph.makeThunk((get, setDebugInfo, { store, otelTracer, rootOtelContext }, otelContext) => otelTracer.startActiveSpan('sql:...', // NOTE span name will be overridden further down
|
|
85
85
|
{}, otelContext ?? rootOtelContext, (span) => {
|
|
86
86
|
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
|
87
87
|
if (this.execBeforeFirstRun !== undefined) {
|
|
@@ -128,7 +128,7 @@ Result:`, rows);
|
|
|
128
128
|
// },
|
|
129
129
|
// label: `${this.label}:js`,
|
|
130
130
|
// onDestroy: () => this.destroy(),
|
|
131
|
-
//
|
|
131
|
+
// reactivityGraph: this.reactivityGraph,
|
|
132
132
|
// queryInfo: undefined,
|
|
133
133
|
// })
|
|
134
134
|
/** Returns a reactive query */
|
|
@@ -145,13 +145,13 @@ Result:`, rows);
|
|
|
145
145
|
// },
|
|
146
146
|
// label: `${this.label}:first`,
|
|
147
147
|
// onDestroy: () => this.destroy(),
|
|
148
|
-
//
|
|
148
|
+
// reactivityGraph: this.reactivityGraph,
|
|
149
149
|
// })
|
|
150
150
|
destroy = () => {
|
|
151
151
|
if (this.queryString$ !== undefined) {
|
|
152
|
-
this.
|
|
152
|
+
this.reactivityGraph.destroyNode(this.queryString$);
|
|
153
153
|
}
|
|
154
|
-
this.
|
|
154
|
+
this.reactivityGraph.destroyNode(this.results$);
|
|
155
155
|
};
|
|
156
156
|
}
|
|
157
157
|
//# sourceMappingURL=sql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/reactiveQueries/sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,EAAsC,MAAM,mBAAmB,CAAA;AACxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/reactiveQueries/sql.ts"],"names":[],"mappings":"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"}
|
package/dist/row-query.d.ts
CHANGED
|
@@ -3,11 +3,11 @@ import { DbSchema } from '@livestore/common/schema';
|
|
|
3
3
|
import type { GetValForKey } from '@livestore/utils';
|
|
4
4
|
import type * as otel from '@opentelemetry/api';
|
|
5
5
|
import type { SqliteDsl } from 'effect-db-schema';
|
|
6
|
-
import type {
|
|
6
|
+
import type { LiveQuery, ReactivityGraph } from './reactiveQueries/base-class.js';
|
|
7
7
|
export type RowQueryOptions = {
|
|
8
8
|
otelContext?: otel.Context;
|
|
9
9
|
skipInsertDefaultRow?: boolean;
|
|
10
|
-
|
|
10
|
+
reactivityGraph?: ReactivityGraph;
|
|
11
11
|
};
|
|
12
12
|
export type RowQueryOptionsDefaulValues<TTableDef extends DbSchema.TableDef> = {
|
|
13
13
|
defaultValues: Partial<RowResult<TTableDef>>;
|
package/dist/row-query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"row-query.d.ts","sourceRoot":"","sources":["../src/row-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEpG,OAAO,EAAE,QAAQ,EAAqB,MAAM,0BAA0B,CAAA;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAGpD,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIjD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"row-query.d.ts","sourceRoot":"","sources":["../src/row-query.ts"],"names":[],"mappings":"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"}
|
package/dist/row-query.js
CHANGED
|
@@ -25,7 +25,7 @@ export const rowQuery = (table, idOrOptions, options_) => {
|
|
|
25
25
|
label: `rowQuery:query:${tableSchema.name}${id === undefined ? '' : `:${id}`}`,
|
|
26
26
|
genQueryString: queryStr,
|
|
27
27
|
queriedTables: new Set([tableName]),
|
|
28
|
-
|
|
28
|
+
reactivityGraph: options?.reactivityGraph,
|
|
29
29
|
// While this code-path is not needed for singleton tables, it's still needed for `useRow` with non-existing rows for a given ID
|
|
30
30
|
execBeforeFirstRun: makeExecBeforeFirstRun({
|
|
31
31
|
otelContext: options?.otelContext,
|
|
@@ -87,7 +87,7 @@ const makeExecBeforeFirstRun = ({ id, defaultValues, skipInsertDefaultRow, otelC
|
|
|
87
87
|
}
|
|
88
88
|
const label = `tableRef:${tableName}`;
|
|
89
89
|
// TODO find a better implementation for this
|
|
90
|
-
const existingTableRefFromGraph = Array.from(store.
|
|
90
|
+
const existingTableRefFromGraph = Array.from(store.reactivityGraph.atoms.values()).find((_) => _._tag === 'ref' && _.label === label);
|
|
91
91
|
store.tableRefs[tableName] = existingTableRefFromGraph ?? store.makeTableRef(tableName);
|
|
92
92
|
}
|
|
93
93
|
if (skipInsertDefaultRow !== true && table.options.isSingleton === false) {
|
package/dist/row-query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"row-query.js","sourceRoot":"","sources":["../src/row-query.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAG/D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAI5C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAsC5D,wDAAwD;AACxD,MAAM,CAAC,MAAM,QAAQ,GAAiB,CACpC,KAAgB,EAChB,WAAsC,EACtC,QAAmE,EACnE,EAAE;IACF,MAAM,EAAE,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;IACpE,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAA;IACxE,MAAM,aAAa,GAA+C,OAAe,EAAE,aAAa,IAAI,EAAE,CAAA;IAEtG,sBAAsB;IACtB,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QAC3D,iBAAiB,CAAC,4BAA4B,KAAK,CAAC,SAAS,CAAC,IAAI,aAAa,EAAE,wBAAwB,CAAC,CAAA;IAC5G,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QAClE,iBAAiB,CAAC,4BAA4B,KAAK,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,CAAA;IAClF,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAA;IACnC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAA;IAElC,MAAM,WAAW,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,CAAA;IAChE,MAAM,QAAQ,GAAG,GAAG,CAAA,iBAAiB,SAAS,IAAI,WAAW,UAAU,CAAA;IAEvE,OAAO,IAAI,iBAAiB,CAAC;QAC3B,KAAK,EAAE,kBAAkB,WAAW,CAAC,IAAI,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE;QAC9E,cAAc,EAAE,QAAQ;QACxB,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACnC,
|
|
1
|
+
{"version":3,"file":"row-query.js","sourceRoot":"","sources":["../src/row-query.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { BootDb, ParamsObject, ResetMode, StoreAdapter, StoreAdapterFactory } from '@livestore/common';
|
|
2
|
-
import type { LiveStoreSchema, MutationEvent
|
|
2
|
+
import type { LiveStoreSchema, MutationEvent } from '@livestore/common/schema';
|
|
3
3
|
import * as otel from '@opentelemetry/api';
|
|
4
4
|
import type { GraphQLSchema } from 'graphql';
|
|
5
5
|
import { MainDatabaseWrapper } from './MainDatabaseWrapper.js';
|
|
6
6
|
import type { StackInfo } from './react/utils/stack-info.js';
|
|
7
|
-
import type { DebugRefreshReasonBase,
|
|
8
|
-
import type {
|
|
7
|
+
import type { DebugRefreshReasonBase, Ref } from './reactive.js';
|
|
8
|
+
import type { LiveQuery, QueryContext, ReactivityGraph } from './reactiveQueries/base-class.js';
|
|
9
9
|
export type BaseGraphQLContext = {
|
|
10
10
|
queriedTables: Set<string>;
|
|
11
11
|
/** Needed by Pothos Otel plugin for resolver tracing to work */
|
|
@@ -15,14 +15,16 @@ export type GraphQLOptions<TContext> = {
|
|
|
15
15
|
schema: GraphQLSchema;
|
|
16
16
|
makeContext: (db: MainDatabaseWrapper, tracer: otel.Tracer) => TContext;
|
|
17
17
|
};
|
|
18
|
+
export type OtelOptions = {
|
|
19
|
+
tracer: otel.Tracer;
|
|
20
|
+
rootSpanContext: otel.Context;
|
|
21
|
+
};
|
|
18
22
|
export type StoreOptions<TGraphQLContext extends BaseGraphQLContext, TSchema extends LiveStoreSchema = LiveStoreSchema> = {
|
|
19
23
|
adapter: StoreAdapter;
|
|
20
24
|
schema: TSchema;
|
|
21
25
|
graphQLOptions?: GraphQLOptions<TGraphQLContext>;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
dbGraph: DbGraph;
|
|
25
|
-
mutationEventSchema: MutationEventSchema<any>;
|
|
26
|
+
otelOptions: OtelOptions;
|
|
27
|
+
reactivityGraph: ReactivityGraph;
|
|
26
28
|
disableDevtools?: boolean;
|
|
27
29
|
};
|
|
28
30
|
export type RefreshReason = DebugRefreshReasonBase | {
|
|
@@ -65,7 +67,7 @@ export type StoreMutateOptions = {
|
|
|
65
67
|
};
|
|
66
68
|
export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGraphQLContext, TSchema extends LiveStoreSchema = LiveStoreSchema> {
|
|
67
69
|
id: string;
|
|
68
|
-
|
|
70
|
+
reactivityGraph: ReactivityGraph;
|
|
69
71
|
mainDbWrapper: MainDatabaseWrapper;
|
|
70
72
|
adapter: StoreAdapter;
|
|
71
73
|
schema: LiveStoreSchema;
|
|
@@ -77,13 +79,13 @@ export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGrap
|
|
|
77
79
|
* This only works in combination with `equal: () => false` which will always trigger a refresh.
|
|
78
80
|
*/
|
|
79
81
|
tableRefs: {
|
|
80
|
-
[key: string]: Ref<null,
|
|
82
|
+
[key: string]: Ref<null, QueryContext, RefreshReason>;
|
|
81
83
|
};
|
|
82
84
|
__processedMutationIds: Set<string>;
|
|
83
85
|
__processedMutationWithoutRefreshIds: Set<string>;
|
|
84
86
|
/** RC-based set to see which queries are currently subscribed to */
|
|
85
87
|
activeQueries: ReferenceCountedSet<LiveQuery<any>>;
|
|
86
|
-
readonly __mutationEventSchema: MutationEventSchema<
|
|
88
|
+
readonly __mutationEventSchema: import("@livestore/common/schema").MutationEventSchema<TSchema["_MutationDefMapType"]>;
|
|
87
89
|
private constructor();
|
|
88
90
|
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>;
|
|
89
91
|
/**
|
|
@@ -134,21 +136,20 @@ export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGrap
|
|
|
134
136
|
*/
|
|
135
137
|
execute: (query: string, params?: ParamsObject, writeTables?: ReadonlySet<string>, otelContext?: otel.Context) => void;
|
|
136
138
|
select: (query: string, params?: ParamsObject) => readonly any[];
|
|
137
|
-
makeTableRef: (tableName: string) => Ref<null,
|
|
139
|
+
makeTableRef: (tableName: string) => Ref<null, QueryContext, RefreshReason>;
|
|
138
140
|
private bootDevtools;
|
|
139
141
|
__devDownloadDb: () => void;
|
|
140
142
|
__devDownloadMutationLogDb: () => Promise<void>;
|
|
141
143
|
dangerouslyResetStorage: (mode: ResetMode) => Promise<void>;
|
|
142
144
|
}
|
|
143
145
|
/** Create a new LiveStore Store */
|
|
144
|
-
export declare const createStore: <TGraphQLContext extends BaseGraphQLContext, TSchema extends LiveStoreSchema = LiveStoreSchema>({ schema, graphQLOptions,
|
|
146
|
+
export declare const createStore: <TGraphQLContext extends BaseGraphQLContext, TSchema extends LiveStoreSchema = LiveStoreSchema>({ schema, graphQLOptions, otelOptions, adapter: adapterFactory, boot, reactivityGraph, batchUpdates, disableDevtools, }: {
|
|
145
147
|
schema: TSchema;
|
|
146
|
-
graphQLOptions?: GraphQLOptions<TGraphQLContext>;
|
|
147
|
-
otelTracer?: otel.Tracer;
|
|
148
|
-
otelRootSpanContext?: otel.Context;
|
|
149
148
|
adapter: StoreAdapterFactory;
|
|
149
|
+
reactivityGraph?: ReactivityGraph;
|
|
150
|
+
graphQLOptions?: GraphQLOptions<TGraphQLContext>;
|
|
151
|
+
otelOptions?: Partial<OtelOptions>;
|
|
150
152
|
boot?: (db: BootDb, parentSpan: otel.Span) => unknown | Promise<unknown>;
|
|
151
|
-
dbGraph?: DbGraph;
|
|
152
153
|
batchUpdates?: (run: () => void) => void;
|
|
153
154
|
disableDevtools?: boolean;
|
|
154
155
|
}) => Promise<Store<TGraphQLContext, TSchema>>;
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EAEZ,SAAS,EACT,YAAY,EACZ,mBAAmB,EACpB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Devtools, getExecArgsFromMutation, prepareBindValues } from '@livestore/common';
|
|
2
2
|
import { version as liveStoreVersion } from '@livestore/common/package.json';
|
|
3
|
-
import {
|
|
4
|
-
import { assertNever, isPromise, makeNoopTracer,
|
|
3
|
+
import { makeMutationEventSchemaMemo } from '@livestore/common/schema';
|
|
4
|
+
import { assertNever, isPromise, makeNoopTracer, shouldNeverHappen } from '@livestore/utils';
|
|
5
5
|
import { Effect, Schema, Stream } from '@livestore/utils/effect';
|
|
6
6
|
import * as otel from '@opentelemetry/api';
|
|
7
|
-
import {
|
|
7
|
+
import { globalReactivityGraph } from './global-state.js';
|
|
8
8
|
import { MainDatabaseWrapper } from './MainDatabaseWrapper.js';
|
|
9
9
|
import { downloadBlob } from './utils/dev.js';
|
|
10
10
|
import { getDurationMsFromSpan } from './utils/otel.js';
|
|
@@ -12,11 +12,8 @@ let storeCount = 0;
|
|
|
12
12
|
const uniqueStoreId = () => `store-${++storeCount}`;
|
|
13
13
|
export class Store {
|
|
14
14
|
id = uniqueStoreId();
|
|
15
|
-
|
|
15
|
+
reactivityGraph;
|
|
16
16
|
mainDbWrapper;
|
|
17
|
-
// TODO refactor
|
|
18
|
-
// _proxyDb: InMemoryDatabase
|
|
19
|
-
// TODO
|
|
20
17
|
adapter;
|
|
21
18
|
schema;
|
|
22
19
|
graphQLSchema;
|
|
@@ -33,22 +30,25 @@ export class Store {
|
|
|
33
30
|
/** RC-based set to see which queries are currently subscribed to */
|
|
34
31
|
activeQueries;
|
|
35
32
|
__mutationEventSchema;
|
|
36
|
-
constructor({ adapter, schema, graphQLOptions,
|
|
37
|
-
this.mainDbWrapper = new MainDatabaseWrapper({
|
|
33
|
+
constructor({ adapter, schema, graphQLOptions, reactivityGraph, otelOptions, disableDevtools, }) {
|
|
34
|
+
this.mainDbWrapper = new MainDatabaseWrapper({ otel: otelOptions, db: adapter.mainDb });
|
|
38
35
|
this.adapter = adapter;
|
|
39
36
|
this.schema = schema;
|
|
40
37
|
// TODO refactor
|
|
41
|
-
this.__mutationEventSchema =
|
|
42
|
-
// this.mutationEventSchema = makeMutationEventSchema(Object.fromEntries(schema.mutations.entries()) as any)
|
|
38
|
+
this.__mutationEventSchema = makeMutationEventSchemaMemo(schema);
|
|
43
39
|
// TODO generalize the `tableRefs` concept to allow finer-grained refs
|
|
44
40
|
this.tableRefs = {};
|
|
45
41
|
this.activeQueries = new ReferenceCountedSet();
|
|
46
|
-
const mutationsSpan =
|
|
42
|
+
const mutationsSpan = otelOptions.tracer.startSpan('LiveStore:mutations', {}, otelOptions.rootSpanContext);
|
|
47
43
|
const otelMuationsSpanContext = otel.trace.setSpan(otel.context.active(), mutationsSpan);
|
|
48
|
-
const queriesSpan =
|
|
44
|
+
const queriesSpan = otelOptions.tracer.startSpan('LiveStore:queries', {}, otelOptions.rootSpanContext);
|
|
49
45
|
const otelQueriesSpanContext = otel.trace.setSpan(otel.context.active(), queriesSpan);
|
|
50
|
-
this.
|
|
51
|
-
this.
|
|
46
|
+
this.reactivityGraph = reactivityGraph;
|
|
47
|
+
this.reactivityGraph.context = {
|
|
48
|
+
store: this,
|
|
49
|
+
otelTracer: otelOptions.tracer,
|
|
50
|
+
rootOtelContext: otelQueriesSpanContext,
|
|
51
|
+
};
|
|
52
52
|
this.adapter.coordinator.syncMutations.pipe(Stream.tapSync((mutationEventDecoded) => {
|
|
53
53
|
this.mutate({ wasSyncMessage: true }, mutationEventDecoded);
|
|
54
54
|
}), Stream.runDrain, Effect.tapCauseLogPretty, Effect.runFork);
|
|
@@ -56,13 +56,13 @@ export class Store {
|
|
|
56
56
|
this.bootDevtools();
|
|
57
57
|
}
|
|
58
58
|
this.otel = {
|
|
59
|
-
tracer:
|
|
59
|
+
tracer: otelOptions.tracer,
|
|
60
60
|
mutationsSpanContext: otelMuationsSpanContext,
|
|
61
61
|
queriesSpanContext: otelQueriesSpanContext,
|
|
62
62
|
};
|
|
63
63
|
// Need a set here since `schema.tables` might contain duplicates and some componentStateTables
|
|
64
64
|
const allTableNames = new Set(this.schema.tables.keys());
|
|
65
|
-
const existingTableRefs = new Map(Array.from(this.
|
|
65
|
+
const existingTableRefs = new Map(Array.from(this.reactivityGraph.atoms.values())
|
|
66
66
|
.filter((_) => _._tag === 'ref' && _.label?.startsWith('tableRef:') === true)
|
|
67
67
|
.map((_) => [_.label.slice('tableRef:'.length), _]));
|
|
68
68
|
for (const tableName of allTableNames) {
|
|
@@ -75,7 +75,7 @@ export class Store {
|
|
|
75
75
|
}
|
|
76
76
|
static createStore = (storeOptions, parentSpan) => {
|
|
77
77
|
const ctx = otel.trace.setSpan(otel.context.active(), parentSpan);
|
|
78
|
-
return storeOptions.
|
|
78
|
+
return storeOptions.otelOptions.tracer.startActiveSpan('LiveStore:store-constructor', {}, ctx, (span) => {
|
|
79
79
|
try {
|
|
80
80
|
return new Store(storeOptions);
|
|
81
81
|
}
|
|
@@ -92,7 +92,7 @@ export class Store {
|
|
|
92
92
|
// console.log('store sub', query$.label)
|
|
93
93
|
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
|
94
94
|
const label = `subscribe:${options?.label}`;
|
|
95
|
-
const effect = this.
|
|
95
|
+
const effect = this.reactivityGraph.makeEffect((get) => onNewValue(get(query$.results$)), { label });
|
|
96
96
|
this.activeQueries.add(query$);
|
|
97
97
|
// Running effect right away to get initial value (unless `skipInitialRun` is set)
|
|
98
98
|
if (options?.skipInitialRun !== true) {
|
|
@@ -101,7 +101,7 @@ export class Store {
|
|
|
101
101
|
const unsubscribe = () => {
|
|
102
102
|
// console.log('store unsub', query$.label)
|
|
103
103
|
try {
|
|
104
|
-
this.
|
|
104
|
+
this.reactivityGraph.destroyNode(effect);
|
|
105
105
|
this.activeQueries.remove(query$);
|
|
106
106
|
onUnsubsubscribe?.();
|
|
107
107
|
}
|
|
@@ -119,7 +119,7 @@ export class Store {
|
|
|
119
119
|
destroy = async () => {
|
|
120
120
|
for (const tableRef of Object.values(this.tableRefs)) {
|
|
121
121
|
for (const superComp of tableRef.super) {
|
|
122
|
-
this.
|
|
122
|
+
this.reactivityGraph.removeEdge(superComp, tableRef);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
otel.trace.getSpan(this.otel.mutationsSpanContext).end();
|
|
@@ -216,7 +216,7 @@ export class Store {
|
|
|
216
216
|
writeTables: Array.from(writeTables),
|
|
217
217
|
};
|
|
218
218
|
// Update all table refs together in a batch, to only trigger one reactive update
|
|
219
|
-
this.
|
|
219
|
+
this.reactivityGraph.setRefs(tablesToUpdate, { debugRefreshReason, otelContext, skipRefresh });
|
|
220
220
|
}
|
|
221
221
|
catch (e) {
|
|
222
222
|
span.setStatus({ code: otel.SpanStatusCode.ERROR, message: e.toString() });
|
|
@@ -235,7 +235,7 @@ export class Store {
|
|
|
235
235
|
const { label } = options ?? {};
|
|
236
236
|
this.otel.tracer.startActiveSpan('LiveStore:manualRefresh', { attributes: { 'livestore.manualRefreshLabel': label } }, this.otel.mutationsSpanContext, (span) => {
|
|
237
237
|
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
|
238
|
-
this.
|
|
238
|
+
this.reactivityGraph.runDeferredEffects({ otelContext });
|
|
239
239
|
span.end();
|
|
240
240
|
});
|
|
241
241
|
};
|
|
@@ -302,16 +302,15 @@ export class Store {
|
|
|
302
302
|
select = (query, params = {}) => {
|
|
303
303
|
return this.mainDbWrapper.select(query, { bindValues: prepareBindValues(params, query) });
|
|
304
304
|
};
|
|
305
|
-
makeTableRef = (tableName) => this.
|
|
305
|
+
makeTableRef = (tableName) => this.reactivityGraph.makeRef(null, {
|
|
306
306
|
equal: () => false,
|
|
307
307
|
label: `tableRef:${tableName}`,
|
|
308
308
|
meta: { liveStoreRefType: 'table' },
|
|
309
309
|
});
|
|
310
310
|
bootDevtools = () => {
|
|
311
311
|
const devtoolsChannel = Devtools.makeBroadcastChannels();
|
|
312
|
-
const
|
|
313
|
-
|
|
314
|
-
const liveQueriesSubscriptionRef = ref(undefined);
|
|
312
|
+
const reactivityGraphSubcriptions = new Map();
|
|
313
|
+
const liveQueriesSubscriptions = new Map();
|
|
315
314
|
devtoolsChannel.toAppHost.addEventListener('message', async (event) => {
|
|
316
315
|
const decoded = Schema.decodeUnknownOption(Devtools.MessageToAppHost)(event.data);
|
|
317
316
|
if (decoded._tag === 'None' ||
|
|
@@ -324,17 +323,15 @@ export class Store {
|
|
|
324
323
|
const requestId = decoded.value.requestId;
|
|
325
324
|
const sendToDevtools = (message) => devtoolsChannel.fromAppHost.postMessage(Schema.encodeSync(Devtools.MessageFromAppHost)(message));
|
|
326
325
|
switch (decoded.value._tag) {
|
|
327
|
-
case 'LSD.
|
|
326
|
+
case 'LSD.ReactivityGraphSubscribe': {
|
|
328
327
|
const includeResults = decoded.value.includeResults;
|
|
329
|
-
const send = () => sendToDevtools(Devtools.
|
|
330
|
-
|
|
328
|
+
const send = () => sendToDevtools(Devtools.ReactivityGraphRes.make({
|
|
329
|
+
reactivityGraph: this.reactivityGraph.getSnapshot({ includeResults }),
|
|
331
330
|
requestId,
|
|
332
331
|
liveStoreVersion,
|
|
333
332
|
}));
|
|
334
333
|
send();
|
|
335
|
-
|
|
336
|
-
signalsSubcriptionRef.current = this.graph.subscribeToRefresh(() => send());
|
|
337
|
-
}
|
|
334
|
+
reactivityGraphSubcriptions.set(requestId, this.reactivityGraph.subscribeToRefresh(() => send()));
|
|
338
335
|
break;
|
|
339
336
|
}
|
|
340
337
|
case 'LSD.DebugInfoReq': {
|
|
@@ -352,9 +349,8 @@ export class Store {
|
|
|
352
349
|
sendToDevtools(Devtools.DebugInfoRerunQueryRes.make({ requestId, liveStoreVersion }));
|
|
353
350
|
break;
|
|
354
351
|
}
|
|
355
|
-
case 'LSD.
|
|
356
|
-
|
|
357
|
-
signalsSubcriptionRef.current = undefined;
|
|
352
|
+
case 'LSD.ReactivityGraphUnsubscribe': {
|
|
353
|
+
reactivityGraphSubcriptions.get(requestId)();
|
|
358
354
|
break;
|
|
359
355
|
}
|
|
360
356
|
case 'LSD.LiveQueriesSubscribe': {
|
|
@@ -372,14 +368,11 @@ export class Store {
|
|
|
372
368
|
liveStoreVersion,
|
|
373
369
|
}));
|
|
374
370
|
send();
|
|
375
|
-
|
|
376
|
-
liveQueriesSubscriptionRef.current = this.graph.subscribeToRefresh(() => send());
|
|
377
|
-
}
|
|
371
|
+
liveQueriesSubscriptions.set(requestId, this.reactivityGraph.subscribeToRefresh(() => send()));
|
|
378
372
|
break;
|
|
379
373
|
}
|
|
380
374
|
case 'LSD.LiveQueriesUnsubscribe': {
|
|
381
|
-
|
|
382
|
-
liveQueriesSubscriptionRef.current = undefined;
|
|
375
|
+
liveQueriesSubscriptions.get(requestId)();
|
|
383
376
|
break;
|
|
384
377
|
}
|
|
385
378
|
case 'LSD.ResetAllDataReq': {
|
|
@@ -403,7 +396,9 @@ export class Store {
|
|
|
403
396
|
dangerouslyResetStorage = (mode) => this.adapter.coordinator.dangerouslyReset(mode);
|
|
404
397
|
}
|
|
405
398
|
/** Create a new LiveStore Store */
|
|
406
|
-
export const createStore = async ({ schema, graphQLOptions,
|
|
399
|
+
export const createStore = async ({ schema, graphQLOptions, otelOptions, adapter: adapterFactory, boot, reactivityGraph = globalReactivityGraph, batchUpdates, disableDevtools, }) => {
|
|
400
|
+
const otelTracer = otelOptions?.tracer ?? makeNoopTracer();
|
|
401
|
+
const otelRootSpanContext = otelOptions?.rootSpanContext ?? otel.context.active();
|
|
407
402
|
return otelTracer.startActiveSpan('createStore', {}, otelRootSpanContext, async (span) => {
|
|
408
403
|
try {
|
|
409
404
|
performance.mark('livestore:db-creating');
|
|
@@ -413,9 +408,9 @@ export const createStore = async ({ schema, graphQLOptions, otelTracer = makeNoo
|
|
|
413
408
|
performance.mark('livestore:db-created');
|
|
414
409
|
performance.measure('livestore:db-create', 'livestore:db-creating', 'livestore:db-created');
|
|
415
410
|
if (batchUpdates !== undefined) {
|
|
416
|
-
|
|
411
|
+
reactivityGraph.effectsWrapper = batchUpdates;
|
|
417
412
|
}
|
|
418
|
-
const mutationEventSchema =
|
|
413
|
+
const mutationEventSchema = makeMutationEventSchemaMemo(schema);
|
|
419
414
|
// TODO consider moving booting into the storage backend
|
|
420
415
|
if (boot !== undefined) {
|
|
421
416
|
let isInTxn = false;
|
|
@@ -442,7 +437,10 @@ export const createStore = async ({ schema, graphQLOptions, otelTracer = makeNoo
|
|
|
442
437
|
adapter.mainDb.execute(statementSql, bindValues);
|
|
443
438
|
}
|
|
444
439
|
const mutationEventEncoded = Schema.encodeUnknownSync(mutationEventSchema)(mutationEventDecoded);
|
|
445
|
-
void adapter.coordinator.mutate(mutationEventEncoded, {
|
|
440
|
+
void adapter.coordinator.mutate(mutationEventEncoded, {
|
|
441
|
+
span,
|
|
442
|
+
persisted: true,
|
|
443
|
+
});
|
|
446
444
|
}
|
|
447
445
|
},
|
|
448
446
|
select: (queryStr, bindValues) => {
|
|
@@ -481,13 +479,11 @@ export const createStore = async ({ schema, graphQLOptions, otelTracer = makeNoo
|
|
|
481
479
|
// Think about what to do about this case.
|
|
482
480
|
// await applySchema(db, schema)
|
|
483
481
|
return Store.createStore({
|
|
484
|
-
adapter
|
|
482
|
+
adapter,
|
|
485
483
|
schema,
|
|
486
484
|
graphQLOptions,
|
|
487
|
-
otelTracer,
|
|
488
|
-
|
|
489
|
-
dbGraph,
|
|
490
|
-
mutationEventSchema,
|
|
485
|
+
otelOptions: { tracer: otelTracer, rootSpanContext: otelRootSpanContext },
|
|
486
|
+
reactivityGraph,
|
|
491
487
|
disableDevtools,
|
|
492
488
|
}, span);
|
|
493
489
|
}
|