@livestore/livestore 0.0.19 → 0.0.22

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 (136) hide show
  1. package/README.md +29 -22
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/QueryCache.d.ts +1 -1
  4. package/dist/QueryCache.d.ts.map +1 -1
  5. package/dist/QueryCache.js.map +1 -1
  6. package/dist/__tests__/react/fixture.d.ts +5 -4
  7. package/dist/__tests__/react/fixture.d.ts.map +1 -1
  8. package/dist/__tests__/react/fixture.js +3 -5
  9. package/dist/__tests__/react/fixture.js.map +1 -1
  10. package/dist/__tests__/react/useComponentState.test.d.ts +2 -0
  11. package/dist/__tests__/react/useComponentState.test.d.ts.map +1 -0
  12. package/dist/__tests__/react/useComponentState.test.js +68 -0
  13. package/dist/__tests__/react/useComponentState.test.js.map +1 -0
  14. package/dist/__tests__/react/useLQuery.test.d.ts +2 -0
  15. package/dist/__tests__/react/useLQuery.test.d.ts.map +1 -0
  16. package/dist/__tests__/react/useLQuery.test.js +38 -0
  17. package/dist/__tests__/react/useLQuery.test.js.map +1 -0
  18. package/dist/__tests__/react/useLiveStoreComponent.test.js +4 -9
  19. package/dist/__tests__/react/useLiveStoreComponent.test.js.map +1 -1
  20. package/dist/__tests__/react/useQuery.test.d.ts +2 -0
  21. package/dist/__tests__/react/useQuery.test.d.ts.map +1 -0
  22. package/dist/__tests__/react/useQuery.test.js +33 -0
  23. package/dist/__tests__/react/useQuery.test.js.map +1 -0
  24. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts +2 -0
  25. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts.map +1 -0
  26. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js +38 -0
  27. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js.map +1 -0
  28. package/dist/__tests__/react/utils/stack-info.test.d.ts +2 -0
  29. package/dist/__tests__/react/utils/stack-info.test.d.ts.map +1 -0
  30. package/dist/__tests__/react/utils/stack-info.test.js +43 -0
  31. package/dist/__tests__/react/utils/stack-info.test.js.map +1 -0
  32. package/dist/__tests__/reactive.test.js +179 -93
  33. package/dist/__tests__/reactive.test.js.map +1 -1
  34. package/dist/__tests__/reactiveQueries/sql.test.d.ts +2 -0
  35. package/dist/__tests__/reactiveQueries/sql.test.d.ts.map +1 -0
  36. package/dist/__tests__/reactiveQueries/sql.test.js +337 -0
  37. package/dist/__tests__/reactiveQueries/sql.test.js.map +1 -0
  38. package/dist/inMemoryDatabase.d.ts +4 -3
  39. package/dist/inMemoryDatabase.d.ts.map +1 -1
  40. package/dist/inMemoryDatabase.js +3 -2
  41. package/dist/inMemoryDatabase.js.map +1 -1
  42. package/dist/index.d.ts +7 -5
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +4 -0
  45. package/dist/index.js.map +1 -1
  46. package/dist/react/index.d.ts +4 -3
  47. package/dist/react/index.d.ts.map +1 -1
  48. package/dist/react/index.js +3 -2
  49. package/dist/react/index.js.map +1 -1
  50. package/dist/react/useComponentState.d.ts +50 -0
  51. package/dist/react/useComponentState.d.ts.map +1 -0
  52. package/dist/react/useComponentState.js +240 -0
  53. package/dist/react/useComponentState.js.map +1 -0
  54. package/dist/react/useGlobalQuery.d.ts +3 -0
  55. package/dist/react/useGlobalQuery.d.ts.map +1 -0
  56. package/dist/react/useGlobalQuery.js +26 -0
  57. package/dist/react/useGlobalQuery.js.map +1 -0
  58. package/dist/react/useGraphQL.d.ts +3 -3
  59. package/dist/react/useGraphQL.d.ts.map +1 -1
  60. package/dist/react/useGraphQL.js +10 -8
  61. package/dist/react/useGraphQL.js.map +1 -1
  62. package/dist/react/useLiveStoreComponent.d.ts +6 -6
  63. package/dist/react/useLiveStoreComponent.d.ts.map +1 -1
  64. package/dist/react/useLiveStoreComponent.js +143 -99
  65. package/dist/react/useLiveStoreComponent.js.map +1 -1
  66. package/dist/react/useQuery.d.ts +2 -2
  67. package/dist/react/useQuery.d.ts.map +1 -1
  68. package/dist/react/useQuery.js +54 -30
  69. package/dist/react/useQuery.js.map +1 -1
  70. package/dist/react/useTemporaryQuery.d.ts +8 -0
  71. package/dist/react/useTemporaryQuery.d.ts.map +1 -0
  72. package/dist/react/useTemporaryQuery.js +19 -0
  73. package/dist/react/useTemporaryQuery.js.map +1 -0
  74. package/dist/react/utils/extractNamesFromStackTrace.d.ts +3 -0
  75. package/dist/react/utils/extractNamesFromStackTrace.d.ts.map +1 -0
  76. package/dist/react/utils/extractNamesFromStackTrace.js +40 -0
  77. package/dist/react/utils/extractNamesFromStackTrace.js.map +1 -0
  78. package/dist/react/utils/extractStackInfoFromStackTrace.d.ts +7 -0
  79. package/dist/react/utils/extractStackInfoFromStackTrace.d.ts.map +1 -0
  80. package/dist/react/utils/extractStackInfoFromStackTrace.js +40 -0
  81. package/dist/react/utils/extractStackInfoFromStackTrace.js.map +1 -0
  82. package/dist/react/utils/stack-info.d.ts +11 -0
  83. package/dist/react/utils/stack-info.d.ts.map +1 -0
  84. package/dist/react/utils/stack-info.js +49 -0
  85. package/dist/react/utils/stack-info.js.map +1 -0
  86. package/dist/reactive.d.ts +51 -67
  87. package/dist/reactive.d.ts.map +1 -1
  88. package/dist/reactive.js +138 -220
  89. package/dist/reactive.js.map +1 -1
  90. package/dist/reactiveQueries/base-class.d.ts +28 -21
  91. package/dist/reactiveQueries/base-class.d.ts.map +1 -1
  92. package/dist/reactiveQueries/base-class.js +22 -18
  93. package/dist/reactiveQueries/base-class.js.map +1 -1
  94. package/dist/reactiveQueries/graph.d.ts +10 -0
  95. package/dist/reactiveQueries/graph.d.ts.map +1 -0
  96. package/dist/reactiveQueries/graph.js +6 -0
  97. package/dist/reactiveQueries/graph.js.map +1 -0
  98. package/dist/reactiveQueries/graphql.d.ts +35 -17
  99. package/dist/reactiveQueries/graphql.d.ts.map +1 -1
  100. package/dist/reactiveQueries/graphql.js +86 -10
  101. package/dist/reactiveQueries/graphql.js.map +1 -1
  102. package/dist/reactiveQueries/js.d.ts +17 -12
  103. package/dist/reactiveQueries/js.d.ts.map +1 -1
  104. package/dist/reactiveQueries/js.js +30 -8
  105. package/dist/reactiveQueries/js.js.map +1 -1
  106. package/dist/reactiveQueries/sql.d.ts +28 -18
  107. package/dist/reactiveQueries/sql.d.ts.map +1 -1
  108. package/dist/reactiveQueries/sql.js +79 -16
  109. package/dist/reactiveQueries/sql.js.map +1 -1
  110. package/dist/store.d.ts +35 -61
  111. package/dist/store.d.ts.map +1 -1
  112. package/dist/store.js +77 -272
  113. package/dist/store.js.map +1 -1
  114. package/package.json +4 -3
  115. package/src/QueryCache.ts +1 -1
  116. package/src/__tests__/react/fixture.tsx +10 -8
  117. package/src/__tests__/react/{useLiveStoreComponent.test.tsx → useComponentState.test.tsx} +9 -20
  118. package/src/__tests__/react/useQuery.test.tsx +48 -0
  119. package/src/__tests__/react/utils/stack-info.test.ts +45 -0
  120. package/src/__tests__/reactive.test.ts +212 -140
  121. package/src/__tests__/reactiveQueries/sql.test.ts +372 -0
  122. package/src/inMemoryDatabase.ts +11 -8
  123. package/src/index.ts +7 -11
  124. package/src/react/index.ts +4 -7
  125. package/src/react/{useLiveStoreComponent.ts → useComponentState.ts} +90 -253
  126. package/src/react/useQuery.ts +74 -40
  127. package/src/react/useTemporaryQuery.ts +23 -0
  128. package/src/react/utils/stack-info.ts +63 -0
  129. package/src/reactive.ts +234 -308
  130. package/src/reactiveQueries/base-class.ts +59 -42
  131. package/src/reactiveQueries/graph.ts +15 -0
  132. package/src/reactiveQueries/graphql.ts +143 -29
  133. package/src/reactiveQueries/js.ts +57 -20
  134. package/src/reactiveQueries/sql.ts +136 -36
  135. package/src/store.ts +121 -426
  136. package/src/react/useGraphQL.ts +0 -138
