@livestore/livestore 0.4.0-dev.9 → 0.4.0
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/README.md +0 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/QueryCache.js +1 -1
- package/dist/QueryCache.js.map +1 -1
- package/dist/SqliteDbWrapper.d.ts +5 -5
- package/dist/SqliteDbWrapper.d.ts.map +1 -1
- package/dist/SqliteDbWrapper.js +8 -8
- package/dist/SqliteDbWrapper.js.map +1 -1
- package/dist/SqliteDbWrapper.test.js +4 -3
- package/dist/SqliteDbWrapper.test.js.map +1 -1
- package/dist/effect/LiveStore.d.ts +133 -5
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +187 -8
- package/dist/effect/LiveStore.js.map +1 -1
- package/dist/effect/LiveStore.test.d.ts +2 -0
- package/dist/effect/LiveStore.test.d.ts.map +1 -0
- package/dist/effect/LiveStore.test.js +42 -0
- package/dist/effect/LiveStore.test.js.map +1 -0
- package/dist/effect/mod.d.ts +1 -1
- package/dist/effect/mod.d.ts.map +1 -1
- package/dist/effect/mod.js +3 -1
- package/dist/effect/mod.js.map +1 -1
- package/dist/live-queries/base-class.d.ts +110 -7
- package/dist/live-queries/base-class.d.ts.map +1 -1
- package/dist/live-queries/base-class.js +2 -2
- package/dist/live-queries/base-class.js.map +1 -1
- package/dist/live-queries/client-document-get-query.d.ts +1 -1
- package/dist/live-queries/client-document-get-query.d.ts.map +1 -1
- package/dist/live-queries/client-document-get-query.js +4 -3
- package/dist/live-queries/client-document-get-query.js.map +1 -1
- package/dist/live-queries/computed.d.ts +56 -0
- package/dist/live-queries/computed.d.ts.map +1 -1
- package/dist/live-queries/computed.js +58 -2
- package/dist/live-queries/computed.js.map +1 -1
- package/dist/live-queries/db-query.d.ts.map +1 -1
- package/dist/live-queries/db-query.js +21 -19
- package/dist/live-queries/db-query.js.map +1 -1
- package/dist/live-queries/db-query.test.js +106 -23
- package/dist/live-queries/db-query.test.js.map +1 -1
- package/dist/live-queries/signal.d.ts +49 -0
- package/dist/live-queries/signal.d.ts.map +1 -1
- package/dist/live-queries/signal.js +49 -0
- package/dist/live-queries/signal.js.map +1 -1
- package/dist/live-queries/signal.test.js +2 -2
- package/dist/live-queries/signal.test.js.map +1 -1
- package/dist/mod.d.ts +3 -3
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +3 -2
- package/dist/mod.js.map +1 -1
- package/dist/reactive.d.ts +9 -9
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +9 -26
- package/dist/reactive.js.map +1 -1
- package/dist/reactive.test.js +2 -2
- package/dist/reactive.test.js.map +1 -1
- package/dist/store/StoreRegistry.d.ts +215 -0
- package/dist/store/StoreRegistry.d.ts.map +1 -0
- package/dist/store/StoreRegistry.js +267 -0
- package/dist/store/StoreRegistry.js.map +1 -0
- package/dist/store/StoreRegistry.test.d.ts +2 -0
- package/dist/store/StoreRegistry.test.d.ts.map +1 -0
- package/dist/store/StoreRegistry.test.js +381 -0
- package/dist/store/StoreRegistry.test.js.map +1 -0
- package/dist/store/create-store.d.ts +98 -18
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/create-store.js +49 -20
- package/dist/store/create-store.js.map +1 -1
- package/dist/store/devtools.d.ts +5 -16
- package/dist/store/devtools.d.ts.map +1 -1
- package/dist/store/devtools.js +59 -18
- package/dist/store/devtools.js.map +1 -1
- package/dist/store/store-eventstream.test.d.ts +2 -0
- package/dist/store/store-eventstream.test.d.ts.map +1 -0
- package/dist/store/store-eventstream.test.js +65 -0
- package/dist/store/store-eventstream.test.js.map +1 -0
- package/dist/store/store-types.d.ts +285 -27
- package/dist/store/store-types.d.ts.map +1 -1
- package/dist/store/store-types.js +77 -1
- package/dist/store/store-types.js.map +1 -1
- package/dist/store/store-types.test.d.ts +2 -0
- package/dist/store/store-types.test.d.ts.map +1 -0
- package/dist/store/store-types.test.js +39 -0
- package/dist/store/store-types.test.js.map +1 -0
- package/dist/store/store.d.ts +253 -66
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +442 -153
- package/dist/store/store.js.map +1 -1
- package/dist/utils/dev.d.ts.map +1 -1
- package/dist/utils/dev.js.map +1 -1
- package/dist/utils/stack-info.js +2 -2
- package/dist/utils/stack-info.js.map +1 -1
- package/dist/utils/tests/fixture.d.ts +20 -5
- package/dist/utils/tests/fixture.d.ts.map +1 -1
- package/dist/utils/tests/fixture.js +7 -0
- package/dist/utils/tests/fixture.js.map +1 -1
- package/dist/utils/tests/otel.d.ts.map +1 -1
- package/dist/utils/tests/otel.js +5 -5
- package/dist/utils/tests/otel.js.map +1 -1
- package/package.json +59 -17
- package/src/QueryCache.ts +1 -1
- package/src/SqliteDbWrapper.test.ts +5 -3
- package/src/SqliteDbWrapper.ts +12 -11
- package/src/ambient.d.ts +0 -7
- package/src/effect/LiveStore.test.ts +61 -0
- package/src/effect/LiveStore.ts +388 -13
- package/src/effect/mod.ts +13 -1
- package/src/live-queries/__snapshots__/db-query.test.ts.snap +604 -192
- package/src/live-queries/base-class.ts +126 -28
- package/src/live-queries/client-document-get-query.ts +6 -4
- package/src/live-queries/computed.ts +59 -2
- package/src/live-queries/db-query.test.ts +162 -24
- package/src/live-queries/db-query.ts +23 -20
- package/src/live-queries/signal.test.ts +3 -2
- package/src/live-queries/signal.ts +49 -0
- package/src/mod.ts +19 -2
- package/src/reactive.test.ts +3 -2
- package/src/reactive.ts +22 -23
- package/src/store/StoreRegistry.test.ts +540 -0
- package/src/store/StoreRegistry.ts +418 -0
- package/src/store/create-store.ts +158 -39
- package/src/store/devtools.ts +77 -33
- package/src/store/store-eventstream.test.ts +114 -0
- package/src/store/store-types.test.ts +52 -0
- package/src/store/store-types.ts +360 -40
- package/src/store/store.ts +571 -236
- package/src/utils/dev.ts +2 -3
- package/src/utils/stack-info.ts +2 -2
- package/src/utils/tests/fixture.ts +9 -1
- package/src/utils/tests/otel.ts +8 -7
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { describe, it } from 'vitest';
|
|
2
|
+
import { Effect, Layer } from '@livestore/utils/effect';
|
|
3
|
+
import { schema } from "../utils/tests/fixture.js";
|
|
4
|
+
import { Store } from "./LiveStore.js";
|
|
5
|
+
/**
|
|
6
|
+
* Regression test for https://github.com/livestorejs/livestore/issues/1103
|
|
7
|
+
*
|
|
8
|
+
* `yield* MyStore` and `MyStore.query(...)` must produce the same R channel type
|
|
9
|
+
* so that a single layer provision satisfies both.
|
|
10
|
+
*/
|
|
11
|
+
describe('Store.Tag R channel consistency', () => {
|
|
12
|
+
class MainStore extends Store.Tag(schema, 'main') {
|
|
13
|
+
}
|
|
14
|
+
const storeLayer = MainStore.layer({ adapter: {}, batchUpdates: (_) => { } });
|
|
15
|
+
it('yield* and method R channels unify so layer provision eliminates all requirements', () => {
|
|
16
|
+
const prog = Effect.gen(function* () {
|
|
17
|
+
const { store } = yield* MainStore;
|
|
18
|
+
void store;
|
|
19
|
+
const _queryResult = yield* MainStore.query({ get: () => 42 });
|
|
20
|
+
void _queryResult;
|
|
21
|
+
yield* MainStore.commit();
|
|
22
|
+
});
|
|
23
|
+
/** Providing the store layer must fully eliminate MainStore from R */
|
|
24
|
+
const _provided = prog.pipe(Effect.provide(storeLayer));
|
|
25
|
+
void _provided;
|
|
26
|
+
});
|
|
27
|
+
it('use() helper R channel is satisfied by the same layer', () => {
|
|
28
|
+
const prog = MainStore.use(({ store }) => Effect.succeed(store));
|
|
29
|
+
const _provided = prog.pipe(Effect.provide(storeLayer));
|
|
30
|
+
void _provided;
|
|
31
|
+
});
|
|
32
|
+
it('fromDeferred layer output satisfies the same R channel', () => {
|
|
33
|
+
const prog = Effect.gen(function* () {
|
|
34
|
+
yield* MainStore;
|
|
35
|
+
});
|
|
36
|
+
/** fromDeferred + DeferredLayer should satisfy MainStore in R */
|
|
37
|
+
const _provided = prog.pipe(Effect.provide(Layer.merge(MainStore.fromDeferred, MainStore.DeferredLayer)));
|
|
38
|
+
const _check = true;
|
|
39
|
+
void _check;
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=LiveStore.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveStore.test.js","sourceRoot":"","sources":["../../src/effect/LiveStore.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,KAAK,EAAsB,MAAM,gBAAgB,CAAA;AAE1D;;;;;GAKG;AACH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,MAAM,SAAU,SAAQ,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;KAAG;IAEpD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAS,EAAE,YAAY,EAAE,CAAC,CAAa,EAAE,EAAE,GAAE,CAAC,EAAE,CAAC,CAAA;IAE/F,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAC3F,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,SAAS,CAAA;YAClC,KAAK,KAAK,CAAA;YAEV,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAS,CAAC,CAAA;YACrE,KAAK,YAAY,CAAA;YAEjB,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,sEAAsE;QACtE,MAAM,SAAS,GAAwD,IAAI,CAAC,IAAI,CAC9E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAC3B,CAAA;QACD,KAAK,SAAS,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QAEhE,MAAM,SAAS,GAA2D,IAAI,CAAC,IAAI,CACjF,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAC3B,CAAA;QACD,KAAK,SAAS,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC/B,KAAK,CAAC,CAAC,SAAS,CAAA;QAClB,CAAC,CAAC,CAAA;QAEF,iEAAiE;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,CAC7E,CAAA;QAKD,MAAM,MAAM,GAAqB,IAAI,CAAA;QACrC,KAAK,MAAM,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/effect/mod.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { DeferredStoreContext, type LiveStoreContextProps, LiveStoreContextRunning as LiveStoreContext, LiveStoreContextRunning, } from '../store/create-store.ts';
|
|
2
|
-
export { LiveStoreContextDeferred, LiveStoreContextLayer } from './LiveStore.ts';
|
|
2
|
+
export { type DeferredContextId, LiveStoreContextDeferred, LiveStoreContextLayer, makeStoreContext, Store, type StoreContext, type StoreContextId, type StoreLayerProps, type StoreTagClass, } from './LiveStore.ts';
|
|
3
3
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/effect/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/effect/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,uBAAuB,IAAI,gBAAgB,EAC3C,uBAAuB,GACxB,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/effect/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,uBAAuB,IAAI,gBAAgB,EAC3C,uBAAuB,GACxB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,KAAK,iBAAiB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,EACL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAA"}
|
package/dist/effect/mod.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { DeferredStoreContext, LiveStoreContextRunning as LiveStoreContext, LiveStoreContextRunning, } from "../store/create-store.js";
|
|
2
|
-
|
|
2
|
+
// Store.Tag - Idiomatic Effect API
|
|
3
|
+
// Legacy API (deprecated)
|
|
4
|
+
export { LiveStoreContextDeferred, LiveStoreContextLayer, makeStoreContext, Store, } from "./LiveStore.js";
|
|
3
5
|
//# sourceMappingURL=mod.js.map
|
package/dist/effect/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/effect/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAEpB,uBAAuB,IAAI,gBAAgB,EAC3C,uBAAuB,GACxB,MAAM,0BAA0B,CAAA;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/effect/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAEpB,uBAAuB,IAAI,gBAAgB,EAC3C,uBAAuB,GACxB,MAAM,0BAA0B,CAAA;AACjC,mCAAmC;AACnC,0BAA0B;AAC1B,OAAO,EAEL,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,GAKN,MAAM,gBAAgB,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Equal, Hash } from '@livestore/utils/effect';
|
|
2
1
|
import type * as otel from '@opentelemetry/api';
|
|
2
|
+
import { Equal, Hash } from '@livestore/utils/effect';
|
|
3
3
|
import * as RG from '../reactive.ts';
|
|
4
|
-
import type { Store } from '../store/store.ts';
|
|
5
4
|
import type { QueryDebugInfo, RefreshReason } from '../store/store-types.ts';
|
|
5
|
+
import type { Store } from '../store/store.ts';
|
|
6
6
|
import type { StackInfo } from '../utils/stack-info.ts';
|
|
7
7
|
export type ReactivityGraph = RG.ReactiveGraph<RefreshReason, QueryDebugInfo, ReactivityGraphContext>;
|
|
8
8
|
export declare const makeReactivityGraph: () => ReactivityGraph;
|
|
@@ -17,37 +17,104 @@ export type ReactivityGraphContext = {
|
|
|
17
17
|
effectsWrapper: (run: () => void) => void;
|
|
18
18
|
};
|
|
19
19
|
export type GetResult<TQuery extends LiveQueryDef.Any | LiveQuery.Any | SignalDef<any>> = TQuery extends LiveQuery<infer TResult> ? TResult : TQuery extends LiveQueryDef<infer TResult> ? TResult : TQuery extends SignalDef<infer TResult> ? TResult : unknown;
|
|
20
|
+
/**
|
|
21
|
+
* A signal definition representing ephemeral, local-only reactive state.
|
|
22
|
+
*
|
|
23
|
+
* `SignalDef` is the type returned by {@link signal}. It's a blueprint for creating
|
|
24
|
+
* signal instances—the actual instance is created when you use the definition with
|
|
25
|
+
* a Store via `store.query()` or `store.setSignal()`.
|
|
26
|
+
*
|
|
27
|
+
* @typeParam T - The type of value the signal holds
|
|
28
|
+
*/
|
|
20
29
|
export interface SignalDef<T> extends LiveQueryDef<T, 'signal-def'> {
|
|
21
30
|
_tag: 'signal-def';
|
|
31
|
+
/** The initial value used when the signal is first created */
|
|
22
32
|
defaultValue: T;
|
|
33
|
+
/** Unique identifier for caching and deduplication */
|
|
23
34
|
hash: string;
|
|
35
|
+
/** Human-readable label for debugging and devtools */
|
|
24
36
|
label: string;
|
|
37
|
+
/** Creates a reference-counted signal instance bound to a Store's reactivity graph */
|
|
25
38
|
make: (ctx: ReactivityGraphContext) => RcRef<ISignal<T>>;
|
|
26
39
|
[Equal.symbol](that: SignalDef<T>): boolean;
|
|
27
40
|
[Hash.symbol](): number;
|
|
28
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Interface for a live signal instance.
|
|
44
|
+
*
|
|
45
|
+
* This represents an active signal bound to a Store's reactivity graph.
|
|
46
|
+
* Use `store.setSignal()` to update values and `store.query()` to read them.
|
|
47
|
+
*
|
|
48
|
+
* @typeParam T - The type of value the signal holds
|
|
49
|
+
*/
|
|
29
50
|
export interface ISignal<T> extends LiveQuery<T> {
|
|
30
51
|
_tag: 'signal';
|
|
31
52
|
reactivityGraph: ReactivityGraph;
|
|
53
|
+
/** The underlying reactive reference in the graph */
|
|
32
54
|
ref: RG.Ref<T, ReactivityGraphContext, RefreshReason>;
|
|
55
|
+
/** Sets the signal's value (prefer using `store.setSignal()` instead) */
|
|
33
56
|
set: (value: T) => void;
|
|
57
|
+
/** Gets the signal's current value (prefer using `store.query()` instead) */
|
|
34
58
|
get: () => T;
|
|
59
|
+
/** Removes the signal from the reactivity graph */
|
|
35
60
|
destroy: () => void;
|
|
36
61
|
}
|
|
37
62
|
export declare const TypeId: unique symbol;
|
|
38
63
|
export type TypeId = typeof TypeId;
|
|
64
|
+
/**
|
|
65
|
+
* A reference-counted wrapper around a LiveQuery or Signal instance.
|
|
66
|
+
*
|
|
67
|
+
* LiveStore uses reference counting to manage query lifecycle. When multiple
|
|
68
|
+
* components or subscriptions use the same query definition, they share a single
|
|
69
|
+
* instance. The instance is destroyed when the last reference is released.
|
|
70
|
+
*
|
|
71
|
+
* You typically don't interact with `RcRef` directly—it's used internally by
|
|
72
|
+
* hooks like `useQuery` and `useQueryRef`.
|
|
73
|
+
*/
|
|
39
74
|
export interface RcRef<T> {
|
|
75
|
+
/** Current reference count */
|
|
40
76
|
rc: number;
|
|
77
|
+
/** The wrapped query or signal instance */
|
|
41
78
|
value: T;
|
|
79
|
+
/** Decrements the reference count; destroys the instance when it reaches zero */
|
|
42
80
|
deref: () => void;
|
|
43
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Dependency key used to identify queries on platforms where `fn.toString()` isn't reliable.
|
|
84
|
+
*
|
|
85
|
+
* On Expo/React Native, Hermes compiles functions to bytecode, so `fn.toString()` returns
|
|
86
|
+
* `[native code]`. To uniquely identify contextual queries, you must provide explicit `deps`.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```ts
|
|
90
|
+
* // On Expo, this would fail without deps:
|
|
91
|
+
* const filtered$ = queryDb(
|
|
92
|
+
* (get) => tables.todos.where({ userId: get(userId$) }),
|
|
93
|
+
* { deps: [userId] } // Required on Expo/React Native
|
|
94
|
+
* )
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
44
97
|
export type DepKey = string | number | ReadonlyArray<string | number | undefined | null>;
|
|
45
98
|
export declare const depsToString: (deps: DepKey) => string;
|
|
99
|
+
/**
|
|
100
|
+
* A query definition representing a blueprint for a reactive query.
|
|
101
|
+
*
|
|
102
|
+
* Query definitions are created by {@link queryDb}, {@link computed}, and {@link signal}.
|
|
103
|
+
* They're lightweight and can be defined at module scope. The actual query instance
|
|
104
|
+
* (which holds state) is created lazily when you use the definition with a Store.
|
|
105
|
+
*
|
|
106
|
+
* Multiple uses of the same definition share a single instance via reference counting.
|
|
107
|
+
*
|
|
108
|
+
* @typeParam TResult - The type of value the query returns
|
|
109
|
+
* @typeParam TTag - Internal discriminator tag ('def' for queries, 'signal-def' for signals)
|
|
110
|
+
*/
|
|
46
111
|
export interface LiveQueryDef<TResult, TTag extends string = 'def'> {
|
|
47
112
|
_tag: TTag;
|
|
48
|
-
/** Creates a
|
|
113
|
+
/** Creates a reference-counted query instance bound to a Store's reactivity graph */
|
|
49
114
|
make: (ctx: ReactivityGraphContext, otelContext?: otel.Context) => RcRef<LiveQuery<TResult> | ISignal<TResult>>;
|
|
115
|
+
/** Human-readable label for debugging and devtools */
|
|
50
116
|
label: string;
|
|
117
|
+
/** Unique identifier derived from the query string or explicit deps; used for caching */
|
|
51
118
|
hash: string;
|
|
52
119
|
[Equal.symbol](that: LiveQueryDef<TResult, TTag>): boolean;
|
|
53
120
|
[Hash.symbol](): number;
|
|
@@ -56,26 +123,46 @@ export declare namespace LiveQueryDef {
|
|
|
56
123
|
type Any = LiveQueryDef<any, 'def' | 'signal-def'>;
|
|
57
124
|
}
|
|
58
125
|
/**
|
|
59
|
-
* A
|
|
126
|
+
* A live query instance bound to a specific Store.
|
|
127
|
+
*
|
|
128
|
+
* `LiveQuery` represents an active, stateful query in the reactivity graph. Unlike
|
|
129
|
+
* query definitions (`LiveQueryDef`), instances maintain state like execution counts,
|
|
130
|
+
* timing data, and active subscriptions.
|
|
131
|
+
*
|
|
132
|
+
* You typically don't work with `LiveQuery` directly—use `store.query()` for one-shot
|
|
133
|
+
* reads or `store.subscribe()` for reactive subscriptions. The instance is managed
|
|
134
|
+
* automatically via reference counting.
|
|
135
|
+
*
|
|
136
|
+
* @typeParam TResult - The type of value the query returns
|
|
60
137
|
*/
|
|
61
138
|
export interface LiveQuery<TResult> {
|
|
139
|
+
/** Unique identifier for this query instance */
|
|
62
140
|
id: number;
|
|
141
|
+
/** Discriminator for the query type */
|
|
63
142
|
_tag: 'computed' | 'db' | 'graphql' | 'signal';
|
|
64
143
|
[TypeId]: TypeId;
|
|
65
|
-
/**
|
|
144
|
+
/** Type-level only—extracts the result type from a LiveQuery */
|
|
66
145
|
'__result!': TResult;
|
|
67
|
-
/**
|
|
146
|
+
/** The underlying reactive atom in the graph that holds the query result */
|
|
68
147
|
results$: RG.Atom<TResult, ReactivityGraphContext, RefreshReason>;
|
|
148
|
+
/** Human-readable label for debugging and devtools */
|
|
69
149
|
label: string;
|
|
150
|
+
/** Executes the query and returns the result */
|
|
70
151
|
run: (args: {
|
|
71
152
|
otelContext?: otel.Context;
|
|
72
153
|
debugRefreshReason?: RefreshReason;
|
|
73
154
|
}) => TResult;
|
|
155
|
+
/** Removes the query from the reactivity graph */
|
|
74
156
|
destroy: () => void;
|
|
157
|
+
/** Whether this query instance has been destroyed */
|
|
75
158
|
isDestroyed: boolean;
|
|
159
|
+
/** Stack traces of active subscriptions (for debugging) */
|
|
76
160
|
activeSubscriptions: Set<StackInfo>;
|
|
161
|
+
/** Number of times this query has been executed */
|
|
77
162
|
runs: number;
|
|
163
|
+
/** Execution times in milliseconds (for performance monitoring) */
|
|
78
164
|
executionTimes: number[];
|
|
165
|
+
/** The definition that created this instance */
|
|
79
166
|
def: LiveQueryDef<TResult> | SignalDef<TResult>;
|
|
80
167
|
}
|
|
81
168
|
export declare namespace LiveQuery {
|
|
@@ -102,7 +189,23 @@ export declare abstract class LiveStoreQueryBase<TResult> implements LiveQuery<T
|
|
|
102
189
|
}) => TResult;
|
|
103
190
|
protected dependencyQueriesRef: DependencyQueriesRef;
|
|
104
191
|
}
|
|
105
|
-
|
|
192
|
+
/**
|
|
193
|
+
* Function signature for the `get` parameter in `computed()` and `queryDb()` callbacks.
|
|
194
|
+
*
|
|
195
|
+
* Call `get()` with a query definition, signal, or live query instance to:
|
|
196
|
+
* 1. Read its current value
|
|
197
|
+
* 2. Establish a reactive dependency (the caller re-runs when the dependency changes)
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```ts
|
|
201
|
+
* const filtered$ = computed((get) => {
|
|
202
|
+
* const todos = get(todos$) // Depends on todos$
|
|
203
|
+
* const filter = get(filterText$) // Depends on filterText$
|
|
204
|
+
* return todos.filter((t) => t.text.includes(filter))
|
|
205
|
+
* })
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
export type GetAtomResult = <T>(atom: RG.Atom<T, any, RefreshReason> | LiveQueryDef<T> | LiveQuery<T> | ISignal<T> | SignalDef<T>, otelContext?: otel.Context, debugRefreshReason?: RefreshReason) => T;
|
|
106
209
|
export type DependencyQueriesRef = Set<RcRef<LiveQuery.Any | ISignal<any>>>;
|
|
107
210
|
export declare const makeGetAtomResult: (get: RG.GetAtom, ctx: ReactivityGraphContext, otelContext: otel.Context, dependencyQueriesRef: DependencyQueriesRef) => GetAtomResult;
|
|
108
211
|
export declare const withRCMap: <T extends LiveQuery.Any | ISignal<any>>(id: string, make: (ctx: ReactivityGraphContext, otelContext?: otel.Context) => T) => ((ctx: ReactivityGraphContext, otelContext?: otel.Context) => RcRef<T>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-class.d.ts","sourceRoot":"","sources":["../../src/live-queries/base-class.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base-class.d.ts","sourceRoot":"","sources":["../../src/live-queries/base-class.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,7 +43,7 @@ export const makeGetAtomResult = (get, ctx, otelContext, dependencyQueriesRef) =
|
|
|
43
43
|
return getAtom(query.value, _otelContext, debugRefreshReason);
|
|
44
44
|
}
|
|
45
45
|
// Signal case
|
|
46
|
-
if (atom._tag === 'signal' && Predicate.hasProperty(atom, 'ref')) {
|
|
46
|
+
if (atom._tag === 'signal' && Predicate.hasProperty(atom, 'ref') === true) {
|
|
47
47
|
return get(atom.ref, otelContext, debugRefreshReason);
|
|
48
48
|
}
|
|
49
49
|
// LiveQuery case
|
|
@@ -54,7 +54,7 @@ export const makeGetAtomResult = (get, ctx, otelContext, dependencyQueriesRef) =
|
|
|
54
54
|
export const withRCMap = (id, make) => {
|
|
55
55
|
return (ctx, otelContext) => {
|
|
56
56
|
let item = ctx.defRcMap.get(id);
|
|
57
|
-
if (item) {
|
|
57
|
+
if (item !== undefined) {
|
|
58
58
|
item.rc++;
|
|
59
59
|
return item;
|
|
60
60
|
}
|
|
@@ -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,6 +1,6 @@
|
|
|
1
|
+
import type * as otel from '@opentelemetry/api';
|
|
1
2
|
import { SessionIdSymbol } from '@livestore/common';
|
|
2
3
|
import { State } from '@livestore/common/schema';
|
|
3
|
-
import type * as otel from '@opentelemetry/api';
|
|
4
4
|
import type { ReactivityGraphContext } from './base-class.ts';
|
|
5
5
|
export declare const rowQueryLabel: (table: State.SQLite.ClientDocumentTableDef.Any, id: string | SessionIdSymbol | undefined) => string;
|
|
6
6
|
export declare const makeExecBeforeFirstRun: ({ id, explicitDefaultValues, table, otelContext: otelContext_, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-document-get-query.d.ts","sourceRoot":"","sources":["../../src/live-queries/client-document-get-query.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client-document-get-query.d.ts","sourceRoot":"","sources":["../../src/live-queries/client-document-get-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAG/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAIhD,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"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { SessionIdSymbol } from '@livestore/common';
|
|
2
2
|
import { State } from '@livestore/common/schema';
|
|
3
3
|
import { shouldNeverHappen } from '@livestore/utils';
|
|
4
|
+
import { StoreInternalsSymbol } from "../store/store-types.js";
|
|
4
5
|
export const rowQueryLabel = (table, id) => `${table.sqliteDef.name}.get:${id === undefined ? table.default.id : id === SessionIdSymbol ? 'sessionId' : id}`;
|
|
5
6
|
export const makeExecBeforeFirstRun = ({ id, explicitDefaultValues, table, otelContext: otelContext_, }) => ({ store }) => {
|
|
6
7
|
if (State.SQLite.tableIsClientDocumentTable(table) === false) {
|
|
7
8
|
return shouldNeverHappen(`Cannot insert row for table "${table.sqliteDef.name}" which does not have 'deriveEvents: true' set`);
|
|
8
9
|
}
|
|
9
|
-
const otelContext = otelContext_ ?? store.otel.queriesSpanContext;
|
|
10
|
+
const otelContext = otelContext_ ?? store[StoreInternalsSymbol].otel.queriesSpanContext;
|
|
10
11
|
const idVal = id === SessionIdSymbol ? store.sessionId : id;
|
|
11
|
-
const rowExists = store.sqliteDbWrapper.cachedSelect(`SELECT 1 FROM '${table.sqliteDef.name}' WHERE id = ?`, [idVal], { otelContext }).length === 1;
|
|
12
|
-
if (rowExists)
|
|
12
|
+
const rowExists = store[StoreInternalsSymbol].sqliteDbWrapper.cachedSelect(`SELECT 1 FROM '${table.sqliteDef.name}' WHERE id = ?`, [idVal], { otelContext }).length === 1;
|
|
13
|
+
if (rowExists === true)
|
|
13
14
|
return;
|
|
14
15
|
// It's important that we only commit and don't refresh here, as this function might be called during a render
|
|
15
16
|
// and otherwise we might end up in a "reactive loop"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-document-get-query.js","sourceRoot":"","sources":["../../src/live-queries/client-document-get-query.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client-document-get-query.js","sourceRoot":"","sources":["../../src/live-queries/client-document-get-query.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAG9D,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,oBAAoB,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAA;IAEvF,MAAM,KAAK,GAAG,EAAE,KAAK,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAG,CAAA;IAC5D,MAAM,SAAS,GACb,KAAK,CAAC,oBAAoB,CAAC,CAAC,eAAe,CAAC,YAAY,CACtD,kBAAkB,KAAK,CAAC,SAAS,CAAC,IAAI,gBAAgB,EACtD,CAAC,KAAK,CAA8B,EACpC,EAAE,WAAW,EAAE,CAChB,CAAC,MAAM,KAAK,CAAC,CAAA;IAEhB,IAAI,SAAS,KAAK,IAAI;QAAE,OAAM;IAE9B,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"}
|
|
@@ -2,10 +2,66 @@ import type { Thunk } from '../reactive.ts';
|
|
|
2
2
|
import type { RefreshReason } from '../store/store-types.ts';
|
|
3
3
|
import type { DepKey, GetAtomResult, LiveQueryDef, ReactivityGraph, ReactivityGraphContext } from './base-class.ts';
|
|
4
4
|
import { LiveStoreQueryBase } from './base-class.ts';
|
|
5
|
+
/**
|
|
6
|
+
* Creates a derived query that computes a value from other queries or signals.
|
|
7
|
+
*
|
|
8
|
+
* Computed queries are memoized—they only re-evaluate when their dependencies change,
|
|
9
|
+
* and if the new result equals the previous result, downstream dependents won't re-run.
|
|
10
|
+
* Use them for expensive calculations, aggregations, or transformations.
|
|
11
|
+
*
|
|
12
|
+
* The `get` function inside `computed` establishes reactive dependencies automatically.
|
|
13
|
+
* When any dependency updates, the computed re-evaluates.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* // Derive a count from a database query
|
|
18
|
+
* const todos$ = queryDb(tables.todos.all())
|
|
19
|
+
* const todoCount$ = computed((get) => get(todos$).length, { label: 'todoCount' })
|
|
20
|
+
*
|
|
21
|
+
* // Use in a component
|
|
22
|
+
* const count = store.query(todoCount$) // 5
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* // Combine multiple queries into derived stats
|
|
28
|
+
* const stats$ = computed((get) => {
|
|
29
|
+
* const todos = get(todos$)
|
|
30
|
+
* const completed = todos.filter((t) => t.completed).length
|
|
31
|
+
* return {
|
|
32
|
+
* total: todos.length,
|
|
33
|
+
* completed,
|
|
34
|
+
* remaining: todos.length - completed,
|
|
35
|
+
* percentComplete: todos.length > 0 ? (completed / todos.length) * 100 : 0,
|
|
36
|
+
* }
|
|
37
|
+
* }, { label: 'todoStats' })
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* // Chain computed queries
|
|
43
|
+
* const hasCompletedTodos$ = computed(
|
|
44
|
+
* (get) => get(stats$).completed > 0,
|
|
45
|
+
* { label: 'hasCompletedTodos' }
|
|
46
|
+
* )
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @param fn - Pure function that computes the result. Use `get()` to read dependencies.
|
|
50
|
+
* @param options.label - Human-readable label for debugging and devtools
|
|
51
|
+
* @param options.deps - Explicit dependency keys (required on Expo/React Native where `fn.toString()` returns `[native code]`)
|
|
52
|
+
* @returns A query definition usable with `store.query()`, `store.subscribe()`, and as a dependency in other queries
|
|
53
|
+
*/
|
|
5
54
|
export declare const computed: <TResult>(fn: (get: GetAtomResult) => TResult, options?: {
|
|
6
55
|
label?: string;
|
|
7
56
|
deps?: DepKey;
|
|
8
57
|
}) => LiveQueryDef<TResult>;
|
|
58
|
+
/**
|
|
59
|
+
* A live computed query instance bound to a specific Store.
|
|
60
|
+
*
|
|
61
|
+
* Computed query instances are created internally when you use a `LiveQueryDef` (from {@link computed})
|
|
62
|
+
* with the Store. You typically don't construct these directly—use `computed()` to create definitions
|
|
63
|
+
* and `store.query()` / `store.subscribe()` to interact with them.
|
|
64
|
+
*/
|
|
9
65
|
export declare class LiveStoreComputedQuery<TResult> extends LiveStoreQueryBase<TResult> {
|
|
10
66
|
_tag: "computed";
|
|
11
67
|
/** A reactive thunk representing the query results */
|
|
@@ -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":"AAKA,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,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,CA+BtB,CAAA;AAED;;;;;;GAMG;AACH,qBAAa,sBAAsB,CAAC,OAAO,CAAE,SAAQ,kBAAkB,CAAC,OAAO,CAAC;IAC9E,IAAI,EAAG,UAAU,CAAS;IAE1B,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,10 +1,59 @@
|
|
|
1
|
+
import * as otel from '@opentelemetry/api';
|
|
1
2
|
import { getDurationMsFromSpan } from '@livestore/common';
|
|
2
3
|
import { Equal, Hash } from '@livestore/utils/effect';
|
|
3
|
-
import * as otel from '@opentelemetry/api';
|
|
4
4
|
import { isValidFunctionString } from "../utils/function-string.js";
|
|
5
5
|
import { depsToString, LiveStoreQueryBase, makeGetAtomResult, withRCMap } from "./base-class.js";
|
|
6
|
+
/**
|
|
7
|
+
* Creates a derived query that computes a value from other queries or signals.
|
|
8
|
+
*
|
|
9
|
+
* Computed queries are memoized—they only re-evaluate when their dependencies change,
|
|
10
|
+
* and if the new result equals the previous result, downstream dependents won't re-run.
|
|
11
|
+
* Use them for expensive calculations, aggregations, or transformations.
|
|
12
|
+
*
|
|
13
|
+
* The `get` function inside `computed` establishes reactive dependencies automatically.
|
|
14
|
+
* When any dependency updates, the computed re-evaluates.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* // Derive a count from a database query
|
|
19
|
+
* const todos$ = queryDb(tables.todos.all())
|
|
20
|
+
* const todoCount$ = computed((get) => get(todos$).length, { label: 'todoCount' })
|
|
21
|
+
*
|
|
22
|
+
* // Use in a component
|
|
23
|
+
* const count = store.query(todoCount$) // 5
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* // Combine multiple queries into derived stats
|
|
29
|
+
* const stats$ = computed((get) => {
|
|
30
|
+
* const todos = get(todos$)
|
|
31
|
+
* const completed = todos.filter((t) => t.completed).length
|
|
32
|
+
* return {
|
|
33
|
+
* total: todos.length,
|
|
34
|
+
* completed,
|
|
35
|
+
* remaining: todos.length - completed,
|
|
36
|
+
* percentComplete: todos.length > 0 ? (completed / todos.length) * 100 : 0,
|
|
37
|
+
* }
|
|
38
|
+
* }, { label: 'todoStats' })
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* // Chain computed queries
|
|
44
|
+
* const hasCompletedTodos$ = computed(
|
|
45
|
+
* (get) => get(stats$).completed > 0,
|
|
46
|
+
* { label: 'hasCompletedTodos' }
|
|
47
|
+
* )
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @param fn - Pure function that computes the result. Use `get()` to read dependencies.
|
|
51
|
+
* @param options.label - Human-readable label for debugging and devtools
|
|
52
|
+
* @param options.deps - Explicit dependency keys (required on Expo/React Native where `fn.toString()` returns `[native code]`)
|
|
53
|
+
* @returns A query definition usable with `store.query()`, `store.subscribe()`, and as a dependency in other queries
|
|
54
|
+
*/
|
|
6
55
|
export const computed = (fn, options) => {
|
|
7
|
-
const hash = options?.deps ? depsToString(options.deps) : fn.toString();
|
|
56
|
+
const hash = options?.deps !== undefined ? depsToString(options.deps) : fn.toString();
|
|
8
57
|
if (isValidFunctionString(hash)._tag === 'invalid') {
|
|
9
58
|
throw new Error(`On Expo/React Native, computed queries must provide a \`deps\` option`);
|
|
10
59
|
}
|
|
@@ -33,6 +82,13 @@ export const computed = (fn, options) => {
|
|
|
33
82
|
};
|
|
34
83
|
return def;
|
|
35
84
|
};
|
|
85
|
+
/**
|
|
86
|
+
* A live computed query instance bound to a specific Store.
|
|
87
|
+
*
|
|
88
|
+
* Computed query instances are created internally when you use a `LiveQueryDef` (from {@link computed})
|
|
89
|
+
* with the Store. You typically don't construct these directly—use `computed()` to create definitions
|
|
90
|
+
* and `store.query()` / `store.subscribe()` to interact with them.
|
|
91
|
+
*/
|
|
36
92
|
export class LiveStoreComputedQuery extends LiveStoreQueryBase {
|
|
37
93
|
_tag = 'computed';
|
|
38
94
|
/** A reactive thunk representing the query results */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/live-queries/computed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/live-queries/computed.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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,MAAM,mBAAmB,CAAA;AAY/D,OAAO,EAA0B,MAAM,EAAiB,MAAM,yBAAyB,CAAA;AACvF,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"db-query.d.ts","sourceRoot":"","sources":["../../src/live-queries/db-query.ts"],"names":[],"mappings":"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"}
|