@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.
Files changed (81) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/global-state.d.ts +1 -1
  3. package/dist/global-state.d.ts.map +1 -1
  4. package/dist/global-state.js +1 -1
  5. package/dist/global-state.js.map +1 -1
  6. package/dist/index.d.ts +6 -6
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +5 -5
  9. package/dist/index.js.map +1 -1
  10. package/dist/{reactiveQueries → live-queries}/base-class.d.ts +8 -4
  11. package/dist/live-queries/base-class.d.ts.map +1 -0
  12. package/dist/{reactiveQueries → live-queries}/base-class.js +2 -0
  13. package/dist/live-queries/base-class.js.map +1 -0
  14. package/dist/{reactiveQueries → live-queries}/computed.d.ts +4 -13
  15. package/dist/live-queries/computed.d.ts.map +1 -0
  16. package/dist/{reactiveQueries → live-queries}/computed.js +4 -23
  17. package/dist/live-queries/computed.js.map +1 -0
  18. package/dist/live-queries/db.d.ts +66 -0
  19. package/dist/live-queries/db.d.ts.map +1 -0
  20. package/dist/live-queries/db.js +199 -0
  21. package/dist/live-queries/db.js.map +1 -0
  22. package/dist/live-queries/db.test.d.ts +2 -0
  23. package/dist/live-queries/db.test.d.ts.map +1 -0
  24. package/dist/live-queries/db.test.js +117 -0
  25. package/dist/live-queries/db.test.js.map +1 -0
  26. package/dist/{reactiveQueries → live-queries}/graphql.d.ts +4 -8
  27. package/dist/live-queries/graphql.d.ts.map +1 -0
  28. package/dist/{reactiveQueries → live-queries}/graphql.js +2 -16
  29. package/dist/live-queries/graphql.js.map +1 -0
  30. package/dist/row-query-utils.d.ts +17 -0
  31. package/dist/row-query-utils.d.ts.map +1 -0
  32. package/dist/row-query-utils.js +30 -0
  33. package/dist/row-query-utils.js.map +1 -0
  34. package/dist/store/create-store.d.ts +1 -1
  35. package/dist/store/create-store.d.ts.map +1 -1
  36. package/dist/store/devtools.d.ts +1 -1
  37. package/dist/store/devtools.d.ts.map +1 -1
  38. package/dist/store/devtools.js.map +1 -1
  39. package/dist/store/store-types.d.ts +2 -2
  40. package/dist/store/store-types.d.ts.map +1 -1
  41. package/dist/store/store.d.ts +8 -3
  42. package/dist/store/store.d.ts.map +1 -1
  43. package/dist/store/store.js +32 -4
  44. package/dist/store/store.js.map +1 -1
  45. package/dist/utils/tests/fixture.d.ts +168 -132
  46. package/dist/utils/tests/fixture.d.ts.map +1 -1
  47. package/package.json +5 -5
  48. package/src/global-state.ts +1 -1
  49. package/src/index.ts +8 -5
  50. package/src/live-queries/__snapshots__/db.test.ts.snap +301 -0
  51. package/src/{reactiveQueries → live-queries}/base-class.ts +10 -5
  52. package/src/{reactiveQueries → live-queries}/computed.ts +5 -29
  53. package/src/live-queries/db.test.ts +153 -0
  54. package/src/live-queries/db.ts +350 -0
  55. package/src/{reactiveQueries → live-queries}/graphql.ts +6 -21
  56. package/src/row-query-utils.ts +65 -0
  57. package/src/store/create-store.ts +1 -1
  58. package/src/store/devtools.ts +1 -1
  59. package/src/store/store-types.ts +2 -2
  60. package/src/store/store.ts +44 -7
  61. package/dist/reactiveQueries/base-class.d.ts.map +0 -1
  62. package/dist/reactiveQueries/base-class.js.map +0 -1
  63. package/dist/reactiveQueries/computed.d.ts.map +0 -1
  64. package/dist/reactiveQueries/computed.js.map +0 -1
  65. package/dist/reactiveQueries/graphql.d.ts.map +0 -1
  66. package/dist/reactiveQueries/graphql.js.map +0 -1
  67. package/dist/reactiveQueries/sql.d.ts +0 -49
  68. package/dist/reactiveQueries/sql.d.ts.map +0 -1
  69. package/dist/reactiveQueries/sql.js +0 -130
  70. package/dist/reactiveQueries/sql.js.map +0 -1
  71. package/dist/reactiveQueries/sql.test.d.ts +0 -2
  72. package/dist/reactiveQueries/sql.test.d.ts.map +0 -1
  73. package/dist/reactiveQueries/sql.test.js +0 -284
  74. package/dist/reactiveQueries/sql.test.js.map +0 -1
  75. package/dist/row-query.d.ts +0 -33
  76. package/dist/row-query.d.ts.map +0 -1
  77. package/dist/row-query.js +0 -80
  78. package/dist/row-query.js.map +0 -1
  79. package/src/reactiveQueries/sql.test.ts +0 -308
  80. package/src/reactiveQueries/sql.ts +0 -226
  81. package/src/row-query.ts +0 -196