package/dist/reactive.js CHANGED
@@ -1,47 +1,60 @@
1
1
  // This is a simple implementation of a reactive dependency graph.
2
2
  import { pick } from '@livestore/utils';
3
- import { isEqual, max, uniqueId } from 'lodash-es';
3
+ import { isEqual, uniqueId } from 'lodash-es';
4
4
  import { BoundArray } from './bounded-collections.js';
5
- const NOT_REFRESHED_YET = Symbol.for('NOT_REFRESHED_YET');
6
- class DependencyNotReadyError extends Error {
7
- constructor(message) {
8
- super(message);
9
- this.name = 'DependencyNotReadyError';
10
- }
11
- }
5
+ // import { getDurationMsFromSpan } from './otel.js'
6
+ export const NOT_REFRESHED_YET = Symbol.for('NOT_REFRESHED_YET');
12
7
  export const unknownRefreshReason = () => {
13
- debugger;
8
+ // debugger
14
9
  return { _tag: 'unknown' };
15
10
  };
16
11
  const uniqueNodeId = () => uniqueId('node-');
17
12
  const uniqueRefreshInfoId = () => uniqueId('refresh-info-');
18
13
  const serializeAtom = (atom) => ({
19
- ...pick(atom, ['_tag', 'height', 'id', 'label', 'meta', 'result']),
14
+ ...pick(atom, ['_tag', 'id', 'label', 'meta']),
20
15
  sub: Array.from(atom.sub).map((a) => a.id),
21
16
  super: Array.from(atom.super).map((a) => a.id),
22
17
  });
