@livestore/livestore 0.3.0-dev.10 → 0.3.0-dev.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/SqliteDbWrapper.d.ts +54 -0
  3. package/dist/SqliteDbWrapper.d.ts.map +1 -0
  4. package/dist/SqliteDbWrapper.js +211 -0
  5. package/dist/SqliteDbWrapper.js.map +1 -0
  6. package/dist/SynchronousDatabaseWrapper.d.ts +14 -5
  7. package/dist/SynchronousDatabaseWrapper.d.ts.map +1 -1
  8. package/dist/SynchronousDatabaseWrapper.js +24 -4
  9. package/dist/SynchronousDatabaseWrapper.js.map +1 -1
  10. package/dist/effect/LiveStore.d.ts +12 -8
  11. package/dist/effect/LiveStore.d.ts.map +1 -1
  12. package/dist/effect/LiveStore.js +9 -2
  13. package/dist/effect/LiveStore.js.map +1 -1
  14. package/dist/index.d.ts +6 -7
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +4 -4
  17. package/dist/index.js.map +1 -1
  18. package/dist/live-queries/base-class.d.ts +57 -21
  19. package/dist/live-queries/base-class.d.ts.map +1 -1
  20. package/dist/live-queries/base-class.js +54 -13
  21. package/dist/live-queries/base-class.js.map +1 -1
  22. package/dist/live-queries/computed.d.ts +7 -7
  23. package/dist/live-queries/computed.d.ts.map +1 -1
  24. package/dist/live-queries/computed.js +34 -11
  25. package/dist/live-queries/computed.js.map +1 -1
  26. package/dist/live-queries/db-query.d.ts +67 -0
  27. package/dist/live-queries/db-query.d.ts.map +1 -0
  28. package/dist/live-queries/db-query.js +243 -0
  29. package/dist/live-queries/db-query.js.map +1 -0
  30. package/dist/live-queries/db-query.test.d.ts +2 -0
  31. package/dist/live-queries/db-query.test.d.ts.map +1 -0
  32. package/dist/live-queries/db-query.test.js +113 -0
  33. package/dist/live-queries/db-query.test.js.map +1 -0
  34. package/dist/live-queries/db.d.ts +12 -15
  35. package/dist/live-queries/db.d.ts.map +1 -1
  36. package/dist/live-queries/db.js +44 -25
  37. package/dist/live-queries/db.js.map +1 -1
  38. package/dist/live-queries/db.test.js +16 -14
  39. package/dist/live-queries/db.test.js.map +1 -1
  40. package/dist/live-queries/graphql.d.ts +8 -8
  41. package/dist/live-queries/graphql.d.ts.map +1 -1
  42. package/dist/live-queries/graphql.js +34 -9
  43. package/dist/live-queries/graphql.js.map +1 -1
  44. package/dist/live-queries/make-ref.d.ts +20 -0
  45. package/dist/live-queries/make-ref.d.ts.map +1 -0
  46. package/dist/live-queries/make-ref.js +33 -0
  47. package/dist/live-queries/make-ref.js.map +1 -0
  48. package/dist/reactive.d.ts +19 -13
  49. package/dist/reactive.d.ts.map +1 -1
  50. package/dist/reactive.js +22 -18
  51. package/dist/reactive.js.map +1 -1
  52. package/dist/reactive.test.js +1 -1
  53. package/dist/reactive.test.js.map +1 -1
  54. package/dist/row-query-utils.d.ts +6 -6
  55. package/dist/row-query-utils.d.ts.map +1 -1
  56. package/dist/row-query-utils.js +15 -11
  57. package/dist/row-query-utils.js.map +1 -1
  58. package/dist/store/create-store.d.ts +7 -5
  59. package/dist/store/create-store.d.ts.map +1 -1
  60. package/dist/store/create-store.js +21 -7
  61. package/dist/store/create-store.js.map +1 -1
  62. package/dist/store/devtools.d.ts +5 -4
  63. package/dist/store/devtools.d.ts.map +1 -1
  64. package/dist/store/devtools.js +45 -23
  65. package/dist/store/devtools.js.map +1 -1
  66. package/dist/store/store-types.d.ts +9 -4
  67. package/dist/store/store-types.d.ts.map +1 -1
  68. package/dist/store/store-types.js.map +1 -1
  69. package/dist/store/store.d.ts +36 -18
  70. package/dist/store/store.d.ts.map +1 -1
  71. package/dist/store/store.js +127 -75
  72. package/dist/store/store.js.map +1 -1
  73. package/dist/utils/expo.d.ts +2 -0
  74. package/dist/utils/expo.d.ts.map +1 -0
  75. package/dist/utils/expo.js +8 -0
  76. package/dist/utils/expo.js.map +1 -0
  77. package/dist/utils/function-string.d.ts +7 -0
  78. package/dist/utils/function-string.d.ts.map +1 -0
  79. package/dist/utils/function-string.js +9 -0
  80. package/dist/utils/function-string.js.map +1 -0
  81. package/dist/utils/stack-info.d.ts.map +1 -1
  82. package/dist/utils/stack-info.js +6 -1
  83. package/dist/utils/stack-info.js.map +1 -1
  84. package/dist/utils/stack-info.test.js +54 -1
  85. package/dist/utils/stack-info.test.js.map +1 -1
  86. package/dist/utils/tests/fixture.d.ts +2 -6
  87. package/dist/utils/tests/fixture.d.ts.map +1 -1
  88. package/dist/utils/tests/fixture.js +3 -5
  89. package/dist/utils/tests/fixture.js.map +1 -1
  90. package/dist/utils/tests/mod.d.ts +1 -0
  91. package/dist/utils/tests/mod.d.ts.map +1 -1
  92. package/dist/utils/tests/mod.js +1 -0
  93. package/dist/utils/tests/mod.js.map +1 -1
  94. package/package.json +5 -5
  95. package/src/{SynchronousDatabaseWrapper.ts → SqliteDbWrapper.ts} +41 -12
  96. package/src/effect/LiveStore.ts +22 -14
  97. package/src/index.ts +14 -7
  98. package/src/live-queries/__snapshots__/{db.test.ts.snap → db-query.test.ts.snap} +196 -45
  99. package/src/live-queries/base-class.ts +151 -40
  100. package/src/live-queries/computed.ts +44 -19
  101. package/src/live-queries/{db.test.ts → db-query.test.ts} +44 -32
  102. package/src/live-queries/{db.ts → db-query.ts} +96 -39
  103. package/src/live-queries/graphql.ts +46 -21
  104. package/src/live-queries/make-ref.ts +47 -0
  105. package/src/reactive.test.ts +1 -1
  106. package/src/reactive.ts +60 -37
  107. package/src/row-query-utils.ts +32 -21
  108. package/src/store/create-store.ts +55 -27
  109. package/src/store/devtools.ts +74 -29
  110. package/src/store/store-types.ts +6 -4
  111. package/src/store/store.ts +231 -121
  112. package/src/utils/function-string.ts +12 -0
  113. package/src/utils/stack-info.test.ts +58 -1
  114. package/src/utils/stack-info.ts +6 -1
  115. package/src/utils/tests/fixture.ts +2 -7
  116. package/src/utils/tests/mod.ts +1 -0
  117. package/src/global-state.ts +0 -20
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAe,QAAQ,EAA0D,MAAM,sBAAsB,CAAA;AACpH,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEnD,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAQjB,CAAA;AAED,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAQf,CAAA;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiB,CAAA;AACpC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyB,CAAA;AAE5C,MAAM,WAAW,aAAc,SAAQ,eAAe,CAAC,YAAY,CAAC;IAAE,MAAM,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC;CAAG;AAEjG,eAAO,MAAM,WAAW,4DAIrB;IACD,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC;;;6EAaiF,CAAA"}
1
+ {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAe,QAAQ,EAAc,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEnD,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAQjB,CAAA;AAED,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAQf,CAAA;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiB,CAAA;AACpC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyB,CAAA;AAE5C,MAAM,WAAW,aAAc,SAAQ,eAAe,CAAC,YAAY,CAAC;IAAE,MAAM,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC;CAAG;AAEjG,eAAO,MAAM,WAAW,kCAGrB;IACD,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;CAC3B,wHAUiF,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { provideOtel } from '@livestore/common';
2
- import { createStore, DbSchema, globalReactivityGraph, makeReactivityGraph, makeSchema } from '@livestore/livestore';
2
+ import { createStore, DbSchema, makeSchema } from '@livestore/livestore';
3
3
  import { Effect } from '@livestore/utils/effect';
4
4
  import { makeInMemoryAdapter } from '@livestore/web';
5
5
  export const todos = DbSchema.table('todos', {
@@ -14,15 +14,13 @@ export const app = DbSchema.table('app', {
14
14
  }, { isSingleton: true });
15
15
  export const tables = { todos, app };
16
16
  export const schema = makeSchema({ tables });
17
- export const makeTodoMvc = ({ otelTracer, otelContext, useGlobalReactivityGraph = true, } = {}) => Effect.gen(function* () {
18
- const reactivityGraph = useGlobalReactivityGraph ? globalReactivityGraph : makeReactivityGraph();
17
+ export const makeTodoMvc = ({ otelTracer, otelContext, } = {}) => Effect.gen(function* () {
19
18
  const store = yield* createStore({
20
19
  schema,
21
20
  storeId: 'default',
22
21
  adapter: makeInMemoryAdapter(),
23
- reactivityGraph,
24
22
  debug: { instanceId: 'test' },
25
23
  });
26
- return { store, reactivityGraph };
24
+ return store;
27
25
  }).pipe(provideOtel({ parentSpanContext: otelContext, otelTracer: otelTracer }));
28
26
  //# sourceMappingURL=fixture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACpH,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAgBpD,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CACjC,OAAO,EACP;IACE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACrD,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CACjE,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAC9C,CAAA;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAC/B,KAAK,EACL;IACE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC1D,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CAC3D,EACD,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;AACpC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;AAI5C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,WAAW,EACX,wBAAwB,GAAG,IAAI,MAK7B,EAAE,EAAE,EAAE,CACR,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,eAAe,GAAG,wBAAwB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAA;IAEhG,MAAM,KAAK,GAA8B,KAAK,CAAC,CAAC,WAAW,CAAC;QAC1D,MAAM;QACN,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,mBAAmB,EAAE;QAC9B,eAAe;QACf,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;KAC9B,CAAC,CAAA;IAEF,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;AACnC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAgBpD,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CACjC,OAAO,EACP;IACE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACrD,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CACjE,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAC9C,CAAA;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAC/B,KAAK,EACL;IACE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC1D,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CAC3D,EACD,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;AACpC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;AAI5C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,WAAW,MAIT,EAAE,EAAE,EAAE,CACR,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAA8B,KAAK,CAAC,CAAC,WAAW,CAAC;QAC1D,MAAM;QACN,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,mBAAmB,EAAE;QAC9B,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;KAC9B,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export * from './fixture.js';
2
2
  export * from './otel.js';
3
+ export * as RG from '../../reactive.js';
3
4
  //# sourceMappingURL=mod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/mod.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/mod.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export * from './fixture.js';
2
2
  export * from './otel.js';
3
+ export * as RG from '../../reactive.js';
3
4
  //# sourceMappingURL=mod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../src/utils/tests/mod.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../src/utils/tests/mod.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/livestore",
3
- "version": "0.3.0-dev.10",
3
+ "version": "0.3.0-dev.12",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -31,9 +31,9 @@
31
31
  "dependencies": {
32
32
  "@graphql-typed-document-node/core": "3.2.0",
33
33
  "@opentelemetry/api": "1.9.0",
34
- "@livestore/common": "0.3.0-dev.10",
35
- "@livestore/utils": "0.3.0-dev.10",
36
- "@livestore/db-schema": "0.3.0-dev.10"
34
+ "@livestore/common": "0.3.0-dev.12",
35
+ "@livestore/db-schema": "0.3.0-dev.12",
36
+ "@livestore/utils": "0.3.0-dev.12"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@opentelemetry/sdk-trace-base": "^1.30.1",
@@ -41,7 +41,7 @@
41
41
  "typescript": "^5.7.2",
42
42
  "vite": "^6.0.11",
43
43
  "vitest": "^2.1.4",
44
- "@livestore/web": "0.3.0-dev.10"
44
+ "@livestore/web": "0.3.0-dev.12"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "graphql": "~16.0"
@@ -5,7 +5,9 @@ import type {
5
5
  MutableDebugInfo,
6
6
  PreparedBindValues,
7
7
  PreparedStatement,
8
- SynchronousDatabase,
8
+ SqliteDb,
9
+ SqliteDbChangeset,
10
+ SqliteDbSession,
9
11
  } from '@livestore/common'
10
12
  import { BoundArray, BoundMap, sql } from '@livestore/common'
11
13
  import { isDevEnv } from '@livestore/utils'
@@ -21,12 +23,17 @@ export const emptyDebugInfo = (): DebugInfo => ({
21
23
  events: new BoundArray(1000),
22
24
  })
23
25
 
24
- export class SynchronousDatabaseWrapper {
26
+ /**
27
+ * This class is mostly adding result caching around a SqliteDb which is used to speed up
28
+ * SQLite queries when used through the reactivity graph.
29
+ */
30
+ export class SqliteDbWrapper implements SqliteDb {
31
+ _tag = 'SqliteDb' as const
25
32
  // TODO: how many unique active statements are expected?
26
33
  private cachedStmts = new BoundMap<string, PreparedStatement>(200)
27
34
  private tablesUsedCache = new BoundMap<string, Set<string>>(200)
28
35
  private resultCache = new QueryCache()
29
- private db: SynchronousDatabase
36
+ private db: SqliteDb
30
37
  private otelTracer: otel.Tracer
31
38
  private otelRootSpanContext: otel.Context
32
39
  private tablesUsedStmt
@@ -36,7 +43,7 @@ export class SynchronousDatabaseWrapper {
36
43
  db,
37
44
  otel,
38
45
  }: {
39
- db: SynchronousDatabase
46
+ db: SqliteDb
40
47
  otel: {
41
48
  tracer: otel.Tracer
42
49
  rootSpanContext: otel.Context
@@ -54,6 +61,25 @@ export class SynchronousDatabaseWrapper {
54
61
 
55
62
  configureSQLite(this)
56
63
  }
64
+ metadata: any
65
+ prepare(queryStr: string): PreparedStatement {
66
+ return this.db.prepare(queryStr)
67
+ }
68
+ import(data: Uint8Array<ArrayBufferLike> | SqliteDb<any, any>) {
69
+ return this.db.import(data)
70
+ }
71
+ close(): void {
72
+ return this.db.close()
73
+ }
74
+ destroy(): void {
75
+ return this.db.destroy()
76
+ }
77
+ session(): SqliteDbSession {
78
+ return this.db.session()
79
+ }
80
+ makeChangeset(data: Uint8Array): SqliteDbChangeset {
81
+ return this.db.makeChangeset(data)
82
+ }
57
83
 
58
84
  txn<TRes>(callback: () => TRes): TRes {
59
85
  this.execute(sql`begin transaction;`)
@@ -121,9 +147,13 @@ export class SynchronousDatabaseWrapper {
121
147
 
122
148
  execute(
123
149
  queryStr: string,
124
- bindValues?: PreparedBindValues,
125
- writeTables?: ReadonlySet<string>,
126
- options?: { hasNoEffects?: boolean; otelContext?: otel.Context },
150
+ bindValues?: PreparedBindValues | undefined,
151
+ options?: {
152
+ hasNoEffects?: boolean
153
+ otelContext?: otel.Context
154
+ writeTables?: ReadonlySet<string>
155
+ onRowsChanged?: (rowsChanged: number) => void
156
+ },
127
157
  ): { durationMs: number } {
128
158
  // console.debug('in-memory-db:execute', query, bindValues)
129
159
 
@@ -144,7 +174,7 @@ export class SynchronousDatabaseWrapper {
144
174
  if (options?.hasNoEffects !== true && !this.resultCache.ignoreQuery(queryStr)) {
145
175
  // TODO use write tables instead
146
176
  // check what queries actually end up here.
147
- this.resultCache.invalidate(writeTables ?? this.getTablesUsed(queryStr))
177
+ this.resultCache.invalidate(options?.writeTables ?? this.getTablesUsed(queryStr))
148
178
  }
149
179
 
150
180
  span.end()
@@ -172,14 +202,14 @@ export class SynchronousDatabaseWrapper {
172
202
 
173
203
  select<T = any>(
174
204
  queryStr: string,
205
+ bindValues?: PreparedBindValues | undefined,
175
206
  options?: {
176
207
  queriedTables?: ReadonlySet<string>
177
- bindValues?: PreparedBindValues
178
208
  skipCache?: boolean
179
209
  otelContext?: otel.Context
180
210
  },
181
211
  ): ReadonlyArray<T> {
182
- const { queriedTables, bindValues, skipCache = false, otelContext } = options ?? {}
212
+ const { queriedTables, skipCache = false, otelContext } = options ?? {}
183
213
 
184
214
  // console.debug('in-memory-db:select', query, bindValues)
185
215
 
@@ -252,13 +282,12 @@ export class SynchronousDatabaseWrapper {
252
282
  }
253
283
 
254
284
  /** Set up SQLite performance; hasn't been super carefully optimized yet. */
255
- const configureSQLite = (db: SynchronousDatabaseWrapper) => {
285
+ const configureSQLite = (db: SqliteDbWrapper) => {
256
286
  db.execute(
257
287
  // TODO: revisit these tuning parameters for max performance
258
288
  sql`
259
289
  PRAGMA page_size=32768;
260
290
  PRAGMA cache_size=10000;
261
- PRAGMA journal_mode='MEMORY'; -- we don't flush to disk before committing a write
262
291
  PRAGMA synchronous='OFF';
263
292
  PRAGMA temp_store='MEMORY';
264
293
  PRAGMA foreign_keys='ON'; -- we want foreign key constraints to be enforced
@@ -5,20 +5,26 @@ import { Context, Deferred, Duration, Effect, Layer, pipe } from '@livestore/uti
5
5
  import type * as otel from '@opentelemetry/api'
6
6
  import type { GraphQLSchema } from 'graphql'
7
7
 
8
+ import type { SqliteDbWrapper } from '../SqliteDbWrapper.js'
8
9
  import { createStore } from '../store/create-store.js'
9
10
  import type { Store } from '../store/store.js'
10
11
  import type { BaseGraphQLContext, LiveStoreContextRunning as LiveStoreContextRunning_ } from '../store/store-types.js'
11
- import type { SynchronousDatabaseWrapper } from '../SynchronousDatabaseWrapper.js'
12
12
 
13
- export type LiveStoreContextRunning = LiveStoreContextRunning_
14
- export const LiveStoreContextRunning = Context.GenericTag<LiveStoreContextRunning>(
15
- '@livestore/livestore/effect/LiveStoreContextRunning',
16
- )
13
+ export class LiveStoreContextRunning extends Context.Tag('@livestore/livestore/effect/LiveStoreContextRunning')<
14
+ LiveStoreContextRunning,
15
+ LiveStoreContextRunning_
16
+ >() {
17
+ static fromDeferred = Effect.gen(function* () {
18
+ const deferred = yield* DeferredStoreContext
19
+ const ctx = yield* deferred
20
+ return Layer.succeed(LiveStoreContextRunning, ctx)
21
+ }).pipe(Layer.unwrapScoped)
22
+ }
17
23
 
18
- export type DeferredStoreContext = Deferred.Deferred<LiveStoreContextRunning, UnexpectedError>
19
- export const DeferredStoreContext = Context.GenericTag<DeferredStoreContext>(
20
- '@livestore/livestore/effect/DeferredStoreContext',
21
- )
24
+ export class DeferredStoreContext extends Context.Tag('@livestore/livestore/effect/DeferredStoreContext')<
25
+ DeferredStoreContext,
26
+ Deferred.Deferred<LiveStoreContextRunning['Type'], UnexpectedError>
27
+ >() {}
22
28
 
23
29
  export type LiveStoreContextProps<GraphQLContext extends BaseGraphQLContext> = {
24
30
  schema: LiveStoreSchema
@@ -33,9 +39,11 @@ export type LiveStoreContextProps<GraphQLContext extends BaseGraphQLContext> = {
33
39
  storeId?: string
34
40
  graphQLOptions?: {
35
41
  schema: Effect.Effect<GraphQLSchema, never, OtelTracer.OtelTracer>
36
- makeContext: (db: SynchronousDatabaseWrapper, tracer: otel.Tracer, sessionId: string) => GraphQLContext
42
+ makeContext: (db: SqliteDbWrapper, tracer: otel.Tracer, sessionId: string) => GraphQLContext
37
43
  }
38
- boot?: (store: Store<GraphQLContext, LiveStoreSchema>) => Effect.Effect<void, unknown, OtelTracer.OtelTracer>
44
+ boot?: (
45
+ store: Store<GraphQLContext, LiveStoreSchema>,
46
+ ) => Effect.Effect<void, unknown, OtelTracer.OtelTracer | LiveStoreContextRunning>
39
47
  adapter: Adapter
40
48
  disableDevtools?: boolean
41
49
  onBootStatus?: (status: BootStatus) => void
@@ -52,7 +60,7 @@ export const LiveStoreContextLayer = <GraphQLContext extends BaseGraphQLContext>
52
60
 
53
61
  export const LiveStoreContextDeferred = Layer.effect(
54
62
  DeferredStoreContext,
55
- Deferred.make<LiveStoreContextRunning, UnexpectedError>(),
63
+ Deferred.make<LiveStoreContextRunning['Type'], UnexpectedError>(),
56
64
  )
57
65
 
58
66
  export const makeLiveStoreContext = <GraphQLContext extends BaseGraphQLContext>({
@@ -65,7 +73,7 @@ export const makeLiveStoreContext = <GraphQLContext extends BaseGraphQLContext>(
65
73
  onBootStatus,
66
74
  batchUpdates,
67
75
  }: LiveStoreContextProps<GraphQLContext>): Effect.Effect<
68
- LiveStoreContextRunning,
76
+ LiveStoreContextRunning['Type'],
69
77
  UnexpectedError | Cause.TimeoutException,
70
78
  DeferredStoreContext | Scope.Scope | OtelTracer.OtelTracer
71
79
  > =>
@@ -92,7 +100,7 @@ export const makeLiveStoreContext = <GraphQLContext extends BaseGraphQLContext>(
92
100
  }
93
101
  globalThis.__debugLiveStore[storeId] = store
94
102
 
95
- return { stage: 'running', store } satisfies LiveStoreContextRunning
103
+ return { stage: 'running', store } satisfies LiveStoreContextRunning['Type']
96
104
  }),
97
105
  Effect.tapErrorCause((cause) => Effect.flatMap(DeferredStoreContext, (def) => Deferred.failCause(def, cause))),
98
106
  Effect.tap((storeCtx) => Effect.flatMap(DeferredStoreContext, (def) => Deferred.succeed(def, storeCtx))),
package/src/index.ts CHANGED
@@ -8,10 +8,15 @@ export type {
8
8
  OtelOptions,
9
9
  } from './store/store-types.js'
10
10
 
11
- export type { LiveStoreContextRunning } from './effect/LiveStore.js'
12
- export { StoreAbort, StoreInterrupted, type LiveStoreContext, type ShutdownDeferred } from './store/store-types.js'
11
+ export {
12
+ StoreAbort,
13
+ StoreInterrupted,
14
+ type LiveStoreContext,
15
+ type ShutdownDeferred,
16
+ type LiveStoreContextRunning,
17
+ } from './store/store-types.js'
13
18
 
14
- export { SynchronousDatabaseWrapper, emptyDebugInfo } from './SynchronousDatabaseWrapper.js'
19
+ export { SqliteDbWrapper, emptyDebugInfo } from './SqliteDbWrapper.js'
15
20
 
16
21
  export type {
17
22
  GetAtom,
@@ -26,8 +31,9 @@ export type {
26
31
  Effect,
27
32
  } from './reactive.js'
28
33
  export { LiveStoreComputedQuery, computed } from './live-queries/computed.js'
29
- export { LiveStoreDbQuery, queryDb } from './live-queries/db.js'
34
+ export { LiveStoreDbQuery, queryDb } from './live-queries/db-query.js'
30
35
  export { LiveStoreGraphQLQuery, queryGraphQL } from './live-queries/graphql.js'
36
+ export { makeRef, type LiveQueryRef } from './live-queries/make-ref.js'
31
37
  export {
32
38
  type GetAtomResult,
33
39
  type ReactivityGraph,
@@ -35,10 +41,11 @@ export {
35
41
  type LiveQuery,
36
42
  type GetResult,
37
43
  type LiveQueryAny,
44
+ type LiveQueryDef,
45
+ type LiveQueryDefAny,
46
+ type RcRef,
38
47
  } from './live-queries/base-class.js'
39
48
 
40
- export { globalReactivityGraph } from './global-state.js'
41
-
42
49
  export { deriveColQuery } from './row-query-utils.js'
43
50
 
44
51
  export * from '@livestore/common/schema'
@@ -46,7 +53,7 @@ export {
46
53
  sql,
47
54
  SessionIdSymbol,
48
55
  type BootStatus,
49
- type SynchronousDatabase,
56
+ type SqliteDb,
50
57
  type DebugInfo,
51
58
  type MutableDebugInfo,
52
59
  prepareBindValues,