@livestore/livestore 0.0.0-snapshot-909cdd1ac2fd591945c2be2b0f53e14d87f3c9d4

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 (131) hide show
  1. package/README.md +1 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/QueryCache.d.ts +20 -0
  4. package/dist/QueryCache.d.ts.map +1 -0
  5. package/dist/QueryCache.js +61 -0
  6. package/dist/QueryCache.js.map +1 -0
  7. package/dist/SynchronousDatabaseWrapper.d.ts +36 -0
  8. package/dist/SynchronousDatabaseWrapper.d.ts.map +1 -0
  9. package/dist/SynchronousDatabaseWrapper.js +176 -0
  10. package/dist/SynchronousDatabaseWrapper.js.map +1 -0
  11. package/dist/effect/LiveStore.d.ts +38 -0
  12. package/dist/effect/LiveStore.d.ts.map +1 -0
  13. package/dist/effect/LiveStore.js +38 -0
  14. package/dist/effect/LiveStore.js.map +1 -0
  15. package/dist/effect/index.d.ts +2 -0
  16. package/dist/effect/index.d.ts.map +1 -0
  17. package/dist/effect/index.js +2 -0
  18. package/dist/effect/index.js.map +1 -0
  19. package/dist/global-state.d.ts +14 -0
  20. package/dist/global-state.d.ts.map +1 -0
  21. package/dist/global-state.js +16 -0
  22. package/dist/global-state.js.map +1 -0
  23. package/dist/index.d.ts +19 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +15 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/reactive.d.ts +163 -0
  28. package/dist/reactive.d.ts.map +1 -0
  29. package/dist/reactive.js +382 -0
  30. package/dist/reactive.js.map +1 -0
  31. package/dist/reactive.test.d.ts +2 -0
  32. package/dist/reactive.test.d.ts.map +1 -0
  33. package/dist/reactive.test.js +345 -0
  34. package/dist/reactive.test.js.map +1 -0
  35. package/dist/reactiveQueries/base-class.d.ts +59 -0
  36. package/dist/reactiveQueries/base-class.d.ts.map +1 -0
  37. package/dist/reactiveQueries/base-class.js +29 -0
  38. package/dist/reactiveQueries/base-class.js.map +1 -0
  39. package/dist/reactiveQueries/graphql.d.ts +52 -0
  40. package/dist/reactiveQueries/graphql.d.ts.map +1 -0
  41. package/dist/reactiveQueries/graphql.js +136 -0
  42. package/dist/reactiveQueries/graphql.js.map +1 -0
  43. package/dist/reactiveQueries/js.d.ts +35 -0
  44. package/dist/reactiveQueries/js.d.ts.map +1 -0
  45. package/dist/reactiveQueries/js.js +57 -0
  46. package/dist/reactiveQueries/js.js.map +1 -0
  47. package/dist/reactiveQueries/sql.d.ts +49 -0
  48. package/dist/reactiveQueries/sql.d.ts.map +1 -0
  49. package/dist/reactiveQueries/sql.js +130 -0
  50. package/dist/reactiveQueries/sql.js.map +1 -0
  51. package/dist/reactiveQueries/sql.test.d.ts +2 -0
  52. package/dist/reactiveQueries/sql.test.d.ts.map +1 -0
  53. package/dist/reactiveQueries/sql.test.js +284 -0
  54. package/dist/reactiveQueries/sql.test.js.map +1 -0
  55. package/dist/row-query.d.ts +33 -0
  56. package/dist/row-query.d.ts.map +1 -0
  57. package/dist/row-query.js +84 -0
  58. package/dist/row-query.js.map +1 -0
  59. package/dist/store-context.d.ts +26 -0
  60. package/dist/store-context.d.ts.map +1 -0
  61. package/dist/store-context.js +6 -0
  62. package/dist/store-context.js.map +1 -0
  63. package/dist/store-devtools.d.ts +19 -0
  64. package/dist/store-devtools.d.ts.map +1 -0
  65. package/dist/store-devtools.js +141 -0
  66. package/dist/store-devtools.js.map +1 -0
  67. package/dist/store.d.ts +175 -0
  68. package/dist/store.d.ts.map +1 -0
  69. package/dist/store.js +507 -0
  70. package/dist/store.js.map +1 -0
  71. package/dist/utils/data-structures.d.ts +10 -0
  72. package/dist/utils/data-structures.d.ts.map +1 -0
  73. package/dist/utils/data-structures.js +32 -0
  74. package/dist/utils/data-structures.js.map +1 -0
  75. package/dist/utils/dev.d.ts +3 -0
  76. package/dist/utils/dev.d.ts.map +1 -0
  77. package/dist/utils/dev.js +17 -0
  78. package/dist/utils/dev.js.map +1 -0
  79. package/dist/utils/otel.d.ts +4 -0
  80. package/dist/utils/otel.d.ts.map +1 -0
  81. package/dist/utils/otel.js +6 -0
  82. package/dist/utils/otel.js.map +1 -0
  83. package/dist/utils/stack-info.d.ts +10 -0
  84. package/dist/utils/stack-info.d.ts.map +1 -0
  85. package/dist/utils/stack-info.js +41 -0
  86. package/dist/utils/stack-info.js.map +1 -0
  87. package/dist/utils/stack-info.test.d.ts +2 -0
  88. package/dist/utils/stack-info.test.d.ts.map +1 -0
  89. package/dist/utils/stack-info.test.js +75 -0
  90. package/dist/utils/stack-info.test.js.map +1 -0
  91. package/dist/utils/tests/fixture.d.ts +259 -0
  92. package/dist/utils/tests/fixture.d.ts.map +1 -0
  93. package/dist/utils/tests/fixture.js +33 -0
  94. package/dist/utils/tests/fixture.js.map +1 -0
  95. package/dist/utils/tests/mod.d.ts +3 -0
  96. package/dist/utils/tests/mod.d.ts.map +1 -0
  97. package/dist/utils/tests/mod.js +3 -0
  98. package/dist/utils/tests/mod.js.map +1 -0
  99. package/dist/utils/tests/otel.d.ts +10 -0
  100. package/dist/utils/tests/otel.d.ts.map +1 -0
  101. package/dist/utils/tests/otel.js +42 -0
  102. package/dist/utils/tests/otel.js.map +1 -0
  103. package/package.json +60 -0
  104. package/src/QueryCache.ts +81 -0
  105. package/src/SynchronousDatabaseWrapper.ts +256 -0
  106. package/src/ambient.d.ts +10 -0
  107. package/src/effect/LiveStore.ts +112 -0
  108. package/src/effect/index.ts +8 -0
  109. package/src/global-state.ts +20 -0
  110. package/src/index.ts +64 -0
  111. package/src/reactive.test.ts +426 -0
  112. package/src/reactive.ts +661 -0
  113. package/src/reactiveQueries/base-class.ts +115 -0
  114. package/src/reactiveQueries/graphql.ts +233 -0
  115. package/src/reactiveQueries/js.ts +108 -0
  116. package/src/reactiveQueries/sql.test.ts +308 -0
  117. package/src/reactiveQueries/sql.ts +226 -0
  118. package/src/row-query.ts +200 -0
  119. package/src/store-context.ts +23 -0
  120. package/src/store-devtools.ts +217 -0
  121. package/src/store.ts +920 -0
  122. package/src/utils/data-structures.ts +36 -0
  123. package/src/utils/dev.ts +24 -0
  124. package/src/utils/otel.ts +9 -0
  125. package/src/utils/stack-info.test.ts +79 -0
  126. package/src/utils/stack-info.ts +54 -0
  127. package/src/utils/tests/fixture.ts +77 -0
  128. package/src/utils/tests/mod.ts +2 -0
  129. package/src/utils/tests/otel.ts +61 -0
  130. package/tsconfig.json +18 -0
  131. package/vitest.config.js +9 -0