23
- const serializeEffect = (effect) => pick(effect, ['_tag', 'id']);
18
+ // const serializeEffect = (effect: Effect): SerializedEffect => pick(effect, ['_tag', 'id'])
24
19
  export class ReactiveGraph {
25
20
  constructor(options) {
26
21
  this.atoms = new Set();
27
- this.effects = new Set();
28
- this.dirtyNodes = new Set();
29
22
  this.debugRefreshInfos = new BoundArray(5000);
23
+ this.runEffects = (effectsToRefresh, options) => {
24
+ this.effectsWrapper(() => {
25
+ this.currentDebugRefresh = { refreshedAtoms: [], startMs: performance.now() };
26
+ for (const effect of effectsToRefresh) {
27
+ effect.doEffect(options?.otelContext);
28
+ }
29
+ const refreshedAtoms = this.currentDebugRefresh.refreshedAtoms;
30
+ const durationMs = performance.now() - this.currentDebugRefresh.startMs;
31
+ this.currentDebugRefresh = undefined;
32
+ const refreshDebugInfo = {
33
+ id: uniqueRefreshInfoId(),
34
+ reason: options?.debugRefreshReason ?? unknownRefreshReason(),
35
+ skippedRefresh: false,
36
+ refreshedAtoms,
37
+ durationMs,
38
+ completedTimestamp: Date.now(),
39
+ graphSnapshot: this.getSnapshot(),
40
+ };
41
+ this.debugRefreshInfos.push(refreshDebugInfo);
42
+ });
43
+ };
30
44
  this.getSnapshot = () => ({
31
45
  atoms: Array.from(this.atoms).map(serializeAtom),
32
- effects: Array.from(this.effects).map(serializeEffect),
33
- dirtyNodes: Array.from(this.dirtyNodes).map((a) => a.id),
46
+ // effects: Array.from(this.effects).map(serializeEffect),
47
+ // dirtyNodes: Array.from(this.dirtyNodes).map((a) => a.id),
34
48
  });
35
49
  this.effectsWrapper = options?.effectsWrapper ?? ((runEffects) => runEffects());
36
- this.otelTracer = options.otelTracer;
37
50
  }
38
51
  makeRef(val, options) {
39
52
  const ref = {
40
53
  _tag: 'ref',
41
54
  id: uniqueNodeId(),
42
- result: val,
43
- height: 0,
44
- getResult: () => ref.result,
55
+ isDirty: false,
56
+ previousResult: val,
57
+ computeResult: () => ref.previousResult,
45
58
  sub: new Set(),
46
59
  super: new Set(),
47
60
  label: options?.label,
@@ -51,26 +64,69 @@ export class ReactiveGraph {
51
64
  this.atoms.add(ref);
52
65
  return ref;
53
66
  }
54
- makeThunk(getResult, options, otelContext) {
67
+ makeThunk(getResult, options) {
55
68
  const thunk = {
56
69
  _tag: 'thunk',
57
70
  id: uniqueNodeId(),
58
- result: NOT_REFRESHED_YET,
59
- height: 0,
60
- getResult,
71
+ previousResult: NOT_REFRESHED_YET,
72
+ isDirty: true,
73
+ computeResult: (otelContext, debugRefreshReason) => {
74
+ if (thunk.isDirty) {
75
+ const neededCurrentRefresh = this.currentDebugRefresh === undefined;
76
+ if (neededCurrentRefresh) {
77
+ this.currentDebugRefresh = { refreshedAtoms: [], startMs: performance.now() };
78
+ }
79
+ // Reset previous subcomputations as we're about to re-add them as part of the `doEffect` call below
80
+ thunk.sub = new Set();
81
+ const getAtom = (atom, otelContext) => {
82
+ this.addEdge(thunk, atom);
83
+ return compute(atom, otelContext);
84
+ };
85
+ let debugInfo = undefined;
86
+ const setDebugInfo = (debugInfo_) => {
87
+ debugInfo = debugInfo_;
88
+ };
89
+ const result = getResult(getAtom, setDebugInfo, this.context ?? throwContextNotSetError(), otelContext);
90
+ const resultChanged = thunk.equal(thunk.previousResult, result) === false;
91
+ const debugInfoForAtom = {
92
+ atom: serializeAtom(thunk),
93
+ resultChanged,
94
+ debugInfo: debugInfo ?? unknownRefreshReason(),
95
+ };
96
+ this.currentDebugRefresh.refreshedAtoms.push(debugInfoForAtom);
97
+ thunk.isDirty = false;
98
+ thunk.previousResult = result;
99
+ thunk.recomputations++;
100
+ if (neededCurrentRefresh) {
101
+ const refreshedAtoms = this.currentDebugRefresh.refreshedAtoms;
102
+ const durationMs = performance.now() - this.currentDebugRefresh.startMs;
103
+ this.currentDebugRefresh = undefined;
104
+ const refreshDebugInfo = {
105
+ id: uniqueRefreshInfoId(),
106
+ reason: debugRefreshReason ?? { _tag: 'makeThunk', label: options?.label },
107
+ skippedRefresh: false,
108
+ refreshedAtoms,
109
+ durationMs,
110
+ completedTimestamp: Date.now(),
111
+ graphSnapshot: this.getSnapshot(),
112
+ };
113
+ this.debugRefreshInfos.push(refreshDebugInfo);
114
+ }
115
+ return result;
116
+ }
117
+ else {
118
+ return thunk.previousResult;
119
+ }
120
+ },
61
121
  sub: new Set(),
62
122
  super: new Set(),
123
+ recomputations: 0,
63
124
  label: options?.label,
64
125
  meta: options?.meta,
65
126
  equal: options?.equal ?? isEqual,
127
+ __getResult: getResult,
66
128
  };
67
129
  this.atoms.add(thunk);
68
- this.dirtyNodes.add(thunk);
69
- this.refresh({
70
- otelHint: options?.label ?? 'makeThunk',
71
- debugRefreshReason: options?.debugRefreshReason ?? { _tag: 'makeThunk', label: options?.label },
72
- }, otelContext);
73
- // Manually tell the typesystem this thunk is guaranteed to have a result at this point
74
130
  return thunk;
75
131
  }
76
132
  destroy(node) {
@@ -84,219 +140,81 @@ export class ReactiveGraph {
84
140
  for (const subComp of node.sub) {
85
141
  this.removeEdge(node, subComp);
86
142
  }
87
- if (node._tag === 'effect') {
88
- this.effects.delete(node);
89
- }
90
- else {
143
+ if (node._tag !== 'effect') {
91
144
  this.atoms.delete(node);
92
145
  }
93
146
  }
94
- makeEffect(doEffect, options, otelContext) {
147
+ makeEffect(doEffect, options) {
95
148
  const effect = {
96
149
  _tag: 'effect',
97
150
  id: uniqueNodeId(),
98
- doEffect,
151
+ doEffect: (otelContext) => {
152
+ // NOTE we're not tracking any debug refresh info for effects as they're tracked by the thunks they depend on
153
+ // Reset previous subcomputations as we're about to re-add them as part of the `doEffect` call below
154
+ effect.sub = new Set();
155
+ const getAtom = (atom, otelContext) => {
156
+ this.addEdge(effect, atom);
157
+ return compute(atom, otelContext);
158
+ };
159
+ doEffect(getAtom, otelContext);
160
+ },
99
161
  sub: new Set(),
162
+ label: options?.label,
100
163
  };
101
- this.effects.add(effect);
102
- this.dirtyNodes.add(effect);
103
- this.refresh({ otelHint: 'makeEffect', debugRefreshReason: { _tag: 'makeEffect', label: options?.label } }, otelContext);
104
164
  return effect;
105
165
  }
106
- setRef(ref, val, options, otelContext) {
107
- const { otelHint, skipRefresh, debugRefreshReason } = options ?? {};
108
- ref.result = val;
109
- this.dirtyNodes.add(ref);
110
- if (skipRefresh) {
111
- const refreshDebugInfo = {
112
- id: uniqueRefreshInfoId(),
113
- reason: debugRefreshReason ?? unknownRefreshReason(),
114
- skippedRefresh: true,
115
- refreshedAtoms: [],
116
- durationMs: 0,
117
- completedTimestamp: Date.now(),
118
- graphSnapshot: this.getSnapshot(),
119
- };
120
- this.debugRefreshInfos.push(refreshDebugInfo);
121
- return;
122
- }
123
- this.refresh({ otelHint, debugRefreshReason }, otelContext);
166
+ setRef(ref, val, options) {
167
+ ref.previousResult = val;
168
+ const effectsToRefresh = new Set();
169
+ markSuperCompDirtyRec(ref, effectsToRefresh);
170
+ this.runEffects(effectsToRefresh, options);
124
171
  }
125
- setRefs(refs, options, otelContext) {
126
- const otelHint = options?.otelHint ?? '';
127
- const skipRefresh = options?.skipRefresh ?? false;
128
- const debugRefreshReason = options?.debugRefreshReason;
172
+ setRefs(refs, options) {
173
+ const effectsToRefresh = new Set();
129
174
  for (const [ref, val] of refs) {
130
- ref.result = val;
131
- this.dirtyNodes.add(ref);
132
- }
133
- if (skipRefresh) {
134
- const refreshDebugInfo = {
135
- id: uniqueRefreshInfoId(),
136
- reason: debugRefreshReason ?? unknownRefreshReason(),
137
- skippedRefresh: true,
138
- refreshedAtoms: [],
139
- durationMs: 0,
140
- completedTimestamp: Date.now(),
141
- graphSnapshot: this.getSnapshot(),
142
- };
143
- this.debugRefreshInfos.push(refreshDebugInfo);
144
- return;
145
- }
146
- this.refresh({ otelHint, debugRefreshReason }, otelContext);
147
- }
148
- get(atom, context) {
149
- // Autotracking: if we're getting the value of an atom,
150
- // that means it's a subcomputation for the currently refreshing atom.
151
- this.addEdge(context, atom);
152
- const dependencyMightBeStale = context._tag !== 'effect' && context.height <= atom.height;
153
- const dependencyNotRefreshedYet = atom.result === NOT_REFRESHED_YET;
154
- if (dependencyMightBeStale || dependencyNotRefreshedYet) {
155
- throw new DependencyNotReadyError(`${this.label(context)} referenced dependency ${this.label(atom)} which isn't ready`);
156
- }
157
- return atom.result;
158
- }
159
- /**
160
- * Update the graph to be consistent with the current values of the root atoms.
161
- * Generally we run this after a ref is updated.
162
- * At the end of the refresh, we run any effects that were scheduled.
163
- *
164
- * @param roots Root atoms to start the refresh from
165
- */
166
- refresh(options, otelContext) {
167
- const otelHint = options?.otelHint ?? '';
168
- const debugRefreshReason = options?.debugRefreshReason;
169
- const roots = [...this.dirtyNodes];
170
- const debugInfoForRefreshedAtoms = [];
171
- // if (otelHint.includes('tableName')) {
172
- // console.log('refresh', otelHint, { shouldTrace })
173
- // }
174
- this.otelTracer.startActiveSpan(`LiveStore.refresh:${otelHint}`, {}, otelContext, (span) => {
175
- const atomsToRefresh = roots.filter(isAtom);
176
- const effectsToRun = new Set(roots.filter(isEffect));
177
- span.setAttribute('livestore.hint', otelHint);
178
- span.setAttribute('livestore.rootsCount', roots.length);
179
- // span.setAttribute('sstack', new Error().stack!)
180
- // Sort in topological order, starting with minimum height
181
- while (atomsToRefresh.length > 0) {
182
- atomsToRefresh.sort((a, b) => a.height - b.height);
183
- const atomToRefresh = atomsToRefresh.shift();
184
- // Recompute the value
185
- let resultChanged = false;
186
- const debugInfoForAtom = {
187
- atom: serializeAtom(atomToRefresh),
188
- resultChanged,
189
- // debugInfo: unknownRefreshReason() as TDebugThunkInfo,
190
- debugInfo: { _tag: 'unknown' },
191
- durationMs: 0,
192
- };
193
- try {
194
- atomToRefresh.sub = new Set();
195
- const beforeTimestamp = performance.now();
196
- const newResult = atomToRefresh.getResult((atom) => this.get(atom, atomToRefresh), (debugInfo) => {
197
- debugInfoForAtom.debugInfo = debugInfo;
198
- });
199
- const afterTimestamp = performance.now();
200
- debugInfoForAtom.durationMs = afterTimestamp - beforeTimestamp;
201
- // Determine if the result changed to do early cutoff and avoid further unnecessary updates.
202
- // Refs never depend on anything, so if a ref is being refreshed it definitely changed.
203
- // For thunks, we use a deep equality check.
204
- resultChanged =
205
- atomToRefresh._tag === 'ref' ||
206
- (atomToRefresh._tag === 'thunk' && !atomToRefresh.equal(atomToRefresh.result, newResult));
207
- if (resultChanged) {
208
- atomToRefresh.result = newResult;
209
- }
210
- this.dirtyNodes.delete(atomToRefresh);
211
- }
212
- catch (e) {
213
- if (e instanceof DependencyNotReadyError) {
214
- // If we hit a dependency that wasn't ready yet,
215
- // abort this recomputation and try again later.
216
- if (!atomsToRefresh.includes(atomToRefresh)) {
217
- atomsToRefresh.push(atomToRefresh);
218
- }
219
- }
220
- else {
221
- throw e;
222
- }
223
- }
224
- debugInfoForRefreshedAtoms.push(debugInfoForAtom);
225
- if (!resultChanged) {
226
- continue;
227
- }
228
- // Schedule supercomputations
229
- for (const superComp of atomToRefresh.super) {
230
- switch (superComp._tag) {
231
- case 'ref':
232
- case 'thunk': {
233
- if (!atomsToRefresh.includes(superComp)) {
234
- atomsToRefresh.push(superComp);
235
- }
236
- break;
237
- }
238
- case 'effect': {
239
- effectsToRun.add(superComp);
240
- break;
241
- }
242
- }
243
- }
244
- }
245
- this.effectsWrapper(() => {
246
- for (const effect of effectsToRun) {
247
- effect.doEffect((atom) => this.get(atom, effect));
248
- this.dirtyNodes.delete(effect);
249
- }
250
- });
251
- span.end();
252
- const spanDurationHr = span._duration;
253
- const spanDurationMs = spanDurationHr[0] * 1000 + spanDurationHr[1] / 1000000;
254
- const refreshDebugInfo = {
255
- id: uniqueRefreshInfoId(),
256
- reason: debugRefreshReason ?? unknownRefreshReason(),
257
- refreshedAtoms: debugInfoForRefreshedAtoms,
258
- skippedRefresh: false,
259
- durationMs: spanDurationMs,
260
- completedTimestamp: Date.now(),
261
- graphSnapshot: this.getSnapshot(),
262
- };
263
- this.debugRefreshInfos.push(refreshDebugInfo);
264
- });
265
- }
266
- label(atom) {
267
- if (atom._tag === 'effect') {
268
- return `unknown effect`;
269
- }
270
- else {
271
- return atom.label ?? `unknown ${atom._tag}`;
175
+ ref.previousResult = val;
176
+ markSuperCompDirtyRec(ref, effectsToRefresh);
272
177
  }
178
+ this.runEffects(effectsToRefresh, options);
273
179
  }
274
180
  addEdge(superComp, subComp) {
275
181
  superComp.sub.add(subComp);
276
182
  subComp.super.add(superComp);
277
- this.updateAtomHeight(superComp);
278
183
  }
279
184
  removeEdge(superComp, subComp) {
280
185
  superComp.sub.delete(subComp);
281
186
  subComp.super.delete(superComp);
282
- this.updateAtomHeight(superComp);
283
187
  }
284
- updateAtomHeight(atom) {
285
- switch (atom._tag) {
286
- case 'ref': {
287
- atom.height = 0;
288
- break;
289
- }
290
- case 'thunk': {
291
- atom.height = (max([...atom.sub].map((atom) => atom.height)) || 0) + 1;
292
- break;
293
- }
294
- case 'effect': {
295
- break;
296
- }
188
+ }
189
+ // const isAtom = <T, TContext>(a: Atom<T, TContext> | Effect): a is Atom<T, TContext> =>
190
+ // a._tag === 'ref' || a._tag === 'thunk'
191
+ // const isEffect = <T, TContext>(a: Atom<T, TContext> | Effect): a is Effect => a._tag === 'effect'
192
+ const compute = (atom, otelContext) => {
193
+ // const __getResult = atom._tag === 'thunk' ? atom.__getResult.toString() : ''
194
+ if (atom.isDirty) {
195
+ // console.log('atom is dirty', atom.id, atom.label ?? '', atom._tag, __getResult)
196
+ const result = atom.computeResult(otelContext);
197
+ atom.isDirty = false;
198
+ atom.previousResult = result;
199
+ return result;
200
+ }
201
+ else {
202
+ // console.log('atom is clean', atom.id, atom.label ?? '', atom._tag, __getResult)
203
+ return atom.previousResult;
204
+ }
205
+ };
206
+ const markSuperCompDirtyRec = (atom, effectsToRefresh) => {
207
+ for (const superComp of atom.super) {
208
+ if (superComp._tag === 'thunk' || superComp._tag === 'ref') {
209
+ superComp.isDirty = true;
210
+ markSuperCompDirtyRec(superComp, effectsToRefresh);
211
+ }
212
+ else {
213
+ effectsToRefresh.add(superComp);
297
214
  }
298
215
  }
299
- }
300
- const isAtom = (a) => a._tag === 'ref' || a._tag === 'thunk';
301
- const isEffect = (a) => a._tag === 'effect';
216
+ };
217
+ const throwContextNotSetError = () => {
218
+ throw new Error(`LiveStore Error: \`context\` not set on ReactiveGraph`);
219
+ };
302
220
  //# sourceMappingURL=reactive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reactive.js","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reactive.js","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,34 @@
1
- import * as otel from '@opentelemetry/api';
2
- import type { ComponentKey } from '../componentKey.js';
3
- import type { Store } from '../store.js';
1
+ import type * as otel from '@opentelemetry/api';
2
+ import type { StackInfo } from '../react/utils/stack-info.js';
3
+ import type { Atom, GetAtom, RefreshReasonWithGenericReasons, Thunk } from '../reactive.js';
4
+ import type { RefreshReason } from '../store.js';
5
+ import { type DbContext } from './graph.js';
6
+ import type { LiveStoreJSQuery } from './js.js';
4
7
  export type UnsubscribeQuery = () => void;
5
- export declare abstract class LiveStoreQueryBase<TResult> {
6
- /** The key for the associated component */
7
- componentKey: ComponentKey;
8
- /** Human-readable label for the query for debugging */
8
+ export interface ILiveStoreQuery<TResult> {
9
+ id: number;
10
+ /** A reactive thunk representing the query results */
11
+ results$: Thunk<TResult, DbContext, RefreshReason>;
9
12
  label: string;
10
- /** A pointer back to the store containing this query */
11
- store: Store;
12
- /** Otel Span is started in LiveStore store but ended in this query */
13
- otelContext: otel.Context;
14
- /** The string key is used to identify a subscription from "outside" */
15
- activeSubscriptions: Map<string, UnsubscribeQuery>;
16
- constructor({ componentKey, label, store, otelContext, }: {
17
- componentKey: ComponentKey;
18
- label: string;
19
- store: Store;
20
- otelContext: otel.Context;
21
- });
22
- destroy: () => void;
23
- subscribe: (onNewValue: (value: TResult) => void, onSubsubscribe?: () => void, options?: {
13
+ run: (otelContext?: otel.Context, debugRefreshReason?: RefreshReasonWithGenericReasons<RefreshReason>) => TResult;
14
+ destroy(): void;
15
+ activeSubscriptions: Set<StackInfo>;
16
+ }
17
+ export declare abstract class LiveStoreQueryBase<TResult> implements ILiveStoreQuery<TResult> {
18
+ id: number;
19
+ /** Human-readable label for the query for debugging */
20
+ abstract label: string;
21
+ abstract results$: Thunk<TResult, DbContext, RefreshReason>;
22
+ activeSubscriptions: Set<StackInfo>;
23
+ get runs(): number;
24
+ abstract destroy: () => void;
25
+ run: (otelContext?: otel.Context, debugRefreshReason?: RefreshReasonWithGenericReasons<RefreshReason>) => TResult;
26
+ runAndDestroy: (otelContext?: otel.Context, debugRefreshReason?: RefreshReasonWithGenericReasons<RefreshReason>) => TResult;
27
+ subscribe: (onNewValue: (value: TResult) => void, onUnsubsubscribe?: () => void, options?: {
24
28
  label?: string;
29
+ otelContext?: otel.Context;
25
30
  } | undefined) => (() => void);
26
31
  }
32
+ export type GetAtomResult = <T>(atom: Atom<T, any, RefreshReason> | LiveStoreJSQuery<T>) => T;
33
+ export declare const makeGetAtomResult: (get: GetAtom, otelContext: otel.Context) => GetAtomResult;
27
34
  //# sourceMappingURL=base-class.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-class.d.ts","sourceRoot":"","sources":["../../src/reactiveQueries/base-class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAA;AAEzC,8BAAsB,kBAAkB,CAAC,OAAO;IAC9C,2CAA2C;IAC3C,YAAY,EAAE,YAAY,CAAA;IAC1B,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAA;IACb,wDAAwD;IACxD,KAAK,EAAE,KAAK,CAAA;IACZ,sEAAsE;IACtE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAA;IAEzB,uEAAuE;IACvE,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAY;gBAElD,EACV,YAAY,EACZ,KAAK,EACL,KAAK,EACL,WAAW,GACZ,EAAE;QACD,YAAY,EAAE,YAAY,CAAA;QAC1B,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,KAAK,CAAA;QACZ,WAAW,EAAE,IAAI,CAAC,OAAO,CAAA;KAC1B;IAOD,OAAO,aAUN;IAED,SAAS,uBACa,OAAO,KAAK,IAAI,mBACnB,MAAM,IAAI,YACjB;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,KACvC,CAAC,MAAM,IAAI,CAAC,CAAiF;CACjG"}
1
+ {"version":3,"file":"base-class.d.ts","sourceRoot":"","sources":["../../src/reactiveQueries/base-class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,+BAA+B,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAA;AAIzC,MAAM,WAAW,eAAe,CAAC,OAAO;IACtC,EAAE,EAAE,MAAM,CAAA;IAEV,sDAAsD;IACtD,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;IAElD,KAAK,EAAE,MAAM,CAAA;IAEb,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,+BAA+B,CAAC,aAAa,CAAC,KAAK,OAAO,CAAA;IAEjH,OAAO,IAAI,IAAI,CAAA;IAEf,mBAAmB,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;CACpC;AAED,8BAAsB,kBAAkB,CAAC,OAAO,CAAE,YAAW,eAAe,CAAC,OAAO,CAAC;IACnF,EAAE,SAAmB;IAErB,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IAEtB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;IAE3D,mBAAmB,EAAE,GAAG,CAAC,SAAS,CAAC,CAAY;IAE/C,IAAI,IAAI,WAEP;IAED,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;IAE5B,GAAG,iBAAkB,KAAK,OAAO,uBAAuB,gCAAgC,aAAa,CAAC,KAAG,OAAO,CAClD;IAE9D,aAAa,iBACG,KAAK,OAAO,uBACL,gCAAgC,aAAa,CAAC,KAClE,OAAO,CAIT;IAED,SAAS,uBACa,OAAO,KAAK,IAAI,qBACjB,MAAM,IAAI,YACnB;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,KAAK,OAAO,CAAA;KAAE,GAAG,SAAS,KACnE,CAAC,MAAM,IAAI,CAAC,CAAiF;CACjG;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAE7F,eAAO,MAAM,iBAAiB,QAAS,OAAO,eAAe,KAAK,OAAO,kBAOxE,CAAA"}
@@ -1,23 +1,27 @@
1
- import * as otel from '@opentelemetry/api';
1
+ import { dbGraph } from './graph.js';
2
+ let queryIdCounter = 0;
2
3
  export class LiveStoreQueryBase {
3
- constructor({ componentKey, label, store, otelContext, }) {
4
- /** The string key is used to identify a subscription from "outside" */
5
- this.activeSubscriptions = new Map();
6
- this.destroy = () => {
7
- const span = otel.trace.getSpan(this.otelContext);
8
- span.end();
9
- // NOTE usually the `unsubscribe` function is called by `useLiveStoreComponent` but this code path
10
- // is used for manual store destruction, so we need to manually unsubscribe here
11
- for (const [_key, unsubscribe] of this.activeSubscriptions) {
12
- // unsubscribe from the query
13
- unsubscribe();
14
- }
4
+ constructor() {
5
+ this.id = queryIdCounter++;
6
+ this.activeSubscriptions = new Set();
7
+ this.run = (otelContext, debugRefreshReason) => this.results$.computeResult(otelContext, debugRefreshReason);
8
+ this.runAndDestroy = (otelContext, debugRefreshReason) => {
9
+ const result = this.run(otelContext, debugRefreshReason);
10
+ this.destroy();
11
+ return result;
15
12
  };
16
- this.subscribe = (onNewValue, onSubsubscribe, options) => this.store.subscribe(this, onNewValue, onSubsubscribe, options);
17
- this.componentKey = componentKey;
18
- this.label = label;
19
- this.store = store;
20
- this.otelContext = otelContext;
13
+ this.subscribe = (onNewValue, onUnsubsubscribe, options) => dbGraph.context.store.subscribe(this, onNewValue, onUnsubsubscribe, options);
14
+ }
15
+ get runs() {
16
+ return this.results$.recomputations;
21
17
  }
22
18
  }
19
+ export const makeGetAtomResult = (get, otelContext) => {
20
+ const getAtom = (atom) => {
21
+ if (atom._tag === 'thunk' || atom._tag === 'ref')
22
+ return get(atom, otelContext);
23
+ return get(atom.results$, otelContext);
24
+ };
25
+ return getAtom;
26
+ };
23
27
  //# sourceMappingURL=base-class.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-class.js","sourceRoot":"","sources":["../../src/reactiveQueries/base-class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAO1C,MAAM,OAAgB,kBAAkB;IAatC,YAAY,EACV,YAAY,EACZ,KAAK,EACL,KAAK,EACL,WAAW,GAMZ;QAbD,uEAAuE;QACvE,wBAAmB,GAAkC,IAAI,GAAG,EAAE,CAAA;QAmB9D,YAAO,GAAG,GAAG,EAAE;YACb,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAE,CAAA;YAClD,IAAI,CAAC,GAAG,EAAE,CAAA;YAEV,kGAAkG;YAClG,gFAAgF;YAChF,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC1D,6BAA6B;gBAC7B,WAAW,EAAE,CAAA;aACd;QACH,CAAC,CAAA;QAED,cAAS,GAAG,CACV,UAAoC,EACpC,cAA2B,EAC3B,OAAwC,EAC1B,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAW,EAAE,UAAiB,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;QAtB9F,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;CAmBF"}
1
+ {"version":3,"file":"base-class.js","sourceRoot":"","sources":["../../src/reactiveQueries/base-class.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,OAAO,EAAE,MAAM,YAAY,CAAA;AAKpD,IAAI,cAAc,GAAG,CAAC,CAAA;AAiBtB,MAAM,OAAgB,kBAAkB;IAAxC;QACE,OAAE,GAAG,cAAc,EAAE,CAAA;QAOrB,wBAAmB,GAAmB,IAAI,GAAG,EAAE,CAAA;QAQ/C,QAAG,GAAG,CAAC,WAA0B,EAAE,kBAAmE,EAAW,EAAE,CACjH,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;QAE9D,kBAAa,GAAG,CACd,WAA0B,EAC1B,kBAAmE,EAC1D,EAAE;YACX,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;YACxD,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,OAAO,MAAM,CAAA;QACf,CAAC,CAAA;QAED,cAAS,GAAG,CACV,UAAoC,EACpC,gBAA6B,EAC7B,OAAoE,EACtD,EAAE,CAAC,OAAO,CAAC,OAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAA;IAClG,CAAC;IAvBC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAA;IACrC,CAAC;CAqBF;AAID,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAY,EAAE,WAAyB,EAAE,EAAE;IAC3E,MAAM,OAAO,GAAkB,CAAC,IAAI,EAAE,EAAE;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;QAC/E,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IACxC,CAAC,CAAA;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type * as otel from '@opentelemetry/api';
2
+ import { ReactiveGraph } from '../reactive.js';
3
+ import type { QueryDebugInfo, RefreshReason, Store } from '../store.js';
4
+ export type DbContext = {
5
+ store: Store;
6
+ otelTracer: otel.Tracer;
7
+ rootOtelContext: otel.Context;
8
+ };
9
+ export declare const dbGraph: ReactiveGraph<RefreshReason, QueryDebugInfo, DbContext>;
10
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/reactiveQueries/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEvE,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,KAAK,CAAA;IACZ,UAAU,EAAE,IAAI,CAAC,MAAM,CAAA;IACvB,eAAe,EAAE,IAAI,CAAC,OAAO,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,OAAO,yDAElB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import ReactDOM from 'react-dom';
2
+ import { ReactiveGraph } from '../reactive.js';
3
+ export const dbGraph = new ReactiveGraph({
4
+ effectsWrapper: (run) => ReactDOM.unstable_batchedUpdates(() => run()),
5
+ });
6
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/reactiveQueries/graph.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAS9C,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,aAAa,CAA2C;IACjF,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;CACvE,CAAC,CAAA"}