@livestore/livestore 0.0.54-dev.2 → 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 +6 -5
- package/dist/MainDatabaseWrapper.d.ts.map +1 -1
- package/dist/MainDatabaseWrapper.js +3 -3
- package/dist/MainDatabaseWrapper.js.map +1 -1
- package/dist/QueryCache.d.ts +1 -1
- package/dist/QueryCache.d.ts.map +1 -1
- package/dist/QueryCache.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 +3 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -4
- 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 +9 -10
- package/dist/reactiveQueries/sql.d.ts.map +1 -1
- package/dist/reactiveQueries/sql.js +12 -12
- 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 +18 -18
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +48 -53
- package/dist/store.js.map +1 -1
- package/package.json +5 -12
- package/src/MainDatabaseWrapper.ts +14 -8
- package/src/QueryCache.ts +1 -2
- 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 +17 -4
- 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 +19 -21
- package/src/row-query.ts +6 -6
- package/src/store.ts +85 -74
- package/dist/utils/bounded-collections.d.ts +0 -34
- package/dist/utils/bounded-collections.d.ts.map +0 -1
- package/dist/utils/bounded-collections.js +0 -91
- package/dist/utils/bounded-collections.js.map +0 -1
- package/dist/utils/util.d.ts +0 -14
- package/dist/utils/util.d.ts.map +0 -1
- package/dist/utils/util.js +0 -19
- package/dist/utils/util.js.map +0 -1
- package/src/utils/util.ts +0 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/reactiveQueries/sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/reactiveQueries/sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAqB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAExG,OAAO,EAAE,MAAM,EAAiB,MAAM,yBAAyB,CAAA;AAI/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC9F,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAA;AAEvE,MAAM,MAAM,OAAO,CAAC,OAAO,EAAE,IAAI,GAAG,GAAG,IACnC,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,GACxC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAA;AAExD,eAAO,MAAM,QAAQ,+BACZ,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC,YACtC;IACR,GAAG,CAAC,EAAE,QAAQ,OAAO,EAAE,IAAI,CAAC,CAAA;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,IAAI,MAAM,CAAC,CAAA;IAC3B,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC,KACA,UAAU,OAAO,EAAE,aAAa,CAS/B,CAAA;AAGJ,qBAAa,iBAAiB,CAAC,OAAO,EAAE,UAAU,SAAS,SAAS,GAAG,aAAa,CAAE,SAAQ,kBAAkB,CAC9G,OAAO,EACP,UAAU,CACX;IACC,IAAI,EAAE,KAAK,CAAQ;IAEnB,mDAAmD;IACnD,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,GAAG,SAAS,CAAA;IAEpE,sDAAsD;IACtD,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,CAAC,CAAA;IAErD,KAAK,EAAE,MAAM,CAAA;IAEb,SAAS,CAAC,eAAe,kBAAA;IAEzB,kGAAkG;IAClG,OAAO,CAAC,kBAAkB,CAAA;IAE1B,OAAO,CAAC,OAAO,CAAA;IAEf,SAAS,EAAE,UAAU,CAAA;gBAET,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,KAAK,EAAE,MAAM,EACb,eAAe,EACf,GAAG,EACH,kBAAkB,EAClB,SAAS,GACV,EAAE;QACD,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,cAAc,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC,CAAA;QACzD,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QAC3B,UAAU,CAAC,EAAE,QAAQ,CAAA;QACrB,eAAe,CAAC,EAAE,eAAe,CAAA;QACjC,GAAG,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QACtB,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAA;QAChD,SAAS,CAAC,EAAE,UAAU,CAAA;KACvB;IA4HD;;;OAGG;IAaH,gCAAgC;IAiBhC,OAAO,aAMN;CACF"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
+
import { prepareBindValues } from '@livestore/common';
|
|
1
2
|
import { shouldNeverHappen } from '@livestore/utils';
|
|
2
3
|
import { Schema, TreeFormatter } from '@livestore/utils/effect';
|
|
3
4
|
import * as otel from '@opentelemetry/api';
|
|
4
|
-
import {
|
|
5
|
+
import { globalReactivityGraph } from '../global-state.js';
|
|
5
6
|
import { getDurationMsFromSpan } from '../utils/otel.js';
|
|
6
|
-
import { prepareBindValues } from '../utils/util.js';
|
|
7
7
|
import { LiveStoreQueryBase, makeGetAtomResult } from './base-class.js';
|
|
8
8
|
export const querySQL = (query, options) => new LiveStoreSQLQuery({
|
|
9
9
|
label: options?.label,
|
|
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":"
|
|
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,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAG1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAMvE,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,KAAgD,EAChD,OAWC,EACkC,EAAE,CACrC,IAAI,iBAAiB,CAAyB;IAC5C,KAAK,EAAE,OAAO,EAAE,KAAK;IACrB,cAAc,EAAE,KAAK;IACrB,aAAa,EAAE,OAAO,EAAE,aAAa;IACrC,UAAU,EAAE,OAAO,EAAE,UAAU;IAC/B,eAAe,EAAE,OAAO,EAAE,eAAe;IACzC,GAAG,EAAE,OAAO,EAAE,GAAG;IACjB,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;CAC5B,CAAC,CAAA;AAEJ,kDAAkD;AAClD,MAAM,OAAO,iBAAyE,SAAQ,kBAG7F;IACC,IAAI,GAAU,KAAK,CAAA;IAEnB,mDAAmD;IACnD,YAAY,CAAwD;IAEpE,sDAAsD;IACtD,QAAQ,CAA6C;IAErD,KAAK,CAAQ;IAEH,eAAe,CAAA;IAEzB,kGAAkG;IAC1F,kBAAkB,CAAA;IAElB,OAAO,CAAA;IAEf,SAAS,CAAY;IAErB,YAAY,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,KAAK,EAAE,MAAM,EACb,eAAe,EACf,GAAG,EACH,kBAAkB,EAClB,SAAS,GAUV;QACC,KAAK,EAAE,CAAA;QAEP,MAAM,KAAK,GAAG,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAA;QACjD,IAAI,CAAC,KAAK,GAAG,OAAO,KAAK,GAAG,CAAA;QAC5B,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,qBAAqB,CAAA;QAC/D,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;QAC5C,IAAI,CAAC,SAAS,GAAG,SAAS,IAAK,EAAE,IAAI,EAAE,MAAM,EAAiB,CAAA;QAC9D,IAAI,CAAC,OAAO;YACV,GAAG,KAAK,SAAS;gBACf,CAAC,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAe;gBAChC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACpB,CAAC,CAAC,CAAC,IAAS,EAAE,IAA2B,EAAE,EAAE;wBACzC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,GAAiD,CAAC,CAAC,IAAI,CAAC,CAAA;wBAChG,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;4BAChC,MAAM,aAAa,GAAG,aAAa,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;4BACrE,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;4BACzC,MAAM,aAAa,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAA;4BAEpG,OAAO,CAAC,KAAK,CACX;;;SAGT,IAAI,CAAC,SAAS;EACrB,aAAa;;mBAEI,iBAAiB;;SAE3B,aAAa;;QAEd,EACU,IAAI,CACL,CAAA;4BACD,sGAAsG;4BACtG,OAAO,iBAAiB,CAAC,mCAAmC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;wBACjF,CAAC;6BAAM,CAAC;4BACN,OAAO,WAAW,CAAC,KAAgB,CAAA;wBACrC,CAAC;oBACH,CAAC;oBACH,CAAC,CAAC,OAAO,GAAG,KAAK,UAAU;wBACzB,CAAC,CAAC,GAAG;wBACL,CAAC,CAAC,iBAAiB,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;QAE1D,IAAI,yBAA8E,CAAA;QAClF,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;YACzC,yBAAyB,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CACxD,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,eAAe,EAAE,EAAE,WAAW,EAAE,EAAE;gBACtD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;gBACjC,MAAM,WAAW,GAAG,cAAc,CAAC,iBAAiB,CAAC,GAAG,EAAE,WAAW,IAAI,eAAe,CAAC,CAAC,CAAA;gBAC1F,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,CAAA;gBAC9C,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAA;gBAC3F,OAAO,WAAW,CAAA;YACpB,CAAC,EACD,EAAE,KAAK,EAAE,GAAG,KAAK,cAAc,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,EAAE,CAClF,CAAA;YAED,IAAI,CAAC,YAAY,GAAG,yBAAyB,CAAA;QAC/C,CAAC;aAAM,CAAC;YACN,yBAAyB,GAAG,cAAc,CAAA;QAC5C,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,KAAK,UAAU,CAAA;QAErC,MAAM,gBAAgB,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,CAAA;QAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAC7C,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,WAAW,EAAE,EAAE,CACzE,UAAU,CAAC,eAAe,CACxB,SAAS,EAAE,iDAAiD;QAC5D,EAAE,EACF,WAAW,IAAI,eAAe,EAC9B,CAAC,IAAI,EAAE,EAAE;YACP,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;YAEnE,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBAC1C,IAAI,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAA;gBAC/D,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAA;YACrC,CAAC;YAED,MAAM,SAAS,GACb,OAAO,yBAAyB,KAAK,QAAQ;gBAC3C,CAAC,CAAC,yBAAyB;gBAC3B,CAAC,CAAC,GAAG,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAA;YAEjD,IAAI,gBAAgB,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3C,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;YACzE,CAAC;YAED,kEAAkE;YAClE,KAAK,MAAM,SAAS,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAA;gBACvG,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;YAC5B,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;YACzC,IAAI,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;YAEhD,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAM,SAAS,EAAE;gBAC5D,aAAa;gBACb,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC7E,WAAW;aACZ,CAAC,CAAA;YAEF,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;YAErD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;YAEtD,IAAI,CAAC,GAAG,EAAE,CAAA;YAEV,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;YAE9C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAEpC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAA;YAElE,OAAO,MAAM,CAAA;QACf,CAAC,CACF,EACH,EAAE,KAAK,EAAE,UAAU,EAAE,CACtB,CAAA;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED;;;OAGG;IACH,oFAAoF;IACpF,2BAA2B;IAC3B,qBAAqB;IACrB,4CAA4C;IAC5C,gCAAgC;IAChC,SAAS;IACT,iCAAiC;IACjC,uCAAuC;IACvC,6CAA6C;IAC7C,4BAA4B;IAC5B,OAAO;IAEP,gCAAgC;IAChC,sDAAsD;IACtD,2BAA2B;IAC3B,qBAAqB;IACrB,4CAA4C;IAC5C,wEAAwE;IACxE,iHAAiH;IACjH,wCAAwC;IACxC,iGAAiG;IACjG,UAAU;IACV,iDAAiD;IACjD,SAAS;IACT,oCAAoC;IACpC,uCAAuC;IACvC,6CAA6C;IAC7C,OAAO;IAEP,OAAO,GAAG,GAAG,EAAE;QACb,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACrD,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACjD,CAAC,CAAA;CACF"}
|
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,12 +1,11 @@
|
|
|
1
|
-
import type { BootDb, ResetMode, StoreAdapter, StoreAdapterFactory } from '@livestore/common';
|
|
2
|
-
import type { LiveStoreSchema, MutationEvent
|
|
1
|
+
import type { BootDb, ParamsObject, ResetMode, StoreAdapter, StoreAdapterFactory } from '@livestore/common';
|
|
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 {
|
|
9
|
-
import type { ParamsObject } from './utils/util.js';
|
|
7
|
+
import type { DebugRefreshReasonBase, Ref } from './reactive.js';
|
|
8
|
+
import type { LiveQuery, QueryContext, ReactivityGraph } from './reactiveQueries/base-class.js';
|
|
10
9
|
export type BaseGraphQLContext = {
|
|
11
10
|
queriedTables: Set<string>;
|
|
12
11
|
/** Needed by Pothos Otel plugin for resolver tracing to work */
|
|
@@ -16,14 +15,16 @@ export type GraphQLOptions<TContext> = {
|
|
|
16
15
|
schema: GraphQLSchema;
|
|
17
16
|
makeContext: (db: MainDatabaseWrapper, tracer: otel.Tracer) => TContext;
|
|
18
17
|
};
|
|
18
|
+
export type OtelOptions = {
|
|
19
|
+
tracer: otel.Tracer;
|
|
20
|
+
rootSpanContext: otel.Context;
|
|
21
|
+
};
|
|
19
22
|
export type StoreOptions<TGraphQLContext extends BaseGraphQLContext, TSchema extends LiveStoreSchema = LiveStoreSchema> = {
|
|
20
23
|
adapter: StoreAdapter;
|
|
21
24
|
schema: TSchema;
|
|
22
25
|
graphQLOptions?: GraphQLOptions<TGraphQLContext>;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
dbGraph: DbGraph;
|
|
26
|
-
mutationEventSchema: MutationEventSchema<any>;
|
|
26
|
+
otelOptions: OtelOptions;
|
|
27
|
+
reactivityGraph: ReactivityGraph;
|
|
27
28
|
disableDevtools?: boolean;
|
|
28
29
|
};
|
|
29
30
|
export type RefreshReason = DebugRefreshReasonBase | {
|
|
@@ -66,7 +67,7 @@ export type StoreMutateOptions = {
|
|
|
66
67
|
};
|
|
67
68
|
export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGraphQLContext, TSchema extends LiveStoreSchema = LiveStoreSchema> {
|
|
68
69
|
id: string;
|
|
69
|
-
|
|
70
|
+
reactivityGraph: ReactivityGraph;
|
|
70
71
|
mainDbWrapper: MainDatabaseWrapper;
|
|
71
72
|
adapter: StoreAdapter;
|
|
72
73
|
schema: LiveStoreSchema;
|
|
@@ -78,13 +79,13 @@ export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGrap
|
|
|
78
79
|
* This only works in combination with `equal: () => false` which will always trigger a refresh.
|
|
79
80
|
*/
|
|
80
81
|
tableRefs: {
|
|
81
|
-
[key: string]: Ref<null,
|
|
82
|
+
[key: string]: Ref<null, QueryContext, RefreshReason>;
|
|
82
83
|
};
|
|
83
84
|
__processedMutationIds: Set<string>;
|
|
84
85
|
__processedMutationWithoutRefreshIds: Set<string>;
|
|
85
86
|
/** RC-based set to see which queries are currently subscribed to */
|
|
86
87
|
activeQueries: ReferenceCountedSet<LiveQuery<any>>;
|
|
87
|
-
readonly __mutationEventSchema: MutationEventSchema<
|
|
88
|
+
readonly __mutationEventSchema: import("@livestore/common/schema").MutationEventSchema<TSchema["_MutationDefMapType"]>;
|
|
88
89
|
private constructor();
|
|
89
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>;
|
|
90
91
|
/**
|
|
@@ -135,21 +136,20 @@ export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGrap
|
|
|
135
136
|
*/
|
|
136
137
|
execute: (query: string, params?: ParamsObject, writeTables?: ReadonlySet<string>, otelContext?: otel.Context) => void;
|
|
137
138
|
select: (query: string, params?: ParamsObject) => readonly any[];
|
|
138
|
-
makeTableRef: (tableName: string) => Ref<null,
|
|
139
|
+
makeTableRef: (tableName: string) => Ref<null, QueryContext, RefreshReason>;
|
|
139
140
|
private bootDevtools;
|
|
140
141
|
__devDownloadDb: () => void;
|
|
141
142
|
__devDownloadMutationLogDb: () => Promise<void>;
|
|
142
143
|
dangerouslyResetStorage: (mode: ResetMode) => Promise<void>;
|
|
143
144
|
}
|
|
144
145
|
/** Create a new LiveStore Store */
|
|
145
|
-
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, }: {
|
|
146
147
|
schema: TSchema;
|
|
147
|
-
graphQLOptions?: GraphQLOptions<TGraphQLContext>;
|
|
148
|
-
otelTracer?: otel.Tracer;
|
|
149
|
-
otelRootSpanContext?: otel.Context;
|
|
150
148
|
adapter: StoreAdapterFactory;
|
|
149
|
+
reactivityGraph?: ReactivityGraph;
|
|
150
|
+
graphQLOptions?: GraphQLOptions<TGraphQLContext>;
|
|
151
|
+
otelOptions?: Partial<OtelOptions>;
|
|
151
152
|
boot?: (db: BootDb, parentSpan: otel.Span) => unknown | Promise<unknown>;
|
|
152
|
-
dbGraph?: DbGraph;
|
|
153
153
|
batchUpdates?: (run: () => void) => void;
|
|
154
154
|
disableDevtools?: boolean;
|
|
155
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,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
CHANGED
|
@@ -1,23 +1,19 @@
|
|
|
1
|
-
import { Devtools, getExecArgsFromMutation } from '@livestore/common';
|
|
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';
|
|
11
|
-
import { prepareBindValues } from './utils/util.js';
|
|
12
11
|
let storeCount = 0;
|
|
13
12
|
const uniqueStoreId = () => `store-${++storeCount}`;
|
|
14
13
|
export class Store {
|
|
15
14
|
id = uniqueStoreId();
|
|
16
|
-
|
|
15
|
+
reactivityGraph;
|
|
17
16
|
mainDbWrapper;
|
|
18
|
-
// TODO refactor
|
|
19
|
-
// _proxyDb: InMemoryDatabase
|
|
20
|
-
// TODO
|
|
21
17
|
adapter;
|
|
22
18
|
schema;
|
|
23
19
|
graphQLSchema;
|
|
@@ -34,22 +30,25 @@ export class Store {
|
|
|
34
30
|
/** RC-based set to see which queries are currently subscribed to */
|
|
35
31
|
activeQueries;
|
|
36
32
|
__mutationEventSchema;
|
|
37
|
-
constructor({ adapter, schema, graphQLOptions,
|
|
38
|
-
this.mainDbWrapper = new MainDatabaseWrapper({
|
|
33
|
+
constructor({ adapter, schema, graphQLOptions, reactivityGraph, otelOptions, disableDevtools, }) {
|
|
34
|
+
this.mainDbWrapper = new MainDatabaseWrapper({ otel: otelOptions, db: adapter.mainDb });
|
|
39
35
|
this.adapter = adapter;
|
|
40
36
|
this.schema = schema;
|
|
41
37
|
// TODO refactor
|
|
42
|
-
this.__mutationEventSchema =
|
|
43
|
-
// this.mutationEventSchema = makeMutationEventSchema(Object.fromEntries(schema.mutations.entries()) as any)
|
|
38
|
+
this.__mutationEventSchema = makeMutationEventSchemaMemo(schema);
|
|
44
39
|
// TODO generalize the `tableRefs` concept to allow finer-grained refs
|
|
45
40
|
this.tableRefs = {};
|
|
46
41
|
this.activeQueries = new ReferenceCountedSet();
|
|
47
|
-
const mutationsSpan =
|
|
42
|
+
const mutationsSpan = otelOptions.tracer.startSpan('LiveStore:mutations', {}, otelOptions.rootSpanContext);
|
|
48
43
|
const otelMuationsSpanContext = otel.trace.setSpan(otel.context.active(), mutationsSpan);
|
|
49
|
-
const queriesSpan =
|
|
44
|
+
const queriesSpan = otelOptions.tracer.startSpan('LiveStore:queries', {}, otelOptions.rootSpanContext);
|
|
50
45
|
const otelQueriesSpanContext = otel.trace.setSpan(otel.context.active(), queriesSpan);
|
|
51
|
-
this.
|
|
52
|
-
this.
|
|
46
|
+
this.reactivityGraph = reactivityGraph;
|
|
47
|
+
this.reactivityGraph.context = {
|
|
48
|
+
store: this,
|
|
49
|
+
otelTracer: otelOptions.tracer,
|
|
50
|
+
rootOtelContext: otelQueriesSpanContext,
|
|
51
|
+
};
|
|
53
52
|
this.adapter.coordinator.syncMutations.pipe(Stream.tapSync((mutationEventDecoded) => {
|
|
54
53
|
this.mutate({ wasSyncMessage: true }, mutationEventDecoded);
|
|
55
54
|
}), Stream.runDrain, Effect.tapCauseLogPretty, Effect.runFork);
|
|
@@ -57,13 +56,13 @@ export class Store {
|
|
|
57
56
|
this.bootDevtools();
|
|
58
57
|
}
|
|
59
58
|
this.otel = {
|
|
60
|
-
tracer:
|
|
59
|
+
tracer: otelOptions.tracer,
|
|
61
60
|
mutationsSpanContext: otelMuationsSpanContext,
|
|
62
61
|
queriesSpanContext: otelQueriesSpanContext,
|
|
63
62
|
};
|
|
64
63
|
// Need a set here since `schema.tables` might contain duplicates and some componentStateTables
|
|
65
64
|
const allTableNames = new Set(this.schema.tables.keys());
|
|
66
|
-
const existingTableRefs = new Map(Array.from(this.
|
|
65
|
+
const existingTableRefs = new Map(Array.from(this.reactivityGraph.atoms.values())
|
|
67
66
|
.filter((_) => _._tag === 'ref' && _.label?.startsWith('tableRef:') === true)
|
|
68
67
|
.map((_) => [_.label.slice('tableRef:'.length), _]));
|
|
69
68
|
for (const tableName of allTableNames) {
|
|
@@ -76,7 +75,7 @@ export class Store {
|
|
|
76
75
|
}
|
|
77
76
|
static createStore = (storeOptions, parentSpan) => {
|
|
78
77
|
const ctx = otel.trace.setSpan(otel.context.active(), parentSpan);
|
|
79
|
-
return storeOptions.
|
|
78
|
+
return storeOptions.otelOptions.tracer.startActiveSpan('LiveStore:store-constructor', {}, ctx, (span) => {
|
|
80
79
|
try {
|
|
81
80
|
return new Store(storeOptions);
|
|
82
81
|
}
|
|
@@ -93,7 +92,7 @@ export class Store {
|
|
|
93
92
|
// console.log('store sub', query$.label)
|
|
94
93
|
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
|
95
94
|
const label = `subscribe:${options?.label}`;
|
|
96
|
-
const effect = this.
|
|
95
|
+
const effect = this.reactivityGraph.makeEffect((get) => onNewValue(get(query$.results$)), { label });
|
|
97
96
|
this.activeQueries.add(query$);
|
|
98
97
|
// Running effect right away to get initial value (unless `skipInitialRun` is set)
|
|
99
98
|
if (options?.skipInitialRun !== true) {
|
|
@@ -102,7 +101,7 @@ export class Store {
|
|
|
102
101
|
const unsubscribe = () => {
|
|
103
102
|
// console.log('store unsub', query$.label)
|
|
104
103
|
try {
|
|
105
|
-
this.
|
|
104
|
+
this.reactivityGraph.destroyNode(effect);
|
|
106
105
|
this.activeQueries.remove(query$);
|
|
107
106
|
onUnsubsubscribe?.();
|
|
108
107
|
}
|
|
@@ -120,7 +119,7 @@ export class Store {
|
|
|
120
119
|
destroy = async () => {
|
|
121
120
|
for (const tableRef of Object.values(this.tableRefs)) {
|
|
122
121
|
for (const superComp of tableRef.super) {
|
|
123
|
-
this.
|
|
122
|
+
this.reactivityGraph.removeEdge(superComp, tableRef);
|
|
124
123
|
}
|
|
125
124
|
}
|
|
126
125
|
otel.trace.getSpan(this.otel.mutationsSpanContext).end();
|
|
@@ -217,7 +216,7 @@ export class Store {
|
|
|
217
216
|
writeTables: Array.from(writeTables),
|
|
218
217
|
};
|
|
219
218
|
// Update all table refs together in a batch, to only trigger one reactive update
|
|
220
|
-
this.
|
|
219
|
+
this.reactivityGraph.setRefs(tablesToUpdate, { debugRefreshReason, otelContext, skipRefresh });
|
|
221
220
|
}
|
|
222
221
|
catch (e) {
|
|
223
222
|
span.setStatus({ code: otel.SpanStatusCode.ERROR, message: e.toString() });
|
|
@@ -236,7 +235,7 @@ export class Store {
|
|
|
236
235
|
const { label } = options ?? {};
|
|
237
236
|
this.otel.tracer.startActiveSpan('LiveStore:manualRefresh', { attributes: { 'livestore.manualRefreshLabel': label } }, this.otel.mutationsSpanContext, (span) => {
|
|
238
237
|
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
|
239
|
-
this.
|
|
238
|
+
this.reactivityGraph.runDeferredEffects({ otelContext });
|
|
240
239
|
span.end();
|
|
241
240
|
});
|
|
242
241
|
};
|
|
@@ -303,20 +302,19 @@ export class Store {
|
|
|
303
302
|
select = (query, params = {}) => {
|
|
304
303
|
return this.mainDbWrapper.select(query, { bindValues: prepareBindValues(params, query) });
|
|
305
304
|
};
|
|
306
|
-
makeTableRef = (tableName) => this.
|
|
305
|
+
makeTableRef = (tableName) => this.reactivityGraph.makeRef(null, {
|
|
307
306
|
equal: () => false,
|
|
308
307
|
label: `tableRef:${tableName}`,
|
|
309
308
|
meta: { liveStoreRefType: 'table' },
|
|
310
309
|
});
|
|
311
310
|
bootDevtools = () => {
|
|
312
311
|
const devtoolsChannel = Devtools.makeBroadcastChannels();
|
|
313
|
-
const
|
|
314
|
-
|
|
315
|
-
const liveQueriesSubscriptionRef = ref(undefined);
|
|
312
|
+
const reactivityGraphSubcriptions = new Map();
|
|
313
|
+
const liveQueriesSubscriptions = new Map();
|
|
316
314
|
devtoolsChannel.toAppHost.addEventListener('message', async (event) => {
|
|
317
315
|
const decoded = Schema.decodeUnknownOption(Devtools.MessageToAppHost)(event.data);
|
|
318
316
|
if (decoded._tag === 'None' ||
|
|
319
|
-
decoded.value._tag === 'LSD.
|
|
317
|
+
decoded.value._tag === 'LSD.DevtoolsReady' ||
|
|
320
318
|
decoded.value._tag === 'LSD.DevtoolsConnected' ||
|
|
321
319
|
decoded.value.channelId !== this.adapter.coordinator.devtools.channelId) {
|
|
322
320
|
// console.log(`Unknown message`, event)
|
|
@@ -325,17 +323,15 @@ export class Store {
|
|
|
325
323
|
const requestId = decoded.value.requestId;
|
|
326
324
|
const sendToDevtools = (message) => devtoolsChannel.fromAppHost.postMessage(Schema.encodeSync(Devtools.MessageFromAppHost)(message));
|
|
327
325
|
switch (decoded.value._tag) {
|
|
328
|
-
case 'LSD.
|
|
326
|
+
case 'LSD.ReactivityGraphSubscribe': {
|
|
329
327
|
const includeResults = decoded.value.includeResults;
|
|
330
|
-
const send = () => sendToDevtools(Devtools.
|
|
331
|
-
|
|
328
|
+
const send = () => sendToDevtools(Devtools.ReactivityGraphRes.make({
|
|
329
|
+
reactivityGraph: this.reactivityGraph.getSnapshot({ includeResults }),
|
|
332
330
|
requestId,
|
|
333
331
|
liveStoreVersion,
|
|
334
332
|
}));
|
|
335
333
|
send();
|
|
336
|
-
|
|
337
|
-
signalsSubcriptionRef.current = this.graph.subscribeToRefresh(() => send());
|
|
338
|
-
}
|
|
334
|
+
reactivityGraphSubcriptions.set(requestId, this.reactivityGraph.subscribeToRefresh(() => send()));
|
|
339
335
|
break;
|
|
340
336
|
}
|
|
341
337
|
case 'LSD.DebugInfoReq': {
|
|
@@ -353,9 +349,8 @@ export class Store {
|
|
|
353
349
|
sendToDevtools(Devtools.DebugInfoRerunQueryRes.make({ requestId, liveStoreVersion }));
|
|
354
350
|
break;
|
|
355
351
|
}
|
|
356
|
-
case 'LSD.
|
|
357
|
-
|
|
358
|
-
signalsSubcriptionRef.current = undefined;
|
|
352
|
+
case 'LSD.ReactivityGraphUnsubscribe': {
|
|
353
|
+
reactivityGraphSubcriptions.get(requestId)();
|
|
359
354
|
break;
|
|
360
355
|
}
|
|
361
356
|
case 'LSD.LiveQueriesSubscribe': {
|
|
@@ -373,14 +368,11 @@ export class Store {
|
|
|
373
368
|
liveStoreVersion,
|
|
374
369
|
}));
|
|
375
370
|
send();
|
|
376
|
-
|
|
377
|
-
liveQueriesSubscriptionRef.current = this.graph.subscribeToRefresh(() => send());
|
|
378
|
-
}
|
|
371
|
+
liveQueriesSubscriptions.set(requestId, this.reactivityGraph.subscribeToRefresh(() => send()));
|
|
379
372
|
break;
|
|
380
373
|
}
|
|
381
374
|
case 'LSD.LiveQueriesUnsubscribe': {
|
|
382
|
-
|
|
383
|
-
liveQueriesSubscriptionRef.current = undefined;
|
|
375
|
+
liveQueriesSubscriptions.get(requestId)();
|
|
384
376
|
break;
|
|
385
377
|
}
|
|
386
378
|
case 'LSD.ResetAllDataReq': {
|
|
@@ -404,7 +396,9 @@ export class Store {
|
|
|
404
396
|
dangerouslyResetStorage = (mode) => this.adapter.coordinator.dangerouslyReset(mode);
|
|
405
397
|
}
|
|
406
398
|
/** Create a new LiveStore Store */
|
|
407
|
-
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();
|
|
408
402
|
return otelTracer.startActiveSpan('createStore', {}, otelRootSpanContext, async (span) => {
|
|
409
403
|
try {
|
|
410
404
|
performance.mark('livestore:db-creating');
|
|
@@ -414,9 +408,9 @@ export const createStore = async ({ schema, graphQLOptions, otelTracer = makeNoo
|
|
|
414
408
|
performance.mark('livestore:db-created');
|
|
415
409
|
performance.measure('livestore:db-create', 'livestore:db-creating', 'livestore:db-created');
|
|
416
410
|
if (batchUpdates !== undefined) {
|
|
417
|
-
|
|
411
|
+
reactivityGraph.effectsWrapper = batchUpdates;
|
|
418
412
|
}
|
|
419
|
-
const mutationEventSchema =
|
|
413
|
+
const mutationEventSchema = makeMutationEventSchemaMemo(schema);
|
|
420
414
|
// TODO consider moving booting into the storage backend
|
|
421
415
|
if (boot !== undefined) {
|
|
422
416
|
let isInTxn = false;
|
|
@@ -443,7 +437,10 @@ export const createStore = async ({ schema, graphQLOptions, otelTracer = makeNoo
|
|
|
443
437
|
adapter.mainDb.execute(statementSql, bindValues);
|
|
444
438
|
}
|
|
445
439
|
const mutationEventEncoded = Schema.encodeUnknownSync(mutationEventSchema)(mutationEventDecoded);
|
|
446
|
-
void adapter.coordinator.mutate(mutationEventEncoded, {
|
|
440
|
+
void adapter.coordinator.mutate(mutationEventEncoded, {
|
|
441
|
+
span,
|
|
442
|
+
persisted: true,
|
|
443
|
+
});
|
|
447
444
|
}
|
|
448
445
|
},
|
|
449
446
|
select: (queryStr, bindValues) => {
|
|
@@ -482,13 +479,11 @@ export const createStore = async ({ schema, graphQLOptions, otelTracer = makeNoo
|
|
|
482
479
|
// Think about what to do about this case.
|
|
483
480
|
// await applySchema(db, schema)
|
|
484
481
|
return Store.createStore({
|
|
485
|
-
adapter
|
|
482
|
+
adapter,
|
|
486
483
|
schema,
|
|
487
484
|
graphQLOptions,
|
|
488
|
-
otelTracer,
|
|
489
|
-
|
|
490
|
-
dbGraph,
|
|
491
|
-
mutationEventSchema,
|
|
485
|
+
otelOptions: { tracer: otelTracer, rootSpanContext: otelRootSpanContext },
|
|
486
|
+
reactivityGraph,
|
|
492
487
|
disableDevtools,
|
|
493
488
|
}, span);
|
|
494
489
|
}
|