@livestore/livestore 0.2.0 → 0.3.0-dev.10

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 (100) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/SynchronousDatabaseWrapper.d.ts +6 -1
  3. package/dist/SynchronousDatabaseWrapper.d.ts.map +1 -1
  4. package/dist/SynchronousDatabaseWrapper.js +14 -2
  5. package/dist/SynchronousDatabaseWrapper.js.map +1 -1
  6. package/dist/__tests__/fixture.d.ts +252 -0
  7. package/dist/__tests__/fixture.d.ts.map +1 -0
  8. package/dist/__tests__/fixture.js +18 -0
  9. package/dist/__tests__/fixture.js.map +1 -0
  10. package/dist/effect/LiveStore.d.ts +6 -6
  11. package/dist/effect/LiveStore.d.ts.map +1 -1
  12. package/dist/effect/LiveStore.js +5 -12
  13. package/dist/effect/LiveStore.js.map +1 -1
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/live-queries/db.d.ts.map +1 -1
  18. package/dist/live-queries/db.js +28 -23
  19. package/dist/live-queries/db.js.map +1 -1
  20. package/dist/live-queries/db.test.js +2 -1
  21. package/dist/live-queries/db.test.js.map +1 -1
  22. package/dist/row-query-utils.js +1 -1
  23. package/dist/row-query-utils.js.map +1 -1
  24. package/dist/store/create-store.d.ts +12 -10
  25. package/dist/store/create-store.d.ts.map +1 -1
  26. package/dist/store/create-store.js +22 -28
  27. package/dist/store/create-store.js.map +1 -1
  28. package/dist/store/devtools.d.ts +1 -1
  29. package/dist/store/devtools.d.ts.map +1 -1
  30. package/dist/store/devtools.js +41 -19
  31. package/dist/store/devtools.js.map +1 -1
  32. package/dist/store/store-types.d.ts +9 -14
  33. package/dist/store/store-types.d.ts.map +1 -1
  34. package/dist/store/store.d.ts +29 -28
  35. package/dist/store/store.d.ts.map +1 -1
  36. package/dist/store/store.js +147 -160
  37. package/dist/store/store.js.map +1 -1
  38. package/dist/store/store.test.d.ts +2 -0
  39. package/dist/store/store.test.d.ts.map +1 -0
  40. package/dist/store/store.test.js +27 -0
  41. package/dist/store/store.test.js.map +1 -0
  42. package/dist/utils/dev.d.ts.map +1 -1
  43. package/dist/utils/dev.js +3 -2
  44. package/dist/utils/dev.js.map +1 -1
  45. package/dist/utils/tests/fixture.d.ts +1 -1
  46. package/dist/utils/tests/fixture.d.ts.map +1 -1
  47. package/dist/utils/tests/fixture.js +4 -8
  48. package/dist/utils/tests/fixture.js.map +1 -1
  49. package/dist/utils/tests/otel.d.ts +60 -1
  50. package/dist/utils/tests/otel.d.ts.map +1 -1
  51. package/dist/utils/tests/otel.js +65 -4
  52. package/dist/utils/tests/otel.js.map +1 -1
  53. package/package.json +12 -12
  54. package/src/SynchronousDatabaseWrapper.ts +18 -2
  55. package/src/ambient.d.ts +1 -1
  56. package/src/effect/LiveStore.ts +11 -20
  57. package/src/index.ts +1 -1
  58. package/src/live-queries/__snapshots__/db.test.ts.snap +42 -45
  59. package/src/live-queries/db.test.ts +2 -1
  60. package/src/live-queries/db.ts +28 -23
  61. package/src/row-query-utils.ts +1 -1
  62. package/src/store/create-store.ts +115 -119
  63. package/src/store/devtools.ts +48 -22
  64. package/src/store/store-types.ts +14 -14
  65. package/src/store/store.ts +188 -224
  66. package/src/utils/dev.ts +4 -2
  67. package/src/utils/tests/fixture.ts +4 -9
  68. package/src/utils/tests/otel.ts +71 -5
  69. package/dist/live-queries/sql.d.ts +0 -62
  70. package/dist/live-queries/sql.d.ts.map +0 -1
  71. package/dist/live-queries/sql.js +0 -175
  72. package/dist/live-queries/sql.js.map +0 -1
  73. package/dist/live-queries/sql.test.d.ts +0 -2
  74. package/dist/live-queries/sql.test.d.ts.map +0 -1
  75. package/dist/live-queries/sql.test.js +0 -285
  76. package/dist/live-queries/sql.test.js.map +0 -1
  77. package/dist/reactiveQueries/base-class.d.ts +0 -64
  78. package/dist/reactiveQueries/base-class.d.ts.map +0 -1
  79. package/dist/reactiveQueries/base-class.js +0 -31
  80. package/dist/reactiveQueries/base-class.js.map +0 -1
  81. package/dist/reactiveQueries/computed.d.ts +0 -26
  82. package/dist/reactiveQueries/computed.d.ts.map +0 -1
  83. package/dist/reactiveQueries/computed.js +0 -38
  84. package/dist/reactiveQueries/computed.js.map +0 -1
  85. package/dist/reactiveQueries/graphql.d.ts +0 -49
  86. package/dist/reactiveQueries/graphql.d.ts.map +0 -1
  87. package/dist/reactiveQueries/graphql.js +0 -122
  88. package/dist/reactiveQueries/graphql.js.map +0 -1
  89. package/dist/reactiveQueries/sql.d.ts +0 -62
  90. package/dist/reactiveQueries/sql.d.ts.map +0 -1
  91. package/dist/reactiveQueries/sql.js +0 -175
  92. package/dist/reactiveQueries/sql.js.map +0 -1
  93. package/dist/reactiveQueries/sql.test.d.ts +0 -2
  94. package/dist/reactiveQueries/sql.test.d.ts.map +0 -1
  95. package/dist/reactiveQueries/sql.test.js +0 -285
  96. package/dist/reactiveQueries/sql.test.js.map +0 -1
  97. package/dist/row-query.d.ts +0 -16
  98. package/dist/row-query.d.ts.map +0 -1
  99. package/dist/row-query.js +0 -30
  100. package/dist/row-query.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/utils/dev.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY,SACjB,UAAU,GAAG,IAAI,GAAG,MAAM,YACtB,MAAM,4BAUjB,CAAA;AAED,eAAO,MAAM,WAAW,SAAU,MAAM,YAAY,MAAM,SAQzD,CAAA;AAED,eAAO,MAAM,gBAAgB,YAI5B,CAAA"}
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/utils/dev.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,SACjB,UAAU,GAAG,IAAI,GAAG,MAAM,YACtB,MAAM,4BAUjB,CAAA;AAED,eAAO,MAAM,WAAW,SAAU,MAAM,YAAY,MAAM,SAQzD,CAAA;AAED,eAAO,MAAM,gBAAgB,YAI5B,CAAA"}
package/dist/utils/dev.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { isDevEnv } from '@livestore/utils';
1
2
  /* eslint-disable unicorn/prefer-global-this */
