@livestore/livestore 0.0.38 → 0.0.39-dev.2

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 (117) hide show
  1. package/README.md +3 -4
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/react/fixture.d.ts +97 -3
  4. package/dist/__tests__/react/fixture.d.ts.map +1 -1
  5. package/dist/__tests__/react/fixture.js +10 -7
  6. package/dist/__tests__/react/fixture.js.map +1 -1
  7. package/dist/__tests__/react/useQuery.test.js +12 -23
  8. package/dist/__tests__/react/useQuery.test.js.map +1 -1
  9. package/dist/__tests__/react/useRow.test.js +4 -4
  10. package/dist/__tests__/react/useRow.test.js.map +1 -1
  11. package/dist/__tests__/reactiveQueries/sql.test.js +32 -35
  12. package/dist/__tests__/reactiveQueries/sql.test.js.map +1 -1
  13. package/dist/effect/LiveStore.d.ts +3 -2
  14. package/dist/effect/LiveStore.d.ts.map +1 -1
  15. package/dist/effect/LiveStore.js.map +1 -1
  16. package/dist/index.d.ts +6 -6
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +3 -3
  19. package/dist/index.js.map +1 -1
  20. package/dist/migrations.js +2 -2
  21. package/dist/migrations.js.map +1 -1
  22. package/dist/mutations.d.ts +3 -1
  23. package/dist/mutations.d.ts.map +1 -1
  24. package/dist/mutations.js +2 -2
  25. package/dist/mutations.js.map +1 -1
  26. package/dist/react/LiveStoreContext.d.ts +2 -2
  27. package/dist/react/LiveStoreContext.d.ts.map +1 -1
  28. package/dist/react/LiveStoreContext.js.map +1 -1
  29. package/dist/react/index.d.ts +1 -0
  30. package/dist/react/index.d.ts.map +1 -1
  31. package/dist/react/index.js +1 -0
  32. package/dist/react/index.js.map +1 -1
  33. package/dist/react/useAtom.d.ts +5 -0
  34. package/dist/react/useAtom.d.ts.map +1 -0
  35. package/dist/react/useAtom.js +16 -0
  36. package/dist/react/useAtom.js.map +1 -0
  37. package/dist/react/useQuery.d.ts +3 -3
  38. package/dist/react/useQuery.d.ts.map +1 -1
  39. package/dist/react/useQuery.js.map +1 -1
  40. package/dist/react/useRow.d.ts +5 -5
  41. package/dist/react/useRow.d.ts.map +1 -1
  42. package/dist/react/useRow.js +16 -30
  43. package/dist/react/useRow.js.map +1 -1
  44. package/dist/react/useTemporaryQuery.d.ts +3 -3
  45. package/dist/react/useTemporaryQuery.d.ts.map +1 -1
  46. package/dist/react/useTemporaryQuery.js.map +1 -1
  47. package/dist/reactiveQueries/base-class.d.ts +12 -4
  48. package/dist/reactiveQueries/base-class.d.ts.map +1 -1
  49. package/dist/reactiveQueries/base-class.js +1 -0
  50. package/dist/reactiveQueries/base-class.js.map +1 -1
  51. package/dist/reactiveQueries/graphql.d.ts +5 -5
  52. package/dist/reactiveQueries/graphql.d.ts.map +1 -1
  53. package/dist/reactiveQueries/graphql.js +11 -10
  54. package/dist/reactiveQueries/graphql.js.map +1 -1
  55. package/dist/reactiveQueries/js.d.ts +10 -7
  56. package/dist/reactiveQueries/js.d.ts.map +1 -1
  57. package/dist/reactiveQueries/js.js +19 -11
  58. package/dist/reactiveQueries/js.js.map +1 -1
  59. package/dist/reactiveQueries/sql.d.ts +21 -15
  60. package/dist/reactiveQueries/sql.d.ts.map +1 -1
  61. package/dist/reactiveQueries/sql.js +50 -28
  62. package/dist/reactiveQueries/sql.js.map +1 -1
  63. package/dist/row-query.d.ts +22 -21
  64. package/dist/row-query.d.ts.map +1 -1
  65. package/dist/row-query.js +62 -47
  66. package/dist/row-query.js.map +1 -1
  67. package/dist/schema/index.d.ts +3 -2
  68. package/dist/schema/index.d.ts.map +1 -1
  69. package/dist/schema/index.js +3 -2
  70. package/dist/schema/index.js.map +1 -1
  71. package/dist/schema/parse-utils.d.ts +6 -0
  72. package/dist/schema/parse-utils.d.ts.map +1 -0
  73. package/dist/schema/parse-utils.js +59 -0
  74. package/dist/schema/parse-utils.js.map +1 -0
  75. package/dist/schema/system-tables.d.ts +24 -8
  76. package/dist/schema/system-tables.d.ts.map +1 -1
  77. package/dist/schema/table-def.d.ts +32 -7
  78. package/dist/schema/table-def.d.ts.map +1 -1
  79. package/dist/schema/table-def.js +18 -6
  80. package/dist/schema/table-def.js.map +1 -1
  81. package/dist/store.d.ts +4 -8
  82. package/dist/store.d.ts.map +1 -1
  83. package/dist/store.js +7 -8
  84. package/dist/store.js.map +1 -1
  85. package/dist/update-path.d.ts +52 -0
  86. package/dist/update-path.d.ts.map +1 -0
  87. package/dist/update-path.js +33 -0
  88. package/dist/update-path.js.map +1 -0
  89. package/dist/utils/util.d.ts +1 -0
  90. package/dist/utils/util.d.ts.map +1 -1
  91. package/dist/utils/util.js.map +1 -1
  92. package/package.json +4 -4
  93. package/src/__tests__/react/fixture.tsx +13 -7
  94. package/src/__tests__/react/useQuery.test.tsx +12 -29
  95. package/src/__tests__/react/useRow.test.tsx +5 -7
  96. package/src/__tests__/reactiveQueries/sql.test.ts +33 -35
  97. package/src/effect/LiveStore.ts +3 -2
  98. package/src/index.ts +6 -6
  99. package/src/migrations.ts +2 -2
  100. package/src/mutations.ts +8 -3
  101. package/src/react/LiveStoreContext.ts +3 -2
  102. package/src/react/index.ts +1 -0
  103. package/src/react/useAtom.ts +25 -0
  104. package/src/react/useQuery.ts +7 -7
  105. package/src/react/useRow.ts +27 -47
  106. package/src/react/useTemporaryQuery.ts +4 -6
  107. package/src/reactiveQueries/base-class.ts +18 -4
  108. package/src/reactiveQueries/graphql.ts +16 -14
  109. package/src/reactiveQueries/js.ts +36 -15
  110. package/src/reactiveQueries/sql.ts +77 -37
  111. package/src/row-query.ts +155 -113
  112. package/src/schema/index.ts +5 -4
  113. package/src/schema/parse-utils.ts +84 -0
  114. package/src/schema/table-def.ts +80 -12
  115. package/src/store.ts +14 -29
  116. package/src/update-path.ts +102 -0
  117. package/src/utils/util.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../src/reactiveQueries/graphql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../src/reactiveQueries/graphql.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,20 @@