@@ -0,0 +1,163 @@
1
+ import { BoundArray } from '@livestore/common';
2
+ import type { PrettifyFlat } from '@livestore/utils';
3
+ import type * as otel from '@opentelemetry/api';
4
+ export declare const NOT_REFRESHED_YET: unique symbol;
5
+ export type NOT_REFRESHED_YET = typeof NOT_REFRESHED_YET;
6
+ export type GetAtom = <T>(atom: Atom<T, any, any>, otelContext?: otel.Context) => T;
7
+ export type Ref<T, TContext, TDebugRefreshReason extends DebugRefreshReason> = {
8
+ _tag: 'ref';
9
+ id: string;
10
+ isDirty: false;
11
+ isDestroyed: boolean;
12
+ previousResult: T;
13
+ computeResult: () => T;
14
+ sub: Set<Atom<any, TContext, TDebugRefreshReason>>;
15
+ super: Set<Thunk<any, TContext, TDebugRefreshReason> | Effect>;
16
+ label?: string;
17
+ /** Container for meta information (e.g. the LiveStore Store) */
18
+ meta?: any;
19
+ equal: (a: T, b: T) => boolean;
20
+ refreshes: number;
21
+ };
22
+ export type Thunk<TResult, TContext, TDebugRefreshReason extends DebugRefreshReason> = {
23
+ _tag: 'thunk';
24
+ id: string;
25
+ isDirty: boolean;
26
+ isDestroyed: boolean;
27
+ computeResult: (otelContext?: otel.Context, debugRefreshReason?: TDebugRefreshReason) => TResult;
28
+ previousResult: TResult | NOT_REFRESHED_YET;
29
+ sub: Set<Atom<any, TContext, TDebugRefreshReason>>;
30
+ super: Set<Thunk<any, TContext, TDebugRefreshReason> | Effect>;
31
+ label?: string;
32
+ /** Container for meta information (e.g. the LiveStore Store) */
33
+ meta?: any;
34
+ equal: (a: TResult, b: TResult) => boolean;
35
+ recomputations: number;
36
+ __getResult: any;
37
+ };
38
+ export type Atom<T, TContext, TDebugRefreshReason extends DebugRefreshReason> = Ref<T, TContext, TDebugRefreshReason> | Thunk<T, TContext, TDebugRefreshReason>;
39
+ export type Effect = {
40
+ _tag: 'effect';
41
+ id: string;
42
+ isDestroyed: boolean;
43
+ doEffect: (otelContext?: otel.Context) => void;
44
+ sub: Set<Atom<any, TODO, TODO>>;
45
+ label?: string;
46
+ invocations: number;
47
+ };
48
+ export type Node<T, TContext, TDebugRefreshReason extends DebugRefreshReason> = Atom<T, TContext, TDebugRefreshReason> | Effect;
49
+ export declare const isThunk: <T, TContext, TDebugRefreshReason extends DebugRefreshReason>(obj: unknown) => obj is Thunk<T, TContext, TDebugRefreshReason>;
50
+ export type DebugThunkInfo<T extends string = string> = {
51
+ _tag: T;
52
+ durationMs: number;
53
+ };
54
+ export type DebugRefreshReasonBase =
55
+ /** Usually in response to some `mutate` calls with `skipRefresh: true` */
56
+ {
57
+ _tag: 'runDeferredEffects';
58
+ originalRefreshReasons?: ReadonlyArray<DebugRefreshReasonBase>;
59
+ manualRefreshReason?: DebugRefreshReasonBase;
60
+ } | {
61
+ _tag: 'makeThunk';
62
+ label?: string;
63
+ } | {
64
+ _tag: 'unknown';
65
+ };
66
+ export type DebugRefreshReason<T extends string = string> = DebugRefreshReasonBase | {
67
+ _tag: T;
68
+ };
69
+ export type AtomDebugInfo<TDebugThunkInfo extends DebugThunkInfo> = {
70
+ atom: SerializedAtom;
71
+ resultChanged: boolean;
72
+ debugInfo: TDebugThunkInfo;
73
+ };
74
+ export type RefreshDebugInfo<TDebugRefreshReason extends DebugRefreshReason, TDebugThunkInfo extends DebugThunkInfo> = {
75
+ /** Currently only used for easier handling in React (e.g. as key) */
76
+ id: string;
77
+ reason: TDebugRefreshReason;
78
+ refreshedAtoms: AtomDebugInfo<TDebugThunkInfo>[];
79
+ skippedRefresh: boolean;
80
+ durationMs: number;
81
+ /** Note we're using a regular `Date.now()` timestamp here as it's faster to produce and we don't need the fine accuracy */
82
+ completedTimestamp: number;
83
+ graphSnapshot: ReactiveGraphSnapshot;
84
+ };
85
+ export type EncodedOption<A> = {
86
+ _tag: 'Some';
87
+ value?: A;
88
+ } | {
89
+ _tag: 'None';
90
+ };
91
+ export type SerializedAtom = SerializedRef | SerializedThunk;
92
+ export type SerializedRef = Readonly<PrettifyFlat<Pick<Ref<unknown, unknown, any>, '_tag' | 'id' | 'label' | 'meta' | 'isDirty' | 'isDestroyed' | 'refreshes'> & {
93
+ /** Is `None` if `getSnapshot` was called with `includeResults: false` which is the default */
94
+ previousResult: EncodedOption<string>;
95
+ sub: ReadonlyArray<string>;
96
+ super: ReadonlyArray<string>;
97
+ }>>;
98
+ export type SerializedThunk = Readonly<PrettifyFlat<Pick<Thunk<unknown, unknown, any>, '_tag' | 'id' | 'label' | 'meta' | 'isDirty' | 'isDestroyed' | 'recomputations'> & {
99
+ /** Is `None` if `getSnapshot` was called with `includeResults: false` which is the default */
100
+ previousResult: EncodedOption<string>;
101
+ sub: ReadonlyArray<string>;
102
+ super: ReadonlyArray<string>;
103
+ }>>;
104
+ export type SerializedEffect = Readonly<PrettifyFlat<Pick<Effect, '_tag' | 'id' | 'label' | 'invocations' | 'isDestroyed'> & {
105
+ sub: ReadonlyArray<string>;
106
+ }>>;
107
+ export type ReactiveGraphSnapshot = {
108
+ readonly atoms: ReadonlyArray<SerializedAtom>;
109
+ readonly effects: ReadonlyArray<SerializedEffect>;
110
+ /** IDs of deferred effects */
111
+ readonly deferredEffects: ReadonlyArray<string>;
112
+ };
113
+ export declare class ReactiveGraph<TDebugRefreshReason extends DebugRefreshReason, TDebugThunkInfo extends DebugThunkInfo, TContext extends {
114
+ effectsWrapper?: (runEffects: () => void) => void;
115
+ } = {}> {
116
+ id: string;
117
+ readonly atoms: Set<Atom<any, TContext, TDebugRefreshReason>>;
118
+ readonly effects: Set<Effect>;
119
+ context: TContext | undefined;
120
+ debugRefreshInfos: BoundArray<RefreshDebugInfo<TDebugRefreshReason, TDebugThunkInfo>>;
121
+ private currentDebugRefresh;
122
+ private deferredEffects;
123
+ private refreshCallbacks;
124
+ makeRef<T>(val: T, options?: {
125
+ label?: string;
126
+ meta?: unknown;
127
+ equal?: (a: T, b: T) => boolean;
128
+ }): Ref<T, TContext, TDebugRefreshReason>;
129
+ makeThunk<T>(getResult: (get: GetAtom, setDebugInfo: (debugInfo: TDebugThunkInfo) => void, ctx: TContext, otelContext: otel.Context | undefined) => T, options?: {
130
+ label?: string;
131
+ meta?: any;
132
+ equal?: (a: T, b: T) => boolean;
133
+ } | undefined): Thunk<T, TContext, TDebugRefreshReason>;
134
+ destroyNode(node: Node<any, TContext, TDebugRefreshReason>): void;
135
+ destroy(): void;
136
+ makeEffect(doEffect: (get: GetAtom, otelContext?: otel.Context) => void, options?: {
137
+ label?: string;
138
+ } | undefined): Effect;
139
+ setRef<T>(ref: Ref<T, TContext, TDebugRefreshReason>, val: T, options?: {
140
+ skipRefresh?: boolean;
141
+ debugRefreshReason?: TDebugRefreshReason;
142
+ otelContext?: otel.Context;
143
+ } | undefined): void;
144
+ setRefs<T>(refs: [Ref<T, TContext, TDebugRefreshReason>, T][], options?: {
145
+ skipRefresh?: boolean;
146
+ debugRefreshReason?: TDebugRefreshReason;
147
+ otelContext?: otel.Context;
148
+ } | undefined): void;
149
+ private runEffects;
150
+ runDeferredEffects: (options?: {
151
+ debugRefreshReason?: TDebugRefreshReason;
152
+ otelContext?: otel.Context;
153
+ }) => void;
154
+ 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;
157
+ getSnapshot: (opts?: {
158
+ includeResults: boolean;
159
+ }) => ReactiveGraphSnapshot;
160
+ subscribeToRefresh: (cb: () => void) => () => void;
161
+ }
162
+ export declare const throwContextNotSetError: (graph: ReactiveGraph<any, any, any>) => never;
163
+ //# sourceMappingURL=reactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,382 @@
1
+ // This is a simple implementation of a reactive dependency graph.
2
+ // Key Terminology:
3
+ // Ref: a mutable cell where values can be set
4
+ // Thunk: a pure computation that depends on other values
5
+ // Effect: a side effect that runs when a value changes; return value is ignored
6
+ // Atom: a node returning a value that can be depended on: Ref | Thunk
7
+ // Super computation: Nodes that depend on a given node ("downstream")
8
+ // Sub computation: Nodes that a given node depends on ("upstream")
9
+ // This vocabulary comes from the MiniAdapton paper linked below, although
10
+ // we don't actually implement the MiniAdapton algorithm because we don't need lazy recomputation.
11
+ // https://arxiv.org/abs/1609.05337
12
+ // Features:
13
+ // - Dependencies are tracked automatically in thunk computations by using a getter function
14
+ // to reference other atoms.
15
+ // - Whenever a ref is updated, the graph is eagerly refreshed to be consistent with the new values.
16
+ // - We minimize recomputation by refreshing the graph in topological sort order. (The topological height
17
+ // is maintained eagerly as edges are added and removed.)
18
+ // - At every thunk we check value equality with the previous value and cutoff propagation if possible.
19
+ /* eslint-disable prefer-arrow/prefer-arrow-functions */
20
+ import { BoundArray } from '@livestore/common';
21
+ import { deepEqual, shouldNeverHappen } from '@livestore/utils';
22
+ // import { getDurationMsFromSpan } from './otel.js'
23
+ export const NOT_REFRESHED_YET = Symbol.for('NOT_REFRESHED_YET');
24
+ export const isThunk = (obj) => {
25
+ return typeof obj === 'object' && obj !== null && '_tag' in obj && obj._tag === 'thunk';
26
+ };
27
+ const unknownRefreshReason = () => {
28
+ // debugger
29
+ return { _tag: 'unknown' };
30
+ };
31
+ const encodedOptionSome = (value) => ({ _tag: 'Some', value });
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
+ let globalGraphIdCounter = 0;
38
+ const uniqueGraphId = () => `graph-${++globalGraphIdCounter}`;
39
+ export class ReactiveGraph {
40
+ id = uniqueGraphId();
41
+ atoms = new Set();
42
+ effects = new Set();
43
+ context;
44
+ debugRefreshInfos = new BoundArray(5000);
45
+ currentDebugRefresh;
46
+ deferredEffects = new Map();
47
+ refreshCallbacks = new Set();
48
+ makeRef(val, options) {
49
+ const ref = {
50
+ _tag: 'ref',
51
+ id: uniqueNodeId(),
52
+ isDirty: false,
53
+ isDestroyed: false,
54
+ previousResult: val,
55
+ computeResult: () => ref.previousResult,
56
+ sub: new Set(),
57
+ super: new Set(),
58
+ label: options?.label,
59
+ meta: options?.meta,
60
+ equal: options?.equal ?? deepEqual,
61
+ refreshes: 0,
62
+ };
63
+ this.atoms.add(ref);
64
+ return ref;
65
+ }
66
+ makeThunk(getResult, options) {
67
+ const thunk = {
68
+ _tag: 'thunk',
69
+ id: uniqueNodeId(),
70
+ previousResult: NOT_REFRESHED_YET,
71
+ isDirty: true,
72
+ isDestroyed: false,
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(this), otelContext);
90
+ const resultChanged = thunk.equal(thunk.previousResult, result) === false;
91
+ const debugInfoForAtom = {
92
+ atom: serializeAtom(thunk, false),
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
+ this.debugRefreshInfos.push({
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({ includeResults: false }),
112
+ });
113
+ }
114
+ return result;
115
+ }
116
+ else {
117
+ return thunk.previousResult;
118
+ }
119
+ },
120
+ sub: new Set(),
121
+ super: new Set(),
122
+ recomputations: 0,
123
+ label: options?.label,
124
+ meta: options?.meta,
125
+ equal: options?.equal ?? deepEqual,
126
+ __getResult: getResult,
127
+ };
128
+ this.atoms.add(thunk);
129
+ return thunk;
130
+ }
131
+ destroyNode(node) {
132
+ // console.debug(`destroying node (${node._tag})`, node.id, node.label)
133
+ // Recursively destroy any supercomputations
134
+ if (node._tag === 'ref' || node._tag === 'thunk') {
135
+ for (const superComp of node.super) {
136
+ this.destroyNode(superComp);
137
+ }
138
+ }
139
+ // Destroy this node
140
+ if (node._tag !== 'ref') {
141
+ for (const subComp of node.sub) {
142
+ this.removeEdge(node, subComp);
143
+ }
144
+ }
145
+ if (node._tag === 'effect') {
146
+ this.deferredEffects.delete(node);
147
+ this.effects.delete(node);
148
+ }
149
+ else {
150
+ this.atoms.delete(node);
151
+ }
152
+ node.isDestroyed = true;
153
+ }
154
+ destroy() {
155
+ // NOTE we don't need to sort the atoms first, as `destroyNode` will recursively destroy all supercomputations
156
+ for (const node of this.atoms) {
157
+ this.destroyNode(node);
158
+ }
159
+ }
160
+ makeEffect(doEffect, options) {
161
+ const effect = {
162
+ _tag: 'effect',
163
+ id: uniqueNodeId(),
164
+ isDestroyed: false,
165
+ doEffect: (otelContext) => {
166
+ effect.invocations++;
167
+ // NOTE we're not tracking any debug refresh info for effects as they're tracked by the thunks they depend on
168
+ // Reset previous subcomputations as we're about to re-add them as part of the `doEffect` call below
169
+ effect.sub = new Set();
170
+ const getAtom = (atom, otelContext) => {
171
+ this.addEdge(effect, atom);
172
+ return compute(atom, otelContext);
173
+ };
174
+ doEffect(getAtom, otelContext);
175
+ },
176
+ sub: new Set(),
177
+ label: options?.label,
178
+ invocations: 0,
179
+ };
180
+ this.effects.add(effect);
181
+ return effect;
182
+ }
183
+ setRef(ref, val, options) {
184
+ this.setRefs([[ref, val]], options);
185
+ }
186
+ setRefs(refs, options) {
187
+ const effectsToRefresh = new Set();
188
+ for (const [ref, val] of refs) {
189
+ ref.previousResult = val;
190
+ ref.refreshes++;
191
+ markSuperCompDirtyRec(ref, effectsToRefresh);
192
+ }
193
+ if (options?.skipRefresh) {
194
+ for (const effect of effectsToRefresh) {
195
+ if (this.deferredEffects.has(effect) === false) {
196
+ this.deferredEffects.set(effect, new Set());
197
+ }
198
+ if (options?.debugRefreshReason !== undefined) {
199
+ this.deferredEffects.get(effect).add(options.debugRefreshReason);
200
+ }
201
+ }
202
+ }
203
+ else {
204
+ this.runEffects(effectsToRefresh, {
205
+ debugRefreshReason: options?.debugRefreshReason ?? unknownRefreshReason(),
206
+ otelContext: options?.otelContext,
207
+ });
208
+ }
209
+ }
210
+ runEffects = (effectsToRefresh, options) => {
211
+ const effectsWrapper = this.context?.effectsWrapper ?? ((runEffects) => runEffects());
212
+ effectsWrapper(() => {
213
+ this.currentDebugRefresh = { refreshedAtoms: [], startMs: performance.now() };
214
+ for (const effect of effectsToRefresh) {
215
+ effect.doEffect(options?.otelContext);
216
+ }
217
+ const refreshedAtoms = this.currentDebugRefresh.refreshedAtoms;
218
+ const durationMs = performance.now() - this.currentDebugRefresh.startMs;
219
+ this.currentDebugRefresh = undefined;
220
+ const refreshDebugInfo = {
221
+ id: uniqueRefreshInfoId(),
222
+ reason: options.debugRefreshReason,
223
+ skippedRefresh: false,
224
+ refreshedAtoms,
225
+ durationMs,
226
+ completedTimestamp: Date.now(),
227
+ graphSnapshot: this.getSnapshot({ includeResults: false }),
228
+ };
229
+ this.debugRefreshInfos.push(refreshDebugInfo);
230
+ this.runRefreshCallbacks();
231
+ });
232
+ };
233
+ runDeferredEffects = (options) => {
234
+ // TODO improve how refresh reasons are propagated for deferred effect execution
235
+ // TODO also improve "batching" of running deferred effects (i.e. in a single `this.runEffects` call)
236
+ // but need to be careful to not overwhelm the main thread
237
+ for (const [effect, debugRefreshReasons] of this.deferredEffects) {
238
+ this.runEffects(new Set([effect]), {
239
+ debugRefreshReason: {
240
+ _tag: 'runDeferredEffects',
241
+ originalRefreshReasons: Array.from(debugRefreshReasons),
242
+ manualRefreshReason: options?.debugRefreshReason,
243
+ },
244
+ otelContext: options?.otelContext,
245
+ });
246
+ }
247
+ };
248
+ runRefreshCallbacks = () => {
249
+ for (const cb of this.refreshCallbacks) {
250
+ cb();
251
+ }
252
+ };
253
+ addEdge(superComp, subComp) {
254
+ superComp.sub.add(subComp);
255
+ subComp.super.add(superComp);
256
+ if (this.currentDebugRefresh === undefined) {
257
+ this.runRefreshCallbacks();
258
+ }
259
+ }
260
+ removeEdge(superComp, subComp) {
261
+ superComp.sub.delete(subComp);
262
+ const effectsToRefresh = new Set();
263
+ markSuperCompDirtyRec(subComp, effectsToRefresh);
264
+ for (const effect of effectsToRefresh) {
265
+ this.deferredEffects.set(effect, new Set());
266
+ }
267
+ subComp.super.delete(superComp);
268
+ if (this.currentDebugRefresh === undefined) {
269
+ this.runRefreshCallbacks();
270
+ }
271
+ }
272
+ // NOTE This function is performance-optimized (i.e. not using `Array.from`)
273
+ getSnapshot = (opts) => {
274
+ const { includeResults = false } = opts ?? {};
275
+ const atoms = [];
276
+ for (const atom of this.atoms) {
277
+ atoms.push(serializeAtom(atom, includeResults));
278
+ }
279
+ const effects = [];
280
+ for (const effect of this.effects) {
281
+ effects.push(serializeEffect(effect));
282
+ }
283
+ const deferredEffects = [];
284
+ for (const [effect] of this.deferredEffects) {
285
+ deferredEffects.push(effect.id);
286
+ }
287
+ return { atoms, effects, deferredEffects };
288
+ };
289
+ subscribeToRefresh = (cb) => {
290
+ this.refreshCallbacks.add(cb);
291
+ return () => {
292
+ this.refreshCallbacks.delete(cb);
293
+ };
294
+ };
295
+ }
296
+ const compute = (atom, otelContext) => {
297
+ // const __getResult = atom._tag === 'thunk' ? atom.__getResult.toString() : ''
298
+ if (atom.isDestroyed) {
299
+ shouldNeverHappen(`LiveStore Error: Attempted to compute destroyed ${atom._tag} (${atom.id}): ${atom.label ?? ''}`);
300
+ }
301
+ if (atom.isDirty) {
302
+ // console.log('atom is dirty', atom.id, atom.label ?? '', atom._tag, __getResult)
303
+ const result = atom.computeResult(otelContext);
304
+ atom.isDirty = false;
305
+ atom.previousResult = result;
306
+ return result;
307
+ }
308
+ else {
309
+ // console.log('atom is clean', atom.id, atom.label ?? '', atom._tag, __getResult)
310
+ return atom.previousResult;
311
+ }
312
+ };
313
+ const markSuperCompDirtyRec = (atom, effectsToRefresh) => {
314
+ for (const superComp of atom.super) {
315
+ if (superComp._tag === 'thunk') {
316
+ superComp.isDirty = true;
317
+ markSuperCompDirtyRec(superComp, effectsToRefresh);
318
+ }
319
+ else {
320
+ effectsToRefresh.add(superComp);
321
+ }
322
+ }
323
+ };
324
+ export const throwContextNotSetError = (graph) => {
325
+ throw new Error(`LiveStore Error: \`context\` not set on ReactiveGraph (${graph.id})`);
326
+ };
327
+ // NOTE This function is performance-optimized (i.e. not using `pick` and `Array.from`)
328
+ const serializeAtom = (atom, includeResult) => {
329
+ const sub = [];
330
+ for (const a of atom.sub) {
331
+ sub.push(a.id);
332
+ }
333
+ const super_ = [];
334
+ for (const a of atom.super) {
335
+ super_.push(a.id);
336
+ }
337
+ const previousResult = includeResult
338
+ ? encodedOptionSome(atom.previousResult === NOT_REFRESHED_YET ? '"SYMBOL_NOT_REFRESHED_YET"' : JSON.stringify(atom.previousResult))
339
+ : encodedOptionNone();
340
+ if (atom._tag === 'ref') {
341
+ return {
342
+ _tag: atom._tag,
343
+ id: atom.id,
344
+ label: atom.label,
345
+ meta: atom.meta,
346
+ isDirty: atom.isDirty,
347
+ sub,
348
+ super: super_,
349
+ isDestroyed: atom.isDestroyed,
350
+ refreshes: atom.refreshes,
351
+ previousResult,
352
+ };
353
+ }
354
+ return {
355
+ _tag: 'thunk',
356
+ id: atom.id,
357
+ label: atom.label,
358
+ meta: atom.meta,
359
+ isDirty: atom.isDirty,
360
+ sub,
361
+ super: super_,
362
+ isDestroyed: atom.isDestroyed,
363
+ recomputations: atom.recomputations,
364
+ previousResult,
365
+ };
366
+ };
367
+ // NOTE This function is performance-optimized (i.e. not using `pick` and `Array.from`)
368
+ const serializeEffect = (effect) => {
369
+ const sub = [];
370
+ for (const a of effect.sub) {
371
+ sub.push(a.id);
372
+ }
373
+ return {
374
+ _tag: effect._tag,
375
+ id: effect.id,
376
+ label: effect.label,
377
+ sub,
378
+ invocations: effect.invocations,
379
+ isDestroyed: effect.isDestroyed,
380
+ };
381
+ };
382
+ //# sourceMappingURL=reactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive.js","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reactive.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive.test.d.ts","sourceRoot":"","sources":["../src/reactive.test.ts"],"names":[],"mappings":""}