@livestore/livestore 0.3.0-dev.10 → 0.3.0-dev.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/SqliteDbWrapper.d.ts +54 -0
- package/dist/SqliteDbWrapper.d.ts.map +1 -0
- package/dist/SqliteDbWrapper.js +211 -0
- package/dist/SqliteDbWrapper.js.map +1 -0
- package/dist/SynchronousDatabaseWrapper.d.ts +14 -5
- package/dist/SynchronousDatabaseWrapper.d.ts.map +1 -1
- package/dist/SynchronousDatabaseWrapper.js +24 -4
- package/dist/SynchronousDatabaseWrapper.js.map +1 -1
- package/dist/effect/LiveStore.d.ts +12 -8
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +9 -2
- package/dist/effect/LiveStore.js.map +1 -1
- package/dist/index.d.ts +6 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/live-queries/base-class.d.ts +57 -21
- 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/computed.d.ts +7 -7
- package/dist/live-queries/computed.d.ts.map +1 -1
- package/dist/live-queries/computed.js +34 -11
- package/dist/live-queries/computed.js.map +1 -1
- package/dist/live-queries/db-query.d.ts +67 -0
- package/dist/live-queries/db-query.d.ts.map +1 -0
- package/dist/live-queries/db-query.js +243 -0
- 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 +113 -0
- package/dist/live-queries/db-query.test.js.map +1 -0
- package/dist/live-queries/db.d.ts +12 -15
- package/dist/live-queries/db.d.ts.map +1 -1
- package/dist/live-queries/db.js +44 -25
- package/dist/live-queries/db.js.map +1 -1
- package/dist/live-queries/db.test.js +16 -14
- package/dist/live-queries/db.test.js.map +1 -1
- package/dist/live-queries/graphql.d.ts +8 -8
- package/dist/live-queries/graphql.d.ts.map +1 -1
- package/dist/live-queries/graphql.js +34 -9
- package/dist/live-queries/graphql.js.map +1 -1
- package/dist/live-queries/make-ref.d.ts +20 -0
- package/dist/live-queries/make-ref.d.ts.map +1 -0
- package/dist/live-queries/make-ref.js +33 -0
- package/dist/live-queries/make-ref.js.map +1 -0
- package/dist/reactive.d.ts +19 -13
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +22 -18
- package/dist/reactive.js.map +1 -1
- package/dist/reactive.test.js +1 -1
- package/dist/reactive.test.js.map +1 -1
- package/dist/row-query-utils.d.ts +6 -6
- package/dist/row-query-utils.d.ts.map +1 -1
- package/dist/row-query-utils.js +15 -11
- package/dist/row-query-utils.js.map +1 -1
- package/dist/store/create-store.d.ts +7 -5
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/create-store.js +21 -7
- 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 +45 -23
- package/dist/store/devtools.js.map +1 -1
- package/dist/store/store-types.d.ts +9 -4
- package/dist/store/store-types.d.ts.map +1 -1
- package/dist/store/store-types.js.map +1 -1
- package/dist/store/store.d.ts +36 -18
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +127 -75
- package/dist/store/store.js.map +1 -1
- package/dist/utils/expo.d.ts +2 -0
- package/dist/utils/expo.d.ts.map +1 -0
- package/dist/utils/expo.js +8 -0
- package/dist/utils/expo.js.map +1 -0
- 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 +2 -6
- package/dist/utils/tests/fixture.d.ts.map +1 -1
- package/dist/utils/tests/fixture.js +3 -5
- 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/package.json +5 -5
- package/src/{SynchronousDatabaseWrapper.ts → SqliteDbWrapper.ts} +41 -12
- package/src/effect/LiveStore.ts +22 -14
- package/src/index.ts +14 -7
- package/src/live-queries/__snapshots__/{db.test.ts.snap → db-query.test.ts.snap} +196 -45
- package/src/live-queries/base-class.ts +151 -40
- package/src/live-queries/computed.ts +44 -19
- package/src/live-queries/{db.test.ts → db-query.test.ts} +44 -32
- package/src/live-queries/{db.ts → db-query.ts} +96 -39
- package/src/live-queries/graphql.ts +46 -21
- package/src/live-queries/make-ref.ts +47 -0
- package/src/reactive.test.ts +1 -1
- package/src/reactive.ts +60 -37
- package/src/row-query-utils.ts +32 -21
- package/src/store/create-store.ts +55 -27
- package/src/store/devtools.ts +74 -29
- package/src/store/store-types.ts +6 -4
- package/src/store/store.ts +231 -121
- 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 +2 -7
- package/src/utils/tests/mod.ts +1 -0
- package/src/global-state.ts +0 -20
|
@@ -1,22 +1,57 @@
|
|
|
1
1
|
import type { QueryInfo } from '@livestore/common';
|
|
2
2
|
import type * as otel from '@opentelemetry/api';
|
|
3
|
-
import
|
|
3
|
+
import * as RG from '../reactive.js';
|
|
4
4
|
import type { Store } from '../store/store.js';
|
|
5
5
|
import type { QueryDebugInfo, RefreshReason } from '../store/store-types.js';
|
|
6
6
|
import type { StackInfo } from '../utils/stack-info.js';
|
|
7
|
-
export type ReactivityGraph = ReactiveGraph<RefreshReason, QueryDebugInfo,
|
|
7
|
+
export type ReactivityGraph = RG.ReactiveGraph<RefreshReason, QueryDebugInfo, ReactivityGraphContext>;
|
|
8
8
|
export declare const makeReactivityGraph: () => ReactivityGraph;
|
|
9
|
-
export type
|
|
9
|
+
export type ReactivityGraphContext = {
|
|
10
10
|
store: Store;
|
|
11
|
+
/** Maps from the hash of the query definition to the RcRef of the query */
|
|
12
|
+
defRcMap: Map<string, RcRef<LiveQueryAny | ILiveQueryRef<any>>>;
|
|
13
|
+
/** Back-reference to the reactivity graph for convenience */
|
|
14
|
+
reactivityGraph: WeakRef<ReactivityGraph>;
|
|
11
15
|
otelTracer: otel.Tracer;
|
|
12
16
|
rootOtelContext: otel.Context;
|
|
13
17
|
effectsWrapper: (run: () => void) => void;
|
|
14
18
|
};
|
|
15
|
-
export type
|
|
16
|
-
export type GetResult<TQuery extends LiveQueryAny> = TQuery extends LiveQuery<infer TResult, infer _1> ? TResult : unknown;
|
|
19
|
+
export type GetResult<TQuery extends LiveQueryDefAny | LiveQueryAny> = TQuery extends LiveQuery<infer TResult, infer _1> ? TResult : TQuery extends LiveQueryDef<infer TResult, infer _1> ? TResult : unknown;
|
|
17
20
|
export type LiveQueryAny = LiveQuery<any, QueryInfo>;
|
|
21
|
+
export type LiveQueryDefAny = LiveQueryDef<any, any>;
|
|
22
|
+
export interface ILiveQueryRefDef<T> {
|
|
23
|
+
_tag: 'live-ref-def';
|
|
24
|
+
defaultValue: T;
|
|
25
|
+
make: (ctx: ReactivityGraphContext) => RcRef<ILiveQueryRef<T>>;
|
|
26
|
+
}
|
|
27
|
+
export interface ILiveQueryRef<T> {
|
|
28
|
+
_tag: 'live-ref';
|
|
29
|
+
reactivityGraph: ReactivityGraph;
|
|
30
|
+
ref: RG.Ref<T, ReactivityGraphContext, RefreshReason>;
|
|
31
|
+
set: (value: T) => void;
|
|
32
|
+
get: () => T;
|
|
33
|
+
destroy: () => void;
|
|
34
|
+
}
|
|
18
35
|
export declare const TypeId: unique symbol;
|
|
19
36
|
export type TypeId = typeof TypeId;
|
|
37
|
+
export interface RcRef<T> {
|
|
38
|
+
rc: number;
|
|
39
|
+
value: T;
|
|
40
|
+
deref: () => void;
|
|
41
|
+
}
|
|
42
|
+
export type DepKey = string | number | ReadonlyArray<string | number | undefined | null>;
|
|
43
|
+
export declare const depsToString: (deps: DepKey) => string;
|
|
44
|
+
export interface LiveQueryDef<TResult, TQueryInfo extends QueryInfo = QueryInfo.None> {
|
|
45
|
+
_tag: 'def';
|
|
46
|
+
/** Creates a new LiveQuery instance bound to a specific store/reactivityGraph */
|
|
47
|
+
make: (ctx: ReactivityGraphContext, otelContext?: otel.Context) => RcRef<LiveQuery<TResult, TQueryInfo>>;
|
|
48
|
+
label: string;
|
|
49
|
+
hash: string;
|
|
50
|
+
queryInfo: TQueryInfo;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* A LiveQuery is stateful
|
|
54
|
+
*/
|
|
20
55
|
export interface LiveQuery<TResult, TQueryInfo extends QueryInfo = QueryInfo.None> {
|
|
21
56
|
id: number;
|
|
22
57
|
_tag: 'computed' | 'db' | 'graphql';
|
|
@@ -24,15 +59,14 @@ export interface LiveQuery<TResult, TQueryInfo extends QueryInfo = QueryInfo.Non
|
|
|
24
59
|
/** This should only be used on a type-level and doesn't hold any value during runtime */
|
|
25
60
|
'__result!': TResult;
|
|
26
61
|
/** A reactive thunk representing the query results */
|
|
27
|
-
results$: Thunk<TResult,
|
|
62
|
+
results$: RG.Thunk<TResult, ReactivityGraphContext, RefreshReason>;
|
|
28
63
|
label: string;
|
|
29
|
-
run: (
|
|
30
|
-
runAndDestroy: (otelContext?: otel.Context, debugRefreshReason?: RefreshReason) => TResult;
|
|
31
|
-
destroy(): void;
|
|
32
|
-
subscribe(onNewValue: (value: TResult) => void, onUnsubsubscribe?: () => void, options?: {
|
|
33
|
-
label?: string;
|
|
64
|
+
run: (args: {
|
|
34
65
|
otelContext?: otel.Context;
|
|
35
|
-
|
|
66
|
+
debugRefreshReason?: RefreshReason;
|
|
67
|
+
}) => TResult;
|
|
68
|
+
destroy: () => void;
|
|
69
|
+
isDestroyed: boolean;
|
|
36
70
|
activeSubscriptions: Set<StackInfo>;
|
|
37
71
|
queryInfo: TQueryInfo;
|
|
38
72
|
runs: number;
|
|
@@ -45,20 +79,22 @@ export declare abstract class LiveStoreQueryBase<TResult, TQueryInfo extends Que
|
|
|
45
79
|
abstract _tag: 'computed' | 'db' | 'graphql';
|
|
46
80
|
/** Human-readable label for the query for debugging */
|
|
47
81
|
abstract label: string;
|
|
48
|
-
abstract results$: Thunk<TResult,
|
|
82
|
+
abstract results$: RG.Thunk<TResult, ReactivityGraphContext, RefreshReason>;
|
|
49
83
|
activeSubscriptions: Set<StackInfo>;
|
|
50
|
-
|
|
84
|
+
abstract readonly reactivityGraph: ReactivityGraph;
|
|
51
85
|
abstract queryInfo: TQueryInfo;
|
|
52
86
|
get runs(): number;
|
|
53
87
|
executionTimes: number[];
|
|
88
|
+
isDestroyed: boolean;
|
|
54
89
|
abstract destroy: () => void;
|
|
55
|
-
run: (
|
|
56
|
-
runAndDestroy: (otelContext?: otel.Context, debugRefreshReason?: RefreshReason) => TResult;
|
|
57
|
-
subscribe: (onNewValue: (value: TResult) => void, onUnsubsubscribe?: () => void, options?: {
|
|
58
|
-
label?: string;
|
|
90
|
+
run: (args: {
|
|
59
91
|
otelContext?: otel.Context;
|
|
60
|
-
|
|
92
|
+
debugRefreshReason?: RefreshReason;
|
|
93
|
+
}) => TResult;
|
|
94
|
+
protected dependencyQueriesRef: DependencyQueriesRef;
|
|
61
95
|
}
|
|
62
|
-
export type GetAtomResult = <T>(atom: Atom<T, any, RefreshReason> | LiveQuery<T, any>) => T;
|
|
63
|
-
export
|
|
96
|
+
export type GetAtomResult = <T>(atom: RG.Atom<T, any, RefreshReason> | LiveQueryDef<T, any> | LiveQuery<T, any> | ILiveQueryRef<T> | ILiveQueryRefDef<T>, otelContext?: otel.Context | undefined, debugRefreshReason?: RefreshReason | undefined) => T;
|
|
97
|
+
export type DependencyQueriesRef = Set<RcRef<LiveQueryAny | ILiveQueryRef<any>>>;
|
|
98
|
+
export declare const makeGetAtomResult: (get: RG.GetAtom, ctx: ReactivityGraphContext, otelContext: otel.Context, dependencyQueriesRef: DependencyQueriesRef) => GetAtomResult;
|
|
99
|
+
export declare const withRCMap: <T extends LiveQueryAny | ILiveQueryRef<any>>(id: string, make: (ctx: ReactivityGraphContext, otelContext?: otel.Context) => T) => ((ctx: ReactivityGraphContext, otelContext?: otel.Context) => RcRef<T>);
|
|
64
100
|
//# sourceMappingURL=base-class.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-class.d.ts","sourceRoot":"","sources":["../../src/live-queries/base-class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"base-class.d.ts","sourceRoot":"","sources":["../../src/live-queries/base-class.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
+
// LiveQueryDef case
|
|
35
|
+
if (atom._tag === 'def' || atom._tag === 'live-ref-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
|
+
// LiveQueryRef case
|
|
42
|
+
if (atom._tag === 'live-ref')
|
|
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
|
+
}
|
|
65
|
+
ctx.defRcMap.delete(id);
|
|
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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"}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import type { QueryInfo } from '@livestore/common';
|
|
2
2
|
import type { Thunk } from '../reactive.js';
|
|
3
3
|
import type { RefreshReason } from '../store/store-types.js';
|
|
4
|
-
import type {
|
|
4
|
+
import type { DepKey, GetAtomResult, LiveQueryDef, ReactivityGraph, ReactivityGraphContext } from './base-class.js';
|
|
5
5
|
import { LiveStoreQueryBase } from './base-class.js';
|
|
6
6
|
export declare const computed: <TResult, TQueryInfo extends QueryInfo = QueryInfo.None>(fn: (get: GetAtomResult) => TResult, options?: {
|
|
7
|
-
label
|
|
8
|
-
reactivityGraph?: ReactivityGraph;
|
|
7
|
+
label?: string;
|
|
9
8
|
queryInfo?: TQueryInfo;
|
|
10
|
-
|
|
9
|
+
deps?: DepKey;
|
|
10
|
+
}) => LiveQueryDef<TResult, TQueryInfo>;
|
|
11
11
|
export declare class LiveStoreComputedQuery<TResult, TQueryInfo extends QueryInfo = QueryInfo.None> extends LiveStoreQueryBase<TResult, TQueryInfo> {
|
|
12
12
|
_tag: 'computed';
|
|
13
13
|
/** A reactive thunk representing the query results */
|
|
14
|
-
results$: Thunk<TResult,
|
|
14
|
+
results$: Thunk<TResult, ReactivityGraphContext, RefreshReason>;
|
|
15
15
|
label: string;
|
|
16
|
-
|
|
16
|
+
reactivityGraph: ReactivityGraph;
|
|
17
17
|
queryInfo: TQueryInfo;
|
|
18
18
|
constructor({ fn, label, reactivityGraph, queryInfo, }: {
|
|
19
19
|
label: string;
|
|
20
20
|
fn: (get: GetAtomResult) => TResult;
|
|
21
|
-
reactivityGraph
|
|
21
|
+
reactivityGraph: ReactivityGraph;
|
|
22
22
|
queryInfo?: TQueryInfo;
|
|
23
23
|
});
|
|
24
24
|
destroy: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../../src/live-queries/computed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../../src/live-queries/computed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGlD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAG5D,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,EAAE,UAAU,SAAS,SAAS,uBACxD,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,YACzB;IACR,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,UAAU,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,KACA,YAAY,CAAC,OAAO,EAAE,UAAU,CA0BlC,CAAA;AAED,qBAAa,sBAAsB,CAAC,OAAO,EAAE,UAAU,SAAS,SAAS,GAAG,SAAS,CAAC,IAAI,CAAE,SAAQ,kBAAkB,CACpH,OAAO,EACP,UAAU,CACX;IACC,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;IAEhC,SAAS,EAAE,UAAU,CAAA;gBAET,EACV,EAAE,EACF,KAAK,EACL,eAAe,EACf,SAAS,GACV,EAAE;QACD,KAAK,EAAE,MAAM,CAAA;QACb,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAA;QACnC,eAAe,EAAE,eAAe,CAAA;QAChC,SAAS,CAAC,EAAE,UAAU,CAAA;KACvB;IA6BD,OAAO,aAQN;CACF"}
|
|
@@ -1,13 +1,32 @@
|
|
|
1
1
|
import * as otel from '@opentelemetry/api';
|
|
2
|
-
import {
|
|
2
|
+
import { isValidFunctionString } from '../utils/function-string.js';
|
|
3
3
|
import { getDurationMsFromSpan } from '../utils/otel.js';
|
|
4
|
-
import { LiveStoreQueryBase, makeGetAtomResult } from './base-class.js';
|
|
5
|
-
export const computed = (fn, options) =>
|
|
6
|
-
fn
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
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 queryInfo = options?.queryInfo ?? { _tag: 'None' };
|
|
11
|
+
return {
|
|
12
|
+
_tag: 'def',
|
|
13
|
+
make: withRCMap(hash, (ctx, _otelContext) => {
|
|
14
|
+
// TODO onDestroy
|
|
15
|
+
return new LiveStoreComputedQuery({
|
|
16
|
+
fn,
|
|
17
|
+
label: options?.label ?? fn.toString(),
|
|
18
|
+
queryInfo: options?.queryInfo,
|
|
19
|
+
reactivityGraph: ctx.reactivityGraph.deref(),
|
|
20
|
+
});
|
|
21
|
+
}),
|
|
22
|
+
label: options?.label ?? fn.toString(),
|
|
23
|
+
// NOTE We're using the `makeQuery` function body string to make sure the key is unique across the app
|
|
24
|
+
// TODO we should figure out whether this could cause some problems and/or if there's a better way to do this
|
|
25
|
+
// NOTE `fn.toString()` doesn't work in Expo as it always produces `[native code]`
|
|
26
|
+
hash,
|
|
27
|
+
queryInfo,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
11
30
|
export class LiveStoreComputedQuery extends LiveStoreQueryBase {
|
|
12
31
|
_tag = 'computed';
|
|
13
32
|
/** A reactive thunk representing the query results */
|
|
@@ -18,12 +37,12 @@ export class LiveStoreComputedQuery extends LiveStoreQueryBase {
|
|
|
18
37
|
constructor({ fn, label, reactivityGraph, queryInfo, }) {
|
|
19
38
|
super();
|
|
20
39
|
this.label = label;
|
|
21
|
-
this.reactivityGraph = reactivityGraph
|
|
40
|
+
this.reactivityGraph = reactivityGraph;
|
|
22
41
|
this.queryInfo = queryInfo ?? { _tag: 'None' };
|
|
23
42
|
const queryLabel = `${label}:results`;
|
|
24
|
-
this.results$ = this.reactivityGraph.makeThunk((get, setDebugInfo,
|
|
43
|
+
this.results$ = this.reactivityGraph.makeThunk((get, setDebugInfo, ctx, otelContext) => ctx.otelTracer.startActiveSpan(`js:${label}`, {}, otelContext ?? ctx.rootOtelContext, (span) => {
|
|
25
44
|
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
|
26
|
-
const res = fn(makeGetAtomResult(get, otelContext));
|
|
45
|
+
const res = fn(makeGetAtomResult(get, ctx, otelContext, this.dependencyQueriesRef));
|
|
27
46
|
span.end();
|
|
28
47
|
const durationMs = getDurationMsFromSpan(span);
|
|
29
48
|
this.executionTimes.push(durationMs);
|
|
@@ -32,7 +51,11 @@ export class LiveStoreComputedQuery extends LiveStoreQueryBase {
|
|
|
32
51
|
}), { label: queryLabel, meta: { liveStoreThunkType: 'computed' } });
|
|
33
52
|
}
|
|
34
53
|
destroy = () => {
|
|
54
|
+
this.isDestroyed = true;
|
|
35
55
|
this.reactivityGraph.destroyNode(this.results$);
|
|
56
|
+
for (const query of this.dependencyQueriesRef) {
|
|
57
|
+
query.deref();
|
|
58
|
+
}
|
|
36
59
|
};
|
|
37
60
|
}
|
|
38
61
|
//# sourceMappingURL=computed.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/live-queries/computed.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/live-queries/computed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { Bindable, QueryBuilder, QueryInfo } 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, TQueryInfo extends QueryInfo> = {
|
|
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
|
+
queryInfo?: TQueryInfo;
|
|
19
|
+
execBeforeFirstRun?: (ctx: ReactivityGraphContext) => void;
|
|
20
|
+
};
|
|
21
|
+
export declare const isQueryInputRaw: (value: unknown) => value is QueryInputRaw<any, any, any>;
|
|
22
|
+
export type QueryInput<TDecoded, TEncoded, TQueryInfo extends QueryInfo> = QueryInputRaw<TDecoded, TEncoded, TQueryInfo> | QueryBuilder<TDecoded, any, any, TQueryInfo>;
|
|
23
|
+
/**
|
|
24
|
+
* NOTE `query` is only supposed to read data. Don't use it to insert/update/delete data but use mutations instead.
|
|
25
|
+
*/
|
|
26
|
+
export declare const queryDb: {
|
|
27
|
+
<TResultSchema, TResult = TResultSchema, TQueryInfo extends QueryInfo = QueryInfo.None>(queryInput: QueryInputRaw<TResultSchema, ReadonlyArray<any>, TQueryInfo> | QueryBuilder<TResultSchema, any, any, TQueryInfo>, options?: {
|
|
28
|
+
map?: (rows: TResultSchema) => TResult;
|
|
29
|
+
/**
|
|
30
|
+
* Used for debugging / devtools
|
|
31
|
+
*/
|
|
32
|
+
label?: string;
|
|
33
|
+
deps?: DepKey;
|
|
34
|
+
queryInfo?: TQueryInfo;
|
|
35
|
+
}): LiveQueryDef<TResult, TQueryInfo>;
|
|
36
|
+
<TResultSchema, TResult = TResultSchema, TQueryInfo extends QueryInfo = QueryInfo.None>(queryInput: ((get: GetAtomResult) => QueryInputRaw<TResultSchema, ReadonlyArray<any>, TQueryInfo>) | ((get: GetAtomResult) => QueryBuilder<TResultSchema, any, any, TQueryInfo>), options?: {
|
|
37
|
+
map?: (rows: TResultSchema) => TResult;
|
|
38
|
+
/**
|
|
39
|
+
* Used for debugging / devtools
|
|
40
|
+
*/
|
|
41
|
+
label?: string;
|
|
42
|
+
deps?: DepKey;
|
|
43
|
+
queryInfo?: TQueryInfo;
|
|
44
|
+
}): LiveQueryDef<TResult, TQueryInfo>;
|
|
45
|
+
};
|
|
46
|
+
export declare class LiveStoreDbQuery<TResultSchema, TResult = TResultSchema, TQueryInfo extends QueryInfo = QueryInfo.None> extends LiveStoreQueryBase<TResult, TQueryInfo> {
|
|
47
|
+
_tag: 'db';
|
|
48
|
+
/** A reactive thunk representing the query text */
|
|
49
|
+
queryInput$: Thunk<QueryInputRaw<any, any, QueryInfo>, ReactivityGraphContext, RefreshReason> | undefined;
|
|
50
|
+
/** A reactive thunk representing the query results */
|
|
51
|
+
results$: Thunk<TResult, ReactivityGraphContext, RefreshReason>;
|
|
52
|
+
label: string;
|
|
53
|
+
queryInfo: TQueryInfo;
|
|
54
|
+
readonly reactivityGraph: ReactivityGraph;
|
|
55
|
+
private mapResult;
|
|
56
|
+
constructor({ queryInput, label: inputLabel, reactivityGraph, map, queryInfo: inputQueryInfo, otelContext, }: {
|
|
57
|
+
label?: string;
|
|
58
|
+
queryInput: QueryInput<TResultSchema, ReadonlyArray<any>, TQueryInfo> | ((get: GetAtomResult, ctx: ReactivityGraphContext) => QueryInput<TResultSchema, ReadonlyArray<any>, TQueryInfo>);
|
|
59
|
+
reactivityGraph: ReactivityGraph;
|
|
60
|
+
map?: (rows: TResultSchema) => TResult;
|
|
61
|
+
queryInfo?: TQueryInfo;
|
|
62
|
+
/** Only used for the initial query execution */
|
|
63
|
+
otelContext?: otel.Context;
|
|
64
|
+
});
|
|
65
|
+
destroy: () => void;
|
|
66
|
+
}
|
|
67
|
+
//# 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":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAU1E,OAAO,EAAa,MAAM,EAAiB,MAAM,yBAAyB,CAAA;AAC1E,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAG3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAG5D,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,MAAM,MAAM,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,SAAS,SAAS,IAAI;IAC5E,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACzC,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB;;;;OAIG;IACH,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,SAAS,CAAC,EAAE,UAAU,CAAA;IACtB,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,IAAI,CAAA;CAC3D,CAAA;AAED,eAAO,MAAM,eAAe,UAAW,OAAO,KAAG,KAAK,IAAI,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CACJ,CAAA;AAEjF,MAAM,MAAM,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,SAAS,SAAS,IACnE,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,GAC7C,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE;IACpB,CAAC,aAAa,EAAE,OAAO,GAAG,aAAa,EAAE,UAAU,SAAS,SAAS,GAAG,SAAS,CAAC,IAAI,EACpF,UAAU,EACN,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAC5D,YAAY,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,EACrD,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAA;QACtC;;WAEG;QACH,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,SAAS,CAAC,EAAE,UAAU,CAAA;KACvB,GACA,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IAIpC,CAAC,aAAa,EAAE,OAAO,GAAG,aAAa,EAAE,UAAU,SAAS,SAAS,GAAG,SAAS,CAAC,IAAI,EACpF,UAAU,EACN,CAAC,CAAC,GAAG,EAAE,aAAa,KAAK,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,GACtF,CAAC,CAAC,GAAG,EAAE,aAAa,KAAK,YAAY,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,EAC/E,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAA;QACtC;;WAEG;QACH,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,SAAS,CAAC,EAAE,UAAU,CAAA;KACvB,GACA,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;CAoCrC,CAAA;AAGD,qBAAa,gBAAgB,CAC3B,aAAa,EACb,OAAO,GAAG,aAAa,EACvB,UAAU,SAAS,SAAS,GAAG,SAAS,CAAC,IAAI,CAC7C,SAAQ,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC/C,IAAI,EAAE,IAAI,CAAO;IAEjB,mDAAmD;IACnD,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,sBAAsB,EAAE,aAAa,CAAC,GAAG,SAAS,CAAA;IAEzG,sDAAsD;IACtD,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAA;IAE/D,KAAK,EAAE,MAAM,CAAA;IAEb,SAAS,EAAE,UAAU,CAAA;IAErB,QAAQ,CAAC,eAAe,kBAAA;IAExB,OAAO,CAAC,SAAS,CAAkC;gBAEvC,EACV,UAAU,EACV,KAAK,EAAE,UAAU,EACjB,eAAe,EACf,GAAG,EACH,SAAS,EAAE,cAAc,EACzB,WAAW,GACZ,EAAE;QACD,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,UAAU,EACN,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GACzD,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,sBAAsB,KAAK,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAA;QACpH,eAAe,EAAE,eAAe,CAAA;QAChC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAA;QACtC,SAAS,CAAC,EAAE,UAAU,CAAA;QACtB,gDAAgD;QAChD,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;KAC3B;IA+OD,OAAO,aAYN;CACF"}
|