2
3
  export const downloadBlob = (data, fileName, mimeType = 'application/octet-stream') => {
3
4
  const blob = data instanceof Blob ? data : new Blob([data], { type: mimeType });
@@ -15,8 +16,8 @@ export const downloadURL = (data, fileName) => {
15
16
  a.remove();
16
17
  };
17
18
  export const exposeDebugUtils = () => {
18
- if (import.meta.env.DEV) {
19
- globalThis.__debugDownloadBlob = downloadBlob;
19
+ if (isDevEnv()) {
20
+ globalThis.__debugLiveStoreUtils = { downloadBlob };
20
21
  }
21
22
  };
22
23
  //# sourceMappingURL=dev.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/utils/dev.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAAgC,EAChC,QAAgB,EAChB,QAAQ,GAAG,0BAA0B,EACrC,EAAE;IACF,MAAM,IAAI,GAAG,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IAE/E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAE5C,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE1B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;AACzD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAE,EAAE;IAC5D,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;IACb,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IACxB,CAAC,CAAC,KAAK,EAAE,CAAA;IACT,CAAC,CAAC,MAAM,EAAE,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACxB,UAAU,CAAC,mBAAmB,GAAG,YAAY,CAAA;IAC/C,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/utils/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAAgC,EAChC,QAAgB,EAChB,QAAQ,GAAG,0BAA0B,EACrC,EAAE;IACF,MAAM,IAAI,GAAG,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IAE/E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAE5C,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE1B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;AACzD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAE,EAAE;IAC5D,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;IACb,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IACxB,CAAC,CAAC,KAAK,EAAE,CAAA;IACT,CAAC,CAAC,MAAM,EAAE,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,IAAI,QAAQ,EAAE,EAAE,CAAC;QACf,UAAU,CAAC,qBAAqB,GAAG,EAAE,YAAY,EAAE,CAAA;IACrD,CAAC;AACH,CAAC,CAAA"}
@@ -291,5 +291,5 @@ export declare const makeTodoMvc: ({ otelTracer, otelContext, useGlobalReactivit
291
291
  }) => Effect.Effect<{
292
292
  store: Store<any, FixtureSchema>;
293
293
  reactivityGraph: import("@livestore/livestore").ReactivityGraph;
294
- }, import("@livestore/common/dist/adapter-types.js").UnexpectedError, import("effect/Scope").Scope>;
294
+ }, import("@livestore/common").UnexpectedError, import("effect/Scope").Scope>;
295
295
  //# sourceMappingURL=fixture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AAAA,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,EAAY,MAAM,yBAAyB,CAAA;AAE1D,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;;;mGAmBG,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,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,5 +1,6 @@
1
+ import { provideOtel } from '@livestore/common';
1
2
  import { createStore, DbSchema, globalReactivityGraph, makeReactivityGraph, makeSchema } from '@livestore/livestore';
2
- import { Effect, FiberSet } from '@livestore/utils/effect';
3
+ import { Effect } from '@livestore/utils/effect';
3
4
  import { makeInMemoryAdapter } from '@livestore/web';
4
5
  export const todos = DbSchema.table('todos', {
5
6
  id: DbSchema.text({ primaryKey: true }),
@@ -15,18 +16,13 @@ export const tables = { todos, app };
15
16
  export const schema = makeSchema({ tables });
16
17
  export const makeTodoMvc = ({ otelTracer, otelContext, useGlobalReactivityGraph = true, } = {}) => Effect.gen(function* () {
17
18
  const reactivityGraph = useGlobalReactivityGraph ? globalReactivityGraph : makeReactivityGraph();
18
- const fiberSet = yield* FiberSet.make();
19
19
  const store = yield* createStore({
20
20
  schema,
21
21
  storeId: 'default',
22
22
  adapter: makeInMemoryAdapter(),
23
23
  reactivityGraph,
24
- otelOptions: {
25
- tracer: otelTracer,
26
- rootSpanContext: otelContext,
27
- },
28
- fiberSet,
24
+ debug: { instanceId: 'test' },
29
25
  });
30
26
  return { store, reactivityGraph };
31
- });
27
+ }).pipe(provideOtel({ parentSpanContext: otelContext, otelTracer: otelTracer }));
32
28
  //# sourceMappingURL=fixture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACpH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAC1D,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,QAAQ,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IAEvC,MAAM,KAAK,GAA8B,KAAK,CAAC,CAAC,WAAW,CAAC;QAC1D,MAAM;QACN,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,mBAAmB,EAAE;QAC9B,eAAe;QACf,WAAW,EAAE;YACX,MAAM,EAAE,UAAU;YAClB,eAAe,EAAE,WAAW;SAC7B;QACD,QAAQ;KACT,CAAC,CAAA;IAEF,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;AACnC,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,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,10 +1,69 @@
1
1
  import type { Attributes } from '@opentelemetry/api';
2
- import type { InMemorySpanExporter } from '@opentelemetry/sdk-trace-base';
2
+ import type { InMemorySpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';
3
3
  type SimplifiedNestedSpan = {
4
4
  _name: string;
5
5
  attributes: any;
6
6
  children: SimplifiedNestedSpan[];
7
7
  };
8
8
  export declare const getSimplifiedRootSpan: (exporter: InMemorySpanExporter, mapAttributes?: (attributes: Attributes) => Attributes) => SimplifiedNestedSpan;
9
+ export declare const toTraceFile: (spans: ReadableSpan[]) => {
10
+ batches: {
11
+ resource: {
12
+ attributes: {
13
+ key: string;
14
+ value: {
15
+ stringValue: string;
16
+ };
17
+ }[];
18
+ droppedAttributesCount: number;
19
+ };
20
+ instrumentationLibrarySpans: {
21
+ spans: {
22
+ name: string;
23
+ kind: string;
24
+ startTimeUnixNano: string;
25
+ endTimeUnixNano: string;
26
+ attributes: {
27
+ key: string;
28
+ value: {
29
+ stringValue: string;
30
+ intValue?: undefined;
31
+ doubleValue?: undefined;
32
+ boolValue?: undefined;
33
+ } | {
34
+ intValue: number;
35
+ stringValue?: undefined;
36
+ doubleValue?: undefined;
37
+ boolValue?: undefined;
38
+ } | {
39
+ doubleValue: number;
40
+ stringValue?: undefined;
41
+ intValue?: undefined;
42
+ boolValue?: undefined;
43
+ } | {
44
+ boolValue: boolean;
45
+ stringValue?: undefined;
46
+ intValue?: undefined;
47
+ doubleValue?: undefined;
48
+ };
49
+ }[];
50
+ droppedAttributesCount: number;
51
+ droppedEventsCount: number;
52
+ droppedLinksCount: number;
53
+ status: {
54
+ code: import("@opentelemetry/api").SpanStatusCode;
55
+ message: string;
56
+ };
57
+ parentSpanId?: string | undefined;
58
+ traceId: string;
59
+ spanId: string;
60
+ }[];
61
+ instrumentationLibrary: {
62
+ name: string;
63
+ version: string;
64
+ };
65
+ }[];
66
+ }[];
67
+ };
9
68
  export {};
10
69
  //# sourceMappingURL=otel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/otel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAgB,MAAM,+BAA+B,CAAA;AAEvF,KAAK,oBAAoB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAAA;AAEhG,eAAO,MAAM,qBAAqB,aACtB,oBAAoB,kBACd,CAAC,UAAU,EAAE,UAAU,KAAK,UAAU,KACrD,oBAgCF,CAAA"}
1
+ {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/otel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACvF,KAAK,oBAAoB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAAA;AAEhG,eAAO,MAAM,qBAAqB,aACtB,oBAAoB,kBACd,CAAC,UAAU,EAAE,UAAU,KAAK,UAAU,KACrD,oBAwCF,CAAA;AAqBD,eAAO,MAAM,WAAW,UAAW,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDhD,CAAA"}
@@ -9,22 +9,26 @@ export const getSimplifiedRootSpan = (exporter, mapAttributes) => {
9
9
  parentSpan.children.push(nestedSpan);
10
10
  }
11
11
  });
12
- const rootSpan = spansMap.get(spans.find((_) => _.name === 'test').spanContext().spanId);
12
+ const rootSpan = spansMap.get(spans.find((_) => _.name === 'createStore').spanContext().spanId);
13
13
  const simplifySpanRec = (span) => omitEmpty({
14
14
  _name: span.span.name,
15
15
  attributes: mapAttributesfn(span.span.attributes),
16
16
  children: span.children
17
- .filter((_) => _.span.name !== 'createStore')
17
+ .filter((_) => _.span.name !== 'createStore:makeAdapter')
18
18
  // .sort((a, b) => compareHrTime(a.span.startTime, b.span.startTime))
19
19
  .map(simplifySpanRec),
20
20
  });
21
+ // console.log('rootSpan', rootSpan.span)
21
22
  // console.dir(
22
23
  // spans.map((_) => [_.spanContext().spanId, _.name, _.attributes, _.parentSpanId]),
23
24
  // { depth: 10 },
24
25
  // )
25
- return simplifySpanRec(rootSpan);
26
+ const simplifiedRootSpan = simplifySpanRec(rootSpan);
27
+ // console.log('simplifiedRootSpan', simplifiedRootSpan)
28
+ // writeFileSync('tmp/trace.json', JSON.stringify(toTraceFile(spans), null, 2))
29
+ return simplifiedRootSpan;
26
30
  };
