@livestore/livestore 0.3.0-dev.4 → 0.3.0-dev.40

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 (170) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/QueryCache.d.ts.map +1 -1
  3. package/dist/SqliteDbWrapper.d.ts +60 -0
  4. package/dist/SqliteDbWrapper.d.ts.map +1 -0
  5. package/dist/{SynchronousDatabaseWrapper.js → SqliteDbWrapper.js} +69 -34
  6. package/dist/SqliteDbWrapper.js.map +1 -0
  7. package/dist/effect/LiveStore.d.ts +6 -34
  8. package/dist/effect/LiveStore.d.ts.map +1 -1
  9. package/dist/effect/LiveStore.js +10 -12
  10. package/dist/effect/LiveStore.js.map +1 -1
  11. package/dist/effect/mod.d.ts +3 -0
  12. package/dist/effect/mod.d.ts.map +1 -0
  13. package/dist/effect/mod.js +3 -0
  14. package/dist/effect/mod.js.map +1 -0
  15. package/dist/internal/mod.d.ts +3 -0
  16. package/dist/internal/mod.d.ts.map +1 -0
  17. package/dist/internal/mod.js +3 -0
  18. package/dist/internal/mod.js.map +1 -0
  19. package/dist/live-queries/base-class.d.ts +65 -27
  20. package/dist/live-queries/base-class.d.ts.map +1 -1
  21. package/dist/live-queries/base-class.js +54 -13
  22. package/dist/live-queries/base-class.js.map +1 -1
  23. package/dist/live-queries/client-document-get-query.d.ts +12 -0
  24. package/dist/live-queries/client-document-get-query.d.ts.map +1 -0
  25. package/dist/live-queries/client-document-get-query.js +18 -0
  26. package/dist/live-queries/client-document-get-query.js.map +1 -0
  27. package/dist/live-queries/computed.d.ts +12 -14
  28. package/dist/live-queries/computed.d.ts.map +1 -1
  29. package/dist/live-queries/computed.js +37 -15
  30. package/dist/live-queries/computed.js.map +1 -1
  31. package/dist/live-queries/db-query.d.ts +64 -0
  32. package/dist/live-queries/db-query.d.ts.map +1 -0
  33. package/dist/live-queries/{db.js → db-query.js} +83 -41
  34. package/dist/live-queries/db-query.js.map +1 -0
  35. package/dist/live-queries/db-query.test.d.ts +2 -0
  36. package/dist/live-queries/db-query.test.d.ts.map +1 -0
  37. package/dist/live-queries/db-query.test.js +133 -0
  38. package/dist/live-queries/db-query.test.js.map +1 -0
  39. package/dist/live-queries/mod.d.ts +5 -0
  40. package/dist/live-queries/mod.d.ts.map +1 -0
  41. package/dist/live-queries/mod.js +5 -0
  42. package/dist/live-queries/mod.js.map +1 -0
  43. package/dist/live-queries/signal.d.ts +20 -0
  44. package/dist/live-queries/signal.d.ts.map +1 -0
  45. package/dist/live-queries/signal.js +33 -0
  46. package/dist/live-queries/signal.js.map +1 -0
  47. package/dist/live-queries/signal.test.d.ts +2 -0
  48. package/dist/live-queries/signal.test.d.ts.map +1 -0
  49. package/dist/live-queries/signal.test.js +17 -0
  50. package/dist/live-queries/signal.test.js.map +1 -0
  51. package/dist/mod.d.ts +14 -0
  52. package/dist/mod.d.ts.map +1 -0
  53. package/dist/mod.js +13 -0
  54. package/dist/mod.js.map +1 -0
  55. package/dist/reactive.d.ts +23 -17
  56. package/dist/reactive.d.ts.map +1 -1
  57. package/dist/reactive.js +23 -19
  58. package/dist/reactive.js.map +1 -1
  59. package/dist/reactive.test.js +1 -1
  60. package/dist/reactive.test.js.map +1 -1
  61. package/dist/store/create-store.d.ts +70 -12
  62. package/dist/store/create-store.d.ts.map +1 -1
  63. package/dist/store/create-store.js +69 -19
  64. package/dist/store/create-store.js.map +1 -1
  65. package/dist/store/devtools.d.ts +5 -4
  66. package/dist/store/devtools.d.ts.map +1 -1
  67. package/dist/store/devtools.js +103 -47
  68. package/dist/store/devtools.js.map +1 -1
  69. package/dist/store/store-types.d.ts +32 -42
  70. package/dist/store/store-types.d.ts.map +1 -1
  71. package/dist/store/store-types.js +2 -5
  72. package/dist/store/store-types.js.map +1 -1
  73. package/dist/store/store.d.ts +104 -39
  74. package/dist/store/store.d.ts.map +1 -1
  75. package/dist/store/store.js +261 -214
  76. package/dist/store/store.js.map +1 -1
  77. package/dist/utils/data-structures.d.ts.map +1 -1
  78. package/dist/utils/dev.d.ts.map +1 -1
  79. package/dist/utils/dev.js +6 -1
  80. package/dist/utils/dev.js.map +1 -1
  81. package/dist/utils/function-string.d.ts +7 -0
  82. package/dist/utils/function-string.d.ts.map +1 -0
  83. package/dist/utils/function-string.js +9 -0
  84. package/dist/utils/function-string.js.map +1 -0
  85. package/dist/utils/stack-info.d.ts.map +1 -1
  86. package/dist/utils/stack-info.js +6 -1
  87. package/dist/utils/stack-info.js.map +1 -1
  88. package/dist/utils/stack-info.test.js +54 -1
  89. package/dist/utils/stack-info.test.js.map +1 -1
  90. package/dist/utils/tests/fixture.d.ts +59 -216
  91. package/dist/utils/tests/fixture.d.ts.map +1 -1
  92. package/dist/utils/tests/fixture.js +23 -18
  93. package/dist/utils/tests/fixture.js.map +1 -1
  94. package/dist/utils/tests/mod.d.ts +1 -0
  95. package/dist/utils/tests/mod.d.ts.map +1 -1
  96. package/dist/utils/tests/mod.js +1 -0
  97. package/dist/utils/tests/mod.js.map +1 -1
  98. package/dist/utils/tests/otel.d.ts.map +1 -1
  99. package/dist/utils/tests/otel.js +8 -3
  100. package/dist/utils/tests/otel.js.map +1 -1
  101. package/package.json +29 -26
  102. package/src/{SynchronousDatabaseWrapper.ts → SqliteDbWrapper.ts} +92 -42
  103. package/src/effect/LiveStore.ts +27 -64
  104. package/src/effect/{index.ts → mod.ts} +2 -3
  105. package/src/internal/mod.ts +2 -0
  106. package/src/live-queries/__snapshots__/{db.test.ts.snap → db-query.test.ts.snap} +220 -45
  107. package/src/live-queries/base-class.ts +152 -50
  108. package/src/live-queries/client-document-get-query.ts +52 -0
  109. package/src/live-queries/computed.ts +51 -33
  110. package/src/live-queries/db-query.test.ts +192 -0
  111. package/src/live-queries/{db.ts → db-query.ts} +140 -82
  112. package/src/live-queries/mod.ts +4 -0
  113. package/src/live-queries/signal.test.ts +25 -0
  114. package/src/live-queries/signal.ts +47 -0
  115. package/src/mod.ts +42 -0
  116. package/src/reactive.test.ts +1 -1
  117. package/src/reactive.ts +66 -43
  118. package/src/store/create-store.ts +187 -59
  119. package/src/store/devtools.ts +136 -54
  120. package/src/store/store-types.ts +31 -43
  121. package/src/store/store.ts +385 -309
  122. package/src/utils/dev.ts +6 -1
  123. package/src/utils/function-string.ts +12 -0
  124. package/src/utils/stack-info.test.ts +58 -1
  125. package/src/utils/stack-info.ts +6 -1
  126. package/src/utils/tests/fixture.ts +22 -31
  127. package/src/utils/tests/mod.ts +1 -0
  128. package/src/utils/tests/otel.ts +10 -3
  129. package/dist/SynchronousDatabaseWrapper.d.ts +0 -41
  130. package/dist/SynchronousDatabaseWrapper.d.ts.map +0 -1
  131. package/dist/SynchronousDatabaseWrapper.js.map +0 -1
  132. package/dist/effect/index.d.ts +0 -2
  133. package/dist/effect/index.d.ts.map +0 -1
  134. package/dist/effect/index.js +0 -2
  135. package/dist/effect/index.js.map +0 -1
  136. package/dist/global-state.d.ts +0 -14
  137. package/dist/global-state.d.ts.map +0 -1
  138. package/dist/global-state.js +0 -16
  139. package/dist/global-state.js.map +0 -1
  140. package/dist/index.d.ts +0 -20
  141. package/dist/index.d.ts.map +0 -1
  142. package/dist/index.js +0 -16
  143. package/dist/index.js.map +0 -1
  144. package/dist/live-queries/db.d.ts +0 -66
  145. package/dist/live-queries/db.d.ts.map +0 -1
  146. package/dist/live-queries/db.js.map +0 -1
  147. package/dist/live-queries/db.test.d.ts +0 -2
  148. package/dist/live-queries/db.test.d.ts.map +0 -1
  149. package/dist/live-queries/db.test.js +0 -118
  150. package/dist/live-queries/db.test.js.map +0 -1
  151. package/dist/live-queries/graphql.d.ts +0 -49
  152. package/dist/live-queries/graphql.d.ts.map +0 -1
  153. package/dist/live-queries/graphql.js +0 -122
  154. package/dist/live-queries/graphql.js.map +0 -1
  155. package/dist/row-query-utils.d.ts +0 -17
  156. package/dist/row-query-utils.d.ts.map +0 -1
  157. package/dist/row-query-utils.js +0 -31
  158. package/dist/row-query-utils.js.map +0 -1
  159. package/dist/utils/otel.d.ts +0 -4
  160. package/dist/utils/otel.d.ts.map +0 -1
  161. package/dist/utils/otel.js +0 -6
  162. package/dist/utils/otel.js.map +0 -1
  163. package/src/global-state.ts +0 -20
  164. package/src/index.ts +0 -66
  165. package/src/live-queries/db.test.ts +0 -154
  166. package/src/live-queries/graphql.ts +0 -219
  167. package/src/row-query-utils.ts +0 -66
  168. package/src/utils/otel.ts +0 -9
  169. package/tsconfig.json +0 -18
  170. package/vitest.config.js +0 -9
