@livestore/livestore 0.0.13 → 0.0.14

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 (205) hide show
  1. package/README.md +18 -21
  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 +13 -14
  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__/reactive.test.js +168 -95
  29. package/dist/__tests__/reactive.test.js.map +1 -1
  30. package/dist/__tests__/reactiveQueries/sql.test.d.ts +2 -0
  31. package/dist/__tests__/reactiveQueries/sql.test.d.ts.map +1 -0
  32. package/dist/__tests__/reactiveQueries/sql.test.js +337 -0
  33. package/dist/__tests__/reactiveQueries/sql.test.js.map +1 -0
  34. package/dist/effect/LiveStore.d.ts +3 -9
  35. package/dist/effect/LiveStore.d.ts.map +1 -1
  36. package/dist/effect/LiveStore.js +11 -7
  37. package/dist/effect/LiveStore.js.map +1 -1
  38. package/dist/inMemoryDatabase.d.ts +17 -21
  39. package/dist/inMemoryDatabase.d.ts.map +1 -1
  40. package/dist/inMemoryDatabase.js +2 -9
  41. package/dist/inMemoryDatabase.js.map +1 -1
  42. package/dist/index.d.ts +9 -7
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +7 -3
  45. package/dist/index.js.map +1 -1
  46. package/dist/migrations.d.ts +7 -0
  47. package/dist/migrations.d.ts.map +1 -1
  48. package/dist/migrations.js +18 -13
  49. package/dist/migrations.js.map +1 -1
  50. package/dist/react/LiveStoreProvider.d.ts +1 -3
  51. package/dist/react/LiveStoreProvider.d.ts.map +1 -1
  52. package/dist/react/LiveStoreProvider.js +13 -10
  53. package/dist/react/LiveStoreProvider.js.map +1 -1
  54. package/dist/react/index.d.ts +4 -4
  55. package/dist/react/index.d.ts.map +1 -1
  56. package/dist/react/index.js +3 -3
  57. package/dist/react/index.js.map +1 -1
  58. package/dist/react/useComponentState.d.ts +50 -0
  59. package/dist/react/useComponentState.d.ts.map +1 -0
  60. package/dist/react/useComponentState.js +248 -0
  61. package/dist/react/useComponentState.js.map +1 -0
  62. package/dist/react/useGlobalQuery.d.ts +2 -2
  63. package/dist/react/useGlobalQuery.d.ts.map +1 -1
  64. package/dist/react/useGlobalQuery.js +5 -2
  65. package/dist/react/useGlobalQuery.js.map +1 -1
  66. package/dist/react/useGraphQL.d.ts +5 -3
  67. package/dist/react/useGraphQL.d.ts.map +1 -1
  68. package/dist/react/useGraphQL.js +27 -7
  69. package/dist/react/useGraphQL.js.map +1 -1
  70. package/dist/react/useLiveStoreComponent.d.ts +14 -14
  71. package/dist/react/useLiveStoreComponent.d.ts.map +1 -1
  72. package/dist/react/useLiveStoreComponent.js +151 -91
  73. package/dist/react/useLiveStoreComponent.js.map +1 -1
  74. package/dist/react/useQuery.d.ts +3 -0
  75. package/dist/react/useQuery.d.ts.map +1 -0
  76. package/dist/react/useQuery.js +42 -0
  77. package/dist/react/useQuery.js.map +1 -0
  78. package/dist/react/useTemporaryQuery.d.ts +8 -0
  79. package/dist/react/useTemporaryQuery.d.ts.map +1 -0
  80. package/dist/react/useTemporaryQuery.js +17 -0
  81. package/dist/react/useTemporaryQuery.js.map +1 -0
  82. package/dist/react/utils/extractNamesFromStackTrace.d.ts +3 -0
  83. package/dist/react/utils/extractNamesFromStackTrace.d.ts.map +1 -0
  84. package/dist/react/utils/extractNamesFromStackTrace.js +40 -0
  85. package/dist/react/utils/extractNamesFromStackTrace.js.map +1 -0
  86. package/dist/react/utils/extractStackInfoFromStackTrace.d.ts +7 -0
  87. package/dist/react/utils/extractStackInfoFromStackTrace.d.ts.map +1 -0
  88. package/dist/react/utils/extractStackInfoFromStackTrace.js +40 -0
  89. package/dist/react/utils/extractStackInfoFromStackTrace.js.map +1 -0
  90. package/dist/reactive.d.ts +42 -48
  91. package/dist/reactive.d.ts.map +1 -1
  92. package/dist/reactive.js +293 -186
  93. package/dist/reactive.js.map +1 -1
  94. package/dist/reactiveQueries/base-class.d.ts +28 -20
  95. package/dist/reactiveQueries/base-class.d.ts.map +1 -1
  96. package/dist/reactiveQueries/base-class.js +25 -17
  97. package/dist/reactiveQueries/base-class.js.map +1 -1
  98. package/dist/reactiveQueries/graph.d.ts +10 -0
  99. package/dist/reactiveQueries/graph.d.ts.map +1 -0
  100. package/dist/reactiveQueries/graph.js +6 -0
  101. package/dist/reactiveQueries/graph.js.map +1 -0
  102. package/dist/reactiveQueries/graphql.d.ts +35 -18
  103. package/dist/reactiveQueries/graphql.d.ts.map +1 -1
  104. package/dist/reactiveQueries/graphql.js +91 -10
  105. package/dist/reactiveQueries/graphql.js.map +1 -1
  106. package/dist/reactiveQueries/js.d.ts +17 -13
  107. package/dist/reactiveQueries/js.d.ts.map +1 -1
  108. package/dist/reactiveQueries/js.js +31 -8
  109. package/dist/reactiveQueries/js.js.map +1 -1
  110. package/dist/reactiveQueries/sql.d.ts +22 -18
  111. package/dist/reactiveQueries/sql.d.ts.map +1 -1
  112. package/dist/reactiveQueries/sql.js +81 -16
  113. package/dist/reactiveQueries/sql.js.map +1 -1
  114. package/dist/schema.d.ts +0 -2
  115. package/dist/schema.d.ts.map +1 -1
  116. package/dist/schema.js +3 -6
  117. package/dist/schema.js.map +1 -1
  118. package/dist/storage/in-memory/index.d.ts +2 -2
  119. package/dist/storage/in-memory/index.d.ts.map +1 -1
  120. package/dist/storage/in-memory/index.js.map +1 -1
  121. package/dist/storage/index.d.ts +2 -2
  122. package/dist/storage/index.d.ts.map +1 -1
  123. package/dist/storage/tauri/index.d.ts +2 -2
  124. package/dist/storage/tauri/index.d.ts.map +1 -1
  125. package/dist/storage/tauri/index.js.map +1 -1
  126. package/dist/storage/web-worker/index.d.ts +4 -4
  127. package/dist/storage/web-worker/index.d.ts.map +1 -1
  128. package/dist/storage/web-worker/index.js +3 -5
  129. package/dist/storage/web-worker/index.js.map +1 -1
  130. package/dist/storage/web-worker/worker.js +2 -2
  131. package/dist/storage/web-worker/worker.js.map +1 -1
  132. package/dist/store.d.ts +19 -52
  133. package/dist/store.d.ts.map +1 -1
  134. package/dist/store.js +323 -266
  135. package/dist/store.js.map +1 -1
  136. package/dist/util.d.ts +3 -1
  137. package/dist/util.d.ts.map +1 -1
  138. package/dist/util.js +2 -0
  139. package/dist/util.js.map +1 -1
  140. package/package.json +2 -1
  141. package/src/QueryCache.ts +1 -1
  142. package/src/__tests__/react/fixture.tsx +21 -16
  143. package/src/__tests__/react/{useLiveStoreComponent.test.tsx → useComponentState.test.tsx} +9 -20
  144. package/src/__tests__/react/useQuery.test.tsx +48 -0
  145. package/src/__tests__/react/utils/extractStackInfoFromStackTrace.test.ts +40 -0
  146. package/src/__tests__/reactive.test.ts +194 -142
  147. package/src/__tests__/reactiveQueries/sql.test.ts +372 -0
  148. package/src/effect/LiveStore.ts +14 -18
  149. package/src/inMemoryDatabase.ts +22 -30
  150. package/src/index.ts +8 -6
  151. package/src/migrations.ts +39 -21
  152. package/src/react/LiveStoreProvider.tsx +13 -16
  153. package/src/react/index.ts +4 -8
  154. package/src/react/{useLiveStoreComponent.ts → useComponentState.ts} +98 -230
  155. package/src/react/useQuery.ts +58 -0
  156. package/src/react/useTemporaryQuery.ts +21 -0
  157. package/src/react/utils/extractStackInfoFromStackTrace.ts +47 -0
  158. package/src/reactive.ts +386 -267
  159. package/src/reactiveQueries/base-class.ts +61 -39
  160. package/src/reactiveQueries/graph.ts +15 -0
  161. package/src/reactiveQueries/graphql.ts +147 -31
  162. package/src/reactiveQueries/js.ts +54 -21
  163. package/src/reactiveQueries/sql.ts +128 -37
  164. package/src/schema.ts +2 -5
  165. package/src/storage/in-memory/index.ts +2 -2
  166. package/src/storage/index.ts +2 -2
  167. package/src/storage/tauri/index.ts +2 -2
  168. package/src/storage/web-worker/index.ts +6 -8
  169. package/src/storage/web-worker/worker.ts +2 -2
  170. package/src/store.ts +394 -418
  171. package/src/util.ts +8 -2
  172. package/dist/backends/base.d.ts +0 -13
  173. package/dist/backends/base.d.ts.map +0 -1
  174. package/dist/backends/base.js +0 -53
  175. package/dist/backends/base.js.map +0 -1
  176. package/dist/backends/in-memory/index.d.ts +0 -22
  177. package/dist/backends/in-memory/index.d.ts.map +0 -1
  178. package/dist/backends/in-memory/index.js +0 -45
  179. package/dist/backends/in-memory/index.js.map +0 -1
  180. package/dist/backends/index.d.ts +0 -41
  181. package/dist/backends/index.d.ts.map +0 -1
  182. package/dist/backends/index.js +0 -16
  183. package/dist/backends/index.js.map +0 -1
  184. package/dist/backends/tauri/index.d.ts +0 -21
  185. package/dist/backends/tauri/index.d.ts.map +0 -1
  186. package/dist/backends/tauri/index.js +0 -48
  187. package/dist/backends/tauri/index.js.map +0 -1
  188. package/dist/backends/utils/idb.d.ts +0 -10
  189. package/dist/backends/utils/idb.d.ts.map +0 -1
  190. package/dist/backends/utils/idb.js +0 -58
  191. package/dist/backends/utils/idb.js.map +0 -1
  192. package/dist/backends/web-worker/index.d.ts +0 -26
  193. package/dist/backends/web-worker/index.d.ts.map +0 -1
  194. package/dist/backends/web-worker/index.js +0 -63
  195. package/dist/backends/web-worker/index.js.map +0 -1
  196. package/dist/backends/web-worker/worker.d.ts +0 -17
  197. package/dist/backends/web-worker/worker.d.ts.map +0 -1
  198. package/dist/backends/web-worker/worker.js +0 -139
  199. package/dist/backends/web-worker/worker.js.map +0 -1
  200. package/dist/storage/base.d.ts +0 -10
  201. package/dist/storage/base.d.ts.map +0 -1
  202. package/dist/storage/base.js +0 -14
  203. package/dist/storage/base.js.map +0 -1
  204. package/src/react/useGlobalQuery.ts +0 -37
  205. package/src/react/useGraphQL.ts +0 -112