27
- // const compareHrTime = (a: [number, number], b: [number, number]) => {
31
+ // const compareHrTime = (a: [number, numndber], b: [number, number]) => {
28
32
  // if (a[0] !== b[0]) return a[0] - b[0]
29
33
  // return a[1] - b[1]
30
34
  // }
@@ -39,4 +43,61 @@ const omitEmpty = (obj) => {
39
43
  }
40
44
  return result;
41
45
  };
46
+ export const toTraceFile = (spans) => {
47
+ const hrTimeToBigInt = (hrTime) => (BigInt(hrTime[0]) * BigInt(1e9) + BigInt(hrTime[1])).toString();
48
+ return {
49
+ batches: [
50
+ {
51
+ resource: {
52
+ attributes: [
53
+ {
54
+ key: 'service.name',
55
+ value: {
56
+ stringValue: 'test',
57
+ },
58
+ },
59
+ ],
60
+ droppedAttributesCount: 0,
61
+ },
62
+ instrumentationLibrarySpans: [
63
+ {
64
+ spans: spans.map((span) => ({
65
+ traceId: span.spanContext().traceId,
66
+ spanId: span.spanContext().spanId,
67
+ ...(span.parentSpanId ? { parentSpanId: span.parentSpanId } : {}),
68
+ // traceState: span.spanContext().traceState ?? '',
69
+ name: span.name,
70
+ kind: 'SPAN_KIND_INTERNAL',
71
+ startTimeUnixNano: hrTimeToBigInt(span.startTime),
72
+ endTimeUnixNano: hrTimeToBigInt(span.endTime),
73
+ attributes: Object.entries(span.attributes).map(([key, value]) => ({
74
+ key,
75
+ value: typeof value === 'string'
76
+ ? { stringValue: value }
77
+ : typeof value === 'number'
78
+ ? Number.isInteger(value)
79
+ ? { intValue: value }
80
+ : { doubleValue: value }
81
+ : typeof value === 'boolean'
82
+ ? { boolValue: value }
83
+ : { stringValue: JSON.stringify(value) },
84
+ })),
85
+ droppedAttributesCount: span.droppedAttributesCount ?? 0,
86
+ droppedEventsCount: span.droppedEventsCount ?? 0,
87
+ droppedLinksCount: span.droppedLinksCount ?? 0,
88
+ status: {
89
+ code: span.status.code,
90
+ message: span.status.message ?? '',
91
+ },
92
+ })),
93
+ instrumentationLibrary: {
94
+ name: 'livestore',
95
+ version: '',
96
+ },
97
+ },
98
+ ],
99
+ },
100
+ ],
101
+ };
102
+ };
42
103
  //# sourceMappingURL=otel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"otel.js","sourceRoot":"","sources":["../../../src/utils/tests/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAMlD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAA8B,EAC9B,aAAsD,EAChC,EAAE;IACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAA;IACzC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAqB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAEtH,MAAM,eAAe,GAAG,aAAa,IAAI,QAAQ,CAAA;IAEjD,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACxG,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACtC,CAAC;IACH,CAAC,CAAC,CAAA;IAGF,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC,WAAW,EAAE,CAAC,MAAM,CAAE,CAAA;IAE1F,MAAM,eAAe,GAAG,CAAC,IAAgB,EAAwB,EAAE,CACjE,SAAS,CAAC;QACR,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;QACrB,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QACjD,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;YAC7C,qEAAqE;aACpE,GAAG,CAAC,eAAe,CAAC;KACxB,CAAC,CAAA;IAEJ,eAAe;IACf,sFAAsF;IACtF,mBAAmB;IACnB,IAAI;IAEJ,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAA;AAClC,CAAC,CAAA;AAED,wEAAwE;AACxE,0CAA0C;AAC1C,uBAAuB;AACvB,IAAI;AAEJ,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,EAAE;IAC7B,MAAM,MAAM,GAAQ,EAAE,CAAA;IACtB,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IACE,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;YACtB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