1
1
  import type { Thunk } from '../reactive.js';
2
2
  import type { RefreshReason } from '../store.js';
3
- import type { DbContext, DbGraph, GetAtomResult } from './base-class.js';
3
+ import type { UpdatePathDesc, UpdatePathDescNone } from '../update-path.js';
4
+ import type { DbContext, DbGraph, GetAtomResult, LiveQuery } from './base-class.js';
4
5
  import { LiveStoreQueryBase } from './base-class.js';
5
- export declare const queryJS: <TResult>(fn: (get: GetAtomResult) => TResult, options: {
6
+ export declare const computed: <TResult, TUpdatePath extends UpdatePathDesc = UpdatePathDescNone>(fn: (get: GetAtomResult) => TResult, options?: {
6
7
  label: string;
7
- dbGraph?: DbGraph;
8
- }) => LiveStoreJSQuery<TResult>;
9
- export declare class LiveStoreJSQuery<TResult> extends LiveStoreQueryBase<TResult> {
8
+ dbGraph?: DbGraph | undefined;
9
+ updatePathDesc?: TUpdatePath | undefined;
10
+ } | undefined) => LiveQuery<TResult, TUpdatePath>;
11
+ export declare class LiveStoreJSQuery<TResult, TUpdatePath extends UpdatePathDesc = UpdatePathDescNone> extends LiveStoreQueryBase<TResult, TUpdatePath> {
10
12
  _tag: 'js';
11
13
  /** A reactive thunk representing the query results */
12
14
  results$: Thunk<TResult, DbContext, RefreshReason>;
13
15
  label: string;
14
16
  protected dbGraph: DbGraph;
17
+ updatePathDesc: TUpdatePath;
15
18
  /**
16
19
  * Currently only used for "nested destruction" of piped queries
17
20
  *
@@ -19,14 +22,14 @@ export declare class LiveStoreJSQuery<TResult> extends LiveStoreQueryBase<TResul
19
22
  * we need to also destory the SQL query when the JS query `q` is destroyed
20
23
  */
21
24
  private onDestroy;
22
- constructor({ fn, label, onDestroy, dbGraph, }: {
25
+ constructor({ fn, label, onDestroy, dbGraph, updatePathDesc, }: {
23
26
  label: string;
24
27
  fn: (get: GetAtomResult) => TResult;
25
28
  /** Currently only used for "nested destruction" of piped queries */
26
29
  onDestroy?: () => void;
27
30
  dbGraph?: DbGraph;
31
+ updatePathDesc?: TUpdatePath;
28
32
  });
29
- pipe: <U>(fn: (result: TResult, get: GetAtomResult) => U) => LiveStoreJSQuery<U>;
30
33
  destroy: () => void;
31
34
  }
32
35
  //# sourceMappingURL=js.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"js.d.ts","sourceRoot":"","sources":["../../src/reactiveQueries/js.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAA;AAEvE,eAAO,MAAM,OAAO,sBAAuB,aAAa,uBAAuB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,8BAC5B,CAAA;AAEvF,qBAAa,gBAAgB,CAAC,OAAO,CAAE,SAAQ,kBAAkB,CAAC,OAAO,CAAC;IACxE,IAAI,EAAE,IAAI,CAAO;IAEjB,sDAAsD;IACtD,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;IAElD,KAAK,EAAE,MAAM,CAAA;IAEb,SAAS,CAAC,OAAO,EAAE,OAAO,CAAA;IAE1B;;;;;OAKG;IACH,OAAO,CAAC,SAAS,CAA0B;gBAE/B,EACV,EAAE,EACF,KAAK,EACL,SAAS,EACT,OAAO,GACR,EAAE;QACD,KAAK,EAAE,MAAM,CAAA;QACb,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAA;QACnC,oEAAoE;QACpE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;QACtB,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB;IA4BD,IAAI,mBAAoB,OAAO,OAAO,aAAa,+BAS/C;IAEJ,OAAO,aAGN;CACF"}
1
+ {"version":3,"file":"js.d.ts","sourceRoot":"","sources":["../../src/reactiveQueries/js.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE3E,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACnF,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAA;AAEvE,eAAO,MAAM,QAAQ,+EACT,aAAa;WAEd,MAAM;;;iDAUb,CAAA;AAEJ,qBAAa,gBAAgB,CAC3B,OAAO,EACP,WAAW,SAAS,cAAc,GAAG,kBAAkB,CACvD,SAAQ,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC;IAChD,IAAI,EAAE,IAAI,CAAO;IAEjB,sDAAsD;IACtD,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;IAElD,KAAK,EAAE,MAAM,CAAA;IAEb,SAAS,CAAC,OAAO,EAAE,OAAO,CAAA;IAE1B,cAAc,EAAE,WAAW,CAAA;IAE3B;;;;;OAKG;IACH,OAAO,CAAC,SAAS,CAA0B;gBAE/B,EACV,EAAE,EACF,KAAK,EACL,SAAS,EACT,OAAO,EACP,cAAc,GACf,EAAE;QACD,KAAK,EAAE,MAAM,CAAA;QACb,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAA;QACnC,oEAAoE;QACpE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;QACtB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,cAAc,CAAC,EAAE,WAAW,CAAA;KAC7B;IAwCD,OAAO,aAGN;CACF"}
@@ -2,13 +2,19 @@ import * as otel from '@opentelemetry/api';
2
2
  import { globalDbGraph } from '../global-state.js';
3
3
  import { getDurationMsFromSpan } from '../utils/otel.js';
4
4
  import { LiveStoreQueryBase, makeGetAtomResult } from './base-class.js';
5
- export const queryJS = (fn, options) => new LiveStoreJSQuery({ fn, label: options.label, dbGraph: options.dbGraph });
5
+ export const computed = (fn, options) => new LiveStoreJSQuery({
6
+ fn,
7
+ label: options?.label ?? fn.toString(),
8
+ dbGraph: options?.dbGraph,
9
+ updatePathDesc: options?.updatePathDesc,
10
+ });
6
11
  export class LiveStoreJSQuery extends LiveStoreQueryBase {
7
12
  _tag = 'js';
8
13
  /** A reactive thunk representing the query results */
9
14
  results$;
10
15
  label;
11
16
  dbGraph;
17
+ updatePathDesc;
12
18
  /**
13
19
  * Currently only used for "nested destruction" of piped queries
14
20
  *
@@ -16,11 +22,12 @@ export class LiveStoreJSQuery extends LiveStoreQueryBase {
16
22
  * we need to also destory the SQL query when the JS query `q` is destroyed
17
23
  */
18
24
  onDestroy;
19
- constructor({ fn, label, onDestroy, dbGraph, }) {
25
+ constructor({ fn, label, onDestroy, dbGraph, updatePathDesc, }) {
20
26
  super();
21
27
  this.onDestroy = onDestroy;
22
28
  this.label = label;
23
29
  this.dbGraph = dbGraph ?? globalDbGraph;
30
+ this.updatePathDesc = updatePathDesc ?? { _tag: 'None' };
24
31
  const queryLabel = `${label}:results`;
25
32
  this.results$ = this.dbGraph.makeThunk((get, setDebugInfo, { otelTracer, rootOtelContext }, otelContext) => otelTracer.startActiveSpan(`js:${label}`, {}, otelContext ?? rootOtelContext, (span) => {
26
33
  const otelContext = otel.trace.setSpan(otel.context.active(), span);
@@ -31,15 +38,16 @@ export class LiveStoreJSQuery extends LiveStoreQueryBase {
31
38
  return res;
32
39
  }), { label: queryLabel, meta: { liveStoreThunkType: 'jsResults' } });
33
40
  }
34
- pipe = (fn) => new LiveStoreJSQuery({
35
- fn: (get) => {
36
- const results = get(this.results$);
37
- return fn(results, get);
38
- },
39
- label: `${this.label}:js`,
40
- onDestroy: () => this.destroy(),
41
- dbGraph: this.dbGraph,
42
- });
41
+ // pipe = <U>(fn: (result: TResult, get: GetAtomResult) => U): LiveStoreJSQuery<U> =>
42
+ // new LiveStoreJSQuery({
43
+ // fn: (get) => {
44
+ // const results = get(this.results$)
45
+ // return fn(results, get)
46
+ // },
47
+ // label: `${this.label}:js`,
48
+ // onDestroy: () => this.destroy(),
49
+ // dbGraph: this.dbGraph,
50
+ // })
43
51
  destroy = () => {
44
52
  this.dbGraph.destroyNode(this.results$);
45
53
  this.onDestroy?.();
@@ -1 +1 @@
1
- {"version":3,"file":"js.js","sourceRoot":"","sources":["../../src/reactiveQueries/js.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEvE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAU,EAAmC,EAAE,OAA6C,EAAE,EAAE,CACrH,IAAI,gBAAgB,CAAU,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;AAEvF,MAAM,OAAO,gBAA0B,SAAQ,kBAA2B;IACxE,IAAI,GAAS,IAAI,CAAA;IAEjB,sDAAsD;IACtD,QAAQ,CAA0C;IAElD,KAAK,CAAQ;IAEH,OAAO,CAAS;IAE1B;;;;;OAKG;IACK,SAAS,CAA0B;IAE3C,YAAY,EACV,EAAE,EACF,KAAK,EACL,SAAS,EACT,OAAO,GAOR;QACC,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAElB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,aAAa,CAAA;QAEvC,MAAM,UAAU,GAAG,GAAG,KAAK,UAAU,CAAA;QAErC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CACpC,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,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;YAErE,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,EACJ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE,CACjE,CAAA;IACH,CAAC;IAED,IAAI,GAAG,CAAI,EAA8C,EAAuB,EAAE,CAChF,IAAI,gBAAgB,CAAC;QACnB,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;YACV,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClC,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACzB,CAAC;QACD,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,KAAK;QACzB,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;QAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAA;IAEJ,OAAO,GAAG,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAA;IACpB,CAAC,CAAA;CACF"}
1
+ {"version":3,"file":"js.js","sourceRoot":"","sources":["../../src/reactiveQueries/js.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAIlD,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,EACgC,EAAE,CACnC,IAAI,gBAAgB,CAAuB;IACzC,EAAE;IACF,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,EAAE;IACtC,OAAO,EAAE,OAAO,EAAE,OAAO;IACzB,cAAc,EAAE,OAAO,EAAE,cAAc;CACxC,CAAC,CAAA;AAEJ,MAAM,OAAO,gBAGX,SAAQ,kBAAwC;IAChD,IAAI,GAAS,IAAI,CAAA;IAEjB,sDAAsD;IACtD,QAAQ,CAA0C;IAElD,KAAK,CAAQ;IAEH,OAAO,CAAS;IAE1B,cAAc,CAAa;IAE3B;;;;;OAKG;IACK,SAAS,CAA0B;IAE3C,YAAY,EACV,EAAE,EACF,KAAK,EACL,SAAS,EACT,OAAO,EACP,cAAc,GAQf;QACC,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAElB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,aAAa,CAAA;QACvC,IAAI,CAAC,cAAc,GAAG,cAAc,IAAK,EAAE,IAAI,EAAE,MAAM,EAAkB,CAAA;QAEzE,MAAM,UAAU,GAAG,GAAG,KAAK,UAAU,CAAA;QAErC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CACpC,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,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;YAErE,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,EACJ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE,CACjE,CAAA;IACH,CAAC;IAED,qFAAqF;IACrF,2BAA2B;IAC3B,qBAAqB;IACrB,2CAA2C;IAC3C,gCAAgC;IAChC,SAAS;IACT,iCAAiC;IACjC,uCAAuC;IACvC,6BAA6B;IAC7B,OAAO;IAEP,OAAO,GAAG,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAA;IACpB,CAAC,CAAA;CACF"}
@@ -1,44 +1,50 @@
1
+ import { Schema } from '@livestore/utils/effect';
1
2
  import type { Thunk } from '../reactive.js';
2
3
  import type { RefreshReason } from '../store.js';
4
+ import type { UpdatePathDesc, UpdatePathDescNone } from '../update-path.js';
3
5
  import type { Bindable } from '../utils/util.js';
4
- import type { DbContext, DbGraph, GetAtomResult } from './base-class.js';
6
+ import type { DbContext, DbGraph, GetAtomResult, LiveQuery } from './base-class.js';
5
7
  import { LiveStoreQueryBase } from './base-class.js';
6
- import { LiveStoreJSQuery } from './js.js';
7
- export declare const querySQL: <Row>(query: string | ((get: GetAtomResult) => string), options?: {
8
+ export type MapRows<TResult, TRaw = any> = ((rows: ReadonlyArray<TRaw>) => TResult) | Schema.Schema<ReadonlyArray<TRaw>, TResult>;
9
+ export declare const querySQL: <Result, TRaw = any>(query: string | ((get: GetAtomResult) => string), options?: {
10
+ map?: MapRows<Result, TRaw> | undefined;
8
11
  /**
9
12
  * Can be provided explicitly to slightly speed up initial query performance
10
13
  *
11
14
  * NOTE In the future we want to do this automatically at build time
12
15
  */
13
- queriedTables?: Set<string>;
14
- bindValues?: Bindable;
15
- label?: string;
16
- dbGraph?: DbGraph;
17
- }) => LiveStoreSQLQuery<Row>;
18
- export declare class LiveStoreSQLQuery<Row> extends LiveStoreQueryBase<ReadonlyArray<Row>> {
16
+ queriedTables?: Set<string> | undefined;
17
+ bindValues?: Bindable | undefined;
18
+ label?: string | undefined;
19
+ dbGraph?: DbGraph | undefined;
20
+ } | undefined) => LiveQuery<Result, UpdatePathDescNone>;
21
+ export declare class LiveStoreSQLQuery<Result, TUpdatePath extends UpdatePathDesc = UpdatePathDescNone> extends LiveStoreQueryBase<Result, TUpdatePath> {
19
22
  _tag: 'sql';
20
23
  /** A reactive thunk representing the query text */
21
24
  queryString$: Thunk<string, DbContext, RefreshReason>;
22
25
  /** A reactive thunk representing the query results */
23
- results$: Thunk<ReadonlyArray<Row>, DbContext, RefreshReason>;
26
+ results$: Thunk<Result, DbContext, RefreshReason>;
24
27
  label: string;
25
28
  protected dbGraph: DbGraph;
26
- constructor({ genQueryString, queriedTables, bindValues, label: label_, dbGraph, }: {
29
+ /** Currently only used by `rowQuery` for lazy table migrations and eager default row insertion */
30
+ private execBeforeFirstRun;
31
+ private mapRows;
32
+ updatePathDesc: TUpdatePath;
33
+ constructor({ genQueryString, queriedTables, bindValues, label: label_, dbGraph, map, execBeforeFirstRun, updatePathDesc, }: {
27
34
  label?: string;
28
35
  genQueryString: string | ((get: GetAtomResult) => string);
29
36
  queriedTables?: Set<string>;
30
37
  bindValues?: Bindable;
31
38
  dbGraph?: DbGraph;
39
+ map?: MapRows<Result>;
40
+ execBeforeFirstRun?: (ctx: DbContext) => void;
41
+ updatePathDesc?: TUpdatePath;
32
42
  });
33
43
  /**
34
44
  * Returns a new reactive query that contains the result of
35
45
  * running an arbitrary JS computation on the results of this SQL query.
36
46
  */
37
- pipe: <U>(fn: (result: ReadonlyArray<Row>, get: GetAtomResult) => U) => LiveStoreJSQuery<U>;
38
47
  /** Returns a reactive query */
39
- getFirstRow: (args?: {
40
- defaultValue?: Row;
41
- }) => LiveStoreJSQuery<NonNullable<Row>>;
42
48
  destroy: () => void;
43
49
  }
44
50
  //# sourceMappingURL=sql.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/reactiveQueries/sql.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE1C,eAAO,MAAM,QAAQ,+BACI,aAAa,KAAK,MAAM,aACrC;IACR;;;;OAIG;IACH,aAAa,CAAC,EAAE,IAAI,MAAM,CAAC,CAAA;IAC3B,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,2BAQC,CAAA;AAGJ,qBAAa,iBAAiB,CAAC,GAAG,CAAE,SAAQ,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAChF,IAAI,EAAE,KAAK,CAAQ;IAEnB,mDAAmD;IACnD,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;IAErD,sDAAsD;IACtD,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7D,KAAK,EAAE,MAAM,CAAA;IAEb,SAAS,CAAC,OAAO,EAAE,OAAO,CAAA;gBAEd,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,KAAK,EAAE,MAAM,EACb,OAAO,GACR,EAAE;QACD,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,cAAc,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC,CAAA;QACzD,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QAC3B,UAAU,CAAC,EAAE,QAAQ,CAAA;QACrB,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB;IA4ED;;;OAGG;IACH,IAAI,mBAAoB,cAAc,GAAG,CAAC,OAAO,aAAa,+BAS1D;IAEJ,gCAAgC;IAChC,WAAW,UAAW;QAAE,YAAY,CAAC,EAAE,GAAG,CAAA;KAAE,wCAcxC;IAEJ,OAAO,aAGN;CACF"}
1
+ {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/reactiveQueries/sql.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAIhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACnF,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAA;AAEvE,MAAM,MAAM,OAAO,CAAC,OAAO,EAAE,IAAI,GAAG,GAAG,IACnC,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,GACxC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAA;AAE/C,eAAO,MAAM,QAAQ,8CACI,aAAa,KAAK,MAAM;;IAG7C;;;;OAIG;;;;;uDAeH,CAAA;AAGJ,qBAAa,iBAAiB,CAC5B,MAAM,EACN,WAAW,SAAS,cAAc,GAAG,kBAAkB,CACvD,SAAQ,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC;IAC/C,IAAI,EAAE,KAAK,CAAQ;IAEnB,mDAAmD;IACnD,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;IAErD,sDAAsD;IACtD,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;IAEjD,KAAK,EAAE,MAAM,CAAA;IAEb,SAAS,CAAC,OAAO,UAAA;IAEjB,kGAAkG;IAClG,OAAO,CAAC,kBAAkB,CAAA;IAE1B,OAAO,CAAC,OAAO,CAAA;IAEf,cAAc,EAAE,WAAW,CAAA;gBAEf,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,KAAK,EAAE,MAAM,EACb,OAAO,EACP,GAAG,EACH,kBAAkB,EAClB,cAAc,GACf,EAAE;QACD,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,cAAc,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC,CAAA;QACzD,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QAC3B,UAAU,CAAC,EAAE,QAAQ,CAAA;QACrB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QACrB,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAA;QAC7C,cAAc,CAAC,EAAE,WAAW,CAAA;KAC7B;IA2FD;;;OAGG;IAaH,gCAAgC;IAiBhC,OAAO,aAGN;CACF"}
@@ -1,16 +1,18 @@
1
1
  import { shouldNeverHappen } from '@livestore/utils';
2
+ import { Schema } from '@livestore/utils/effect';
2
3
  import * as otel from '@opentelemetry/api';
3
4
  import { globalDbGraph } from '../global-state.js';
4
5
  import { getDurationMsFromSpan } from '../utils/otel.js';
5
6
  import { prepareBindValues } from '../utils/util.js';
6
7
  import { LiveStoreQueryBase, makeGetAtomResult } from './base-class.js';
7
- import { LiveStoreJSQuery } from './js.js';
8
8
  export const querySQL = (query, options) => new LiveStoreSQLQuery({
9
9
  label: options?.label,
10
10
  genQueryString: query,
11
11
  queriedTables: options?.queriedTables,
12
12
  bindValues: options?.bindValues,
13
13
  dbGraph: options?.dbGraph,
14
+ map: options?.map,
15
+ updatePathDesc: { _tag: 'None' },
14
16
  });
15
17
  /* An object encapsulating a reactive SQL query */
16
18
  export class LiveStoreSQLQuery extends LiveStoreQueryBase {
@@ -21,11 +23,23 @@ export class LiveStoreSQLQuery extends LiveStoreQueryBase {
21
23
  results$;
22
24
  label;
23
25
  dbGraph;
24
- constructor({ genQueryString, queriedTables, bindValues, label: label_, dbGraph, }) {
26
+ /** Currently only used by `rowQuery` for lazy table migrations and eager default row insertion */
27
+ execBeforeFirstRun;
28
+ mapRows;
29
+ updatePathDesc;
30
+ constructor({ genQueryString, queriedTables, bindValues, label: label_, dbGraph, map, execBeforeFirstRun, updatePathDesc, }) {
25
31
  super();
26
32
  const label = label_ ?? genQueryString.toString();
27
33
  this.label = `sql(${label})`;
28
34
  this.dbGraph = dbGraph ?? globalDbGraph;
35
+ this.execBeforeFirstRun = execBeforeFirstRun;
36
+ this.updatePathDesc = updatePathDesc ?? { _tag: 'None' };
37
+ this.mapRows =
38
+ map === undefined
39
+ ? (rows) => rows
40
+ : typeof map === 'function'
41
+ ? map
42
+ : (rows) => Schema.parseSync(map)(rows);
29
43
  // TODO don't even create a thunk if query string is static
30
44
  const queryString$ = this.dbGraph.makeThunk((get, setDebugInfo, { rootOtelContext }, otelContext) => {
31
45
  if (typeof genQueryString === 'function') {
@@ -45,6 +59,10 @@ export class LiveStoreSQLQuery extends LiveStoreQueryBase {
45
59
  const results$ = this.dbGraph.makeThunk((get, setDebugInfo, { store, otelTracer, rootOtelContext }, otelContext) => otelTracer.startActiveSpan('sql:...', // NOTE span name will be overridden further down
46
60
  {}, otelContext ?? rootOtelContext, (span) => {
47
61
  const otelContext = otel.trace.setSpan(otel.context.active(), span);
62
+ if (this.execBeforeFirstRun !== undefined) {
63
+ this.execBeforeFirstRun({ store, otelTracer, rootOtelContext });
64
+ this.execBeforeFirstRun = undefined;
65
+ }
48
66
  const sqlString = get(queryString$, otelContext);
49
67
  if (queriedTablesRef.current === undefined) {
50
68
  queriedTablesRef.current = store.inMemoryDB.getTablesUsed(sqlString);
@@ -56,16 +74,17 @@ export class LiveStoreSQLQuery extends LiveStoreQueryBase {
56
74
  }
57
75
  span.setAttribute('sql.query', sqlString);
58
76
  span.updateName(`sql:${sqlString.slice(0, 50)}`);
59
- const results = store.inMemoryDB.select(sqlString, {
77
+ const rawResults = store.inMemoryDB.select(sqlString, {
60
78
  queriedTables,
61
79
  bindValues: bindValues ? prepareBindValues(bindValues, sqlString) : undefined,
62
80
  otelContext,
63
81
  });
64
- span.setAttribute('sql.rowsCount', results.length);
82
+ span.setAttribute('sql.rowsCount', rawResults.length);
83
+ const result = this.mapRows(rawResults);
65
84
  span.end();
66
85
  const durationMs = getDurationMsFromSpan(span);
67
86
  setDebugInfo({ _tag: 'sql', label, query: sqlString, durationMs });
68
- return results;
87
+ return result;
69
88
  }), { label: queryLabel });
70
89
  this.results$ = results$;
71
90
  }
@@ -73,30 +92,33 @@ export class LiveStoreSQLQuery extends LiveStoreQueryBase {
73
92
  * Returns a new reactive query that contains the result of
74
93
  * running an arbitrary JS computation on the results of this SQL query.
75
94
  */
76
- pipe = (fn) => new LiveStoreJSQuery({
77
- fn: (get) => {
78
- const results = get(this.results$);
79
- return fn(results, get);
80
- },
81
- label: `${this.label}:js`,
82
- onDestroy: () => this.destroy(),
83
- dbGraph: this.dbGraph,
84
- });
95
+ // pipe = <U>(fn: (result: Result, get: GetAtomResult) => U): LiveStoreJSQuery<U> =>
96
+ // new LiveStoreJSQuery({
97
+ // fn: (get) => {
98
+ // const results = get(this.results$!)
99
+ // return fn(results, get)
100
+ // },
101
+ // label: `${this.label}:js`,
102
+ // onDestroy: () => this.destroy(),
103
+ // dbGraph: this.dbGraph,
104
+ // updatePathDesc: undefined,
105
+ // })
85
106
  /** Returns a reactive query */
86
- getFirstRow = (args) => new LiveStoreJSQuery({
87
- fn: (get) => {
88
- const results = get(this.results$);
89
- if (results.length === 0 && args?.defaultValue === undefined) {
90
- // const queryLabel = this._tag === 'sql' ? this.queryString$!.computeResult(otelContext) : this.label
91
- const queryLabel = this.label;
92
- return shouldNeverHappen(`Expected query ${queryLabel} to return at least one result`);
93
- }
94
- return results[0] ?? args.defaultValue;
95
- },
96
- label: `${this.label}:first`,
97
- onDestroy: () => this.destroy(),
98
- dbGraph: this.dbGraph,
99
- });
107
+ // getFirstRow = (args?: { defaultValue?: Result }) =>
108
+ // new LiveStoreJSQuery({
109
+ // fn: (get) => {
110
+ // const results = get(this.results$!)
111
+ // if (results.length === 0 && args?.defaultValue === undefined) {
112
+ // // const queryLabel = this._tag === 'sql' ? this.queryString$!.computeResult(otelContext) : this.label
113
+ // const queryLabel = this.label
114
+ // return shouldNeverHappen(`Expected query ${queryLabel} to return at least one result`)
115
+ // }
116
+ // return results[0] ?? args!.defaultValue!
117
+ // },
118
+ // label: `${this.label}:first`,
119
+ // onDestroy: () => this.destroy(),
120
+ // dbGraph: this.dbGraph,
121
+ // })
100
122
  destroy = () => {
101
123
  this.dbGraph.destroyNode(this.queryString$);
102
124
  this.dbGraph.destroyNode(this.results$);
@@ -1 +1 @@
1
- {"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/reactiveQueries/sql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/reactiveQueries/sql.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,30 @@
1
1
  import type * as otel from '@opentelemetry/api';
2
2
  import { SqliteDsl } from 'effect-db-schema';
3
- import type { DbGraph } from './reactiveQueries/base-class.js';
4
- import type { LiveStoreJSQuery } from './reactiveQueries/js.js';
5
- import type { TableDef } from './schema/table-def.js';
6
- import type { Store } from './store.js';
7
- export type RowQueryArgs<TTableDef extends TableDef> = TTableDef['options']['isSingleton'] extends true ? {
8
- table: TTableDef;
9
- store: Store;
3
+ import type { DbGraph, LiveQuery } from './reactiveQueries/base-class.js';
4
+ import { type DefaultSqliteTableDef, type TableDef, type TableOptions } from './schema/table-def.js';
5
+ import type { UpdatePathDescCol, UpdatePathDescNone, UpdatePathDescRow } from './update-path.js';
6
+ import type { GetValForKey } from './utils/util.js';
7
+ export type RowQueryOptions = {
10
8
  otelContext?: otel.Context;
11
- defaultValues: Partial<RowResult<TTableDef>>;
12
9
  skipInsertDefaultRow?: boolean;
13
10
  dbGraph?: DbGraph;
14
- } : {
15
- table: TTableDef;
16
- store: Store;
17
- otelContext?: otel.Context;
18
- id: string;
11
+ };
12
+ export type RowQueryOptionsDefaulValues<TTableDef extends TableDef> = {
19
13
  defaultValues: Partial<RowResult<TTableDef>>;
20
- skipInsertDefaultRow?: boolean;
21
- dbGraph?: DbGraph;
22
14
  };
23
- export declare const rowQuery: <TTableDef extends TableDef>(args: RowQueryArgs<TTableDef>) => LiveStoreJSQuery<RowResult<TTableDef>>;
24
- type GetValForKey<T, K> = K extends keyof T ? T[K] : never;
25
- export type RowResult<TTableDef extends TableDef> = TTableDef['isSingleColumn'] extends true ? GetValForKey<SqliteDsl.FromColumns.RowDecoded<TTableDef['schema']['columns']>, 'value'> : SqliteDsl.FromColumns.RowDecoded<TTableDef['schema']['columns']>;
26
- export type RowResultEncoded<TTableDef extends TableDef> = TTableDef['isSingleColumn'] extends true ? GetValForKey<SqliteDsl.FromColumns.RowEncoded<TTableDef['schema']['columns']>, 'value'> : SqliteDsl.FromColumns.RowEncoded<TTableDef['schema']['columns']>;
27
- export type RowInsert<TTableDef extends TableDef> = TTableDef['isSingleColumn'] extends true ? GetValForKey<SqliteDsl.FromColumns.InsertRowDecoded<TTableDef['schema']['columns']>, 'value'> : SqliteDsl.FromColumns.InsertRowDecoded<TTableDef['schema']['columns']>;
28
- export {};
15
+ export type MakeRowQuery = {
16
+ <TTableDef extends TableDef<DefaultSqliteTableDef, boolean, TableOptions & {
17
+ isSingleton: true;
18
+ }>>(table: TTableDef, options?: RowQueryOptions): LiveQuery<RowResult<TTableDef>, UpdatePathDescRow<TTableDef>>;
19
+ <TTableDef extends TableDef<DefaultSqliteTableDef, boolean, TableOptions & {
20
+ isSingleton: false;
21
+ }>>(table: TTableDef, id: string, options?: RowQueryOptions & RowQueryOptionsDefaulValues<TTableDef>): LiveQuery<RowResult<TTableDef>, UpdatePathDescRow<TTableDef>>;
22
+ };
23
+ export declare const rowQuery: MakeRowQuery;
24
+ export type RowResult<TTableDef extends TableDef> = TTableDef['isSingleColumn'] extends true ? GetValForKey<SqliteDsl.FromColumns.RowDecoded<TTableDef['sqliteDef']['columns']>, 'value'> : SqliteDsl.FromColumns.RowDecoded<TTableDef['sqliteDef']['columns']>;
25
+ export type RowResultEncoded<TTableDef extends TableDef> = TTableDef['isSingleColumn'] extends true ? GetValForKey<SqliteDsl.FromColumns.RowEncoded<TTableDef['sqliteDef']['columns']>, 'value'> : SqliteDsl.FromColumns.RowEncoded<TTableDef['sqliteDef']['columns']>;
26
+ export declare const deriveColQuery: {
27
+ <TQuery extends LiveQuery<any, UpdatePathDescNone>, TCol extends keyof TQuery['result!'] & string>(query$: TQuery, colName: TCol): LiveQuery<TQuery['result!'][TCol], UpdatePathDescNone>;
28
+ <TQuery extends LiveQuery<any, UpdatePathDescRow<any>>, TCol extends keyof TQuery['result!'] & string>(query$: TQuery, colName: TCol): LiveQuery<TQuery['result!'][TCol], UpdatePathDescCol<TQuery['updatePathDesc']['table'], TCol>>;
29
+ };
29
30
  //# sourceMappingURL=row-query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"row-query.d.ts","sourceRoot":"","sources":["../src/row-query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAa,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAKvD,OAAO,KAAK,EAAa,OAAO,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAG/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,EAAiB,KAAK,EAAE,MAAM,YAAY,CAAA;AAGtD,MAAM,MAAM,YAAY,CAAC,SAAS,SAAS,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,SAAS,IAAI,GACnG;IACE,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;IAC5C,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GACD;IACE,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;IAC5C,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAGL,eAAO,MAAM,QAAQ,uGAiFpB,CAAA;AAED,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;AAE1D,MAAM,MAAM,SAAS,CAAC,SAAS,SAAS,QAAQ,IAAI,SAAS,CAAC,gBAAgB,CAAC,SAAS,IAAI,GACxF,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,GACvF,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AAEpE,MAAM,MAAM,gBAAgB,CAAC,SAAS,SAAS,QAAQ,IAAI,SAAS,CAAC,gBAAgB,CAAC,SAAS,IAAI,GAC/F,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,GACvF,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AAEpE,MAAM,MAAM,SAAS,CAAC,SAAS,SAAS,QAAQ,IAAI,SAAS,CAAC,gBAAgB,CAAC,SAAS,IAAI,GACxF,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,GAC7F,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"row-query.d.ts","sourceRoot":"","sources":["../src/row-query.ts"],"names":[],"mappings":"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"}
package/dist/row-query.js CHANGED
@@ -1,85 +1,100 @@
1
1
  import { shouldNeverHappen } from '@livestore/utils';
2
2
  import { pipe, ReadonlyRecord, Schema, TreeFormatter } from '@livestore/utils/effect';
3
3
  import { SqliteAst, SqliteDsl } from 'effect-db-schema';
4
+ import { computed } from './index.js';
4
5
  import { migrateTable } from './migrations.js';
6
+ // import type { LiveStoreJSQuery } from './reactiveQueries/js.js'
5
7
  import { LiveStoreSQLQuery } from './reactiveQueries/sql.js';
6
8
  import { SCHEMA_META_TABLE } from './schema/index.js';
9
+ import { getDefaultValuesEncoded, } from './schema/table-def.js';
7
10
  import { prepareBindValues, sql } from './utils/util.js';
8
11
  // TODO also allow other where clauses and multiple rows
9
- export const rowQuery = (args) => {
10
- const { table, store, defaultValues, skipInsertDefaultRow, dbGraph } = args;
11
- const otelContext = args.otelContext ?? store.otel.queriesSpanContext;
12
- const id = args.id;
12
+ export const rowQuery = (table, idOrOptions, options_) => {
13
+ const id = typeof idOrOptions === 'string' ? idOrOptions : undefined;
14
+ const options = typeof idOrOptions === 'string' ? options_ : idOrOptions;
15
+ const defaultValues = options?.defaultValues ?? {};
13
16
  // Validate query args
14
17
  if (table.options.isSingleton === true && id !== undefined) {
15
- shouldNeverHappen(`Cannot query state table ${table.schema.name} with id "${id}" as it is a singleton`);
18
+ shouldNeverHappen(`Cannot query state table ${table.sqliteDef.name} with id "${id}" as it is a singleton`);
16
19
  }
17
20
  else if (table.options.isSingleton !== true && id === undefined) {
18
- shouldNeverHappen(`Cannot query state table ${table.schema.name} without id`);
21
+ shouldNeverHappen(`Cannot query state table ${table.sqliteDef.name} without id`);
19
22
  }
20
- const stateSchema = table.schema;
23
+ const stateSchema = table.sqliteDef;
21
24
  const componentTableName = stateSchema.name;
25
+ const whereClause = id === undefined ? '' : `where id = '${id}'`;
26
+ const queryStr = sql `select * from ${componentTableName} ${whereClause} limit 1`;
27
+ return new LiveStoreSQLQuery({
28
+ label: `rowQuery:query:${stateSchema.name}${id === undefined ? '' : `:${id}`}`,
29
+ genQueryString: queryStr,
30
+ queriedTables: new Set([componentTableName]),
31
+ dbGraph: options?.dbGraph,
32
+ execBeforeFirstRun: makeExecBeforeFirstRun({
33
+ otelContext: options?.otelContext,
34
+ table,
35
+ componentTableName,
36
+ defaultValues,
37
+ id,
38
+ skipInsertDefaultRow: options?.skipInsertDefaultRow,
39
+ }),
40
+ map: (results) => {
41
+ if (results.length === 0)
42
+ return shouldNeverHappen(`No results for query ${queryStr}`);
43
+ const componentStateEffectSchema = SqliteDsl.structSchemaForTable(stateSchema);
44
+ const parseResult = Schema.parseEither(componentStateEffectSchema)(results[0]);
45
+ if (parseResult._tag === 'Left') {
46
+ console.error('decode error', TreeFormatter.formatError(parseResult.left), 'results', results);
47
+ return shouldNeverHappen(`Error decoding query result for ${queryStr}`);
48
+ }
49
+ return table.isSingleColumn === true ? parseResult.right.value : parseResult.right;
50
+ },
51
+ updatePathDesc: { _tag: 'Row', table, id: id ?? 'singleton' },
52
+ });
53
+ };
54
+ export const deriveColQuery = (query$, colName) => {
55
+ return computed((get) => get(query$)[colName], {
56
+ label: `deriveColQuery:${query$.label}:${colName}`,
57
+ updatePathDesc: query$.updatePathDesc._tag === 'Row'
58
+ ? { _tag: 'Col', table: query$.updatePathDesc.table, column: colName, id: query$.updatePathDesc.id }
59
+ : undefined,
60
+ });
61
+ };
62
+ const insertRowWithDefaultValuesOrIgnore = ({ db, id, table, otelContext, defaultValues: explicitDefaultValues, }) => {
63
+ const columnNames = Object.keys(table.sqliteDef.columns);
64
+ const columnValues = columnNames.map((name) => `$${name}`).join(', ');
65
+ const tableName = table.sqliteDef.name;
66
+ const insertQuery = sql `insert into ${tableName} (${columnNames.join(', ')}) select ${columnValues} where not exists(select 1 from ${tableName} where id = '${id}')`;
67
+ const defaultValues = pipe(getDefaultValuesEncoded(table), ReadonlyRecord.map((val, columnName) => explicitDefaultValues?.[columnName] ?? val));
68
+ db.execute(insertQuery, prepareBindValues({ ...defaultValues, id }, insertQuery), [tableName], { otelContext });
69
+ };
70
+ const makeExecBeforeFirstRun = ({ id, defaultValues, skipInsertDefaultRow, otelContext: otelContext_, table, componentTableName, }) => ({ store }) => {
71
+ const otelContext = otelContext_ ?? store.otel.queriesSpanContext;
22
72
  // TODO find a better solution for this
23
73
  if (store.tableRefs[componentTableName] === undefined) {
24
- const schemaHash = SqliteAst.hash(stateSchema.ast);
74
+ const schemaHash = SqliteAst.hash(table.sqliteDef.ast);
25
75
  const res = store.inMemoryDB.select(sql `SELECT schemaHash FROM ${SCHEMA_META_TABLE} WHERE tableName = '${componentTableName}'`);
26
76
  if (res.length === 0 || res[0].schemaHash !== schemaHash) {
27
77
  migrateTable({
28
78
  db: store._proxyDb,
29
- tableAst: stateSchema.ast,
79
+ tableAst: table.sqliteDef.ast,
30
80
  otelContext,
31
81
  schemaHash,
32
82
  });
33
83
  }
34
84
  const label = `tableRef:${componentTableName}`;
85
+ // TODO find a better implementation for this
35
86
  const existingTableRefFromGraph = Array.from(store.graph.atoms.values()).find((_) => _._tag === 'ref' && _.label === label);
36
- store.tableRefs[componentTableName] =
37
- existingTableRefFromGraph ??
38
- store.graph.makeRef(null, {
39
- equal: () => false,
40
- label,
41
- meta: { liveStoreRefType: 'table' },
42
- });
87
+ store.tableRefs[componentTableName] = existingTableRefFromGraph ?? store.makeTableRef(componentTableName);
43
88
  }
44
89
  if (skipInsertDefaultRow !== true) {
45
90
  // TODO find a way to only do this if necessary
46
91
  insertRowWithDefaultValuesOrIgnore({
47
92
  db: store._proxyDb,
48
93
  id: id ?? 'singleton',
49
- stateSchema,
94
+ table,
50
95
  otelContext,
51
96
  defaultValues,
52
97
  });
53
98
  }
54
- const whereClause = id === undefined ? '' : `where id = '${id}'`;
55
- const queryStr = sql `select * from ${componentTableName} ${whereClause} limit 1`;
56
- return new LiveStoreSQLQuery({
57
- label: `localState:query:${stateSchema.name}${id === undefined ? '' : `:${id}`}`,
58
- genQueryString: queryStr,
59
- queriedTables: new Set([componentTableName]),
60
- dbGraph,
61
- }).pipe((results) => {
62
- if (results.length === 0)
63
- return shouldNeverHappen(`No results for query ${queryStr}`);
64
- const componentStateEffectSchema = SqliteDsl.structSchemaForTable(stateSchema);
65
- const parseResult = Schema.parseEither(componentStateEffectSchema)(results[0]);
66
- if (parseResult._tag === 'Left') {
67
- console.error('decode error', TreeFormatter.formatErrors(parseResult.left.errors), 'results', results);
68
- return shouldNeverHappen(`Error decoding query result for ${queryStr}`);
69
- }
70
- return table.isSingleColumn === true ? parseResult.right.value : parseResult.right;
71
- });
72
- };
73
- const insertRowWithDefaultValuesOrIgnore = ({ db, id, stateSchema, otelContext, defaultValues: explicitDefaultValues, }) => {
74
- const columnNames = Object.keys(stateSchema.columns);
75
- const columnValues = columnNames.map((name) => `$${name}`).join(', ');
76
- const tableName = stateSchema.name;
77
- const insertQuery = sql `insert into ${tableName} (${columnNames.join(', ')}) select ${columnValues} where not exists(select 1 from ${tableName} where id = '${id}')`;
78
- const defaultValues = pipe(stateSchema.columns, ReadonlyRecord.filter((_, key) => key !== 'id'), ReadonlyRecord.map((column, columnName) => column.default._tag === 'None'
79
- ? column.nullable === true
80
- ? null
81
- : shouldNeverHappen(`Column ${columnName} has no default value and is not nullable`)
82
- : Schema.encodeSync(column.schema)(column.default.value)), ReadonlyRecord.map((val, columnName) => explicitDefaultValues?.[columnName] ?? val));
83
- void db.execute(insertQuery, prepareBindValues({ ...defaultValues, id }, insertQuery), [tableName], { otelContext });
84
99
  };
85
100
  //# sourceMappingURL=row-query.js.map