package/dist/reactive.js CHANGED
@@ -1,46 +1,40 @@
1
1
  // This is a simple implementation of a reactive dependency graph.
2
- import { pick } from '@livestore/utils';
2
+ import { pick, shouldNeverHappen } from '@livestore/utils';
3
3
  import { isEqual, max, uniqueId } from 'lodash-es';
4
4
  import { BoundArray } from './bounded-collections.js';
5
- class DependencyNotReadyError extends Error {
6
- constructor(message) {
7
- super(message);
8
- this.name = 'DependencyNotReadyError';
9
- }
10
- }
5
+ // import { getDurationMsFromSpan } from './otel.js'
6
+ export const NOT_REFRESHED_YET = Symbol.for('NOT_REFRESHED_YET');
11
7
  export const unknownRefreshReason = () => {
12
- debugger;
8
+ // debugger
13
9
  return { _tag: 'unknown' };
14
10
  };
15
11
  const uniqueNodeId = () => uniqueId('node-');
16
12
  const uniqueRefreshInfoId = () => uniqueId('refresh-info-');
17
13
  const serializeAtom = (atom) => ({
18
- ...pick(atom, ['_tag', 'height', 'id', 'label', 'meta', 'result']),
14
+ ...pick(atom, ['_tag', 'height', 'id', 'label', 'meta']),
19
15
  sub: Array.from(atom.sub).map((a) => a.id),
20
16
  super: Array.from(atom.super).map((a) => a.id),
21
17
  });