@@ -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("./reactiveQueries/base-class.js").ReactivityGraph;
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,2DAEjC,CAAA"}
1
+ {"version":3,"file":"global-state.d.ts","sourceRoot":"","sources":["../src/global-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,eAAO,MAAM,qBAAqB,wDAEjC,CAAA"}
@@ -11,6 +11,6 @@
11
11
  *
12
12
  */
13
13
  import { GlobalValue } from '@livestore/utils/effect';
14
- import { makeReactivityGraph } from './reactiveQueries/base-class.js';
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
@@ -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,iCAAiC,CAAA;AAErE,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC,WAAW,CAAC,kCAAkC,EAAE,GAAG,EAAE,CACpG,mBAAmB,EAAE,CACtB,CAAA"}
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 { LiveStoreJSQuery, computed } from './reactiveQueries/computed.js';
9
- export { LiveStoreSQLQuery, querySQL } from './reactiveQueries/sql.js';
10
- export { LiveStoreGraphQLQuery, queryGraphQL } from './reactiveQueries/graphql.js';
11
- export { type GetAtomResult, type ReactivityGraph, makeReactivityGraph, type LiveQuery, type GetResult, type LiveQueryAny, } from './reactiveQueries/base-class.js';
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 { type RowResult, type RowResultEncoded, rowQuery, deriveColQuery } from './row-query.js';
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';
@@ -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,gBAAgB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAClF,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,YAAY,GAClB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEhG,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,GACxB,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"}
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 { LiveStoreJSQuery, computed } from './reactiveQueries/computed.js';
6
- export { LiveStoreSQLQuery, querySQL } from './reactiveQueries/sql.js';
7
- export { LiveStoreGraphQLQuery, queryGraphQL } from './reactiveQueries/graphql.js';
8
- export { makeReactivityGraph, } from './reactiveQueries/base-class.js';
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 { rowQuery, deriveColQuery } from './row-query.js';
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,gBAAgB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAClF,OAAO,EAGL,mBAAmB,GAIpB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,EAAyC,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEhG,cAAc,0BAA0B,CAAA;AACxC,OAAO,EACL,GAAG,EACH,eAAe,EAKf,iBAAiB,GAGlB,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
+ {"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, QueryInfoNone } from '@livestore/common';
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 interface LiveQuery<TResult, TQueryInfo extends QueryInfo = QueryInfoNone> {
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' | 'sql' | 'graphql';
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
- abstract _tag: 'computed' | 'sql' | 'graphql';
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, QueryInfoNone } from '@livestore/common';
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 = QueryInfoNone>(fn: (get: GetAtomResult) => TResult, options?: {
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 LiveStoreJSQuery<TResult, TQueryInfo extends QueryInfo = QueryInfoNone> extends LiveStoreQueryBase<TResult, TQueryInfo> {
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 LiveStoreJSQuery({
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 LiveStoreJSQuery extends LiveStoreQueryBase {
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: 'jsResults' } });
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":"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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=db.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.test.d.ts","sourceRoot":"","sources":["../../src/live-queries/db.test.ts"],"names":[],"mappings":""}