@livestore/livestore 0.0.0-snapshot-669b49b56c8abe87f4e11263af7cbf506deab38e → 0.0.0-snapshot-0a3620623ab8db6de295775532b02edaca7238de
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/global-state.d.ts +1 -1
- package/dist/global-state.d.ts.map +1 -1
- package/dist/global-state.js +1 -1
- package/dist/global-state.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/{reactiveQueries → live-queries}/base-class.d.ts +8 -4
- package/dist/live-queries/base-class.d.ts.map +1 -0
- package/dist/{reactiveQueries → live-queries}/base-class.js +2 -0
- package/dist/live-queries/base-class.js.map +1 -0
- package/dist/{reactiveQueries → live-queries}/computed.d.ts +4 -13
- package/dist/live-queries/computed.d.ts.map +1 -0
- package/dist/{reactiveQueries → live-queries}/computed.js +4 -23
- package/dist/live-queries/computed.js.map +1 -0
- package/dist/live-queries/db.d.ts +66 -0
- package/dist/live-queries/db.d.ts.map +1 -0
- package/dist/live-queries/db.js +199 -0
- package/dist/live-queries/db.js.map +1 -0
- package/dist/live-queries/db.test.d.ts +2 -0
- package/dist/live-queries/db.test.d.ts.map +1 -0
- package/dist/live-queries/db.test.js +117 -0
- package/dist/live-queries/db.test.js.map +1 -0
- package/dist/{reactiveQueries → live-queries}/graphql.d.ts +4 -8
- package/dist/live-queries/graphql.d.ts.map +1 -0
- package/dist/{reactiveQueries → live-queries}/graphql.js +2 -16
- package/dist/live-queries/graphql.js.map +1 -0
- package/dist/row-query-utils.d.ts +17 -0
- package/dist/row-query-utils.d.ts.map +1 -0
- package/dist/row-query-utils.js +30 -0
- package/dist/row-query-utils.js.map +1 -0
- package/dist/store/create-store.d.ts +1 -1
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/devtools.d.ts +1 -1
- package/dist/store/devtools.d.ts.map +1 -1
- package/dist/store/devtools.js.map +1 -1
- package/dist/store/store-types.d.ts +2 -2
- package/dist/store/store-types.d.ts.map +1 -1
- package/dist/store/store.d.ts +8 -3
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +32 -4
- package/dist/store/store.js.map +1 -1
- package/dist/utils/tests/fixture.d.ts +168 -132
- package/dist/utils/tests/fixture.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/global-state.ts +1 -1
- package/src/index.ts +8 -5
- package/src/live-queries/__snapshots__/db.test.ts.snap +301 -0
- package/src/{reactiveQueries → live-queries}/base-class.ts +10 -5
- package/src/{reactiveQueries → live-queries}/computed.ts +5 -29
- package/src/live-queries/db.test.ts +153 -0
- package/src/live-queries/db.ts +350 -0
- package/src/{reactiveQueries → live-queries}/graphql.ts +6 -21
- package/src/row-query-utils.ts +65 -0
- package/src/store/create-store.ts +1 -1
- package/src/store/devtools.ts +1 -1
- package/src/store/store-types.ts +2 -2
- package/src/store/store.ts +44 -7
- package/dist/reactiveQueries/base-class.d.ts.map +0 -1
- package/dist/reactiveQueries/base-class.js.map +0 -1
- package/dist/reactiveQueries/computed.d.ts.map +0 -1
- package/dist/reactiveQueries/computed.js.map +0 -1
- package/dist/reactiveQueries/graphql.d.ts.map +0 -1
- package/dist/reactiveQueries/graphql.js.map +0 -1
- package/dist/reactiveQueries/sql.d.ts +0 -49
- package/dist/reactiveQueries/sql.d.ts.map +0 -1
- package/dist/reactiveQueries/sql.js +0 -130
- package/dist/reactiveQueries/sql.js.map +0 -1
- package/dist/reactiveQueries/sql.test.d.ts +0 -2
- package/dist/reactiveQueries/sql.test.d.ts.map +0 -1
- package/dist/reactiveQueries/sql.test.js +0 -284
- package/dist/reactiveQueries/sql.test.js.map +0 -1
- package/dist/row-query.d.ts +0 -33
- package/dist/row-query.d.ts.map +0 -1
- package/dist/row-query.js +0 -80
- package/dist/row-query.js.map +0 -1
- package/src/reactiveQueries/sql.test.ts +0 -308
- package/src/reactiveQueries/sql.ts +0 -226
- package/src/row-query.ts +0 -196
package/dist/global-state.d.ts
CHANGED
|
@@ -10,5 +10,5 @@
|
|
|
10
10
|
* explicitly pass instances of state below into the LiveStore constructors.
|
|
11
11
|
*
|
|
12
12
|
*/
|
|
13
|
-
export declare const globalReactivityGraph: import("./
|
|
13
|
+
export declare const globalReactivityGraph: import("./live-queries/base-class.js").ReactivityGraph;
|
|
14
14
|
//# sourceMappingURL=global-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-state.d.ts","sourceRoot":"","sources":["../src/global-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"global-state.d.ts","sourceRoot":"","sources":["../src/global-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,eAAO,MAAM,qBAAqB,wDAEjC,CAAA"}
|
package/dist/global-state.js
CHANGED
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
*
|
|
12
12
|
*/
|
|
13
13
|
import { GlobalValue } from '@livestore/utils/effect';
|
|
14
|
-
import { makeReactivityGraph } from './
|
|
14
|
+
import { makeReactivityGraph } from './live-queries/base-class.js';
|
|
15
15
|
export const globalReactivityGraph = GlobalValue.globalValue('livestore-global-reactivityGraph', () => makeReactivityGraph());
|
|
16
16
|
//# sourceMappingURL=global-state.js.map
|
package/dist/global-state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-state.js","sourceRoot":"","sources":["../src/global-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"global-state.js","sourceRoot":"","sources":["../src/global-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAElE,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC,WAAW,CAAC,kCAAkC,EAAE,GAAG,EAAE,CACpG,mBAAmB,EAAE,CACtB,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,14 +5,14 @@ export type { LiveStoreContextRunning } from './effect/LiveStore.js';
|
|
|
5
5
|
export { StoreAbort, StoreInterrupted, type LiveStoreContext } from './store/store-types.js';
|
|
6
6
|
export { SynchronousDatabaseWrapper, emptyDebugInfo } from './SynchronousDatabaseWrapper.js';
|
|
7
7
|
export type { GetAtom, AtomDebugInfo, RefreshDebugInfo, ReactiveGraphSnapshot, SerializedAtom, SerializedEffect, Atom, Node, Ref, Effect, } from './reactive.js';
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export { LiveStoreGraphQLQuery, queryGraphQL } from './
|
|
11
|
-
export { type GetAtomResult, type ReactivityGraph, makeReactivityGraph, type LiveQuery, type GetResult, type LiveQueryAny, } from './
|
|
8
|
+
export { LiveStoreComputedQuery, computed } from './live-queries/computed.js';
|
|
9
|
+
export { LiveStoreDbQuery, queryDb } from './live-queries/db.js';
|
|
10
|
+
export { LiveStoreGraphQLQuery, queryGraphQL } from './live-queries/graphql.js';
|
|
11
|
+
export { type GetAtomResult, type ReactivityGraph, makeReactivityGraph, type LiveQuery, type GetResult, type LiveQueryAny, } from './live-queries/base-class.js';
|
|
12
12
|
export { globalReactivityGraph } from './global-state.js';
|
|
13
|
-
export {
|
|
13
|
+
export { deriveColQuery } from './row-query-utils.js';
|
|
14
14
|
export * from '@livestore/common/schema';
|
|
15
|
-
export { sql, SessionIdSymbol, type BootStatus, type SynchronousDatabase, type DebugInfo, type MutableDebugInfo, prepareBindValues, type Bindable, type PreparedBindValues, } from '@livestore/common';
|
|
15
|
+
export { sql, SessionIdSymbol, type BootStatus, type SynchronousDatabase, type DebugInfo, type MutableDebugInfo, prepareBindValues, type Bindable, type PreparedBindValues, type QueryBuilderAst, type QueryBuilder, type RowQuery, } from '@livestore/common';
|
|
16
16
|
export { SqliteAst, SqliteDsl } from '@livestore/db-schema';
|
|
17
17
|
export { deepEqual } from '@livestore/utils';
|
|
18
18
|
export * from './utils/stack-info.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAClG,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,wBAAwB,CAAA;AAE/B,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE5F,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAE5F,YAAY,EACV,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,MAAM,GACP,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAClG,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,wBAAwB,CAAA;AAE/B,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE5F,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAE5F,YAAY,EACV,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,MAAM,GACP,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC/E,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,YAAY,GAClB,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,cAAc,0BAA0B,CAAA;AACxC,OAAO,EACL,GAAG,EACH,eAAe,EACf,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,iBAAiB,EACjB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,QAAQ,GACd,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,cAAc,uBAAuB,CAAA;AAErC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,12 +2,12 @@ export { Store } from './store/store.js';
|
|
|
2
2
|
export { createStore, createStorePromise } from './store/create-store.js';
|
|
3
3
|
export { StoreAbort, StoreInterrupted } from './store/store-types.js';
|
|
4
4
|
export { SynchronousDatabaseWrapper, emptyDebugInfo } from './SynchronousDatabaseWrapper.js';
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export { LiveStoreGraphQLQuery, queryGraphQL } from './
|
|
8
|
-
export { makeReactivityGraph, } from './
|
|
5
|
+
export { LiveStoreComputedQuery, computed } from './live-queries/computed.js';
|
|
6
|
+
export { LiveStoreDbQuery, queryDb } from './live-queries/db.js';
|
|
7
|
+
export { LiveStoreGraphQLQuery, queryGraphQL } from './live-queries/graphql.js';
|
|
8
|
+
export { makeReactivityGraph, } from './live-queries/base-class.js';
|
|
9
9
|
export { globalReactivityGraph } from './global-state.js';
|
|
10
|
-
export {
|
|
10
|
+
export { deriveColQuery } from './row-query-utils.js';
|
|
11
11
|
export * from '@livestore/common/schema';
|
|
12
12
|
export { sql, SessionIdSymbol, prepareBindValues, } from '@livestore/common';
|
|
13
13
|
export { SqliteAst, SqliteDsl } from '@livestore/db-schema';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAA2B,MAAM,yBAAyB,CAAA;AAUlG,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAyB,MAAM,wBAAwB,CAAA;AAE5F,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAc5F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAA2B,MAAM,yBAAyB,CAAA;AAUlG,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAyB,MAAM,wBAAwB,CAAA;AAE5F,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAc5F,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC/E,OAAO,EAGL,mBAAmB,GAIpB,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,cAAc,0BAA0B,CAAA;AACxC,OAAO,EACL,GAAG,EACH,eAAe,EAKf,iBAAiB,GAMlB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,cAAc,uBAAuB,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { QueryInfo
|
|
1
|
+
import type { QueryInfo } from '@livestore/common';
|
|
2
2
|
import type * as otel from '@opentelemetry/api';
|
|
3
3
|
import { type Atom, type GetAtom, ReactiveGraph, type Thunk } from '../reactive.js';
|
|
4
4
|
import type { Store } from '../store/store.js';
|
|
@@ -15,9 +15,12 @@ export type QueryContext = {
|
|
|
15
15
|
export type UnsubscribeQuery = () => void;
|
|
16
16
|
export type GetResult<TQuery extends LiveQueryAny> = TQuery extends LiveQuery<infer TResult, infer _1> ? TResult : unknown;
|
|
17
17
|
export type LiveQueryAny = LiveQuery<any, QueryInfo>;
|
|
18
|
-
export
|
|
18
|
+
export declare const TypeId: unique symbol;
|
|
19
|
+
export type TypeId = typeof TypeId;
|
|
20
|
+
export interface LiveQuery<TResult, TQueryInfo extends QueryInfo = QueryInfo.None> {
|
|
19
21
|
id: number;
|
|
20
|
-
_tag: 'computed' | '
|
|
22
|
+
_tag: 'computed' | 'db' | 'graphql';
|
|
23
|
+
[TypeId]: TypeId;
|
|
21
24
|
/** This should only be used on a type-level and doesn't hold any value during runtime */
|
|
22
25
|
'__result!': TResult;
|
|
23
26
|
/** A reactive thunk representing the query results */
|
|
@@ -38,7 +41,8 @@ export interface LiveQuery<TResult, TQueryInfo extends QueryInfo = QueryInfoNone
|
|
|
38
41
|
export declare abstract class LiveStoreQueryBase<TResult, TQueryInfo extends QueryInfo> implements LiveQuery<TResult, TQueryInfo> {
|
|
39
42
|
'__result!': TResult;
|
|
40
43
|
id: number;
|
|
41
|
-
|
|
44
|
+
[TypeId]: TypeId;
|
|
45
|
+
abstract _tag: 'computed' | 'db' | 'graphql';
|
|
42
46
|
/** Human-readable label for the query for debugging */
|
|
43
47
|
abstract label: string;
|
|
44
48
|
abstract results$: Thunk<TResult, QueryContext, RefreshReason>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-class.d.ts","sourceRoot":"","sources":["../../src/live-queries/base-class.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { ReactiveGraph, throwContextNotSetError } from '../reactive.js';
|
|
2
2
|
export const makeReactivityGraph = () => new ReactiveGraph();
|
|
3
3
|
let queryIdCounter = 0;
|
|
4
|
+
export const TypeId = Symbol.for('LiveQuery');
|
|
4
5
|
export class LiveStoreQueryBase {
|
|
5
6
|
'__result!';
|
|
6
7
|
id = queryIdCounter++;
|
|
8
|
+
[TypeId] = TypeId;
|
|
7
9
|
activeSubscriptions = new Set();
|
|
8
10
|
get runs() {
|
|
9
11
|
return this.results$.recomputations;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-class.js","sourceRoot":"","sources":["../../src/live-queries/base-class.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,aAAa,EAAE,uBAAuB,EAAc,MAAM,gBAAgB,CAAA;AAO5G,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAoB,EAAE,CACvD,IAAI,aAAa,EAA+C,CAAA;AAclE,IAAI,cAAc,GAAG,CAAC,CAAA;AAItB,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AAqC7C,MAAM,OAAgB,kBAAkB;IAGtC,WAAW,CAAU;IACrB,EAAE,GAAG,cAAc,EAAE,CAAC;IACtB,CAAC,MAAM,CAAC,GAAW,MAAM,CAAA;IAQzB,mBAAmB,GAAmB,IAAI,GAAG,EAAE,CAAA;IAM/C,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAA;IACrC,CAAC;IAED,cAAc,GAAa,EAAE,CAAA;IAI7B,GAAG,GAAG,CAAC,WAA0B,EAAE,kBAAkC,EAAW,EAAE,CAChF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;IAE9D,aAAa,GAAG,CAAC,WAA0B,EAAE,kBAAkC,EAAW,EAAE;QAC1F,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;QACxD,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,SAAS,GAAG,CACV,UAAoC,EACpC,gBAA6B,EAC7B,OAAoE,EACtD,EAAE,CAChB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,CAAC;QAC1F,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;CAChD;AAID,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAY,EAAE,WAAyB,EAAE,EAAE;IAC3E,MAAM,OAAO,GAAkB,CAAC,IAAI,EAAE,EAAE;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;QAC/E,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IACxC,CAAC,CAAA;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
|
@@ -1,32 +1,23 @@
|
|
|
1
|
-
import type { QueryInfo
|
|
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
4
|
import type { GetAtomResult, LiveQuery, QueryContext, ReactivityGraph } from './base-class.js';
|
|
5
5
|
import { LiveStoreQueryBase } from './base-class.js';
|
|
6
|
-
export declare const computed: <TResult, TQueryInfo extends QueryInfo =
|
|
6
|
+
export declare const computed: <TResult, TQueryInfo extends QueryInfo = QueryInfo.None>(fn: (get: GetAtomResult) => TResult, options?: {
|
|
7
7
|
label: string;
|
|
8
8
|
reactivityGraph?: ReactivityGraph;
|
|
9
9
|
queryInfo?: TQueryInfo;
|
|
10
10
|
}) => LiveQuery<TResult, TQueryInfo>;
|
|
11
|
-
export declare class
|
|
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
14
|
results$: Thunk<TResult, QueryContext, RefreshReason>;
|
|
15
15
|
label: string;
|
|
16
16
|
protected reactivityGraph: ReactivityGraph;
|
|
17
17
|
queryInfo: TQueryInfo;
|
|
18
|
-
|
|
19
|
-
* Currently only used for "nested destruction" of piped queries
|
|
20
|
-
*
|
|
21
|
-
* i.e. when doing something like `const q = querySQL(...).pipe(...)`
|
|
22
|
-
* we need to also destory the SQL query when the JS query `q` is destroyed
|
|
23
|
-
*/
|
|
24
|
-
private onDestroy;
|
|
25
|
-
constructor({ fn, label, onDestroy, reactivityGraph, queryInfo, }: {
|
|
18
|
+
constructor({ fn, label, reactivityGraph, queryInfo, }: {
|
|
26
19
|
label: string;
|
|
27
20
|
fn: (get: GetAtomResult) => TResult;
|
|
28
|
-
/** Currently only used for "nested destruction" of piped queries */
|
|
29
|
-
onDestroy?: () => void;
|
|
30
21
|
reactivityGraph?: ReactivityGraph;
|
|
31
22
|
queryInfo?: TQueryInfo;
|
|
32
23
|
});
|
|
@@ -0,0 +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;AAIlD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC9F,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAA;AAEvE,eAAO,MAAM,QAAQ,GAAI,OAAO,EAAE,UAAU,SAAS,SAAS,uBACxD,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,YACzB;IACR,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB,KACA,SAAS,CAAC,OAAO,EAAE,UAAU,CAM5B,CAAA;AAEJ,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,YAAY,EAAE,aAAa,CAAC,CAAA;IAErD,KAAK,EAAE,MAAM,CAAA;IAEb,SAAS,CAAC,eAAe,EAAE,eAAe,CAAA;IAE1C,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,CAAC,EAAE,eAAe,CAAA;QACjC,SAAS,CAAC,EAAE,UAAU,CAAA;KACvB;IA8BD,OAAO,aAEN;CACF"}
|
|
@@ -2,29 +2,21 @@ import * as otel from '@opentelemetry/api';
|
|
|
2
2
|
import { globalReactivityGraph } from '../global-state.js';
|
|
3
3
|
import { getDurationMsFromSpan } from '../utils/otel.js';
|
|
4
4
|
import { LiveStoreQueryBase, makeGetAtomResult } from './base-class.js';
|
|
5
|
-
export const computed = (fn, options) => new
|
|
5
|
+
export const computed = (fn, options) => new LiveStoreComputedQuery({
|
|
6
6
|
fn,
|
|
7
7
|
label: options?.label ?? fn.toString(),
|
|
8
8
|
reactivityGraph: options?.reactivityGraph,
|
|
9
9
|
queryInfo: options?.queryInfo,
|
|
10
10
|
});
|
|
11
|
-
export class
|
|
11
|
+
export class LiveStoreComputedQuery extends LiveStoreQueryBase {
|
|
12
12
|
_tag = 'computed';
|
|
13
13
|
/** A reactive thunk representing the query results */
|
|
14
14
|
results$;
|
|
15
15
|
label;
|
|
16
16
|
reactivityGraph;
|
|
17
17
|
queryInfo;
|
|
18
|
-
|
|
19
|
-
* Currently only used for "nested destruction" of piped queries
|
|
20
|
-
*
|
|
21
|
-
* i.e. when doing something like `const q = querySQL(...).pipe(...)`
|
|
22
|
-
* we need to also destory the SQL query when the JS query `q` is destroyed
|
|
23
|
-
*/
|
|
24
|
-
onDestroy;
|
|
25
|
-
constructor({ fn, label, onDestroy, reactivityGraph, queryInfo, }) {
|
|
18
|
+
constructor({ fn, label, reactivityGraph, queryInfo, }) {
|
|
26
19
|
super();
|
|
27
|
-
this.onDestroy = onDestroy;
|
|
28
20
|
this.label = label;
|
|
29
21
|
this.reactivityGraph = reactivityGraph ?? globalReactivityGraph;
|
|
30
22
|
this.queryInfo = queryInfo ?? { _tag: 'None' };
|
|
@@ -37,21 +29,10 @@ export class LiveStoreJSQuery extends LiveStoreQueryBase {
|
|
|
37
29
|
this.executionTimes.push(durationMs);
|
|
38
30
|
setDebugInfo({ _tag: 'computed', label, query: fn.toString(), durationMs });
|
|
39
31
|
return res;
|
|
40
|
-
}), { label: queryLabel, meta: { liveStoreThunkType: '
|
|
32
|
+
}), { label: queryLabel, meta: { liveStoreThunkType: 'computed' } });
|
|
41
33
|
}
|
|
42
|
-
// pipe = <U>(fn: (result: TResult, get: GetAtomResult) => U): LiveStoreJSQuery<U> =>
|
|
43
|
-
// new LiveStoreJSQuery({
|
|
44
|
-
// fn: (get) => {
|
|
45
|
-
// const results = get(this.results$)
|
|
46
|
-
// return fn(results, get)
|
|
47
|
-
// },
|
|
48
|
-
// label: `${this.label}:js`,
|
|
49
|
-
// onDestroy: () => this.destroy(),
|
|
50
|
-
// reactivityGraph: this.reactivityGraph,
|
|
51
|
-
// })
|
|
52
34
|
destroy = () => {
|
|
53
35
|
this.reactivityGraph.destroyNode(this.results$);
|
|
54
|
-
this.onDestroy?.();
|
|
55
36
|
};
|
|
56
37
|
}
|
|
57
38
|
//# sourceMappingURL=computed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/live-queries/computed.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAG1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEvE,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,EAAmC,EACnC,OAIC,EAC+B,EAAE,CAClC,IAAI,sBAAsB,CAAsB;IAC9C,EAAE;IACF,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,EAAE;IACtC,eAAe,EAAE,OAAO,EAAE,eAAe;IACzC,SAAS,EAAE,OAAO,EAAE,SAAS;CAC9B,CAAC,CAAA;AAEJ,MAAM,OAAO,sBAA+E,SAAQ,kBAGnG;IACC,IAAI,GAAe,UAAU,CAAA;IAE7B,sDAAsD;IACtD,QAAQ,CAA6C;IAErD,KAAK,CAAQ;IAEH,eAAe,CAAiB;IAE1C,SAAS,CAAY;IAErB,YAAY,EACV,EAAE,EACF,KAAK,EACL,eAAe,EACf,SAAS,GAMV;QACC,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAElB,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,qBAAqB,CAAA;QAC/D,IAAI,CAAC,SAAS,GAAG,SAAS,IAAK,EAAE,IAAI,EAAE,MAAM,EAAiB,CAAA;QAE9D,MAAM,UAAU,GAAG,GAAG,KAAK,UAAU,CAAA;QAErC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAC5C,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,WAAW,EAAE,EAAE,CAClE,UAAU,CAAC,eAAe,CAAC,MAAM,KAAK,EAAE,EAAE,EAAE,EAAE,WAAW,IAAI,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;YACrF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;YACnE,MAAM,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAA;YAEnD,IAAI,CAAC,GAAG,EAAE,CAAA;YAEV,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;YAE9C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAEpC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;YAE3E,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,EACJ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,UAAU,EAAE,EAAE,CAChE,CAAA;IACH,CAAC;IAED,OAAO,GAAG,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACjD,CAAC,CAAA;CACF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
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 { GetAtomResult, LiveQuery, QueryContext, ReactivityGraph } 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: QueryContext) => void;
|
|
20
|
+
};
|
|
21
|
+
export type QueryInput<TDecoded, TEncoded, TQueryInfo extends QueryInfo> = QueryInputRaw<TDecoded, TEncoded, TQueryInfo> | QueryBuilder<TDecoded, any, any, TQueryInfo>;
|
|
22
|
+
/**
|
|
23
|
+
* NOTE `query` is only supposed to read data. Don't use it to insert/update/delete data but use mutations instead.
|
|
24
|
+
*/
|
|
25
|
+
export declare const queryDb: {
|
|
26
|
+
<TResultSchema, TResult = TResultSchema, TQueryInfo extends QueryInfo = QueryInfo.None>(queryInput: QueryInputRaw<TResultSchema, ReadonlyArray<any>, TQueryInfo> | QueryBuilder<TResultSchema, any, any, TQueryInfo>, options?: {
|
|
27
|
+
map?: (rows: TResultSchema) => TResult;
|
|
28
|
+
/**
|
|
29
|
+
* Used for debugging / devtools
|
|
30
|
+
*/
|
|
31
|
+
label?: string;
|
|
32
|
+
reactivityGraph?: ReactivityGraph;
|
|
33
|
+
otelContext?: otel.Context;
|
|
34
|
+
}): LiveQuery<TResult, TQueryInfo>;
|
|
35
|
+
<TResultSchema, TResult = TResultSchema, TQueryInfo extends QueryInfo = QueryInfo.None>(queryInput: ((get: GetAtomResult) => QueryInputRaw<TResultSchema, ReadonlyArray<any>, TQueryInfo>) | ((get: GetAtomResult) => QueryBuilder<TResultSchema, any, any, TQueryInfo>), options?: {
|
|
36
|
+
map?: (rows: TResultSchema) => TResult;
|
|
37
|
+
/**
|
|
38
|
+
* Used for debugging / devtools
|
|
39
|
+
*/
|
|
40
|
+
label?: string;
|
|
41
|
+
reactivityGraph?: ReactivityGraph;
|
|
42
|
+
queryInfo?: TQueryInfo;
|
|
43
|
+
otelContext?: otel.Context;
|
|
44
|
+
}): LiveQuery<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<QueryInput<TResultSchema, ReadonlyArray<any>, TQueryInfo>, QueryContext, RefreshReason> | undefined;
|
|
50
|
+
/** A reactive thunk representing the query results */
|
|
51
|
+
results$: Thunk<TResult, QueryContext, RefreshReason>;
|
|
52
|
+
label: string;
|
|
53
|
+
queryInfo: TQueryInfo;
|
|
54
|
+
protected 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: QueryContext) => QueryInput<TResultSchema, ReadonlyArray<any>, TQueryInfo>);
|
|
59
|
+
reactivityGraph?: ReactivityGraph;
|
|
60
|
+
map?: (rows: TResultSchema) => TResult;
|
|
61
|
+
queryInfo?: TQueryInfo;
|
|
62
|
+
otelContext?: otel.Context;
|
|
63
|
+
});
|
|
64
|
+
destroy: () => void;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/live-queries/db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAS1E,OAAO,EAAa,MAAM,EAAiB,MAAM,yBAAyB,CAAA;AAC1E,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAG1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAG3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC9F,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAA;AAEvE,MAAM,MAAM,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,YAAY,KAAK,IAAI,CAAA;CACjD,CAAA;AAED,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,eAAe,CAAC,EAAE,eAAe,CAAA;QACjC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;KAC3B,GACA,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IAIjC,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,eAAe,CAAC,EAAE,eAAe,CAAA;QACjC,SAAS,CAAC,EAAE,UAAU,CAAA;QACtB,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;KAC3B,GACA,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;CAS/B,CAAA;AAGJ,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,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,GAAG,SAAS,CAAA;IAEtH,sDAAsD;IACtD,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,CAAC,CAAA;IAErD,KAAK,EAAE,MAAM,CAAA;IAEb,SAAS,EAAE,UAAU,CAAA;IAErB,SAAS,CAAC,eAAe,kBAAA;IAEzB,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,YAAY,KAAK,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAA;QAC1G,eAAe,CAAC,EAAE,eAAe,CAAA;QACjC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAA;QACtC,SAAS,CAAC,EAAE,UAAU,CAAA;QACtB,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;KAC3B;IA2ND,OAAO,aAMN;CACF"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { getResultSchema, isQueryBuilder, prepareBindValues, QueryBuilderAstSymbol, replaceSessionIdSymbol, } from '@livestore/common';
|
|
2
|
+
import { deepEqual, shouldNeverHappen } from '@livestore/utils';
|
|
3
|
+
import { Predicate, Schema, TreeFormatter } from '@livestore/utils/effect';
|
|
4
|
+
import * as otel from '@opentelemetry/api';
|
|
5
|
+
import { globalReactivityGraph } from '../global-state.js';
|
|
6
|
+
import { isThunk, NOT_REFRESHED_YET } from '../reactive.js';
|
|
7
|
+
import { makeExecBeforeFirstRun, rowQueryLabel } from '../row-query-utils.js';
|
|
8
|
+
import { getDurationMsFromSpan } from '../utils/otel.js';
|
|
9
|
+
import { LiveStoreQueryBase, makeGetAtomResult } from './base-class.js';
|
|
10
|
+
/**
|
|
11
|
+
* NOTE `query` is only supposed to read data. Don't use it to insert/update/delete data but use mutations instead.
|
|
12
|
+
*/
|
|
13
|
+
export const queryDb = (queryInput, options) => new LiveStoreDbQuery({
|
|
14
|
+
queryInput,
|
|
15
|
+
label: options?.label,
|
|
16
|
+
reactivityGraph: options?.reactivityGraph,
|
|
17
|
+
map: options?.map,
|
|
18
|
+
queryInfo: Predicate.hasProperty(options, 'queryInfo') ? options.queryInfo : undefined,
|
|
19
|
+
otelContext: options?.otelContext,
|
|
20
|
+
});
|
|
21
|
+
/* An object encapsulating a reactive SQL query */
|
|
22
|
+
export class LiveStoreDbQuery extends LiveStoreQueryBase {
|
|
23
|
+
_tag = 'db';
|
|
24
|
+
/** A reactive thunk representing the query text */
|
|
25
|
+
queryInput$;
|
|
26
|
+
/** A reactive thunk representing the query results */
|
|
27
|
+
results$;
|
|
28
|
+
label;
|
|
29
|
+
queryInfo;
|
|
30
|
+
reactivityGraph;
|
|
31
|
+
mapResult;
|
|
32
|
+
constructor({ queryInput, label: inputLabel, reactivityGraph, map, queryInfo: inputQueryInfo, otelContext, }) {
|
|
33
|
+
super();
|
|
34
|
+
let label = inputLabel ?? 'db(unknown)';
|
|
35
|
+
let queryInfo = inputQueryInfo ?? { _tag: 'None' };
|
|
36
|
+
this.reactivityGraph = reactivityGraph ?? globalReactivityGraph;
|
|
37
|
+
this.mapResult = map === undefined ? (rows) => rows : map;
|
|
38
|
+
const schemaRef = {
|
|
39
|
+
current: typeof queryInput === 'function' ? undefined : isQueryBuilder(queryInput) ? undefined : queryInput.schema,
|
|
40
|
+
};
|
|
41
|
+
const execBeforeFirstRunRef = {
|
|
42
|
+
current: undefined,
|
|
43
|
+
};
|
|
44
|
+
let queryInputRaw$OrQueryInputRaw;
|
|
45
|
+
const fromQueryBuilder = (qb, otelContext) => {
|
|
46
|
+
const qbRes = qb.asSql();
|
|
47
|
+
const schema = getResultSchema(qb);
|
|
48
|
+
const ast = qb[QueryBuilderAstSymbol];
|
|
49
|
+
return {
|
|
50
|
+
queryInputRaw: {
|
|
51
|
+
query: qbRes.query,
|
|
52
|
+
schema,
|
|
53
|
+
bindValues: qbRes.bindValues,
|
|
54
|
+
queriedTables: new Set([ast.tableDef.sqliteDef.name]),
|
|
55
|
+
queryInfo: ast._tag === 'RowQuery' ? { _tag: 'Row', table: ast.tableDef, id: ast.id } : { _tag: 'None' },
|
|
56
|
+
},
|
|
57
|
+
label: ast._tag === 'RowQuery' ? rowQueryLabel(ast.tableDef, ast.id) : qb.toString(),
|
|
58
|
+
execBeforeFirstRun: ast._tag === 'RowQuery'
|
|
59
|
+
? makeExecBeforeFirstRun({
|
|
60
|
+
table: ast.tableDef,
|
|
61
|
+
insertValues: ast.insertValues,
|
|
62
|
+
id: ast.id,
|
|
63
|
+
otelContext,
|
|
64
|
+
})
|
|
65
|
+
: undefined,
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
if (typeof queryInput === 'function') {
|
|
69
|
+
queryInputRaw$OrQueryInputRaw = this.reactivityGraph.makeThunk((get, setDebugInfo, ctx, otelContext) => {
|
|
70
|
+
const startMs = performance.now();
|
|
71
|
+
const queryInputResult = queryInput(makeGetAtomResult(get, otelContext ?? ctx.rootOtelContext), ctx);
|
|
72
|
+
const durationMs = performance.now() - startMs;
|
|
73
|
+
let queryInputRaw;
|
|
74
|
+
if (isQueryBuilder(queryInputResult)) {
|
|
75
|
+
const res = fromQueryBuilder(queryInputResult, otelContext);
|
|
76
|
+
queryInputRaw = res.queryInputRaw;
|
|
77
|
+
// setting label dynamically here
|
|
78
|
+
this.label = res.label;
|
|
79
|
+
execBeforeFirstRunRef.current = res.execBeforeFirstRun;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
queryInputRaw = queryInputResult;
|
|
83
|
+
}
|
|
84
|
+
setDebugInfo({ _tag: 'computed', label: `${this.label}:queryInput`, query: queryInputRaw.query, durationMs });
|
|
85
|
+
schemaRef.current = queryInputRaw.schema;
|
|
86
|
+
if (inputQueryInfo === undefined && queryInputRaw.queryInfo !== undefined) {
|
|
87
|
+
queryInfo = queryInputRaw.queryInfo;
|
|
88
|
+
}
|
|
89
|
+
return queryInputRaw;
|
|
90
|
+
}, {
|
|
91
|
+
label: `${label}:query`,
|
|
92
|
+
meta: { liveStoreThunkType: 'db.query' },
|
|
93
|
+
// NOTE we're not checking the schema here as we assume the query string to always change when the schema might change
|
|
94
|
+
equal: (a, b) => a.query === b.query && deepEqual(a.bindValues, b.bindValues),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
let queryInputRaw;
|
|
99
|
+
if (isQueryBuilder(queryInput)) {
|
|
100
|
+
const res = fromQueryBuilder(queryInput, otelContext);
|
|
101
|
+
queryInputRaw = res.queryInputRaw;
|
|
102
|
+
label = res.label;
|
|
103
|
+
execBeforeFirstRunRef.current = res.execBeforeFirstRun;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
queryInputRaw = queryInput;
|
|
107
|
+
}
|
|
108
|
+
schemaRef.current = queryInputRaw.schema;
|
|
109
|
+
queryInputRaw$OrQueryInputRaw = queryInputRaw;
|
|
110
|
+
// this.label = inputLabel ? this.label : `db(${})`
|
|
111
|
+
if (inputLabel === undefined && isQueryBuilder(queryInput)) {
|
|
112
|
+
const ast = queryInput[QueryBuilderAstSymbol];
|
|
113
|
+
if (ast._tag === 'RowQuery') {
|
|
114
|
+
label = `db(${rowQueryLabel(ast.tableDef, ast.id)})`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (inputQueryInfo === undefined && queryInputRaw.queryInfo !== undefined) {
|
|
118
|
+
queryInfo = queryInputRaw.queryInfo;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const queriedTablesRef = { current: undefined };
|
|
122
|
+
const makeResultsEqual = (resultSchema) => (a, b) => a === NOT_REFRESHED_YET || b === NOT_REFRESHED_YET ? false : Schema.equivalence(resultSchema)(a, b);
|
|
123
|
+
// NOTE we try to create the equality function eagerly as it might be expensive
|
|
124
|
+
// TODO also support derived equality for `map` (probably will depend on having an easy way to transform a schema without an `encode` step)
|
|
125
|
+
// This would mean dropping the `map` option
|
|
126
|
+
const resultsEqual = map === undefined
|
|
127
|
+
? schemaRef.current === undefined
|
|
128
|
+
? (a, b) => makeResultsEqual(schemaRef.current)(a, b)
|
|
129
|
+
: makeResultsEqual(schemaRef.current)
|
|
130
|
+
: undefined;
|
|
131
|
+
const results$ = this.reactivityGraph.makeThunk((get, setDebugInfo, queryContext, otelContext) => queryContext.otelTracer.startActiveSpan('db:...', // NOTE span name will be overridden further down
|
|
132
|
+
{}, otelContext ?? queryContext.rootOtelContext, (span) => {
|
|
133
|
+
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
|
134
|
+
const { store } = queryContext;
|
|
135
|
+
if (execBeforeFirstRunRef.current !== undefined) {
|
|
136
|
+
execBeforeFirstRunRef.current(queryContext, otelContext);
|
|
137
|
+
execBeforeFirstRunRef.current = undefined;
|
|
138
|
+
}
|
|
139
|
+
const queryInputResult = isThunk(queryInputRaw$OrQueryInputRaw)
|
|
140
|
+
? get(queryInputRaw$OrQueryInputRaw, otelContext)
|
|
141
|
+
: queryInputRaw$OrQueryInputRaw;
|
|
142
|
+
const sqlString = queryInputResult.query;
|
|
143
|
+
const bindValues = queryInputResult.bindValues;
|
|
144
|
+
if (queriedTablesRef.current === undefined) {
|
|
145
|
+
queriedTablesRef.current = store.syncDbWrapper.getTablesUsed(sqlString);
|
|
146
|
+
}
|
|
147
|
+
if (bindValues !== undefined) {
|
|
148
|
+
replaceSessionIdSymbol(bindValues, store.clientSession.coordinator.sessionId);
|
|
149
|
+
}
|
|
150
|
+
// Establish a reactive dependency on the tables used in the query
|
|
151
|
+
for (const tableName of queriedTablesRef.current) {
|
|
152
|
+
const tableRef = store.tableRefs[tableName] ?? shouldNeverHappen(`No table ref found for ${tableName}`);
|
|
153
|
+
get(tableRef, otelContext);
|
|
154
|
+
}
|
|
155
|
+
span.setAttribute('sql.query', sqlString);
|
|
156
|
+
span.updateName(`db:${sqlString.slice(0, 50)}`);
|
|
157
|
+
const rawDbResults = store.syncDbWrapper.select(sqlString, {
|
|
158
|
+
queriedTables: queriedTablesRef.current,
|
|
159
|
+
bindValues: bindValues ? prepareBindValues(bindValues, sqlString) : undefined,
|
|
160
|
+
otelContext,
|
|
161
|
+
});
|
|
162
|
+
span.setAttribute('sql.rowsCount', rawDbResults.length);
|
|
163
|
+
const parsedResult = Schema.decodeEither(schemaRef.current)(rawDbResults);
|
|
164
|
+
if (parsedResult._tag === 'Left') {
|
|
165
|
+
const parseErrorStr = TreeFormatter.formatErrorSync(parsedResult.left);
|
|
166
|
+
const expectedSchemaStr = String(schemaRef.current.ast);
|
|
167
|
+
const bindValuesStr = bindValues === undefined ? '' : `\nBind values: ${JSON.stringify(bindValues)}`;
|
|
168
|
+
console.error(`\
|
|
169
|
+
Error parsing SQL query result.
|
|
170
|
+
|
|
171
|
+
Query: ${sqlString}\
|
|
172
|
+
${bindValuesStr}
|
|
173
|
+
|
|
174
|
+
Expected schema: ${expectedSchemaStr}
|
|
175
|
+
|
|
176
|
+
Error: ${parseErrorStr}
|
|
177
|
+
|
|
178
|
+
Result:`, rawDbResults);
|
|
179
|
+
return shouldNeverHappen(`Error parsing SQL query result: ${parsedResult.left}`);
|
|
180
|
+
}
|
|
181
|
+
const result = this.mapResult(parsedResult.right);
|
|
182
|
+
span.end();
|
|
183
|
+
const durationMs = getDurationMsFromSpan(span);
|
|
184
|
+
this.executionTimes.push(durationMs);
|
|
185
|
+
setDebugInfo({ _tag: 'db', label: `${label}:results`, query: sqlString, durationMs });
|
|
186
|
+
return result;
|
|
187
|
+
}), { label: `${label}:results`, meta: { liveStoreThunkType: 'db.result' }, equal: resultsEqual });
|
|
188
|
+
this.results$ = results$;
|
|
189
|
+
this.label = label;
|
|
190
|
+
this.queryInfo = queryInfo;
|
|
191
|
+
}
|
|
192
|
+
destroy = () => {
|
|
193
|
+
if (this.queryInput$ !== undefined) {
|
|
194
|
+
this.reactivityGraph.destroyNode(this.queryInput$);
|
|
195
|
+
}
|
|
196
|
+
this.reactivityGraph.destroyNode(this.results$);
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/live-queries/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.test.d.ts","sourceRoot":"","sources":["../../src/live-queries/db.test.ts"],"names":[],"mappings":""}
|