22
- const serializeEffect = (effect) => pick(effect, ['_tag', 'id']);
18
+ // const serializeEffect = (effect: Effect): SerializedEffect => pick(effect, ['_tag', 'id'])
23
19
  export class ReactiveGraph {
24
20
  constructor(options) {
25
21
  this.atoms = new Set();
26
- this.effects = new Set();
27
- this.dirtyNodes = new Set();
28
22
  this.debugRefreshInfos = new BoundArray(5000);
29
23
  this.getSnapshot = () => ({
30
24
  atoms: Array.from(this.atoms).map(serializeAtom),
31
- effects: Array.from(this.effects).map(serializeEffect),
32
- dirtyNodes: Array.from(this.dirtyNodes).map((a) => a.id),
25
+ // effects: Array.from(this.effects).map(serializeEffect),
26
+ // dirtyNodes: Array.from(this.dirtyNodes).map((a) => a.id),
33
27
  });
34
28
  this.effectsWrapper = options?.effectsWrapper ?? ((runEffects) => runEffects());
35
- this.otelTracer = options.otelTracer;
36
29
  }
37
30
  makeRef(val, options) {
38
31
  const ref = {
39
32
  _tag: 'ref',
40
33
  id: uniqueNodeId(),
41
- result: val,
34
+ isDirty: false,
35
+ previousResult: val,
42
36
  height: 0,
43
- getResult: () => ref.result,
37
+ computeResult: () => ref.previousResult,
44
38
  sub: new Set(),
45
39
  super: new Set(),
46
40
  label: options?.label,
@@ -50,26 +44,80 @@ export class ReactiveGraph {
50
44
  this.atoms.add(ref);
51
45
  return ref;
52
46
  }
53
- makeThunk(getResult, options, otelContext) {
47
+ makeThunk(getResult_, options) {
48
+ // const computeResult = (): T => {
49
+ // const getAtom = (atom: Atom<T, any>): T => {
50
+ // const __getResult = atom._tag === 'thunk' ? atom.__getResult.toString() : ''
51
+ // if (atom.isDirty) {
52
+ // console.log('atom is dirty', atom.id, atom.label ?? '', atom._tag, __getResult)
53
+ // const result = atom.computeResult()
54
+ // atom.isDirty = false
55
+ // atom.previousResult = result
56
+ // return result
57
+ // } else {
58
+ // console.log('atom is clean', atom.id, atom.label ?? '', atom._tag, __getResult)
59
+ // return atom.previousResult as T
60
+ // }
61
+ // }
62
+ // let resultChanged = false
63
+ // const debugInfoForAtom = {
64
+ // atom: serializeAtom(null as TODO),
65
+ // resultChanged,
66
+ // // debugInfo: unknownRefreshReason() as TDebugThunkInfo,
67
+ // debugInfo: { _tag: 'unknown' } as TDebugThunkInfo,
68
+ // durationMs: 0,
69
+ // } satisfies AtomDebugInfo<TDebugThunkInfo>
70
+ const addDebugInfo = (_debugInfo) => {
71
+ // debugInfoForAtom.debugInfo = debugInfo
72
+ };
73
+ // debugInfoForRefreshedAtoms.push(debugInfoForAtom)
74
+ // return getResult_(getAtom as GetAtom, addDebugInfo, this.context!)
75
+ // }
54
76
  const thunk = {
55
77
  _tag: 'thunk',
56
78
  id: uniqueNodeId(),
57
- result: undefined,
79
+ previousResult: NOT_REFRESHED_YET,
80
+ isDirty: true,
58
81
  height: 0,
59
- getResult,
82
+ computeResult: (otelContext) => {
83
+ if (thunk.isDirty) {
84
+ // Reset previous subcomputations as we're about to re-add them as part of the `doEffect` call below
85
+ thunk.sub = new Set();
86
+ const compute_ = (atom, otelContext) => {
87
+ this.addEdge(thunk, atom);
88
+ return compute(atom, otelContext);
89
+ };
90
+ const result = getResult_(compute_, addDebugInfo, this.context ?? shouldNeverHappen('No store context set yet'), otelContext);
91
+ thunk.isDirty = false;
92
+ thunk.previousResult = result;
93
+ thunk.recomputations++;
94
+ return result;
95
+ }
96
+ else {
97
+ return thunk.previousResult;
98
+ }
99
+ },
60
100
  sub: new Set(),
61
101
  super: new Set(),
102
+ recomputations: 0,
62
103
  label: options?.label,
63
104
  meta: options?.meta,
64
105
  equal: options?.equal ?? isEqual,
106
+ __getResult: getResult_,
65
107
  };
66
108
  this.atoms.add(thunk);
67
- this.dirtyNodes.add(thunk);
68
- this.refresh({
69
- otelHint: options?.label ?? 'makeThunk',
70
- debugRefreshReason: options?.debugRefreshReason ?? { _tag: 'makeThunk', label: options?.label },
71
- }, otelContext);
72
- // Manually tell the typesystem this thunk is guaranteed to have a result at this point
109
+ // this.dirtyNodes.add(thunk)
110
+ const debugRefreshReason = options?.debugRefreshReason ?? { _tag: 'makeThunk', label: options?.label };
111
+ const refreshDebugInfo = {
112
+ id: uniqueRefreshInfoId(),
113
+ reason: debugRefreshReason,
114
+ skippedRefresh: true,
115
+ refreshedAtoms: [],
116
+ durationMs: 0,
117
+ completedTimestamp: Date.now(),
118
+ graphSnapshot: this.getSnapshot(),
119
+ };
120
+ this.debugRefreshInfos.push(refreshDebugInfo);
73
121
  return thunk;
74
122
  }
75
123
  destroy(node) {
@@ -83,79 +131,97 @@ export class ReactiveGraph {
83
131
  for (const subComp of node.sub) {
84
132
  this.removeEdge(node, subComp);
85
133
  }
86
- if (node._tag === 'effect') {
87
- this.effects.delete(node);
88
- }
89
- else {
134
+ if (node._tag !== 'effect') {
90
135
  this.atoms.delete(node);
91
136
  }
92
137
  }
93
- makeEffect(doEffect, options, otelContext) {
138
+ makeEffect(doEffect, options) {
94
139
  const effect = {
95
140
  _tag: 'effect',
96
141
  id: uniqueNodeId(),
97
- doEffect,
142
+ doEffect: (otelContext) => {
143
+ // Reset previous subcomputations as we're about to re-add them as part of the `doEffect` call below
144
+ effect.sub = new Set();
145
+ const getAtom = (atom, otelContext) => {
146
+ this.addEdge(effect, atom);
147
+ return compute(atom, otelContext);
148
+ };
149
+ doEffect(getAtom, otelContext);
150
+ },
98
151
  sub: new Set(),
99
152
  };
100
- this.effects.add(effect);
101
- this.dirtyNodes.add(effect);
102
- this.refresh({ otelHint: 'makeEffect', debugRefreshReason: { _tag: 'makeEffect', label: options?.label } }, otelContext);
153
+ // this.effects.add(effect)
154
+ // this.dirtyNodes.add(effect)
155
+ const debugRefreshReason = options?.debugRefreshReason ?? { _tag: 'makeEffect', label: options?.label };
156
+ const refreshDebugInfo = {
157
+ id: uniqueRefreshInfoId(),
158
+ reason: debugRefreshReason ?? unknownRefreshReason(),
159
+ skippedRefresh: true,
160
+ refreshedAtoms: [],
161
+ durationMs: 0,
162
+ completedTimestamp: Date.now(),
163
+ graphSnapshot: this.getSnapshot(),
164
+ };
165
+ this.debugRefreshInfos.push(refreshDebugInfo);
103
166
  return effect;
104
167
  }
105
- setRef(ref, val, options, otelContext) {
106
- const { otelHint, skipRefresh, debugRefreshReason } = options ?? {};
107
- ref.result = val;
108
- this.dirtyNodes.add(ref);
109
- if (skipRefresh) {
110
- const refreshDebugInfo = {
111
- id: uniqueRefreshInfoId(),
112
- reason: debugRefreshReason ?? unknownRefreshReason(),
113
- skippedRefresh: true,
114
- refreshedAtoms: [],
115
- durationMs: 0,
116
- completedTimestamp: Date.now(),
117
- graphSnapshot: this.getSnapshot(),
118
- };
119
- this.debugRefreshInfos.push(refreshDebugInfo);
120
- return;
121
- }
122
- this.refresh({ otelHint, debugRefreshReason }, otelContext);
168
+ setRef(ref, val, options) {
169
+ const { debugRefreshReason } = options ?? {};
170
+ ref.previousResult = val;
171
+ const effectsToRefresh = new Set();
172
+ markSuperCompDirtyRec(ref, effectsToRefresh);
173
+ this.effectsWrapper(() => {
174
+ for (const effect of effectsToRefresh) {
175
+ effect.doEffect(options?.otelContext);
176
+ }
177
+ });
178
+ const refreshDebugInfo = {
179
+ id: uniqueRefreshInfoId(),
180
+ reason: debugRefreshReason ?? unknownRefreshReason(),
181
+ skippedRefresh: true,
182
+ refreshedAtoms: [],
183
+ durationMs: 0,
184
+ completedTimestamp: Date.now(),
185
+ graphSnapshot: this.getSnapshot(),
186
+ };
187
+ this.debugRefreshInfos.push(refreshDebugInfo);
123
188
  }
124
- setRefs(refs, options, otelContext) {
125
- const otelHint = options?.otelHint ?? '';
126
- const skipRefresh = options?.skipRefresh ?? false;
189
+ setRefs(refs, options) {
127
190
  const debugRefreshReason = options?.debugRefreshReason;
191
+ const effectsToRefresh = new Set();
128
192
  for (const [ref, val] of refs) {
129
- ref.result = val;
130
- this.dirtyNodes.add(ref);
131
- }
132
- if (skipRefresh) {
133
- const refreshDebugInfo = {
134
- id: uniqueRefreshInfoId(),
135
- reason: debugRefreshReason ?? unknownRefreshReason(),
136
- skippedRefresh: true,
137
- refreshedAtoms: [],
138
- durationMs: 0,
139
- completedTimestamp: Date.now(),
140
- graphSnapshot: this.getSnapshot(),
141
- };
142
- this.debugRefreshInfos.push(refreshDebugInfo);
143
- return;
193
+ ref.previousResult = val;
194
+ markSuperCompDirtyRec(ref, effectsToRefresh);
144
195
  }
145
- this.refresh({ otelHint, debugRefreshReason }, otelContext);
146
- }
147
- get(atom, context) {
148
- // Autotracking: if we're getting the value of an atom,
149
- // that means it's a subcomputation for the currently refreshing atom.
150
- this.addEdge(context, atom);
151
- const dependencyMightBeStale = context._tag !== 'effect' && context.height <= atom.height;
152
- const dependencyNotRefreshedYet = atom.result === undefined;
153
- if (dependencyMightBeStale || dependencyNotRefreshedYet) {
154
- throw new DependencyNotReadyError(`${this.label(context)} referenced dependency ${this.label(atom)} which isn't ready`);
155
- }
156
- // TODO handle case when `atom.result` is undefined
157
- return atom.result;
196
+ this.effectsWrapper(() => {
197
+ for (const effect of effectsToRefresh) {
198
+ effect.doEffect(options?.otelContext);
199
+ }
200
+ });
201
+ const refreshDebugInfo = {
202
+ id: uniqueRefreshInfoId(),
203
+ reason: debugRefreshReason ?? unknownRefreshReason(),
204
+ skippedRefresh: true,
205
+ refreshedAtoms: [],
206
+ durationMs: 0,
207
+ completedTimestamp: Date.now(),
208
+ graphSnapshot: this.getSnapshot(),
209
+ };
210
+ this.debugRefreshInfos.push(refreshDebugInfo);
158
211
  }
212
+ // get<T>(atom: Atom<T, TContext>, context: Atom<any, TContext> | Effect): T {
213
+ // // Autotracking: if we're getting the value of an atom,
214
+ // // that means it's a subcomputation for the currently refreshing atom.
215
+ // this.addEdge(context, atom)
216
+ // const dependencyMightBeStale = context._tag !== 'effect' && context.height <= atom.height
217
+ // const dependencyNotRefreshedYet = atom.result === NOT_REFRESHED_YET
218
+ // if (dependencyMightBeStale || dependencyNotRefreshedYet) {
219
+ // throw new DependencyNotReadyError(
220
+ // `${this.label(context)} referenced dependency ${this.label(atom)} which isn't ready`,
221
+ // )
222
+ // }
223
+ // return atom.result
224
+ // }
159
225
  /**
160
226
  * Update the graph to be consistent with the current values of the root atoms.
161
227
  * Generally we run this after a ref is updated.
@@ -163,106 +229,118 @@ export class ReactiveGraph {
163
229
  *
164
230
  * @param roots Root atoms to start the refresh from
165
231
  */
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
- }
232
+ // refresh(
233
+ // options?:
234
+ // | {
235
+ // otelHint?: string
236
+ // debugRefreshReason?: RefreshReasonWithGenericReasons<TDebugRefreshReason>
237
+ // }
238
+ // | undefined,
239
+ // otelContext: otel.Context = otel.context.active(),
240
+ // ): void {
241
+ // const otelHint = options?.otelHint ?? ''
242
+ // const debugRefreshReason = options?.debugRefreshReason
243
+ // const roots = [...this.dirtyNodes]
244
+ // const debugInfoForRefreshedAtoms: AtomDebugInfo<TDebugThunkInfo>[] = []
245
+ // // if (otelHint.includes('tableName')) {
246
+ // // console.log('refresh', otelHint, { shouldTrace })
247
+ // // }
248
+ // this.otelTracer.startActiveSpan(`LiveStore.refresh:${otelHint}`, {}, otelContext, (span) => {
249
+ // const atomsToRefresh = roots.filter(isAtom)
250
+ // const effectsToRun = new Set(roots.filter(isEffect))
251
+ // span.setAttribute('livestore.hint', otelHint)
252
+ // span.setAttribute('livestore.rootsCount', roots.length)
253
+ // // span.setAttribute('sstack', new Error().stack!)
254
+ // // Sort in topological order, starting with minimum height
255
+ // while (atomsToRefresh.length > 0) {
256
+ // atomsToRefresh.sort((a, b) => a.height - b.height)
257
+ // const atomToRefresh = atomsToRefresh.shift()!
258
+ // // Recompute the value
259
+ // let resultChanged = false
260
+ // const debugInfoForAtom = {
261
+ // atom: serializeAtom(atomToRefresh),
262
+ // resultChanged,
263
+ // // debugInfo: unknownRefreshReason() as TDebugThunkInfo,
264
+ // debugInfo: { _tag: 'unknown' } as TDebugThunkInfo,
265
+ // durationMs: 0,
266
+ // } satisfies AtomDebugInfo<TDebugThunkInfo>
267
+ // try {
268
+ // atomToRefresh.sub = new Set()
269
+ // const beforeTimestamp = performance.now()
270
+ // const newResult = atomToRefresh.getResult(
271
+ // (atom) => this.get(atom, atomToRefresh),
272
+ // (debugInfo) => {
273
+ // debugInfoForAtom.debugInfo = debugInfo
274
+ // },
275
+ // this.context ?? shouldNeverHappen(`No context provided yet for ReactiveGraph`),
276
+ // )
277
+ // const afterTimestamp = performance.now()
278
+ // debugInfoForAtom.durationMs = afterTimestamp - beforeTimestamp
279
+ // // Determine if the result changed to do early cutoff and avoid further unnecessary updates.
280
+ // // Refs never depend on anything, so if a ref is being refreshed it definitely changed.
281
+ // // For thunks, we use a deep equality check.
282
+ // resultChanged =
283
+ // atomToRefresh._tag === 'ref' ||
284
+ // (atomToRefresh._tag === 'thunk' && !atomToRefresh.equal(atomToRefresh.result, newResult))
285
+ // if (resultChanged) {
286
+ // atomToRefresh.result = newResult
287
+ // }
288
+ // this.dirtyNodes.delete(atomToRefresh)
289
+ // } catch (e) {
290
+ // if (e instanceof DependencyNotReadyError) {
291
+ // // If we hit a dependency that wasn't ready yet,
292
+ // // abort this recomputation and try again later.
293
+ // if (!atomsToRefresh.includes(atomToRefresh)) {
294
+ // atomsToRefresh.push(atomToRefresh)
295
+ // }
296
+ // } else {
297
+ // throw e
298
+ // }
299
+ // }
300
+ // debugInfoForRefreshedAtoms.push(debugInfoForAtom)
301
+ // if (!resultChanged) {
302
+ // continue
303
+ // }
304
+ // // Schedule supercomputations
305
+ // for (const superComp of atomToRefresh.super) {
306
+ // switch (superComp._tag) {
307
+ // case 'ref':
308
+ // case 'thunk': {
309
+ // if (!atomsToRefresh.includes(superComp)) {
310
+ // atomsToRefresh.push(superComp)
311
+ // }
312
+ // break
313
+ // }
314
+ // case 'effect': {
315
+ // effectsToRun.add(superComp)
316
+ // break
317
+ // }
318
+ // }
319
+ // }
320
+ // }
321
+ // this.effectsWrapper(() => {
322
+ // for (const effect of effectsToRun) {
323
+ // effect.doEffect((atom: Atom<any, TContext>) => this.get(atom, effect))
324
+ // this.dirtyNodes.delete(effect)
325
+ // }
326
+ // })
327
+ // span.end()
328
+ // const spanDurationMs = getDurationMsFromSpan(span)
329
+ // const refreshDebugInfo: RefreshDebugInfo<
330
+ // RefreshReasonWithGenericReasons<TDebugRefreshReason>,
331
+ // TDebugThunkInfo
332
+ // > = {
333
+ // id: uniqueRefreshInfoId(),
334
+ // reason: debugRefreshReason ?? unknownRefreshReason(),
335
+ // refreshedAtoms: debugInfoForRefreshedAtoms,
336
+ // skippedRefresh: false,
337
+ // durationMs: spanDurationMs,
338
+ // completedTimestamp: Date.now(),
339
+ // graphSnapshot: this.getSnapshot(),
340
+ // }
341
+ // this.debugRefreshInfos.push(refreshDebugInfo)
342
+ // })
343
+ // }
266
344
  label(atom) {
267
345
  if (atom._tag === 'effect') {
268
346
  return `unknown effect`;
@@ -296,7 +374,36 @@ export class ReactiveGraph {
296
374
  }
297
375
  }
298
376
  }
377
+ get atomsCount() {
378
+ return this.atoms.size;
379
+ }
299
380
  }
300
- const isAtom = (a) => a._tag === 'ref' || a._tag === 'thunk';
301
- const isEffect = (a) => a._tag === 'effect';
381
+ // const isAtom = <T, TContext>(a: Atom<T, TContext> | Effect): a is Atom<T, TContext> =>
382
+ // a._tag === 'ref' || a._tag === 'thunk'
383
+ // const isEffect = <T, TContext>(a: Atom<T, TContext> | Effect): a is Effect => a._tag === 'effect'
384
+ const compute = (atom, otelContext) => {
385
+ // const __getResult = atom._tag === 'thunk' ? atom.__getResult.toString() : ''
386
+ if (atom.isDirty) {
387
+ // console.log('atom is dirty', atom.id, atom.label ?? '', atom._tag, __getResult)
388
+ const result = atom.computeResult(otelContext);
389
+ atom.isDirty = false;
390
+ atom.previousResult = result;
391
+ return result;
392
+ }
393
+ else {
394
+ // console.log('atom is clean', atom.id, atom.label ?? '', atom._tag, __getResult)
395
+ return atom.previousResult;
396
+ }
397
+ };
398
+ const markSuperCompDirtyRec = (atom, effectsToRefresh) => {
399
+ for (const superComp of atom.super) {
400
+ if (superComp._tag === 'thunk' || superComp._tag === 'ref') {
401
+ superComp.isDirty = true;
402
+ markSuperCompDirtyRec(superComp, effectsToRefresh);
403
+ }
404
+ else {
405
+ effectsToRefresh.add(superComp);
406
+ }
407
+ }
408
+ };
302
409
  //# 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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"}