@@ -0,0 +1,133 @@
1
+ import { sql } from '@livestore/common';
2
+ import { rawSqlEvent } from '@livestore/common/schema';
3
+ import { Effect, ReadonlyRecord, Schema } from '@livestore/utils/effect';
4
+ import { Vitest } from '@livestore/utils-dev/node-vitest';
5
+ import * as otel from '@opentelemetry/api';
6
+ import { BasicTracerProvider, InMemorySpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
7
+ import { expect } from 'vitest';
8
+ import * as RG from '../reactive.js';
9
+ import { makeTodoMvc, tables } from '../utils/tests/fixture.js';
10
+ import { getSimplifiedRootSpan } from '../utils/tests/otel.js';
11
+ import { computed } from './computed.js';
12
+ import { queryDb } from './db-query.js';
13
+ /*
14
+ TODO write tests for:
15
+
16
+ - sql queries without and with `map` (incl. callback and schemas)
17
+ - optional and explicit `queriedTables` argument
18
+ */
19
+ Vitest.describe('otel', () => {
20
+ const mapAttributes = (attributes) => {
21
+ return ReadonlyRecord.map(attributes, (val, key) => {
22
+ if (key === 'code.stacktrace') {
23
+ return '<STACKTRACE>';
24
+ }
25
+ return val;
26
+ });
27
+ };
28
+ const makeQuery = Effect.gen(function* () {
29
+ const exporter = new InMemorySpanExporter();
30
+ RG.__resetIds();
31
+ const provider = new BasicTracerProvider({
32
+ spanProcessors: [new SimpleSpanProcessor(exporter)],
33
+ });
34
+ const otelTracer = provider.getTracer('test');
35
+ const span = otelTracer.startSpan('test-root');
36
+ const otelContext = otel.trace.setSpan(otel.context.active(), span);
37
+ const store = yield* makeTodoMvc({ otelTracer, otelContext });
38
+ return {
39
+ store,
40
+ otelTracer,
41
+ exporter,
42
+ span,
43
+ provider,
44
+ };
45
+ });
46
+ Vitest.scopedLive('otel', () => Effect.gen(function* () {
47
+ const { store, exporter, span, provider } = yield* makeQuery;
48
+ const query$ = queryDb({
49
+ query: `select * from todos`,
50
+ schema: Schema.Array(tables.todos.rowSchema),
51
+ queriedTables: new Set(['todos']),
52
+ });
53
+ expect(store.query(query$)).toMatchInlineSnapshot('[]');
54
+ store.commit(rawSqlEvent({ sql: sql `INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }));
55
+ expect(store.query(query$)).toMatchInlineSnapshot(`
56
+ [
57
+ {
58
+ "completed": false,
59
+ "id": "t1",
60
+ "text": "buy milk",
61
+ },
62
+ ]
63
+ `);
64
+ span.end();
65
+ return { exporter, provider };
66
+ }).pipe(Effect.scoped, Effect.tap(({ exporter, provider }) => Effect.promise(async () => {
67
+ await provider.forceFlush();
68
+ expect(getSimplifiedRootSpan(exporter, mapAttributes)).toMatchSnapshot();
69
+ await provider.shutdown();
70
+ }))));
71
+ Vitest.scopedLive('with thunks', () => Effect.gen(function* () {
72
+ const { store, exporter, span, provider } = yield* makeQuery;
73
+ const defaultTodo = { id: '', text: '', completed: false };
74
+ const filter = computed(() => `where completed = 0`, { label: 'where-filter' });
75
+ const query$ = queryDb((get) => ({
76
+ query: `select * from todos ${get(filter)}`,
77
+ schema: Schema.Array(tables.todos.rowSchema).pipe(Schema.headOrElse(() => defaultTodo)),
78
+ }), { label: 'all todos' });
79
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
80
+ expect(store.query(query$)).toMatchInlineSnapshot(`
81
+ {
82
+ "completed": false,
83
+ "id": "",
84
+ "text": "",
85
+ }
86
+ `);
87
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
88
+ store.commit(rawSqlEvent({ sql: sql `INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }));
89
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
90
+ expect(store.query(query$)).toMatchInlineSnapshot(`
91
+ {
92
+ "completed": false,
93
+ "id": "t1",
94
+ "text": "buy milk",
95
+ }
96
+ `);
97
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
98
+ span.end();
99
+ return { exporter, provider };
100
+ }).pipe(Effect.scoped, Effect.tap(({ exporter, provider }) => Effect.promise(async () => {
101
+ await provider.forceFlush();
102
+ expect(getSimplifiedRootSpan(exporter, mapAttributes)).toMatchSnapshot();
103
+ await provider.shutdown();
104
+ }))));
105
+ Vitest.scopedLive('with thunks with query builder and without labels', () => Effect.gen(function* () {
106
+ const { store, exporter, span, provider } = yield* makeQuery;
107
+ const defaultTodo = { id: '', text: '', completed: false };
108
+ const filter = computed(() => ({ completed: false }));
109
+ const query$ = queryDb((get) => tables.todos.where(get(filter)).first({ fallback: () => defaultTodo }));
110
+ expect(store.query(query$)).toMatchInlineSnapshot(`
111
+ {
112
+ "completed": false,
113
+ "id": "",
114
+ "text": "",
115
+ }
116
+ `);
117
+ store.commit(rawSqlEvent({ sql: sql `INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }));
118
+ expect(store.query(query$)).toMatchInlineSnapshot(`
119
+ {
120
+ "completed": false,
121
+ "id": "t1",
122
+ "text": "buy milk",
123
+ }
124
+ `);
125
+ span.end();
126
+ return { exporter, provider };
127
+ }).pipe(Effect.scoped, Effect.tap(({ exporter, provider }) => Effect.promise(async () => {
128
+ await provider.forceFlush();
129
+ expect(getSimplifiedRootSpan(exporter, mapAttributes)).toMatchSnapshot();
130
+ await provider.shutdown();
131
+ }))));
132
+ });
133
+ //# sourceMappingURL=db-query.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-query.test.js","sourceRoot":"","sources":["../../src/live-queries/db-query.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './base-class.js';
2
+ export * from './computed.js';
3
+ export * from './db-query.js';
4
+ export * from './signal.js';
5
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/live-queries/mod.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from './base-class.js';
2
+ export * from './computed.js';
3
+ export * from './db-query.js';
4
+ export * from './signal.js';
5
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/live-queries/mod.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA"}
@@ -0,0 +1,20 @@
1
+ import type * as RG from '../reactive.js';
2
+ import type { RefreshReason } from '../store/store-types.js';
3
+ import type { ISignal, ReactivityGraph, ReactivityGraphContext, SignalDef } from './base-class.js';
4
+ export declare const signal: <T>(defaultValue: T, options?: {
5
+ label?: string;
6
+ }) => SignalDef<T>;
7
+ export declare class Signal<T> implements ISignal<T> {
8
+ private defaultValue;
9
+ readonly reactivityGraph: ReactivityGraph;
10
+ private options?;
11
+ _tag: "signal";
12
+ readonly ref: RG.Ref<T, ReactivityGraphContext, RefreshReason>;
13
+ constructor(defaultValue: T, reactivityGraph: ReactivityGraph, options?: {
14
+ label?: string;
15
+ } | undefined);
16
+ set: (value: T) => void;
17
+ get: () => T;
18
+ destroy: () => void;
19
+ }
20
+ //# sourceMappingURL=signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/live-queries/signal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGlG,eAAO,MAAM,MAAM,GAAI,CAAC,EACtB,cAAc,CAAC,EACf,UAAU;IACR,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,KACA,SAAS,CAAC,CAAC,CAOb,CAAA;AAED,qBAAa,MAAM,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IAKxC,OAAO,CAAC,YAAY;IACpB,QAAQ,CAAC,eAAe,EAAE,eAAe;IACzC,OAAO,CAAC,OAAO,CAAC;IANlB,IAAI,EAAG,QAAQ,CAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAA;gBAGpD,YAAY,EAAE,CAAC,EACd,eAAe,EAAE,eAAe,EACjC,OAAO,CAAC,EAAE;QAChB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,YAAA;IAKH,GAAG,GAAI,OAAO,CAAC,UAEd;IAED,GAAG,UAEF;IAED,OAAO,aAEN;CACF"}
@@ -0,0 +1,33 @@
1
+ import { nanoid } from '@livestore/utils/nanoid';
2
+ import { withRCMap } from './base-class.js';
3
+ export const signal = (defaultValue, options) => {
4
+ const id = nanoid();
5
+ return {
6
+ _tag: 'signal-def',
7
+ defaultValue,
8
+ make: withRCMap(id, (ctx) => new Signal(defaultValue, ctx.reactivityGraph.deref(), options)),
9
+ };
10
+ };
11
+ export class Signal {
12
+ defaultValue;
13
+ reactivityGraph;
14
+ options;
15
+ _tag = 'signal';
16
+ ref;
17
+ constructor(defaultValue, reactivityGraph, options) {
18
+ this.defaultValue = defaultValue;
19
+ this.reactivityGraph = reactivityGraph;
20
+ this.options = options;
21
+ this.ref = reactivityGraph.makeRef(defaultValue, { label: options?.label });
22
+ }
23
+ set = (value) => {
24
+ this.reactivityGraph.setRef(this.ref, value);
25
+ };
26
+ get = () => {
27
+ return this.ref.computeResult();
28
+ };
29
+ destroy = () => {
30
+ this.reactivityGraph.destroyNode(this.ref);
31
+ };
32
+ }
33
+ //# sourceMappingURL=signal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../src/live-queries/signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAKhD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,YAAe,EACf,OAEC,EACa,EAAE;IAChB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;IACnB,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,YAAY;QACZ,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC,KAAK,EAAG,EAAE,OAAO,CAAC,CAAC;KAC9F,CAAA;AACH,CAAC,CAAA;AAED,MAAM,OAAO,MAAM;IAKP;IACC;IACD;IANV,IAAI,GAAG,QAAiB,CAAA;IACf,GAAG,CAAkD;IAE9D,YACU,YAAe,EACd,eAAgC,EACjC,OAEP;QAJO,iBAAY,GAAZ,YAAY,CAAG;QACd,oBAAe,GAAf,eAAe,CAAiB;QACjC,YAAO,GAAP,OAAO,CAEd;QAED,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAC7E,CAAC;IAED,GAAG,GAAG,CAAC,KAAQ,EAAE,EAAE;QACjB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC9C,CAAC,CAAA;IAED,GAAG,GAAG,GAAG,EAAE;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAA;IACjC,CAAC,CAAA;IAED,OAAO,GAAG,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC,CAAA;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=signal.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.test.d.ts","sourceRoot":"","sources":["../../src/live-queries/signal.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { Effect } from '@livestore/utils/effect';
2
+ import { Vitest } from '@livestore/utils-dev/node-vitest';
3
+ import { expect } from 'vitest';
4
+ import { makeTodoMvc } from '../utils/tests/fixture.js';
5
+ import { computed } from './computed.js';
6
+ import { signal } from './signal.js';
7
+ Vitest.describe('signal', () => {
8
+ Vitest.scopedLive('should be able to create a signal', () => Effect.gen(function* () {
9
+ const num$ = signal(0, { label: 'num$' });
10
+ const duplicated$ = computed((get) => get(num$) * 2, { label: 'duplicated$' });
11
+ const store = yield* makeTodoMvc({});
12
+ expect(store.query(duplicated$)).toBe(0);
13
+ store.setSignal(num$, 1);
14
+ expect(store.query(duplicated$)).toBe(2);
15
+ }));
16
+ });
17
+ //# sourceMappingURL=signal.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.test.js","sourceRoot":"","sources":["../../src/live-queries/signal.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC7B,MAAM,CAAC,UAAU,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAC1D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAEzC,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAA;QAE9E,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAEpC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAExC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAExB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1C,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAC,CAAA"}
package/dist/mod.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export { Store } from './store/store.js';
2
+ export { createStore, createStorePromise, type CreateStoreOptions } from './store/create-store.js';
3
+ export type { QueryDebugInfo, RefreshReason, OtelOptions } from './store/store-types.js';
4
+ export { Schema } from '@livestore/utils/effect';
5
+ export { type LiveStoreContext, type LiveStoreContextRunning, type ShutdownDeferred, makeShutdownDeferred, } from './store/store-types.js';
6
+ export { SqliteDbWrapper, emptyDebugInfo } from './SqliteDbWrapper.js';
7
+ export { queryDb, computed, signal, type LiveQuery, type LiveQueryDef } from './live-queries/mod.js';
8
+ export * from '@livestore/common/schema';
9
+ export { sql, SessionIdSymbol, type BootStatus, type SqliteDb, type DebugInfo, type MutableDebugInfo, prepareBindValues, type Bindable, type PreparedBindValues, type QueryBuilderAst, type QueryBuilder, type RowQuery, StoreInterrupted, IntentionalShutdownCause, provideOtel, } from '@livestore/common';
10
+ export { deepEqual } from '@livestore/utils';
11
+ export { nanoid } from '@livestore/utils/nanoid';
12
+ export * from './utils/stack-info.js';
13
+ export type { ClientSession, Adapter, PreparedStatement } from '@livestore/common';
14
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAClG,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAExF,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAEtE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpG,cAAc,0BAA0B,CAAA;AACxC,OAAO,EACL,GAAG,EACH,eAAe,EACf,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,iBAAiB,EACjB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,gBAAgB,EAChB,wBAAwB,EACxB,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,cAAc,uBAAuB,CAAA;AAErC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA"}
package/dist/mod.js ADDED
@@ -0,0 +1,13 @@
1
+ export { Store } from './store/store.js';
2
+ export { createStore, createStorePromise } from './store/create-store.js';
3
+ // We're re-exporting `Schema` from `effect` for convenience
4
+ export { Schema } from '@livestore/utils/effect';
5
+ export { makeShutdownDeferred, } from './store/store-types.js';
6
+ export { SqliteDbWrapper, emptyDebugInfo } from './SqliteDbWrapper.js';
7
+ export { queryDb, computed, signal } from './live-queries/mod.js';
8
+ export * from '@livestore/common/schema';
9
+ export { sql, SessionIdSymbol, prepareBindValues, StoreInterrupted, IntentionalShutdownCause, provideOtel, } from '@livestore/common';
10
+ export { deepEqual } from '@livestore/utils';
11
+ export { nanoid } from '@livestore/utils/nanoid';
12
+ export * from './utils/stack-info.js';
13
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAA2B,MAAM,yBAAyB,CAAA;AAElG,4DAA4D;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAIL,oBAAoB,GACrB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAEtE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAqC,MAAM,uBAAuB,CAAA;AAEpG,cAAc,0BAA0B,CAAA;AACxC,OAAO,EACL,GAAG,EACH,eAAe,EAKf,iBAAiB,EAMjB,gBAAgB,EAChB,wBAAwB,EACxB,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,cAAc,uBAAuB,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import { BoundArray } from '@livestore/common';
2
- import type { PrettifyFlat } from '@livestore/utils';
2
+ import type { Types } from '@livestore/utils/effect';
3
3
  import type * as otel from '@opentelemetry/api';
4
4
  export declare const NOT_REFRESHED_YET: unique symbol;
5
5
  export type NOT_REFRESHED_YET = typeof NOT_REFRESHED_YET;
6
- export type GetAtom = <T>(atom: Atom<T, any, any>, otelContext?: otel.Context) => T;
6
+ export type GetAtom = <T>(atom: Atom<T, any, any>, otelContext?: otel.Context | undefined, debugRefreshReason?: TODO | undefined) => T;
7
7
  export type Ref<T, TContext, TDebugRefreshReason extends DebugRefreshReason> = {
8
8
  _tag: 'ref';
9
9
  id: string;
@@ -12,7 +12,7 @@ export type Ref<T, TContext, TDebugRefreshReason extends DebugRefreshReason> = {
12
12
  previousResult: T;
13
13
  computeResult: () => T;
14
14
  sub: Set<Atom<any, TContext, TDebugRefreshReason>>;
15
- super: Set<Thunk<any, TContext, TDebugRefreshReason> | Effect>;
15
+ super: Set<Thunk<any, TContext, TDebugRefreshReason> | Effect<TDebugRefreshReason>>;
16
16
  label?: string;
17
17
  /** Container for meta information (e.g. the LiveStore Store) */
18
18
  meta?: any;
@@ -27,7 +27,7 @@ export type Thunk<TResult, TContext, TDebugRefreshReason extends DebugRefreshRea
27
27
  computeResult: (otelContext?: otel.Context, debugRefreshReason?: TDebugRefreshReason) => TResult;
28
28
  previousResult: TResult | NOT_REFRESHED_YET;
29
29
  sub: Set<Atom<any, TContext, TDebugRefreshReason>>;
30
- super: Set<Thunk<any, TContext, TDebugRefreshReason> | Effect>;
30
+ super: Set<Thunk<any, TContext, TDebugRefreshReason> | Effect<TDebugRefreshReason>>;
31
31
  label?: string;
32
32
  /** Container for meta information (e.g. the LiveStore Store) */
33
33
  meta?: any;
@@ -36,23 +36,23 @@ export type Thunk<TResult, TContext, TDebugRefreshReason extends DebugRefreshRea
36
36
  __getResult: any;
37
37
  };
38
38
  export type Atom<T, TContext, TDebugRefreshReason extends DebugRefreshReason> = Ref<T, TContext, TDebugRefreshReason> | Thunk<T, TContext, TDebugRefreshReason>;
39
- export type Effect = {
39
+ export type Effect<TDebugRefreshReason extends DebugRefreshReason> = {
40
40
  _tag: 'effect';
41
41
  id: string;
42
42
  isDestroyed: boolean;
43
- doEffect: (otelContext?: otel.Context) => void;
43
+ doEffect: (otelContext?: otel.Context | undefined, debugRefreshReason?: TDebugRefreshReason | undefined) => void;
44
44
  sub: Set<Atom<any, TODO, TODO>>;
45
45
  label?: string;
46
46
  invocations: number;
47
47
  };
48
- export type Node<T, TContext, TDebugRefreshReason extends DebugRefreshReason> = Atom<T, TContext, TDebugRefreshReason> | Effect;
48
+ export type Node<T, TContext, TDebugRefreshReason extends DebugRefreshReason> = Atom<T, TContext, TDebugRefreshReason> | Effect<TDebugRefreshReason>;
49
49
  export declare const isThunk: <T, TContext, TDebugRefreshReason extends DebugRefreshReason>(obj: unknown) => obj is Thunk<T, TContext, TDebugRefreshReason>;
50
50
  export type DebugThunkInfo<T extends string = string> = {
51
51
  _tag: T;
52
52
  durationMs: number;
53
53
  };
54
54
  export type DebugRefreshReasonBase =
55
- /** Usually in response to some `mutate` calls with `skipRefresh: true` */
55
+ /** Usually in response to some `commit` calls with `skipRefresh: true` */
56
56
  {
57
57
  _tag: 'runDeferredEffects';
58
58
  originalRefreshReasons?: ReadonlyArray<DebugRefreshReasonBase>;
@@ -89,19 +89,19 @@ export type EncodedOption<A> = {
89
89
  _tag: 'None';
90
90
  };
91
91
  export type SerializedAtom = SerializedRef | SerializedThunk;
92
- export type SerializedRef = Readonly<PrettifyFlat<Pick<Ref<unknown, unknown, any>, '_tag' | 'id' | 'label' | 'meta' | 'isDirty' | 'isDestroyed' | 'refreshes'> & {
92
+ export type SerializedRef = Readonly<Types.Simplify<Pick<Ref<unknown, unknown, any>, '_tag' | 'id' | 'label' | 'meta' | 'isDirty' | 'isDestroyed' | 'refreshes'> & {
93
93
  /** Is `None` if `getSnapshot` was called with `includeResults: false` which is the default */
94
94
  previousResult: EncodedOption<string>;
95
95
  sub: ReadonlyArray<string>;
96
96
  super: ReadonlyArray<string>;
97
97
  }>>;
98
- export type SerializedThunk = Readonly<PrettifyFlat<Pick<Thunk<unknown, unknown, any>, '_tag' | 'id' | 'label' | 'meta' | 'isDirty' | 'isDestroyed' | 'recomputations'> & {
98
+ export type SerializedThunk = Readonly<Types.Simplify<Pick<Thunk<unknown, unknown, any>, '_tag' | 'id' | 'label' | 'meta' | 'isDirty' | 'isDestroyed' | 'recomputations'> & {
99
99
  /** Is `None` if `getSnapshot` was called with `includeResults: false` which is the default */
100
100
  previousResult: EncodedOption<string>;
101
101
  sub: ReadonlyArray<string>;
102
102
  super: ReadonlyArray<string>;
103
103
  }>>;
104
- export type SerializedEffect = Readonly<PrettifyFlat<Pick<Effect, '_tag' | 'id' | 'label' | 'invocations' | 'isDestroyed'> & {
104
+ export type SerializedEffect = Readonly<Types.Simplify<Pick<Effect<any>, '_tag' | 'id' | 'label' | 'invocations' | 'isDestroyed'> & {
105
105
  sub: ReadonlyArray<string>;
106
106
  }>>;
107
107
  export type ReactiveGraphSnapshot = {
@@ -110,32 +110,38 @@ export type ReactiveGraphSnapshot = {
110
110
  /** IDs of deferred effects */
111
111
  readonly deferredEffects: ReadonlyArray<string>;
112
112
  };
113
+ /** Used for testing */
114
+ export declare const __resetIds: () => void;
113
115
  export declare class ReactiveGraph<TDebugRefreshReason extends DebugRefreshReason, TDebugThunkInfo extends DebugThunkInfo, TContext extends {
114
116
  effectsWrapper?: (runEffects: () => void) => void;
115
117
  } = {}> {
116
118
  id: string;
117
119
  readonly atoms: Set<Atom<any, TContext, TDebugRefreshReason>>;
118
- readonly effects: Set<Effect>;
120
+ readonly effects: Set<Effect<TDebugRefreshReason>>;
119
121
  context: TContext | undefined;
120
122
  debugRefreshInfos: BoundArray<RefreshDebugInfo<TDebugRefreshReason, TDebugThunkInfo>>;
121
123
  private currentDebugRefresh;
122
124
  private deferredEffects;
123
125
  private refreshCallbacks;
126
+ private nodeIdCounter;
127
+ private uniqueNodeId;
128
+ private refreshInfoIdCounter;
129
+ private uniqueRefreshInfoId;
124
130
  makeRef<T>(val: T, options?: {
125
131
  label?: string;
126
132
  meta?: unknown;
127
133
  equal?: (a: T, b: T) => boolean;
128
134
  }): Ref<T, TContext, TDebugRefreshReason>;
129
- makeThunk<T>(getResult: (get: GetAtom, setDebugInfo: (debugInfo: TDebugThunkInfo) => void, ctx: TContext, otelContext: otel.Context | undefined) => T, options?: {
135
+ makeThunk<T>(getResult: (get: GetAtom, setDebugInfo: (debugInfo: TDebugThunkInfo) => void, ctx: TContext, otelContext: otel.Context | undefined, debugRefreshReason: TDebugRefreshReason | undefined) => T, options?: {
130
136
  label?: string;
131
137
  meta?: any;
132
138
  equal?: (a: T, b: T) => boolean;
133
139
  } | undefined): Thunk<T, TContext, TDebugRefreshReason>;
134
140
  destroyNode(node: Node<any, TContext, TDebugRefreshReason>): void;
135
141
  destroy(): void;
136
- makeEffect(doEffect: (get: GetAtom, otelContext?: otel.Context) => void, options?: {
142
+ makeEffect(doEffect: (get: GetAtom, otelContext: otel.Context | undefined, debugRefreshReason: DebugRefreshReason | undefined) => void, options?: {
137
143
  label?: string;
138
- } | undefined): Effect;
144
+ } | undefined): Effect<TDebugRefreshReason>;
139
145
  setRef<T>(ref: Ref<T, TContext, TDebugRefreshReason>, val: T, options?: {
140
146
  skipRefresh?: boolean;
141
147
  debugRefreshReason?: TDebugRefreshReason;
@@ -152,8 +158,8 @@ export declare class ReactiveGraph<TDebugRefreshReason extends DebugRefreshReaso
152
158
  otelContext?: otel.Context;
153
159
  }) => void;
154
160
  runRefreshCallbacks: () => void;
155
- addEdge(superComp: Thunk<any, TContext, TDebugRefreshReason> | Effect, subComp: Atom<any, TContext, TDebugRefreshReason>): void;
156
- removeEdge(superComp: Thunk<any, TContext, TDebugRefreshReason> | Effect, subComp: Atom<any, TContext, TDebugRefreshReason>): void;
161
+ addEdge(superComp: Thunk<any, TContext, TDebugRefreshReason> | Effect<TDebugRefreshReason>, subComp: Atom<any, TContext, TDebugRefreshReason>): void;
162
+ removeEdge(superComp: Thunk<any, TContext, TDebugRefreshReason> | Effect<TDebugRefreshReason>, subComp: Atom<any, TContext, TDebugRefreshReason>): void;
157
163
  getSnapshot: (opts?: {
158
164
  includeResults: boolean;
159
165
  }) => ReactiveGraphSnapshot;
@@ -1 +1 @@
1
- {"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"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"}
package/dist/reactive.js CHANGED
@@ -30,25 +30,29 @@ const unknownRefreshReason = () => {
30
30
  };
31
31
  const encodedOptionSome = (value) => ({ _tag: 'Some', value });
32
32
  const encodedOptionNone = () => ({ _tag: 'None' });
33
- let nodeIdCounter = 0;
34
- const uniqueNodeId = () => `node-${++nodeIdCounter}`;
35
- let refreshInfoIdCounter = 0;
36
- const uniqueRefreshInfoId = () => `refresh-info-${++refreshInfoIdCounter}`;
37
33
  let globalGraphIdCounter = 0;
38
34
  const uniqueGraphId = () => `graph-${++globalGraphIdCounter}`;
35
+ /** Used for testing */
36
+ export const __resetIds = () => {
37
+ globalGraphIdCounter = 0;
38
+ };
39
39
  export class ReactiveGraph {
40
40
  id = uniqueGraphId();
41
41
  atoms = new Set();
42
42
  effects = new Set();
43
43
  context;
44
- debugRefreshInfos = new BoundArray(5000);
44
+ debugRefreshInfos = new BoundArray(200);
45
45
  currentDebugRefresh;
46
46
  deferredEffects = new Map();
47
47
  refreshCallbacks = new Set();
48
+ nodeIdCounter = 0;
49
+ uniqueNodeId = () => `node-${++this.nodeIdCounter}`;
50
+ refreshInfoIdCounter = 0;
51
+ uniqueRefreshInfoId = () => `refresh-info-${++this.refreshInfoIdCounter}`;
48
52
  makeRef(val, options) {
49
53
  const ref = {
50
54
  _tag: 'ref',
51
- id: uniqueNodeId(),
55
+ id: this.uniqueNodeId(),
52
56
  isDirty: false,
53
57
  isDestroyed: false,
54
58
  previousResult: val,
@@ -66,7 +70,7 @@ export class ReactiveGraph {
66
70
  makeThunk(getResult, options) {
67
71
  const thunk = {
68
72
  _tag: 'thunk',
69
- id: uniqueNodeId(),
73
+ id: this.uniqueNodeId(),
70
74
  previousResult: NOT_REFRESHED_YET,
71
75
  isDirty: true,
72
76
  isDestroyed: false,
@@ -80,13 +84,13 @@ export class ReactiveGraph {
80
84
  thunk.sub = new Set();
81
85
  const getAtom = (atom, otelContext) => {
82
86
  this.addEdge(thunk, atom);
83
- return compute(atom, otelContext);
87
+ return compute(atom, otelContext, debugRefreshReason);
84
88
  };
85
89
  let debugInfo = undefined;
86
90
  const setDebugInfo = (debugInfo_) => {
87
91
  debugInfo = debugInfo_;
88
92
  };
89
- const result = getResult(getAtom, setDebugInfo, this.context ?? throwContextNotSetError(this), otelContext);
93
+ const result = getResult(getAtom, setDebugInfo, this.context ?? throwContextNotSetError(this), otelContext, debugRefreshReason);
90
94
  const resultChanged = thunk.equal(thunk.previousResult, result) === false;
91
95
  const debugInfoForAtom = {
92
96
  atom: serializeAtom(thunk, false),
@@ -102,7 +106,7 @@ export class ReactiveGraph {
102
106
  const durationMs = performance.now() - this.currentDebugRefresh.startMs;
103
107
  this.currentDebugRefresh = undefined;
104
108
  this.debugRefreshInfos.push({
105
- id: uniqueRefreshInfoId(),
109
+ id: this.uniqueRefreshInfoId(),
106
110
  reason: debugRefreshReason ?? { _tag: 'makeThunk', label: options?.label },
107
111
  skippedRefresh: false,
108
112
  refreshedAtoms,
@@ -160,18 +164,18 @@ export class ReactiveGraph {
160
164
  makeEffect(doEffect, options) {
161
165
  const effect = {
162
166
  _tag: 'effect',
163
- id: uniqueNodeId(),
167
+ id: this.uniqueNodeId(),
164
168
  isDestroyed: false,
165
- doEffect: (otelContext) => {
169
+ doEffect: (otelContext, debugRefreshReason) => {
166
170
  effect.invocations++;
167
171
  // NOTE we're not tracking any debug refresh info for effects as they're tracked by the thunks they depend on
168
172
  // Reset previous subcomputations as we're about to re-add them as part of the `doEffect` call below
169
173
  effect.sub = new Set();
170
- const getAtom = (atom, otelContext) => {
174
+ const getAtom = (atom, otelContext, debugRefreshReason) => {
171
175
  this.addEdge(effect, atom);
172
- return compute(atom, otelContext);
176
+ return compute(atom, otelContext, debugRefreshReason);
173
177
  };
174
- doEffect(getAtom, otelContext);
178
+ doEffect(getAtom, otelContext, debugRefreshReason);
175
179
  },
176
180
  sub: new Set(),
177
181
  label: options?.label,
@@ -212,13 +216,13 @@ export class ReactiveGraph {
212
216
  effectsWrapper(() => {
213
217
  this.currentDebugRefresh = { refreshedAtoms: [], startMs: performance.now() };
214
218
  for (const effect of effectsToRefresh) {
215
- effect.doEffect(options?.otelContext);
219
+ effect.doEffect(options?.otelContext, options.debugRefreshReason);
216
220
  }
217
221
  const refreshedAtoms = this.currentDebugRefresh.refreshedAtoms;
218
222
  const durationMs = performance.now() - this.currentDebugRefresh.startMs;
219
223
  this.currentDebugRefresh = undefined;
220
224
  const refreshDebugInfo = {
221
- id: uniqueRefreshInfoId(),
225
+ id: this.uniqueRefreshInfoId(),
222
226
  reason: options.debugRefreshReason,
223
227
  skippedRefresh: false,
224
228
  refreshedAtoms,
@@ -293,14 +297,14 @@ export class ReactiveGraph {
293
297
  };
294
298
  };
295
299
  }
296
- const compute = (atom, otelContext) => {
300
+ const compute = (atom, otelContext, debugRefreshReason) => {
297
301
  // const __getResult = atom._tag === 'thunk' ? atom.__getResult.toString() : ''
298
302
  if (atom.isDestroyed) {
299
303
  shouldNeverHappen(`LiveStore Error: Attempted to compute destroyed ${atom._tag} (${atom.id}): ${atom.label ?? ''}`);
300
304
  }
301
305
  if (atom.isDirty) {
302
306
  // console.log('atom is dirty', atom.id, atom.label ?? '', atom._tag, __getResult)
303
- const result = atom.computeResult(otelContext);
307
+ const result = atom.computeResult(otelContext, debugRefreshReason);
304
308
  atom.isDirty = false;
305
309
  atom.previousResult = result;
306
310
  return result;