@livestore/livestore 0.3.0-dev.4 → 0.3.0-dev.40
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 +65 -27
- package/dist/live-queries/base-class.d.ts.map +1 -1
- package/dist/live-queries/base-class.js +54 -13
- 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 +12 -14
- 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 +64 -0
- package/dist/live-queries/db-query.d.ts.map +1 -0
- package/dist/live-queries/{db.js → db-query.js} +83 -41
- 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 +20 -0
- package/dist/live-queries/signal.d.ts.map +1 -0
- package/dist/live-queries/signal.js +33 -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 +17 -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 +69 -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 +103 -47
- package/dist/store/devtools.js.map +1 -1
- package/dist/store/store-types.d.ts +32 -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 +104 -39
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +261 -214
- 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} +220 -45
- package/src/live-queries/base-class.ts +152 -50
- 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} +140 -82
- package/src/live-queries/mod.ts +4 -0
- package/src/live-queries/signal.test.ts +25 -0
- package/src/live-queries/signal.ts +47 -0
- package/src/mod.ts +42 -0
- package/src/reactive.test.ts +1 -1
- package/src/reactive.ts +66 -43
- package/src/store/create-store.ts +187 -59
- package/src/store/devtools.ts +136 -54
- package/src/store/store-types.ts +31 -43
- package/src/store/store.ts +385 -309
- 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 -31
- 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 -66
- package/src/utils/otel.ts +0 -9
- package/tsconfig.json +0 -18
- package/vitest.config.js +0 -9
@@ -1,7 +1,14 @@
|
|
1
|
-
import {
|
2
|
-
|
1
|
+
import { isNotNil } from '@livestore/utils';
|
2
|
+
import * as RG from '../reactive.js';
|
3
|
+
export const makeReactivityGraph = () => new RG.ReactiveGraph();
|
3
4
|
let queryIdCounter = 0;
|
4
5
|
export const TypeId = Symbol.for('LiveQuery');
|
6
|
+
export const depsToString = (deps) => {
|
7
|
+
if (typeof deps === 'string' || typeof deps === 'number') {
|
8
|
+
return deps.toString();
|
9
|
+
}
|
10
|
+
return deps.filter(isNotNil).join(',');
|
11
|
+
};
|
5
12
|
export class LiveStoreQueryBase {
|
6
13
|
'__result!';
|
7
14
|
id = queryIdCounter++;
|
@@ -11,21 +18,55 @@ export class LiveStoreQueryBase {
|
|
11
18
|
return this.results$.recomputations;
|
12
19
|
}
|
13
20
|
executionTimes = [];
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
this.
|
18
|
-
return result;
|
21
|
+
// TODO double check if this is needed
|
22
|
+
isDestroyed = false;
|
23
|
+
run = (args) => {
|
24
|
+
return this.results$.computeResult(args.otelContext, args.debugRefreshReason);
|
19
25
|
};
|
20
|
-
|
21
|
-
throwContextNotSetError(this.reactivityGraph);
|
26
|
+
dependencyQueriesRef = new Set();
|
22
27
|
}
|
23
|
-
export const makeGetAtomResult = (get, otelContext) => {
|
24
|
-
|
28
|
+
export const makeGetAtomResult = (get, ctx, otelContext, dependencyQueriesRef) => {
|
29
|
+
// NOTE we're using the `otelContext` from `makeGetAtomResult` here, not the `otelContext` from `getAtom`
|
30
|
+
const getAtom = (atom, _otelContext, debugRefreshReason) => {
|
31
|
+
// ReactivityGraph atoms case
|
25
32
|
if (atom._tag === 'thunk' || atom._tag === 'ref')
|
26
|
-
return get(atom, otelContext);
|
27
|
-
|
33
|
+
return get(atom, otelContext, debugRefreshReason);
|
34
|
+
// def case
|
35
|
+
if (atom._tag === 'def' || atom._tag === 'signal-def') {
|
36
|
+
const query = atom.make(ctx);
|
37
|
+
dependencyQueriesRef.add(query);
|
38
|
+
// TODO deref the query on destroy
|
39
|
+
return getAtom(query.value, _otelContext, debugRefreshReason);
|
40
|
+
}
|
41
|
+
// Signal case
|
42
|
+
if (atom._tag === 'signal')
|
43
|
+
return get(atom.ref, otelContext, debugRefreshReason);
|
44
|
+
// LiveQuery case
|
45
|
+
return get(atom.results$, otelContext, debugRefreshReason);
|
28
46
|
};
|
29
47
|
return getAtom;
|
30
48
|
};
|
49
|
+
export const withRCMap = (id, make) => {
|
50
|
+
return (ctx, otelContext) => {
|
51
|
+
let item = ctx.defRcMap.get(id);
|
52
|
+
if (item) {
|
53
|
+
item.rc++;
|
54
|
+
return item;
|
55
|
+
}
|
56
|
+
const query$ = make(ctx, otelContext);
|
57
|
+
item = {
|
58
|
+
rc: 1,
|
59
|
+
value: query$,
|
60
|
+
deref: () => {
|
61
|
+
item.rc--;
|
62
|
+
if (item.rc === 0) {
|
63
|
+
item.value.destroy();
|
64
|
+
ctx.defRcMap.delete(id);
|
65
|
+
}
|
66
|
+
},
|
67
|
+
};
|
68
|
+
ctx.defRcMap.set(id, item);
|
69
|
+
return item;
|
70
|
+
};
|
71
|
+
};
|
31
72
|
//# sourceMappingURL=base-class.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"base-class.js","sourceRoot":"","sources":["../../src/live-queries/base-class.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"base-class.js","sourceRoot":"","sources":["../../src/live-queries/base-class.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { SessionIdSymbol } from '@livestore/common';
|
2
|
+
import { State } from '@livestore/common/schema';
|
3
|
+
import type * as otel from '@opentelemetry/api';
|
4
|
+
import type { ReactivityGraphContext } from './base-class.js';
|
5
|
+
export declare const rowQueryLabel: (table: State.SQLite.ClientDocumentTableDef.Any, id: string | SessionIdSymbol | undefined) => string;
|
6
|
+
export declare const makeExecBeforeFirstRun: ({ id, explicitDefaultValues, table, otelContext: otelContext_, }: {
|
7
|
+
id?: string | SessionIdSymbol;
|
8
|
+
explicitDefaultValues?: any;
|
9
|
+
table: State.SQLite.TableDefBase;
|
10
|
+
otelContext: otel.Context | undefined;
|
11
|
+
}) => ({ store }: ReactivityGraphContext) => undefined;
|
12
|
+
//# sourceMappingURL=client-document-get-query.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"client-document-get-query.d.ts","sourceRoot":"","sources":["../../src/live-queries/client-document-get-query.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAEhD,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAE7D,eAAO,MAAM,aAAa,GACxB,OAAO,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,GAAG,EAC9C,IAAI,MAAM,GAAG,eAAe,GAAG,SAAS,WAC2E,CAAA;AAErH,eAAO,MAAM,sBAAsB,GAChC,kEAKE;IACD,EAAE,CAAC,EAAE,MAAM,GAAG,eAAe,CAAA;IAC7B,qBAAqB,CAAC,EAAE,GAAG,CAAA;IAC3B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY,CAAA;IAChC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;CACtC,MACA,WAAW,sBAAsB,cA0BjC,CAAA"}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { SessionIdSymbol } from '@livestore/common';
|
2
|
+
import { State } from '@livestore/common/schema';
|
3
|
+
import { shouldNeverHappen } from '@livestore/utils';
|
4
|
+
export const rowQueryLabel = (table, id) => `${table.sqliteDef.name}.get:${id === undefined ? table.default.id : id === SessionIdSymbol ? 'sessionId' : id}`;
|
5
|
+
export const makeExecBeforeFirstRun = ({ id, explicitDefaultValues, table, otelContext: otelContext_, }) => ({ store }) => {
|
6
|
+
if (State.SQLite.tableIsClientDocumentTable(table) === false) {
|
7
|
+
return shouldNeverHappen(`Cannot insert row for table "${table.sqliteDef.name}" which does not have 'deriveEvents: true' set`);
|
8
|
+
}
|
9
|
+
const otelContext = otelContext_ ?? store.otel.queriesSpanContext;
|
10
|
+
const idVal = id === SessionIdSymbol ? store.sessionId : id;
|
11
|
+
const rowExists = store.sqliteDbWrapper.select(`SELECT 1 FROM '${table.sqliteDef.name}' WHERE id = ?`, [idVal], { otelContext }).length === 1;
|
12
|
+
if (rowExists)
|
13
|
+
return;
|
14
|
+
// It's important that we only commit and don't refresh here, as this function might be called during a render
|
15
|
+
// and otherwise we might end up in a "reactive loop"
|
16
|
+
store.commit({ otelContext, skipRefresh: true, label: `${table.sqliteDef.name}.set:${idVal}` }, table.set(explicitDefaultValues, idVal));
|
17
|
+
};
|
18
|
+
//# sourceMappingURL=client-document-get-query.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"client-document-get-query.js","sourceRoot":"","sources":["../../src/live-queries/client-document-get-query.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAKpD,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAA8C,EAC9C,EAAwC,EACxC,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,QAAQ,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AAErH,MAAM,CAAC,MAAM,sBAAsB,GACjC,CAAC,EACC,EAAE,EACF,qBAAqB,EACrB,KAAK,EACL,WAAW,EAAE,YAAY,GAM1B,EAAE,EAAE,CACL,CAAC,EAAE,KAAK,EAA0B,EAAE,EAAE;IACpC,IAAI,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;QAC7D,OAAO,iBAAiB,CACtB,gCAAgC,KAAK,CAAC,SAAS,CAAC,IAAI,gDAAgD,CACrG,CAAA;IACH,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAA;IAEjE,MAAM,KAAK,GAAG,EAAE,KAAK,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAG,CAAA;IAC5D,MAAM,SAAS,GACb,KAAK,CAAC,eAAe,CAAC,MAAM,CAC1B,kBAAkB,KAAK,CAAC,SAAS,CAAC,IAAI,gBAAgB,EACtD,CAAC,KAAK,CAA8B,EACpC,EAAE,WAAW,EAAE,CAChB,CAAC,MAAM,KAAK,CAAC,CAAA;IAEhB,IAAI,SAAS;QAAE,OAAM;IAErB,8GAA8G;IAC9G,qDAAqD;IAErD,KAAK,CAAC,MAAM,CACV,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,QAAQ,KAAK,EAAE,EAAE,EACjF,KAAK,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAa,CAAC,CAChD,CAAA;AACH,CAAC,CAAA"}
|
@@ -1,25 +1,23 @@
|
|
1
|
-
import type { QueryInfo } from '@livestore/common';
|
2
1
|
import type { Thunk } from '../reactive.js';
|
3
2
|
import type { RefreshReason } from '../store/store-types.js';
|
4
|
-
import type {
|
3
|
+
import type { DepKey, GetAtomResult, LiveQueryDef, ReactivityGraph, ReactivityGraphContext } from './base-class.js';
|
5
4
|
import { LiveStoreQueryBase } from './base-class.js';
|
6
|
-
export declare const computed: <TResult
|
7
|
-
label
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
export declare class LiveStoreComputedQuery<TResult, TQueryInfo extends QueryInfo = QueryInfo.None> extends LiveStoreQueryBase<TResult, TQueryInfo> {
|
5
|
+
export declare const computed: <TResult>(fn: (get: GetAtomResult) => TResult, options?: {
|
6
|
+
label?: string;
|
7
|
+
deps?: DepKey;
|
8
|
+
}) => LiveQueryDef<TResult>;
|
9
|
+
export declare class LiveStoreComputedQuery<TResult> extends LiveStoreQueryBase<TResult> {
|
12
10
|
_tag: 'computed';
|
13
11
|
/** A reactive thunk representing the query results */
|
14
|
-
results$: Thunk<TResult,
|
12
|
+
results$: Thunk<TResult, ReactivityGraphContext, RefreshReason>;
|
15
13
|
label: string;
|
16
|
-
|
17
|
-
|
18
|
-
constructor({ fn, label, reactivityGraph,
|
14
|
+
reactivityGraph: ReactivityGraph;
|
15
|
+
def: LiveQueryDef<TResult>;
|
16
|
+
constructor({ fn, label, reactivityGraph, def, }: {
|
19
17
|
label: string;
|
20
18
|
fn: (get: GetAtomResult) => TResult;
|
21
|
-
reactivityGraph
|
22
|
-
|
19
|
+
reactivityGraph: ReactivityGraph;
|
20
|
+
def: LiveQueryDef<TResult>;
|
23
21
|
});
|
24
22
|
destroy: () => void;
|
25
23
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../../src/live-queries/computed.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../../src/live-queries/computed.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACnH,OAAO,EAAgB,kBAAkB,EAAgC,MAAM,iBAAiB,CAAA;AAEhG,eAAO,MAAM,QAAQ,GAAI,OAAO,EAC9B,IAAI,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,EACnC,UAAU;IACR,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,KACA,YAAY,CAAC,OAAO,CAyBtB,CAAA;AAED,qBAAa,sBAAsB,CAAC,OAAO,CAAE,SAAQ,kBAAkB,CAAC,OAAO,CAAC;IAC9E,IAAI,EAAE,UAAU,CAAa;IAE7B,sDAAsD;IACtD,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAA;IAE/D,KAAK,EAAE,MAAM,CAAA;IAEb,eAAe,EAAE,eAAe,CAAA;IAChC,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;gBAEd,EACV,EAAE,EACF,KAAK,EACL,eAAe,EACf,GAAG,GACJ,EAAE;QACD,KAAK,EAAE,MAAM,CAAA;QACb,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAA;QACnC,eAAe,EAAE,eAAe,CAAA;QAChC,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;KAC3B;IA6BD,OAAO,aAQN;CACF"}
|
@@ -1,29 +1,47 @@
|
|
1
|
+
import { getDurationMsFromSpan } from '@livestore/common';
|
1
2
|
import * as otel from '@opentelemetry/api';
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
import { isValidFunctionString } from '../utils/function-string.js';
|
4
|
+
import { depsToString, LiveStoreQueryBase, makeGetAtomResult, withRCMap } from './base-class.js';
|
5
|
+
export const computed = (fn, options) => {
|
6
|
+
const hash = options?.deps ? depsToString(options.deps) : fn.toString();
|
7
|
+
if (isValidFunctionString(hash)._tag === 'invalid') {
|
8
|
+
throw new Error(`On Expo/React Native, computed queries must provide a \`deps\` option`);
|
9
|
+
}
|
10
|
+
const def = {
|
11
|
+
_tag: 'def',
|
12
|
+
make: withRCMap(hash, (ctx, _otelContext) => {
|
13
|
+
// TODO onDestroy
|
14
|
+
return new LiveStoreComputedQuery({
|
15
|
+
fn,
|
16
|
+
label: options?.label ?? fn.toString(),
|
17
|
+
reactivityGraph: ctx.reactivityGraph.deref(),
|
18
|
+
def,
|
19
|
+
});
|
20
|
+
}),
|
21
|
+
label: options?.label ?? fn.toString(),
|
22
|
+
// NOTE We're using the `makeQuery` function body string to make sure the key is unique across the app
|
23
|
+
// TODO we should figure out whether this could cause some problems and/or if there's a better way to do this
|
24
|
+
// NOTE `fn.toString()` doesn't work in Expo as it always produces `[native code]`
|
25
|
+
hash,
|
26
|
+
};
|
27
|
+
return def;
|
28
|
+
};
|
11
29
|
export class LiveStoreComputedQuery extends LiveStoreQueryBase {
|
12
30
|
_tag = 'computed';
|
13
31
|
/** A reactive thunk representing the query results */
|
14
32
|
results$;
|
15
33
|
label;
|
16
34
|
reactivityGraph;
|
17
|
-
|
18
|
-
constructor({ fn, label, reactivityGraph,
|
35
|
+
def;
|
36
|
+
constructor({ fn, label, reactivityGraph, def, }) {
|
19
37
|
super();
|
20
38
|
this.label = label;
|
21
|
-
this.reactivityGraph = reactivityGraph
|
22
|
-
this.
|
39
|
+
this.reactivityGraph = reactivityGraph;
|
40
|
+
this.def = def;
|
23
41
|
const queryLabel = `${label}:results`;
|
24
|
-
this.results$ = this.reactivityGraph.makeThunk((get, setDebugInfo,
|
42
|
+
this.results$ = this.reactivityGraph.makeThunk((get, setDebugInfo, ctx, otelContext) => ctx.otelTracer.startActiveSpan(`js:${label}`, {}, otelContext ?? ctx.rootOtelContext, (span) => {
|
25
43
|
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
26
|
-
const res = fn(makeGetAtomResult(get, otelContext));
|
44
|
+
const res = fn(makeGetAtomResult(get, ctx, otelContext, this.dependencyQueriesRef));
|
27
45
|
span.end();
|
28
46
|
const durationMs = getDurationMsFromSpan(span);
|
29
47
|
this.executionTimes.push(durationMs);
|
@@ -32,7 +50,11 @@ export class LiveStoreComputedQuery extends LiveStoreQueryBase {
|
|
32
50
|
}), { label: queryLabel, meta: { liveStoreThunkType: 'computed' } });
|
33
51
|
}
|
34
52
|
destroy = () => {
|
53
|
+
this.isDestroyed = true;
|
35
54
|
this.reactivityGraph.destroyNode(this.results$);
|
55
|
+
for (const query of this.dependencyQueriesRef) {
|
56
|
+
query.deref();
|
57
|
+
}
|
36
58
|
};
|
37
59
|
}
|
38
60
|
//# sourceMappingURL=computed.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/live-queries/computed.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/live-queries/computed.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
import type { Bindable, QueryBuilder } from '@livestore/common';
|
2
|
+
import { Schema } from '@livestore/utils/effect';
|
3
|
+
import * as otel from '@opentelemetry/api';
|
4
|
+
import type { Thunk } from '../reactive.js';
|
5
|
+
import type { RefreshReason } from '../store/store-types.js';
|
6
|
+
import type { DepKey, GetAtomResult, LiveQueryDef, ReactivityGraph, ReactivityGraphContext } from './base-class.js';
|
7
|
+
import { LiveStoreQueryBase } from './base-class.js';
|
8
|
+
export type QueryInputRaw<TDecoded, TEncoded> = {
|
9
|
+
query: string;
|
10
|
+
schema: Schema.Schema<TDecoded, TEncoded>;
|
11
|
+
bindValues?: Bindable;
|
12
|
+
/**
|
13
|
+
* Can be provided explicitly to slightly speed up initial query performance
|
14
|
+
*
|
15
|
+
* NOTE In the future we want to do this automatically at build time
|
16
|
+
*/
|
17
|
+
queriedTables?: Set<string>;
|
18
|
+
execBeforeFirstRun?: (ctx: ReactivityGraphContext) => void;
|
19
|
+
};
|
20
|
+
export declare const isQueryInputRaw: (value: unknown) => value is QueryInputRaw<any, any>;
|
21
|
+
export type QueryInput<TDecoded, TEncoded> = QueryInputRaw<TDecoded, TEncoded> | QueryBuilder<TDecoded, any, any>;
|
22
|
+
/**
|
23
|
+
* NOTE `queryDb` is only supposed to read data. Don't use it to insert/update/delete data but use events instead.
|
24
|
+
*/
|
25
|
+
export declare const queryDb: {
|
26
|
+
<TResultSchema, TResult = TResultSchema>(queryInput: QueryInputRaw<TResultSchema, ReadonlyArray<any>> | QueryBuilder<TResultSchema, any, any>, options?: {
|
27
|
+
map?: (rows: TResultSchema) => TResult;
|
28
|
+
/**
|
29
|
+
* Used for debugging / devtools
|
30
|
+
*/
|
31
|
+
label?: string;
|
32
|
+
deps?: DepKey;
|
33
|
+
}): LiveQueryDef<TResult>;
|
34
|
+
<TResultSchema, TResult = TResultSchema>(queryInput: ((get: GetAtomResult) => QueryInputRaw<TResultSchema, ReadonlyArray<any>>) | ((get: GetAtomResult) => QueryBuilder<TResultSchema, any, any>), options?: {
|
35
|
+
map?: (rows: TResultSchema) => TResult;
|
36
|
+
/**
|
37
|
+
* Used for debugging / devtools
|
38
|
+
*/
|
39
|
+
label?: string;
|
40
|
+
deps?: DepKey;
|
41
|
+
}): LiveQueryDef<TResult>;
|
42
|
+
};
|
43
|
+
export declare class LiveStoreDbQuery<TResultSchema, TResult = TResultSchema> extends LiveStoreQueryBase<TResult> {
|
44
|
+
_tag: 'db';
|
45
|
+
/** A reactive thunk representing the query text */
|
46
|
+
queryInput$: Thunk<QueryInputRaw<any, any>, ReactivityGraphContext, RefreshReason> | undefined;
|
47
|
+
/** A reactive thunk representing the query results */
|
48
|
+
results$: Thunk<TResult, ReactivityGraphContext, RefreshReason>;
|
49
|
+
label: string;
|
50
|
+
readonly reactivityGraph: ReactivityGraph;
|
51
|
+
private mapResult;
|
52
|
+
def: LiveQueryDef<TResult>;
|
53
|
+
constructor({ queryInput, label: inputLabel, reactivityGraph, map, otelContext, def, }: {
|
54
|
+
label?: string;
|
55
|
+
queryInput: QueryInput<TResultSchema, ReadonlyArray<any>> | ((get: GetAtomResult, ctx: ReactivityGraphContext) => QueryInput<TResultSchema, ReadonlyArray<any>>);
|
56
|
+
reactivityGraph: ReactivityGraph;
|
57
|
+
map?: (rows: TResultSchema) => TResult;
|
58
|
+
/** Only used for the initial query execution */
|
59
|
+
otelContext?: otel.Context;
|
60
|
+
def: LiveQueryDef<TResult>;
|
61
|
+
});
|
62
|
+
destroy: () => void;
|
63
|
+
}
|
64
|
+
//# sourceMappingURL=db-query.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"db-query.d.ts","sourceRoot":"","sources":["../../src/live-queries/db-query.ts"],"names":[],"mappings":"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"}
|
@@ -1,23 +1,64 @@
|
|
1
|
-
import { getResultSchema, isQueryBuilder, prepareBindValues, QueryBuilderAstSymbol, replaceSessionIdSymbol, UnexpectedError, } from '@livestore/common';
|
1
|
+
import { getDurationMsFromSpan, getResultSchema, isQueryBuilder, prepareBindValues, QueryBuilderAstSymbol, replaceSessionIdSymbol, SessionIdSymbol, UnexpectedError, } from '@livestore/common';
|
2
2
|
import { deepEqual, shouldNeverHappen } from '@livestore/utils';
|
3
3
|
import { Predicate, Schema, TreeFormatter } from '@livestore/utils/effect';
|
4
4
|
import * as otel from '@opentelemetry/api';
|
5
|
-
import { globalReactivityGraph } from '../global-state.js';
|
6
5
|
import { isThunk, NOT_REFRESHED_YET } from '../reactive.js';
|
7
|
-
import {
|
8
|
-
import {
|
9
|
-
import {
|
6
|
+
import { isValidFunctionString } from '../utils/function-string.js';
|
7
|
+
import { depsToString, LiveStoreQueryBase, makeGetAtomResult, withRCMap } from './base-class.js';
|
8
|
+
import { makeExecBeforeFirstRun, rowQueryLabel } from './client-document-get-query.js';
|
9
|
+
export const isQueryInputRaw = (value) => Predicate.hasProperty(value, 'query') && Predicate.hasProperty(value, 'schema');
|
10
10
|
/**
|
11
|
-
* NOTE `
|
11
|
+
* NOTE `queryDb` is only supposed to read data. Don't use it to insert/update/delete data but use events instead.
|
12
12
|
*/
|
13
|
-
export const queryDb = (queryInput, options) =>
|
14
|
-
queryInput
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
});
|
13
|
+
export const queryDb = (queryInput, options) => {
|
14
|
+
const { queryString, extraDeps } = getQueryStringAndExtraDeps(queryInput);
|
15
|
+
const hash = (options?.deps ? queryString + '-' + depsToString(options.deps) : queryString) + '-' + depsToString(extraDeps);
|
16
|
+
if (isValidFunctionString(hash)._tag === 'invalid') {
|
17
|
+
throw new Error(`On Expo/React Native, db queries must provide a \`deps\` option`);
|
18
|
+
}
|
19
|
+
if (hash.trim() === '') {
|
20
|
+
return shouldNeverHappen(`Invalid query hash for query: ${queryInput}`);
|
21
|
+
}
|
22
|
+
const label = options?.label ?? queryString;
|
23
|
+
const def = {
|
24
|
+
_tag: 'def',
|
25
|
+
make: withRCMap(hash, (ctx, otelContext) => {
|
26
|
+
// TODO onDestroy
|
27
|
+
return new LiveStoreDbQuery({
|
28
|
+
reactivityGraph: ctx.reactivityGraph.deref(),
|
29
|
+
queryInput,
|
30
|
+
label,
|
31
|
+
map: options?.map,
|
32
|
+
otelContext,
|
33
|
+
def,
|
34
|
+
});
|
35
|
+
}),
|
36
|
+
label,
|
37
|
+
hash,
|
38
|
+
};
|
39
|
+
return def;
|
40
|
+
};
|
41
|
+
const bindValuesToDepKey = (bindValues) => {
|
42
|
+
if (bindValues === undefined) {
|
43
|
+
return [];
|
44
|
+
}
|
45
|
+
return Object.entries(bindValues)
|
46
|
+
.map(([key, value]) => `${key}:${value === SessionIdSymbol ? 'SessionIdSymbol' : value}`)
|
47
|
+
.join(',');
|
48
|
+
};
|
49
|
+
const getQueryStringAndExtraDeps = (queryInput) => {
|
50
|
+
if (isQueryBuilder(queryInput)) {
|
51
|
+
const { query, bindValues } = queryInput.asSql();
|
52
|
+
return { queryString: query, extraDeps: bindValuesToDepKey(bindValues) };
|
53
|
+
}
|
54
|
+
if (isQueryInputRaw(queryInput)) {
|
55
|
+
return { queryString: queryInput.query, extraDeps: bindValuesToDepKey(queryInput.bindValues) };
|
56
|
+
}
|
57
|
+
if (typeof queryInput === 'function') {
|
58
|
+
return { queryString: queryInput.toString(), extraDeps: [] };
|
59
|
+
}
|
60
|
+
return shouldNeverHappen(`Invalid query input: ${queryInput}`);
|
61
|
+
};
|
21
62
|
/* An object encapsulating a reactive SQL query */
|
22
63
|
export class LiveStoreDbQuery extends LiveStoreQueryBase {
|
23
64
|
_tag = 'db';
|
@@ -26,14 +67,14 @@ export class LiveStoreDbQuery extends LiveStoreQueryBase {
|
|
26
67
|
/** A reactive thunk representing the query results */
|
27
68
|
results$;
|
28
69
|
label;
|
29
|
-
queryInfo;
|
30
70
|
reactivityGraph;
|
31
71
|
mapResult;
|
32
|
-
|
72
|
+
def;
|
73
|
+
constructor({ queryInput, label: inputLabel, reactivityGraph, map, otelContext, def, }) {
|
33
74
|
super();
|
34
75
|
let label = inputLabel ?? 'db(unknown)';
|
35
|
-
|
36
|
-
this.
|
76
|
+
this.reactivityGraph = reactivityGraph;
|
77
|
+
this.def = def;
|
37
78
|
this.mapResult = map === undefined ? (rows) => rows : map;
|
38
79
|
const schemaRef = {
|
39
80
|
current: typeof queryInput === 'function' ? undefined : isQueryBuilder(queryInput) ? undefined : queryInput.schema,
|
@@ -53,13 +94,12 @@ export class LiveStoreDbQuery extends LiveStoreQueryBase {
|
|
53
94
|
schema,
|
54
95
|
bindValues: qbRes.bindValues,
|
55
96
|
queriedTables: new Set([ast.tableDef.sqliteDef.name]),
|
56
|
-
queryInfo: ast._tag === 'RowQuery' ? { _tag: 'Row', table: ast.tableDef, id: ast.id } : { _tag: 'None' },
|
57
97
|
},
|
58
98
|
label: ast._tag === 'RowQuery' ? rowQueryLabel(ast.tableDef, ast.id) : qb.toString(),
|
59
99
|
execBeforeFirstRun: ast._tag === 'RowQuery'
|
60
100
|
? makeExecBeforeFirstRun({
|
61
101
|
table: ast.tableDef,
|
62
|
-
|
102
|
+
explicitDefaultValues: ast.explicitDefaultValues,
|
63
103
|
id: ast.id,
|
64
104
|
otelContext,
|
65
105
|
})
|
@@ -73,7 +113,7 @@ export class LiveStoreDbQuery extends LiveStoreQueryBase {
|
|
73
113
|
if (typeof queryInput === 'function') {
|
74
114
|
queryInputRaw$OrQueryInputRaw = this.reactivityGraph.makeThunk((get, setDebugInfo, ctx, otelContext) => {
|
75
115
|
const startMs = performance.now();
|
76
|
-
const queryInputResult = queryInput(makeGetAtomResult(get, otelContext ?? ctx.rootOtelContext), ctx);
|
116
|
+
const queryInputResult = queryInput(makeGetAtomResult(get, ctx, otelContext ?? ctx.rootOtelContext, this.dependencyQueriesRef), ctx);
|
77
117
|
const durationMs = performance.now() - startMs;
|
78
118
|
let queryInputRaw;
|
79
119
|
if (isQueryBuilder(queryInputResult)) {
|
@@ -88,9 +128,6 @@ export class LiveStoreDbQuery extends LiveStoreQueryBase {
|
|
88
128
|
}
|
89
129
|
setDebugInfo({ _tag: 'computed', label: `${this.label}:queryInput`, query: queryInputRaw.query, durationMs });
|
90
130
|
schemaRef.current = queryInputRaw.schema;
|
91
|
-
if (inputQueryInfo === undefined && queryInputRaw.queryInfo !== undefined) {
|
92
|
-
queryInfo = queryInputRaw.queryInfo;
|
93
|
-
}
|
94
131
|
return queryInputRaw;
|
95
132
|
}, {
|
96
133
|
label: `${label}:query`,
|
@@ -98,6 +135,7 @@ export class LiveStoreDbQuery extends LiveStoreQueryBase {
|
|
98
135
|
// NOTE we're not checking the schema here as we assume the query string to always change when the schema might change
|
99
136
|
equal: (a, b) => a.query === b.query && deepEqual(a.bindValues, b.bindValues),
|
100
137
|
});
|
138
|
+
this.queryInput$ = queryInputRaw$OrQueryInputRaw;
|
101
139
|
}
|
102
140
|
else {
|
103
141
|
let queryInputRaw;
|
@@ -119,9 +157,6 @@ export class LiveStoreDbQuery extends LiveStoreQueryBase {
|
|
119
157
|
label = `db(${rowQueryLabel(ast.tableDef, ast.id)})`;
|
120
158
|
}
|
121
159
|
}
|
122
|
-
if (inputQueryInfo === undefined && queryInputRaw.queryInfo !== undefined) {
|
123
|
-
queryInfo = queryInputRaw.queryInfo;
|
124
|
-
}
|
125
160
|
}
|
126
161
|
const queriedTablesRef = { current: undefined };
|
127
162
|
const makeResultsEqual = (resultSchema) => (a, b) => a === NOT_REFRESHED_YET || b === NOT_REFRESHED_YET ? false : Schema.equivalence(resultSchema)(a, b);
|
@@ -133,8 +168,14 @@ export class LiveStoreDbQuery extends LiveStoreQueryBase {
|
|
133
168
|
? (a, b) => makeResultsEqual(schemaRef.current)(a, b)
|
134
169
|
: makeResultsEqual(schemaRef.current)
|
135
170
|
: undefined;
|
136
|
-
const results$ = this.reactivityGraph.makeThunk((get, setDebugInfo, queryContext, otelContext) => queryContext.otelTracer.startActiveSpan('db:...', // NOTE span name will be overridden further down
|
137
|
-
{
|
171
|
+
const results$ = this.reactivityGraph.makeThunk((get, setDebugInfo, queryContext, otelContext, debugRefreshReason) => queryContext.otelTracer.startActiveSpan('db:...', // NOTE span name will be overridden further down
|
172
|
+
{
|
173
|
+
attributes: {
|
174
|
+
'livestore.debugRefreshReason': Predicate.hasProperty(debugRefreshReason, 'label')
|
175
|
+
? debugRefreshReason.label
|
176
|
+
: debugRefreshReason?._tag,
|
177
|
+
},
|
178
|
+
}, otelContext ?? queryContext.rootOtelContext, (span) => {
|
138
179
|
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
139
180
|
const { store } = queryContext;
|
140
181
|
if (execBeforeFirstRunRef.current !== undefined) {
|
@@ -142,26 +183,25 @@ export class LiveStoreDbQuery extends LiveStoreQueryBase {
|
|
142
183
|
execBeforeFirstRunRef.current = undefined;
|
143
184
|
}
|
144
185
|
const queryInputResult = isThunk(queryInputRaw$OrQueryInputRaw)
|
145
|
-
? get(queryInputRaw$OrQueryInputRaw, otelContext)
|
186
|
+
? get(queryInputRaw$OrQueryInputRaw, otelContext, debugRefreshReason)
|
146
187
|
: queryInputRaw$OrQueryInputRaw;
|
147
188
|
const sqlString = queryInputResult.query;
|
148
189
|
const bindValues = queryInputResult.bindValues;
|
149
190
|
if (queriedTablesRef.current === undefined) {
|
150
|
-
queriedTablesRef.current = store.
|
191
|
+
queriedTablesRef.current = store.sqliteDbWrapper.getTablesUsed(sqlString);
|
151
192
|
}
|
152
193
|
if (bindValues !== undefined) {
|
153
|
-
replaceSessionIdSymbol(bindValues, store.clientSession.
|
194
|
+
replaceSessionIdSymbol(bindValues, store.clientSession.sessionId);
|
154
195
|
}
|
155
196
|
// Establish a reactive dependency on the tables used in the query
|
156
197
|
for (const tableName of queriedTablesRef.current) {
|
157
198
|
const tableRef = store.tableRefs[tableName] ?? shouldNeverHappen(`No table ref found for ${tableName}`);
|
158
|
-
get(tableRef, otelContext);
|
199
|
+
get(tableRef, otelContext, debugRefreshReason);
|
159
200
|
}
|
160
201
|
span.setAttribute('sql.query', sqlString);
|
161
202
|
span.updateName(`db:${sqlString.slice(0, 50)}`);
|
162
|
-
const rawDbResults = store.
|
203
|
+
const rawDbResults = store.sqliteDbWrapper.select(sqlString, bindValues ? prepareBindValues(bindValues, sqlString) : undefined, {
|
163
204
|
queriedTables: queriedTablesRef.current,
|
164
|
-
bindValues: bindValues ? prepareBindValues(bindValues, sqlString) : undefined,
|
165
205
|
otelContext,
|
166
206
|
});
|
167
207
|
span.setAttribute('sql.rowsCount', rawDbResults.length);
|
@@ -170,8 +210,8 @@ export class LiveStoreDbQuery extends LiveStoreQueryBase {
|
|
170
210
|
const parseErrorStr = TreeFormatter.formatErrorSync(parsedResult.left);
|
171
211
|
const expectedSchemaStr = String(schemaRef.current.ast);
|
172
212
|
const bindValuesStr = bindValues === undefined ? '' : `\nBind values: ${JSON.stringify(bindValues)}`;
|
173
|
-
|
174
|
-
Error parsing SQL query result.
|
213
|
+
return shouldNeverHappen(`\
|
214
|
+
Error parsing SQL query result (${label}).
|
175
215
|
|
176
216
|
Query: ${sqlString}\
|
177
217
|
${bindValuesStr}
|
@@ -180,8 +220,7 @@ Expected schema: ${expectedSchemaStr}
|
|
180
220
|
|
181
221
|
Error: ${parseErrorStr}
|
182
222
|
|
183
|
-
Result:`, rawDbResults);
|
184
|
-
return shouldNeverHappen(`Error parsing SQL query result: ${parsedResult.left}`);
|
223
|
+
Result:`, rawDbResults, '\n');
|
185
224
|
}
|
186
225
|
const result = this.mapResult(parsedResult.right);
|
187
226
|
span.end();
|
@@ -192,13 +231,16 @@ Result:`, rawDbResults);
|
|
192
231
|
}), { label: `${label}:results`, meta: { liveStoreThunkType: 'db.result' }, equal: resultsEqual });
|
193
232
|
this.results$ = results$;
|
194
233
|
this.label = label;
|
195
|
-
this.queryInfo = queryInfo;
|
196
234
|
}
|
197
235
|
destroy = () => {
|
236
|
+
this.isDestroyed = true;
|
198
237
|
if (this.queryInput$ !== undefined) {
|
199
238
|
this.reactivityGraph.destroyNode(this.queryInput$);
|
200
239
|
}
|
201
240
|
this.reactivityGraph.destroyNode(this.results$);
|
241
|
+
for (const query of this.dependencyQueriesRef) {
|
242
|
+
query.deref();
|
243
|
+
}
|
202
244
|
};
|
203
245
|
}
|
204
|
-
//# sourceMappingURL=db.js.map
|
246
|
+
//# sourceMappingURL=db-query.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"db-query.js","sourceRoot":"","sources":["../../src/live-queries/db-query.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"db-query.test.d.ts","sourceRoot":"","sources":["../../src/live-queries/db-query.test.ts"],"names":[],"mappings":""}
|