1
+ {"version":3,"file":"otel.js","sourceRoot":"","sources":["../../../src/utils/tests/otel.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/livestore",
3
- "version": "0.2.0",
3
+ "version": "0.3.0-dev.10",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -29,22 +29,22 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@graphql-typed-document-node/core": "^3.2.0",
33
- "@opentelemetry/api": "^1.9.0",
34
- "@livestore/common": "0.2.0",
35
- "@livestore/utils": "0.2.0",
36
- "@livestore/db-schema": "0.2.0"
32
+ "@graphql-typed-document-node/core": "3.2.0",
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"
37
37
  },
38
38
  "devDependencies": {
39
- "@opentelemetry/sdk-trace-base": "1.27.0",
40
- "jsdom": "^25.0.1",
41
- "typescript": "5.5.4",
42
- "vite": "5.4.10",
39
+ "@opentelemetry/sdk-trace-base": "^1.30.1",
40
+ "jsdom": "^26.0.0",
41
+ "typescript": "^5.7.2",
42
+ "vite": "^6.0.11",
43
43
  "vitest": "^2.1.4",
44
- "@livestore/web": "0.2.0"
44
+ "@livestore/web": "0.3.0-dev.10"
45
45
  },
46
46
  "peerDependencies": {
47
- "graphql": "16.x"
47
+ "graphql": "~16.0"
48
48
  },
49
49
  "peerDependenciesMeta": {
50
50
  "graphql": {
@@ -8,6 +8,7 @@ import type {
8
8
  SynchronousDatabase,
9
9
  } from '@livestore/common'
10
10
  import { BoundArray, BoundMap, sql } from '@livestore/common'
11
+ import { isDevEnv } from '@livestore/utils'
11
12
  import type * as otel from '@opentelemetry/api'
12
13
 
13
14
  import QueryCache from './QueryCache.js'
@@ -75,6 +76,21 @@ export class SynchronousDatabaseWrapper {
75
76
  return result
76
77
  }
77
78
 
79
+ withChangeset<TRes>(callback: () => TRes): { result: TRes; changeset: Uint8Array | undefined } {
80
+ const session = this.db.session()
81
+ const result = callback()
82
+ const changeset = session.changeset()
83
+
84
+ session.finish()
85
+
86
+ return { result, changeset }
87
+ }
88
+
89
+ rollback(changeset: Uint8Array) {
90
+ const invertedChangeset = this.db.makeChangeset(changeset).invert()
91
+ invertedChangeset.apply()
92
+ }
93
+
78
94
  getTablesUsed(query: string) {
79
95
  // It seems that SQLite doesn't properly handle `DELETE FROM SOME_TABLE` queries without a WHERE clause
80
96
  // So we need to handle these queries separately
@@ -138,7 +154,7 @@ export class SynchronousDatabaseWrapper {
138
154
  this.debugInfo.queryFrameDuration += durationMs
139
155
  this.debugInfo.queryFrameCount++
140
156
 
141
- if (durationMs > 5 && import.meta.env.DEV) {
157
+ if (durationMs > 5 && isDevEnv()) {
142
158
  this.debugInfo.slowQueries.push({
143
159
  queryStr,
144
160
  bindValues,
@@ -206,7 +222,7 @@ export class SynchronousDatabaseWrapper {
206
222
  this.debugInfo.queryFrameCount++
207
223
 
208
224
  // TODO also enable in non-dev mode
209
- if (durationMs > 5 && import.meta.env.DEV) {
225
+ if (durationMs > 5 && isDevEnv()) {
210
226
  this.debugInfo.slowQueries.push({
211
227
  queryStr,
212
228
  bindValues,
package/src/ambient.d.ts CHANGED
@@ -5,7 +5,7 @@ interface Window {
5
5
  }
6
6
 
7
7
  var __debugLiveStore: any
8
- var __debugDownloadBlob: any
8
+ var __debugLiveStoreUtils: any
9
9
 
10
10
  interface ImportMeta {
11
11
  readonly env: ImportMetaEnv
@@ -1,8 +1,8 @@
1
1
  import type { Adapter, BootStatus, UnexpectedError } from '@livestore/common'
2
2
  import type { LiveStoreSchema } from '@livestore/common/schema'
3
- import type { Cause, Scope } from '@livestore/utils/effect'
4
- import { Context, Deferred, Duration, Effect, FiberSet, Layer, OtelTracer, pipe } from '@livestore/utils/effect'
5
- import * as otel from '@opentelemetry/api'
3
+ import type { Cause, OtelTracer, Scope } from '@livestore/utils/effect'
4
+ import { Context, Deferred, Duration, Effect, Layer, pipe } from '@livestore/utils/effect'
5
+ import type * as otel from '@opentelemetry/api'
6
6
  import type { GraphQLSchema } from 'graphql'
7
7
 
8
8
  import { createStore } from '../store/create-store.js'
@@ -32,10 +32,10 @@ export type LiveStoreContextProps<GraphQLContext extends BaseGraphQLContext> = {
32
32
  */
33
33
  storeId?: string
34
34
  graphQLOptions?: {
35
- schema: Effect.Effect<GraphQLSchema, never, otel.Tracer>
35
+ schema: Effect.Effect<GraphQLSchema, never, OtelTracer.OtelTracer>
36
36
  makeContext: (db: SynchronousDatabaseWrapper, tracer: otel.Tracer, sessionId: string) => GraphQLContext
37
37
  }
38
- boot?: (store: Store<GraphQLContext, LiveStoreSchema>) => Effect.Effect<void, unknown, otel.Tracer>
38
+ boot?: (store: Store<GraphQLContext, LiveStoreSchema>) => Effect.Effect<void, unknown, OtelTracer.OtelTracer>
39
39
  adapter: Adapter
40
40
  disableDevtools?: boolean
41
41
  onBootStatus?: (status: BootStatus) => void
@@ -44,7 +44,7 @@ export type LiveStoreContextProps<GraphQLContext extends BaseGraphQLContext> = {
44
44
 
45
45
  export const LiveStoreContextLayer = <GraphQLContext extends BaseGraphQLContext>(
46
46
  props: LiveStoreContextProps<GraphQLContext>,
47
- ): Layer.Layer<LiveStoreContextRunning, UnexpectedError | Cause.TimeoutException, otel.Tracer> =>
47
+ ): Layer.Layer<LiveStoreContextRunning, UnexpectedError | Cause.TimeoutException, OtelTracer.OtelTracer> =>
48
48
  Layer.scoped(LiveStoreContextRunning, makeLiveStoreContext(props)).pipe(
49
49
  Layer.withSpan('LiveStore'),
50
50
  Layer.provide(LiveStoreContextDeferred),
@@ -67,39 +67,30 @@ export const makeLiveStoreContext = <GraphQLContext extends BaseGraphQLContext>(
67
67
  }: LiveStoreContextProps<GraphQLContext>): Effect.Effect<
68
68
  LiveStoreContextRunning,
69
69
  UnexpectedError | Cause.TimeoutException,
70
- DeferredStoreContext | Scope.Scope | otel.Tracer
70
+ DeferredStoreContext | Scope.Scope | OtelTracer.OtelTracer
71
71
  > =>
72
72
  pipe(
73
73
  Effect.gen(function* () {
74
- const otelRootSpanContext = otel.context.active()
75
-
76
- const otelTracer = yield* OtelTracer.Tracer
77
-
78
74
  const graphQLOptions = yield* graphQLOptions_
79
75
  ? Effect.all({ schema: graphQLOptions_.schema, makeContext: Effect.succeed(graphQLOptions_.makeContext) })
80
76
  : Effect.succeed(undefined)
81
77
 
82
- // TODO join fiber set and close tear down parent scope in case of error (Needs refactor with Mike A)
83
- const fiberSet = yield* FiberSet.make()
84
-
85
78
  const store = yield* createStore({
86
79
  schema,
87
80
  storeId,
88
81
  graphQLOptions,
89
- otelOptions: {
90
- tracer: otelTracer,
91
- rootSpanContext: otelRootSpanContext,
92
- },
93
82
  boot,
94
83
  adapter,
95
84
  disableDevtools,
96
- fiberSet,
97
85
  onBootStatus,
98
86
  batchUpdates,
99
87
  })
100
88
 
101
89
  globalThis.__debugLiveStore ??= {}
102
- // window.__debugLiveStore[schema.key] = store
90
+ if (Object.keys(globalThis.__debugLiveStore).length === 0) {
91
+ globalThis.__debugLiveStore['_'] = store
92
+ }
93
+ globalThis.__debugLiveStore[storeId] = store
103
94
 
104
95
  return { stage: 'running', store } satisfies LiveStoreContextRunning
105
96
  }),
package/src/index.ts CHANGED
@@ -9,7 +9,7 @@ export type {
9
9
  } from './store/store-types.js'
10
10
 
11
11
  export type { LiveStoreContextRunning } from './effect/LiveStore.js'
12
- export { StoreAbort, StoreInterrupted, type LiveStoreContext } from './store/store-types.js'
12
+ export { StoreAbort, StoreInterrupted, type LiveStoreContext, type ShutdownDeferred } from './store/store-types.js'
13
13
 
14
14
  export { SynchronousDatabaseWrapper, emptyDebugInfo } from './SynchronousDatabaseWrapper.js'
15
15
 
@@ -2,7 +2,11 @@
2
2
 
3
3
  exports[`otel > otel 3`] = `
4
4
  {
5
- "_name": "test",
5
+ "_name": "createStore",
6
+ "attributes": {
7
+ "debugInstanceId": "test",
8
+ "storeId": "default",
9
+ },
6
10
  "children": [
7
11
  {
8
12
  "_name": "livestore.in-memory-db:execute",
@@ -17,6 +21,12 @@ exports[`otel > otel 3`] = `
17
21
  ",
18
22
  },
19
23
  },
24
+ {
25
+ "_name": "LiveStore:createStore",
26
+ },
27
+ {
28
+ "_name": "LiveStore:sync",
29
+ },
20
30
  {
21
31
  "_name": "LiveStore:mutations",
22
32
  "children": [
@@ -27,27 +37,16 @@ exports[`otel > otel 3`] = `
27
37
  },
28
38
  "children": [
29
39
  {
30
- "_name": "LiveStore:processWrites",
40
+ "_name": "LiveStore:mutate:applyMutations",
31
41
  "attributes": {
32
42
  "livestore.mutateLabel": "mutate",
33
43
  },
34
44
  "children": [
35
45
  {
36
- "_name": "LiveStore:mutateWithoutRefresh",
46
+ "_name": "livestore.in-memory-db:execute",
37
47
  "attributes": {
38
- "livestore.args": "{
39
- "sql": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)"
40
- }",
41
- "livestore.mutation": "livestore.RawSql",
48
+ "sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
42
49
  },
43
- "children": [
44
- {
45
- "_name": "livestore.in-memory-db:execute",
46
- "attributes": {
47
- "sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
48
- },
49
- },
50
- ],
51
50
  },
52
51
  ],
53
52
  },
@@ -100,7 +99,11 @@ exports[`otel > otel 3`] = `
100
99
 
101
100
  exports[`otel > with thunks 3`] = `
102
101
  {
103
- "_name": "test",
102
+ "_name": "createStore",
103
+ "attributes": {
104
+ "debugInstanceId": "test",
105
+ "storeId": "default",
106
+ },
104
107
  "children": [
105
108
  {
106
109
  "_name": "livestore.in-memory-db:execute",
@@ -115,6 +118,12 @@ exports[`otel > with thunks 3`] = `
115
118
  ",
116
119
  },
117
120
  },
121
+ {
122
+ "_name": "LiveStore:createStore",
123
+ },
124
+ {
125
+ "_name": "LiveStore:sync",
126
+ },
118
127
  {
119
128
  "_name": "LiveStore:mutations",
120
129
  "children": [
@@ -125,27 +134,16 @@ exports[`otel > with thunks 3`] = `
125
134
  },
126
135
  "children": [
127
136
  {
128
- "_name": "LiveStore:processWrites",
137
+ "_name": "LiveStore:mutate:applyMutations",
129
138
  "attributes": {
130
139
  "livestore.mutateLabel": "mutate",
131
140
  },
132
141
  "children": [
133
142
  {
134
- "_name": "LiveStore:mutateWithoutRefresh",
143
+ "_name": "livestore.in-memory-db:execute",
135
144
  "attributes": {
136
- "livestore.args": "{
137
- "sql": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)"
138
- }",
139
- "livestore.mutation": "livestore.RawSql",
145
+ "sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
140
146
  },
141
- "children": [
142
- {
143
- "_name": "livestore.in-memory-db:execute",
144
- "attributes": {
145
- "sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
146
- },
147
- },
148
- ],
149
147
  },
150
148
  ],
151
149
  },
@@ -201,7 +199,11 @@ exports[`otel > with thunks 3`] = `
201
199
 
202
200
  exports[`otel > with thunks with query builder and without labels 3`] = `
203
201
  {
204
- "_name": "test",
202
+ "_name": "createStore",
203
+ "attributes": {
204
+ "debugInstanceId": "test",
205
+ "storeId": "default",
206
+ },
205
207
  "children": [
206
208
  {
207
209
  "_name": "livestore.in-memory-db:execute",
@@ -216,6 +218,12 @@ exports[`otel > with thunks with query builder and without labels 3`] = `
216
218
  ",
217
219
  },
218
220
  },
221
+ {
222
+ "_name": "LiveStore:createStore",
223
+ },
224
+ {
225
+ "_name": "LiveStore:sync",
226
+ },
219
227
  {
220
228
  "_name": "LiveStore:mutations",
221
229
  "children": [
@@ -226,27 +234,16 @@ exports[`otel > with thunks with query builder and without labels 3`] = `
226
234
  },
227
235
  "children": [
228
236
  {
229
- "_name": "LiveStore:processWrites",
237
+ "_name": "LiveStore:mutate:applyMutations",
230
238
  "attributes": {
231
239
  "livestore.mutateLabel": "mutate",
232
240
  },
233
241
  "children": [
234
242
  {
235
- "_name": "LiveStore:mutateWithoutRefresh",
243
+ "_name": "livestore.in-memory-db:execute",
236
244
  "attributes": {
237
- "livestore.args": "{
238
- "sql": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)"
239
- }",
240
- "livestore.mutation": "livestore.RawSql",
245
+ "sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
241
246
  },
242
- "children": [
243
- {
244
- "_name": "livestore.in-memory-db:execute",
245
- "attributes": {
246
- "sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
247
- },
248
- },
249
- ],
250
247
  },
251
248
  ],
252
249
  },
@@ -20,6 +20,7 @@ describe('otel', () => {
20
20
  const makeQuery = Effect.gen(function* () {
21
21
  const exporter = new InMemorySpanExporter()
22
22
 
23
+ // const provider = cachedProvider ?? new BasicTracerProvider({ spanProcessors: [new SimpleSpanProcessor(exporter)] })
23
24
  const provider = cachedProvider ?? new BasicTracerProvider()
24
25
  cachedProvider = provider
25
26
  provider.addSpanProcessor(new SimpleSpanProcessor(exporter))
@@ -27,7 +28,7 @@ describe('otel', () => {
27
28
 
28
29
  const otelTracer = otel.trace.getTracer('test')
29
30
 
30
- const span = otelTracer.startSpan('test')
31
+ const span = otelTracer.startSpan('test-root')
31
32
  const otelContext = otel.trace.setSpan(otel.context.active(), span)
32
33
 
33
34
  const { store } = yield* makeTodoMvc({ otelTracer, otelContext })