@playfast/reform 1.3.0 → 1.4.1

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 (188) hide show
  1. package/README.md +15 -6
  2. package/dist/calc/asyncCalc.d.ts +3 -1
  3. package/dist/calc/asyncCalc.d.ts.map +1 -1
  4. package/dist/calc/asyncCalc.js +15 -5
  5. package/dist/calc/asyncCalc.js.map +1 -1
  6. package/dist/calc/asyncCalcTypes.d.ts +2 -0
  7. package/dist/calc/asyncCalcTypes.d.ts.map +1 -1
  8. package/dist/calc/calcFamily.d.ts.map +1 -1
  9. package/dist/calc/calcFamily.js +77 -34
  10. package/dist/calc/calcFamily.js.map +1 -1
  11. package/dist/calc/queryState.d.ts +3 -1
  12. package/dist/calc/queryState.d.ts.map +1 -1
  13. package/dist/calc/queryState.js +31 -9
  14. package/dist/calc/queryState.js.map +1 -1
  15. package/dist/channel/channel.d.ts.map +1 -1
  16. package/dist/channel/channel.js +6 -1
  17. package/dist/channel/channel.js.map +1 -1
  18. package/dist/compose/composition.d.ts.map +1 -1
  19. package/dist/compose/composition.js +7 -1
  20. package/dist/compose/composition.js.map +1 -1
  21. package/dist/compose/structure.d.ts.map +1 -1
  22. package/dist/compose/structure.js +33 -8
  23. package/dist/compose/structure.js.map +1 -1
  24. package/dist/compose/ui.d.ts.map +1 -1
  25. package/dist/compose/ui.js +16 -5
  26. package/dist/compose/ui.js.map +1 -1
  27. package/dist/event/event.d.ts +1 -1
  28. package/dist/event/event.d.ts.map +1 -1
  29. package/dist/event/event.js +26 -4
  30. package/dist/event/event.js.map +1 -1
  31. package/dist/internal/familyKeys.d.ts +16 -0
  32. package/dist/internal/familyKeys.d.ts.map +1 -0
  33. package/dist/internal/familyKeys.js +35 -0
  34. package/dist/internal/familyKeys.js.map +1 -0
  35. package/dist/internal/platform.d.ts +43 -0
  36. package/dist/internal/platform.d.ts.map +1 -0
  37. package/dist/internal/platform.js +68 -0
  38. package/dist/internal/platform.js.map +1 -0
  39. package/dist/internal/queryDriver.d.ts.map +1 -1
  40. package/dist/internal/queryDriver.js +88 -64
  41. package/dist/internal/queryDriver.js.map +1 -1
  42. package/dist/internal/queryDriverConsume.d.ts +9 -0
  43. package/dist/internal/queryDriverConsume.d.ts.map +1 -0
  44. package/dist/internal/queryDriverConsume.js +16 -0
  45. package/dist/internal/queryDriverConsume.js.map +1 -0
  46. package/dist/internal/queryDriverHydrate.d.ts.map +1 -1
  47. package/dist/internal/queryDriverHydrate.js +9 -3
  48. package/dist/internal/queryDriverHydrate.js.map +1 -1
  49. package/dist/internal/queryDriverPersist.d.ts +16 -0
  50. package/dist/internal/queryDriverPersist.d.ts.map +1 -0
  51. package/dist/internal/queryDriverPersist.js +15 -0
  52. package/dist/internal/queryDriverPersist.js.map +1 -0
  53. package/dist/internal/queryDriverPersistWarn.d.ts +12 -0
  54. package/dist/internal/queryDriverPersistWarn.d.ts.map +1 -0
  55. package/dist/internal/queryDriverPersistWarn.js +31 -0
  56. package/dist/internal/queryDriverPersistWarn.js.map +1 -0
  57. package/dist/internal/queryDriverSettle.d.ts +23 -0
  58. package/dist/internal/queryDriverSettle.d.ts.map +1 -0
  59. package/dist/internal/queryDriverSettle.js +52 -0
  60. package/dist/internal/queryDriverSettle.js.map +1 -0
  61. package/dist/internal/queryDriverStore.d.ts +2 -28
  62. package/dist/internal/queryDriverStore.d.ts.map +1 -1
  63. package/dist/internal/queryDriverStore.js +5 -29
  64. package/dist/internal/queryDriverStore.js.map +1 -1
  65. package/dist/internal/queryDriverTypes.d.ts +3 -0
  66. package/dist/internal/queryDriverTypes.d.ts.map +1 -1
  67. package/dist/internal/scheduler.d.ts +1 -0
  68. package/dist/internal/scheduler.d.ts.map +1 -1
  69. package/dist/internal/scheduler.js +69 -6
  70. package/dist/internal/scheduler.js.map +1 -1
  71. package/dist/internal.d.ts +2 -0
  72. package/dist/internal.d.ts.map +1 -1
  73. package/dist/internal.js +4 -0
  74. package/dist/internal.js.map +1 -1
  75. package/dist/reducer/reducer.js +3 -3
  76. package/dist/reducer/reducer.js.map +1 -1
  77. package/dist/remote/pendingQueue.d.ts +4 -2
  78. package/dist/remote/pendingQueue.d.ts.map +1 -1
  79. package/dist/remote/pendingQueue.js +20 -4
  80. package/dist/remote/pendingQueue.js.map +1 -1
  81. package/dist/remote/remoteState.d.ts.map +1 -1
  82. package/dist/remote/remoteState.js +27 -14
  83. package/dist/remote/remoteState.js.map +1 -1
  84. package/dist/remote/remoteStateSend.d.ts +3 -1
  85. package/dist/remote/remoteStateSend.d.ts.map +1 -1
  86. package/dist/remote/remoteStateSend.js +19 -3
  87. package/dist/remote/remoteStateSend.js.map +1 -1
  88. package/dist/remote/remoteStateTypes.d.ts +3 -0
  89. package/dist/remote/remoteStateTypes.d.ts.map +1 -1
  90. package/dist/runtime/bus.d.ts +5 -0
  91. package/dist/runtime/bus.d.ts.map +1 -1
  92. package/dist/runtime/bus.js +1 -1
  93. package/dist/runtime/bus.js.map +1 -1
  94. package/dist/runtime/capturedAppRuntime.d.ts.map +1 -1
  95. package/dist/runtime/capturedAppRuntime.js +37 -51
  96. package/dist/runtime/capturedAppRuntime.js.map +1 -1
  97. package/dist/runtime/eventBudget.d.ts.map +1 -1
  98. package/dist/runtime/eventBudget.js +2 -1
  99. package/dist/runtime/eventBudget.js.map +1 -1
  100. package/dist/runtime/featureMount.d.ts +34 -2
  101. package/dist/runtime/featureMount.d.ts.map +1 -1
  102. package/dist/runtime/featureMount.js +66 -2
  103. package/dist/runtime/featureMount.js.map +1 -1
  104. package/dist/runtime/loop.d.ts +12 -0
  105. package/dist/runtime/loop.d.ts.map +1 -1
  106. package/dist/runtime/loop.js +8 -5
  107. package/dist/runtime/loop.js.map +1 -1
  108. package/dist/state/state.d.ts +2 -2
  109. package/dist/state/state.d.ts.map +1 -1
  110. package/dist/state/state.js +2 -2
  111. package/dist/state/state.js.map +1 -1
  112. package/dist/state/stateFamily.d.ts +2 -2
  113. package/dist/state/stateFamily.d.ts.map +1 -1
  114. package/dist/state/stateFamily.js +80 -32
  115. package/dist/state/stateFamily.js.map +1 -1
  116. package/dist/state/stateGroup.d.ts +5 -5
  117. package/dist/state/stateGroup.d.ts.map +1 -1
  118. package/dist/state/stateGroup.js +1 -1
  119. package/dist/state/stateGroup.js.map +1 -1
  120. package/dist/testkit/flight.testkit.d.ts.map +1 -1
  121. package/dist/testkit/flight.testkit.js +2 -1
  122. package/dist/testkit/flight.testkit.js.map +1 -1
  123. package/dist/ui/trigger.d.ts +3 -0
  124. package/dist/ui/trigger.d.ts.map +1 -1
  125. package/dist/ui/trigger.js +14 -1
  126. package/dist/ui/trigger.js.map +1 -1
  127. package/dist/wire/tree.d.ts.map +1 -1
  128. package/dist/wire/tree.js +6 -1
  129. package/dist/wire/tree.js.map +1 -1
  130. package/package.json +1 -1
  131. package/src/calc/asyncCalc-key-attribution.test.ts +182 -0
  132. package/src/calc/asyncCalc-registry-name.test.ts +82 -0
  133. package/src/calc/asyncCalc.superseded-commit.test.ts +162 -0
  134. package/src/calc/asyncCalc.test.ts +35 -7
  135. package/src/calc/asyncCalc.ts +33 -10
  136. package/src/calc/asyncCalcTypes.ts +6 -0
  137. package/src/calc/calcFamily.ts +81 -34
  138. package/src/calc/family-identity.test.ts +231 -0
  139. package/src/calc/queryState.ts +36 -5
  140. package/src/channel/channel-throttle-frames.test.ts +163 -0
  141. package/src/channel/channel.ts +5 -0
  142. package/src/compose/compose-identity.test.ts +175 -0
  143. package/src/compose/composition.ts +8 -4
  144. package/src/compose/structure.ts +45 -13
  145. package/src/compose/ui.ts +22 -5
  146. package/src/event/event.ts +34 -5
  147. package/src/event/syncTrigger.test.ts +66 -0
  148. package/src/internal/familyKeys.ts +41 -0
  149. package/src/internal/platform.test.ts +55 -0
  150. package/src/internal/platform.ts +72 -0
  151. package/src/internal/queryDriver-defect-attribution.test.ts +107 -0
  152. package/src/internal/queryDriver-persist-key.test.ts +118 -0
  153. package/src/internal/queryDriver.persistence-staleness.test.ts +209 -0
  154. package/src/internal/queryDriver.ts +92 -80
  155. package/src/internal/queryDriverConsume.ts +42 -0
  156. package/src/internal/queryDriverHydrate.ts +9 -3
  157. package/src/internal/queryDriverPersist.ts +42 -0
  158. package/src/internal/queryDriverPersistWarn.ts +61 -0
  159. package/src/internal/queryDriverSettle.ts +85 -0
  160. package/src/internal/queryDriverStore.ts +9 -74
  161. package/src/internal/queryDriverTypes.ts +10 -0
  162. package/src/internal/queryState-and-scheduler-audit.test.ts +170 -0
  163. package/src/internal/scheduler-multi-source-wake.test.ts +111 -0
  164. package/src/internal/scheduler.ts +80 -6
  165. package/src/internal.ts +4 -0
  166. package/src/reducer/reducer.ts +3 -3
  167. package/src/remote/pendingQueue.ts +35 -5
  168. package/src/remote/remoteState.intent-key-stamp.test.ts +207 -0
  169. package/src/remote/remoteState.key-attribution.test.ts +174 -0
  170. package/src/remote/remoteState.ts +27 -15
  171. package/src/remote/remoteStateSend.ts +29 -8
  172. package/src/remote/remoteStateTypes.ts +7 -0
  173. package/src/runtime/bus.ts +6 -1
  174. package/src/runtime/capturedAppRuntime.ts +134 -110
  175. package/src/runtime/eventBudget.ts +2 -1
  176. package/src/runtime/feature-mount-ownership.test.ts +539 -0
  177. package/src/runtime/featureMount.ts +110 -3
  178. package/src/runtime/loop.ts +29 -6
  179. package/src/runtime/mount-inflight-ownership.test.ts +361 -0
  180. package/src/runtime/mount-scope-hardening.test.ts +440 -0
  181. package/src/runtime/runtime.schema-identity.test.ts +188 -0
  182. package/src/state/state.ts +8 -4
  183. package/src/state/stateFamily.ts +86 -36
  184. package/src/state/stateGroup.ts +24 -6
  185. package/src/testkit/flight.testkit.ts +2 -1
  186. package/src/ui/trigger.ts +18 -0
  187. package/src/wire/tree-key-presence.test.ts +46 -0
  188. package/src/wire/tree.ts +9 -1
@@ -1,15 +1,18 @@
1
- import { Cause, Chunk, Effect, MutableRef, Option, Queue, Runtime, Stream } from 'effect';
1
+ import { Cause, Effect, MutableRef, Option, Queue, Runtime } from 'effect';
2
2
  import { empty } from '../calc/queryState.js';
3
3
  import { Queries } from '../runtime/queries.js';
4
- import { reuse } from './reuse.js';
5
4
  import { resolveInstrumentation } from '../runtime/instrumentation.js';
6
5
  import { resolveQueryStore } from './queryStore.js';
6
+ import { makePersistWrite, persistCacheKey } from './queryDriverPersist.js';
7
+ import { makeSettlers } from './queryDriverSettle.js';
7
8
  import { hydratePersistedQuery } from './queryDriverHydrate.js';
8
- import { incrementGeneration, makeQueryProjection, subscribeQuerySources, settleQueryError, withReaderTracking, } from './queryDriverStore.js';
9
+ import { incrementGeneration, makeQueryProjection, subscribeQuerySources, withReaderTracking, } from './queryDriverStore.js';
10
+ import { consumeRequests } from './queryDriverConsume.js';
9
11
  import { resolveScheduler } from './scheduler.js';
10
12
  import { sameKey, wireSources } from './sources.js';
11
13
  import { makeStore } from './store.js';
12
14
  import {} from '../state/token.js';
15
+ import { microtask } from './platform.js';
13
16
  export { bumpRevision, gatedFlag, Revision, RevisionSchema, revisionZero, } from './queryDriverTypes.js';
14
17
  // oxlint-disable-next-line reform-rules/prefer-effect-fn -- generic export: Effect.fn's inferred type isn't portable under isolatedDeclarations
15
18
  export const makeQueryDriver = (options) => Effect.gen(function* () {
@@ -20,12 +23,16 @@ export const makeQueryDriver = (options) => Effect.gen(function* () {
20
23
  const persist = options.persist;
21
24
  const queryStore = yield* resolveQueryStore;
22
25
  const keyOf = (args) => extraKey === undefined ? sources.keyOf(args) : [...sources.keyOf(args), extraKey.read()];
23
- const persistKey = (key, args) => (typeof key === 'function' ? key(args) : key);
24
26
  const disabledNow = (args = sources.snapshot()) => options.gated && options.disabled !== undefined ? options.disabled(args) : false;
25
- const idle = empty(false);
26
- const stateStore = makeStore(disabledNow() ? idle : empty(true), scheduler);
27
+ const keepPreviousData = options.keepPreviousData === true;
28
+ const idle = empty(false, keepPreviousData);
29
+ const stateStore = makeStore(disabledNow() ? idle : empty(true, keepPreviousData), scheduler);
27
30
  const readers = MutableRef.make(0);
28
31
  const lastKey = MutableRef.make(undefined);
32
+ // Attribution tracks the *source* key, not `keyOf`: `extraKey` carries the
33
+ // invalidateOn revision, and a revision bump revalidates the same question
34
+ // rather than asking a new one.
35
+ const lastSourceKey = MutableRef.make(undefined);
29
36
  // Monotonic source epoch for the one startup hydration attempt. Comparing
30
37
  // only the current key is insufficient: A → B → A would otherwise let the
31
38
  // original A cache land over the later A request. Same-key refetches do not
@@ -37,42 +44,31 @@ export const makeQueryDriver = (options) => Effect.gen(function* () {
37
44
  // captures this before the startup kick, while invalidation captures it when
38
45
  // the value is marked stale.
39
46
  const staleAtGeneration = MutableRef.make(0);
40
- const markFetching = () => {
41
- const state = stateStore.get();
42
- if (!state.isFetching) {
43
- stateStore.set({ ...state, isFetching: true });
44
- }
45
- };
46
- const settleSuccess = (produced) => {
47
- const prev = stateStore.get();
48
- const shared = options.reuse === true && Option.isSome(prev.data)
49
- ? reuse(prev.data.value, produced)
50
- : produced;
51
- stateStore.set({
52
- data: Option.some(shared),
53
- error: Option.none(),
54
- isFetching: false,
55
- isStale: false,
56
- });
57
- return shared;
58
- };
59
- const settleError = (error, failedGeneration) => {
60
- // Preserve the stale cause after failure without duplicating a newer request.
61
- MutableRef.update(staleAtGeneration, (current) => Math.max(current, failedGeneration));
62
- settleQueryError(stateStore, error);
63
- };
64
- const persistWriteTo = (target, produced, args) => target.codec.encode(produced).pipe(Effect.flatMap((encoded) => queryStore.set(persistKey(target.key, args), encoded)),
65
- // Persistence is best-effort and must not block the visible write.
66
- Effect.ignore);
67
- const persistWrite = (produced, args) => persist === undefined ? Effect.void : persistWriteTo(persist, produced, args);
68
- const derived = makeQueryProjection({ gated: options.gated, scheduler, stateStore });
47
+ const { markFetching, settleSuccess, settleError, settleDefect } = makeSettlers({
48
+ stateStore,
49
+ lastSourceKey,
50
+ generation,
51
+ staleAtGeneration,
52
+ reuse: options.reuse === true,
53
+ });
54
+ const persistWrite = makePersistWrite({
55
+ queryStore,
56
+ persist,
57
+ label: options.label,
58
+ name: options.name,
59
+ });
60
+ const derived = makeQueryProjection({
61
+ gated: options.gated,
62
+ scheduler,
63
+ stateStore,
64
+ });
69
65
  yield* Effect.addFinalizer(() => Effect.sync(derived.unsubscribe));
70
66
  const commitSuccess = (produced, request) => {
71
67
  if (disabledNow()) {
72
68
  return Effect.void;
73
69
  }
74
70
  return Effect.suspend(() => {
75
- const shared = settleSuccess(produced);
71
+ const shared = settleSuccess(produced, request);
76
72
  options.onSettled?.(request.generation);
77
73
  return persistWrite(shared, request.args);
78
74
  });
@@ -80,9 +76,11 @@ export const makeQueryDriver = (options) => Effect.gen(function* () {
80
76
  const runQuery = (request) => Effect.sync(() => instrumentation.queryRun(options.name)).pipe(Effect.flatMap((endSpan) => options.query(request.args).pipe(Effect.ensuring(Effect.sync(endSpan)))), Effect.tapDefect((defect) => Effect.logError(`reform: ${options.label} '${options.name}' query defect`, defect)), Effect.matchCause({
81
77
  onSuccess: (produced) => Option.some(produced),
82
78
  onFailure: (cause) => {
83
- const failure = Cause.failureOption(cause);
84
- if (Option.isSome(failure) && !disabledNow()) {
85
- settleError(failure.value, request.generation);
79
+ if (!disabledNow()) {
80
+ Option.match(Cause.failureOption(cause), {
81
+ onSome: (error) => settleError(error, request),
82
+ onNone: () => settleDefect(request),
83
+ });
86
84
  }
87
85
  return Option.none();
88
86
  },
@@ -90,22 +88,13 @@ export const makeQueryDriver = (options) => Effect.gen(function* () {
90
88
  onNone: () => Effect.void,
91
89
  onSome: (produced) => commitSuccess(produced, request),
92
90
  })));
93
- const trailing = options.coalesce === 'trailing';
94
91
  const requests = yield* Queue.unbounded();
95
- const trailingConsumer = Effect.forever(Effect.gen(function* () {
96
- const first = yield* Queue.take(requests);
97
- const queued = yield* Queue.takeAll(requests);
98
- const request = Option.getOrElse(Chunk.last(queued), () => first);
99
- if (!disabledNow()) {
100
- yield* runQuery(request);
101
- }
102
- const pending = yield* Queue.size(requests);
103
- if (pending > 0 && !disabledNow()) {
104
- yield* Effect.sync(markFetching);
105
- }
92
+ yield* Effect.forkScoped(consumeRequests(options.coalesce === 'trailing', {
93
+ requests,
94
+ runQuery,
95
+ disabledNow: () => disabledNow(),
96
+ markFetching,
106
97
  }));
107
- const switchConsumer = Stream.fromQueue(requests).pipe(Stream.flatMap((request) => Stream.fromEffect(runQuery(request)), { switch: true }), Stream.runDrain);
108
- yield* Effect.forkScoped(trailing ? trailingConsumer : switchConsumer);
109
98
  const enqueue = (force) => {
110
99
  const args = sources.snapshot();
111
100
  if (disabledNow(args)) {
@@ -113,6 +102,7 @@ export const makeQueryDriver = (options) => Effect.gen(function* () {
113
102
  MutableRef.update(sourceEpoch, (current) => current + 1);
114
103
  }
115
104
  MutableRef.set(lastKey, undefined);
105
+ MutableRef.set(lastSourceKey, undefined);
116
106
  stateStore.set(idle);
117
107
  return;
118
108
  }
@@ -121,12 +111,16 @@ export const makeQueryDriver = (options) => Effect.gen(function* () {
121
111
  if (!force && previous !== undefined && sameKey(key, previous)) {
122
112
  return;
123
113
  }
114
+ const sourceKey = sources.keyOf(args);
115
+ const previousSourceKey = MutableRef.get(lastSourceKey);
116
+ const changedKey = previousSourceKey !== undefined && !sameKey(sourceKey, previousSourceKey);
124
117
  if (previous !== undefined && !sameKey(key, previous)) {
125
118
  MutableRef.update(sourceEpoch, (current) => current + 1);
126
119
  }
127
120
  MutableRef.set(lastKey, key);
128
- markFetching();
129
- Queue.unsafeOffer(requests, { args, generation: nextGeneration() });
121
+ MutableRef.set(lastSourceKey, sourceKey);
122
+ markFetching(changedKey);
123
+ Queue.unsafeOffer(requests, { args, sourceKey, generation: nextGeneration() });
130
124
  };
131
125
  const trigger = () => enqueue(false);
132
126
  const refetch = () => enqueue(true);
@@ -136,14 +130,32 @@ export const makeQueryDriver = (options) => Effect.gen(function* () {
136
130
  refetch();
137
131
  }
138
132
  };
139
- const invalidate = () => {
140
- const state = stateStore.get();
141
- if (state.isStale) {
133
+ // Every invalidation in a frame is one signal, not N: the mark is raised
134
+ // synchronously but the response is coalesced onto a microtask, so a storm
135
+ // (a focus burst, several mutations acking together) issues one request. A
136
+ // later frame arms it again — that invalidation is genuinely uncovered by a
137
+ // request issued before it.
138
+ const refetchArmed = MutableRef.make(false);
139
+ const scheduleAutoRefetch = () => {
140
+ if (MutableRef.get(refetchArmed)) {
142
141
  return;
143
142
  }
143
+ MutableRef.set(refetchArmed, true);
144
+ microtask(() => {
145
+ MutableRef.set(refetchArmed, false);
146
+ maybeAutoRefetch();
147
+ });
148
+ };
149
+ const invalidate = () => {
150
+ const state = stateStore.get();
151
+ // Always advance the mark: an invalidation raised while an earlier one's
152
+ // revalidation is in flight is not covered by that flight, so returning early
153
+ // on `isStale` would drop it whole (the refetch-on-focus path).
144
154
  MutableRef.set(staleAtGeneration, MutableRef.get(generation));
145
- stateStore.set({ ...state, isStale: true });
146
- maybeAutoRefetch();
155
+ if (!state.isStale) {
156
+ stateStore.set({ ...state, isStale: true });
157
+ }
158
+ scheduleAutoRefetch();
147
159
  };
148
160
  const unsubscribe = subscribeQuerySources(sources, extraKey, trigger);
149
161
  yield* Effect.addFinalizer(() => Effect.sync(unsubscribe));
@@ -154,7 +166,7 @@ export const makeQueryDriver = (options) => Effect.gen(function* () {
154
166
  const hydrateSourceEpoch = MutableRef.get(sourceEpoch);
155
167
  const hydrate = hydratePersistedQuery({
156
168
  queryStore,
157
- cacheKey: persistKey(persist.key, hydrateArgs),
169
+ cacheKey: persistCacheKey(persist.key, hydrateArgs),
158
170
  codec: persist.codec,
159
171
  stateStore,
160
172
  staleAtGeneration,
@@ -169,9 +181,16 @@ export const makeQueryDriver = (options) => Effect.gen(function* () {
169
181
  }
170
182
  const initial = sources.snapshot();
171
183
  if (!disabledNow(initial)) {
172
- MutableRef.set(lastKey, keyOf(initial));
184
+ const initialKey = keyOf(initial);
185
+ const initialSourceKey = sources.keyOf(initial);
186
+ MutableRef.set(lastKey, initialKey);
187
+ MutableRef.set(lastSourceKey, initialSourceKey);
173
188
  markFetching();
174
- Queue.unsafeOffer(requests, { args: initial, generation: nextGeneration() });
189
+ Queue.unsafeOffer(requests, {
190
+ args: initial,
191
+ sourceKey: initialSourceKey,
192
+ generation: nextGeneration(),
193
+ });
175
194
  }
176
195
  const store = withReaderTracking({
177
196
  store: derived.store,
@@ -193,6 +212,11 @@ export const makeQueryDriver = (options) => Effect.gen(function* () {
193
212
  queries.register(handle);
194
213
  yield* Effect.addFinalizer(() => Effect.sync(() => queries.unregister(handle)));
195
214
  }
196
- return { store, requested: () => MutableRef.get(generation) };
215
+ return {
216
+ store,
217
+ requested: () => MutableRef.get(generation),
218
+ key: () => sources.keyOf(sources.snapshot()),
219
+ subscribeKey: sources.subscribe,
220
+ };
197
221
  });
198
222
  //# sourceMappingURL=queryDriver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryDriver.js","sourceRoot":"","sources":["../../src/internal/queryDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryDriver.js","sourceRoot":"","sources":["../../src/internal/queryDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Effect, type Queue } from 'effect';
2
+ export interface ConsumeOptions<Request, R> {
3
+ readonly requests: Queue.Queue<Request>;
4
+ readonly runQuery: (request: Request) => Effect.Effect<void, never, R>;
5
+ readonly disabledNow: () => boolean;
6
+ readonly markFetching: () => void;
7
+ }
8
+ export declare const consumeRequests: <Request, R>(trailing: boolean, options: ConsumeOptions<Request, R>) => Effect.Effect<void, never, R>;
9
+ //# sourceMappingURL=queryDriverConsume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryDriverConsume.d.ts","sourceRoot":"","sources":["../../src/internal/queryDriverConsume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAU,KAAK,KAAK,EAAU,MAAM,QAAQ,CAAA;AAKlE,MAAM,WAAW,cAAc,CAAC,OAAO,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACtE,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAA;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAA;CAClC;AA4BD,eAAO,MAAM,eAAe,GAAI,OAAO,EAAE,CAAC,EACxC,UAAU,OAAO,EACjB,SAAS,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,KAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAqE,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { Chunk, Effect, Option, Stream } from 'effect';
2
+ const trailingConsumer = (options) => Effect.forever(Effect.gen(function* () {
3
+ const first = yield* options.requests.take;
4
+ const queued = yield* options.requests.takeAll;
5
+ const request = Option.getOrElse(Chunk.last(queued), () => first);
6
+ if (!options.disabledNow()) {
7
+ yield* options.runQuery(request);
8
+ }
9
+ const pending = yield* options.requests.size;
10
+ if (pending > 0 && !options.disabledNow()) {
11
+ yield* Effect.sync(options.markFetching);
12
+ }
13
+ }));
14
+ const switchConsumer = (options) => Stream.fromQueue(options.requests).pipe(Stream.flatMap((request) => Stream.fromEffect(options.runQuery(request)), { switch: true }), Stream.runDrain);
15
+ export const consumeRequests = (trailing, options) => (trailing ? trailingConsumer(options) : switchConsumer(options));
16
+ //# sourceMappingURL=queryDriverConsume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryDriverConsume.js","sourceRoot":"","sources":["../../src/internal/queryDriverConsume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAc,MAAM,EAAE,MAAM,QAAQ,CAAA;AAYlE,MAAM,gBAAgB,GAAG,CACvB,OAAmC,EACH,EAAE,CAClC,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAA;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;IACjE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3B,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA;IAC5C,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1C,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC,CAAC,CACH,CAAA;AAEH,MAAM,cAAc,GAAG,CACrB,OAAmC,EACJ,EAAE,CACjC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CACrC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAC3F,MAAM,CAAC,QAAQ,CAChB,CAAA;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,QAAiB,EACjB,OAAmC,EACJ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"queryDriverHydrate.d.ts","sourceRoot":"","sources":["../../src/internal/queryDriverHydrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAU,MAAM,QAAQ,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,UAAU,uBAAuB,CAAC,CAAC,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IACzD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IAEnC,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAA;CACrC;AAcD,eAAO,MAAM,qBAAqB,GAAI,CAAC,EAAE,CAAC,EACxC,SAAS,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,KACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAalB,CAAA"}
1
+ {"version":3,"file":"queryDriverHydrate.d.ts","sourceRoot":"","sources":["../../src/internal/queryDriverHydrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAU,MAAM,QAAQ,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,UAAU,uBAAuB,CAAC,CAAC,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IACzD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IAEnC,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAA;CACrC;AAmBD,eAAO,MAAM,qBAAqB,GAAI,CAAC,EAAE,CAAC,EACxC,SAAS,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,KACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAclB,CAAA"}
@@ -5,7 +5,12 @@ const paint = (options, decoded) => {
5
5
  return;
6
6
  }
7
7
  MutableRef.update(options.staleAtGeneration, (current) => Math.max(current, options.capturedGeneration));
8
- options.stateStore.set({ ...state, data: Option.some(decoded), isStale: true });
8
+ options.stateStore.set({
9
+ ...state,
10
+ data: Option.some(decoded),
11
+ isStale: true,
12
+ isPreviousKey: false,
13
+ });
9
14
  };
10
15
  // Epoch, key, and settled-state guards prevent a late cache from replacing newer truth.
11
16
  export const hydratePersistedQuery = (options) => options.queryStore.get(options.cacheKey).pipe(Effect.flatMap((cached) => Option.match(cached, {
@@ -14,6 +19,7 @@ export const hydratePersistedQuery = (options) => options.queryStore.get(options
14
19
  .decode(raw)
15
20
  .pipe(Effect.tap((decoded) => Effect.sync(() => paint(options, decoded)))),
16
21
  })),
17
- // Corrupt/incompatible cache: ignore and fetch fresh.
18
- Effect.ignore);
22
+ // Corrupt/incompatible cache: ignore and fetch fresh. Catches defects too — a
23
+ // store backed by localStorage throws rather than failing typed.
24
+ Effect.catchAllCause(() => Effect.void));
19
25
  //# sourceMappingURL=queryDriverHydrate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryDriverHydrate.js","sourceRoot":"","sources":["../../src/internal/queryDriverHydrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAiBnD,MAAM,KAAK,GAAG,CAAO,OAAsC,EAAE,OAAU,EAAQ,EAAE;IAC/E,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;IACtC,IAAI,OAAO,CAAC,YAAY,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACtF,OAAM;IACR,CAAC;IACD,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE,CACvD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAC9C,CAAA;IACD,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACjF,CAAC,CAAA;AAED,wFAAwF;AACxF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,OAAsC,EACjB,EAAE,CACvB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;IACzB,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,OAAO,CAAC,KAAK;SACV,MAAM,CAAC,GAAG,CAAC;SACX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/E,CAAC,CACH;AACD,sDAAsD;AACtD,MAAM,CAAC,MAAM,CACd,CAAA"}
1
+ {"version":3,"file":"queryDriverHydrate.js","sourceRoot":"","sources":["../../src/internal/queryDriverHydrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAiBnD,MAAM,KAAK,GAAG,CAAO,OAAsC,EAAE,OAAU,EAAQ,EAAE;IAC/E,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;IACtC,IAAI,OAAO,CAAC,YAAY,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACtF,OAAM;IACR,CAAC;IACD,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE,CACvD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAC9C,CAAA;IACD,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,GAAG,KAAK;QACR,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1B,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,KAAK;KACrB,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,wFAAwF;AACxF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,OAAsC,EACjB,EAAE,CACvB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;IACzB,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,OAAO,CAAC,KAAK;SACV,MAAM,CAAC,GAAG,CAAC;SACX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/E,CAAC,CACH;AACD,8EAA8E;AAC9E,iEAAiE;AACjE,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CACxC,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { Effect } from 'effect';
2
+ import type { QueryStoreApi } from './queryStore.js';
3
+ import type { QueryCodec } from './queryDriverTypes.js';
4
+ export interface PersistTarget<Args, A> {
5
+ readonly key: string | ((inputs: Args) => string);
6
+ readonly codec: QueryCodec<A>;
7
+ }
8
+ export declare const persistCacheKey: <Args>(key: string | ((inputs: Args) => string), args: Args) => string;
9
+ export interface PersistWriterOptions<Args, A> {
10
+ readonly queryStore: QueryStoreApi;
11
+ readonly persist: PersistTarget<Args, A> | undefined;
12
+ readonly label: string;
13
+ readonly name: string;
14
+ }
15
+ export declare const makePersistWrite: <Args, A>(options: PersistWriterOptions<Args, A>) => ((produced: A, args: Args) => Effect.Effect<void>);
16
+ //# sourceMappingURL=queryDriverPersist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryDriverPersist.d.ts","sourceRoot":"","sources":["../../src/internal/queryDriverPersist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,WAAW,aAAa,CAAC,IAAI,EAAE,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,CAAA;IACjD,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;CAC9B;AAED,eAAO,MAAM,eAAe,GAAI,IAAI,EAClC,KAAK,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,EACxC,MAAM,IAAI,KACT,MAAuD,CAAA;AAE1D,MAAM,WAAW,oBAAoB,CAAC,IAAI,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,gBAAgB,GAAI,IAAI,EAAE,CAAC,EACtC,SAAS,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,KACrC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAkBnD,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { Effect } from 'effect';
2
+ export const persistCacheKey = (key, args) => (typeof key === 'function' ? key(args) : key);
3
+ export const makePersistWrite = (options) => {
4
+ const target = options.persist;
5
+ if (target === undefined) {
6
+ return () => Effect.void;
7
+ }
8
+ return (produced, args) => target.codec.encode(produced).pipe(Effect.flatMap((encoded) => options.queryStore.set(persistCacheKey(target.key, args), encoded)),
9
+ // Persistence is best-effort and must not block the visible write. This
10
+ // catches defects, not just typed failures: a store backed by localStorage
11
+ // *throws* when quota is exhausted, and `Effect.ignore` would let that escape
12
+ // and kill the request consumer for the rest of the session.
13
+ Effect.catchAllCause((cause) => Effect.logWarning(`reform: ${options.label} '${options.name}' persist failed`, cause)));
14
+ };
15
+ //# sourceMappingURL=queryDriverPersist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryDriverPersist.js","sourceRoot":"","sources":["../../src/internal/queryDriverPersist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAS/B,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,GAAwC,EACxC,IAAU,EACF,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAS1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAsC,EACc,EAAE;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAA;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAA;IAC1B,CAAC;IACD,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CACxB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAChC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACzB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CACnE;IACD,wEAAwE;IACxE,2EAA2E;IAC3E,8EAA8E;IAC9E,6DAA6D;IAC7D,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7B,MAAM,CAAC,UAAU,CAAC,WAAW,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,kBAAkB,EAAE,KAAK,CAAC,CACtF,CACF,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { Effect } from 'effect';
2
+ export type PersistOptionExternalApi<Args> = boolean | undefined | {
3
+ readonly key?: string | ((inputs: Args) => string);
4
+ };
5
+ export interface PersistSlotInput<Args> {
6
+ readonly label: string;
7
+ readonly name: string;
8
+ readonly inputs: number;
9
+ readonly option: PersistOptionExternalApi<Args>;
10
+ }
11
+ export declare const resolvePersistSlot: <Args>(input: PersistSlotInput<Args>) => Effect.Effect<string | ((inputs: Args) => string)>;
12
+ //# sourceMappingURL=queryDriverPersistWarn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryDriverPersistWarn.d.ts","sourceRoot":"","sources":["../../src/internal/queryDriverPersistWarn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,MAAM,QAAQ,CAAA;AAG1C,MAAM,MAAM,wBAAwB,CAAC,IAAI,IACrC,OAAO,GACP,SAAS,GACT;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,CAAA;CAAE,CAAA;AAE1D,MAAM,WAAW,gBAAgB,CAAC,IAAI;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAA;CAChD;AAWD,eAAO,MAAM,kBAAkB,GAAI,IAAI,EACrC,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,CAgBnD,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { Effect, Predicate } from 'effect';
2
+ // The cache slot a query persists into, plus the warning if that slot is shared.
3
+ export const resolvePersistSlot = (input) => {
4
+ const option = input.option;
5
+ const key = option === true || option === undefined || option === false
6
+ ? input.name
7
+ : (option.key ?? input.name);
8
+ return Effect.as(warnSharedPersistSlot({
9
+ label: input.label,
10
+ name: input.name,
11
+ inputs: input.inputs,
12
+ key,
13
+ enabled: option !== undefined && option !== false,
14
+ }), key);
15
+ };
16
+ // A constant `persist` key gives every input key ONE cache slot: the last key to
17
+ // settle overwrites the rest, and on the next boot that payload is hydrated as the
18
+ // answer to whichever key is being asked. Sharing a slot on purpose is a legitimate
19
+ // choice — a "last seen" cache — so this warns rather than refuses, but it must not
20
+ // be silent: it is the same misattribution `isPreviousKey` exists to stop, arriving
21
+ // across a reload where no epoch or key guard can see it.
22
+ const warnSharedPersistSlot = (slot) => {
23
+ if (!slot.enabled || slot.inputs === 0 || !Predicate.isString(slot.key)) {
24
+ return Effect.void;
25
+ }
26
+ return Effect.logWarning(`reform: ${slot.label} '${slot.name}' persists ${slot.inputs} input(s) into the single cache slot ` +
27
+ `'${slot.key}'. Every input key overwrites the same entry, and a reload hydrates it as the answer ` +
28
+ `to whichever key is being asked. Pass persist: { key: (inputs) => ... } for a slot per key, or ` +
29
+ `keep the shared slot deliberately.`);
30
+ };
31
+ //# sourceMappingURL=queryDriverPersistWarn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryDriverPersistWarn.js","sourceRoot":"","sources":["../../src/internal/queryDriverPersistWarn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAuB1C,iFAAiF;AACjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAA6B,EACuB,EAAE;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAC3B,MAAM,GAAG,GACP,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK;QACzD,CAAC,CAAC,KAAK,CAAC,IAAI;QACZ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;IAChC,OAAO,MAAM,CAAC,EAAE,CACd,qBAAqB,CAAC;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG;QACH,OAAO,EAAE,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK;KAClD,CAAC,EACF,GAAG,CACJ,CAAA;AACH,CAAC,CAAA;AAED,iFAAiF;AACjF,mFAAmF;AACnF,oFAAoF;AACpF,oFAAoF;AACpF,oFAAoF;AACpF,0DAA0D;AAC1D,MAAM,qBAAqB,GAAG,CAAC,IAAuB,EAAuB,EAAE;IAC7E,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxE,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC;IACD,OAAO,MAAM,CAAC,UAAU,CACtB,WAAW,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,MAAM,uCAAuC;QACjG,IAAI,IAAI,CAAC,GAAG,uFAAuF;QACnG,iGAAiG;QACjG,oCAAoC,CACvC,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { MutableRef } from 'effect';
2
+ import type { QueryState } from '../calc/queryState.js';
3
+ import type { Store } from './store.js';
4
+ export interface SettleRequest {
5
+ readonly sourceKey: ReadonlyArray<unknown>;
6
+ readonly generation: number;
7
+ }
8
+ export interface SettlersOptions<A, E> {
9
+ readonly stateStore: Store<QueryState<A, E>>;
10
+ readonly lastSourceKey: MutableRef.MutableRef<ReadonlyArray<unknown> | undefined>;
11
+ readonly generation: MutableRef.MutableRef<number>;
12
+ readonly staleAtGeneration: MutableRef.MutableRef<number>;
13
+ readonly reuse: boolean;
14
+ }
15
+ export interface Settlers<A, E> {
16
+ readonly supersededKey: (requestSourceKey: ReadonlyArray<unknown>) => boolean;
17
+ readonly markFetching: (superseded?: boolean) => void;
18
+ readonly settleSuccess: (produced: A, request: SettleRequest) => A;
19
+ readonly settleError: (error: E, request: SettleRequest) => void;
20
+ readonly settleDefect: (request: SettleRequest) => void;
21
+ }
22
+ export declare const makeSettlers: <A, E>(options: SettlersOptions<A, E>) => Settlers<A, E>;
23
+ //# sourceMappingURL=queryDriverSettle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryDriverSettle.d.ts","sourceRoot":"","sources":["../../src/internal/queryDriverSettle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAU,MAAM,QAAQ,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAIpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAKpC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5C,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAAA;IACjF,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAClD,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IACzD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,EAAE,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,CAAC,gBAAgB,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,OAAO,CAAA;IAC7E,QAAQ,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IACrD,QAAQ,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,KAAK,CAAC,CAAA;IAClE,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,KAAK,IAAI,CAAA;IAChE,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAA;CACxD;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAAE,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAqDhF,CAAA"}
@@ -0,0 +1,52 @@
1
+ import { MutableRef, Option } from 'effect';
2
+ import { settleQueryError } from './queryDriverStore.js';
3
+ import { reuse } from './reuse.js';
4
+ import { sameKey } from './sources.js';
5
+ export const makeSettlers = (options) => {
6
+ const { stateStore } = options;
7
+ // A settling request answers the key it was issued for. If the sources have
8
+ // moved on, whatever it writes is about a question nobody is asking any more.
9
+ const supersededKey = (requestSourceKey) => {
10
+ const current = MutableRef.get(options.lastSourceKey);
11
+ return current === undefined || !sameKey(requestSourceKey, current);
12
+ };
13
+ const markFetching = (superseded = false) => {
14
+ const state = stateStore.get();
15
+ const isPreviousKey = state.isPreviousKey || superseded;
16
+ if (!state.isFetching || isPreviousKey !== state.isPreviousKey) {
17
+ stateStore.set({ ...state, isFetching: true, isPreviousKey });
18
+ }
19
+ };
20
+ const settleSuccess = (produced, request) => {
21
+ const prev = stateStore.get();
22
+ const shared = options.reuse && Option.isSome(prev.data) ? reuse(prev.data.value, produced) : produced;
23
+ stateStore.set({
24
+ ...prev,
25
+ data: Option.some(shared),
26
+ error: Option.none(),
27
+ isFetching: false,
28
+ // An answer requested before an invalidation cannot discharge it: the mark
29
+ // clears only for a strictly newer generation, matching `maybeAutoRefetch`.
30
+ isStale: request.generation <= MutableRef.get(options.staleAtGeneration),
31
+ isPreviousKey: supersededKey(request.sourceKey),
32
+ });
33
+ return shared;
34
+ };
35
+ const settleError = (error, request) => {
36
+ // Preserve the stale cause after failure without duplicating a newer request.
37
+ MutableRef.update(options.staleAtGeneration, (current) => Math.max(current, request.generation));
38
+ settleQueryError(stateStore, error, supersededKey(request.sourceKey));
39
+ };
40
+ // A run that dies is over; leaving `isFetching` raised advertises a flight that
41
+ // no longer exists. Only the newest run may retract it — a superseded run's
42
+ // death says nothing about its successor.
43
+ const settleDefect = (request) => {
44
+ if (MutableRef.get(options.generation) !== request.generation) {
45
+ return;
46
+ }
47
+ const state = stateStore.get();
48
+ stateStore.set({ ...state, isFetching: false });
49
+ };
50
+ return { supersededKey, markFetching, settleSuccess, settleError, settleDefect };
51
+ };
52
+ //# sourceMappingURL=queryDriverSettle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryDriverSettle.js","sourceRoot":"","sources":["../../src/internal/queryDriverSettle.ts"],"names":[],"mappings":"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"}
@@ -1,39 +1,13 @@
1
- import { Effect, MutableRef } from 'effect';
1
+ import { MutableRef } from 'effect';
2
2
  import type { AnyAsyncData } from '../calc/asyncData.js';
3
3
  import { type QueryState } from '../calc/queryState.js';
4
- import type { QueryStoreApi } from './queryStore.js';
5
4
  import type { Scheduler } from './scheduler.js';
6
5
  import { type Store } from './store.js';
7
- import type { AnySchema } from './variance.js';
8
- import type { InputsObject } from './sources.js';
9
- import type { AnySource } from '../state/token.js';
10
- interface HydrateQueryOptions<A, E> {
11
- readonly cacheKey: string;
12
- readonly queryStore: QueryStoreApi;
13
- readonly schema: AnySchema<A>;
14
- readonly stateStore: Store<QueryState<A, E>>;
15
- }
16
- export declare const hydrateQuery: <A, E>(options: HydrateQueryOptions<A, E>) => Effect.Effect<void>;
17
- interface PersistQueryValueOptions<A> {
18
- readonly cacheKey: string;
19
- readonly produced: A;
20
- readonly queryStore: QueryStoreApi;
21
- readonly schema: AnySchema<A>;
22
- }
23
- export declare const persistQueryValue: <A>(options: PersistQueryValueOptions<A>) => Effect.Effect<void>;
24
- interface PersistWriterOptions<Inputs extends ReadonlyArray<AnySource>, A> {
25
- readonly persist: {
26
- readonly key: string | ((inputs: InputsObject<Inputs>) => string);
27
- readonly schema: AnySchema<A>;
28
- } | undefined;
29
- readonly queryStore: QueryStoreApi;
30
- }
31
- export declare const makePersistWriter: <Inputs extends ReadonlyArray<AnySource>, A>(options: PersistWriterOptions<Inputs, A>) => ((produced: A, inputs: InputsObject<Inputs>) => Effect.Effect<void>);
32
6
  interface SubscribableSource {
33
7
  readonly subscribe: (listener: () => void) => () => void;
34
8
  }
35
9
  export declare const subscribeQuerySources: (sources: SubscribableSource, extraKey: SubscribableSource | undefined, listener: () => void) => (() => void);
36
- export declare const settleQueryError: <A, E>(stateStore: Store<QueryState<A, E>>, error: E) => void;
10
+ export declare const settleQueryError: <A, E>(stateStore: Store<QueryState<A, E>>, error: E, isPreviousKey: boolean) => void;
37
11
  export declare const incrementGeneration: (generation: MutableRef.MutableRef<number>) => number;
38
12
  interface QueryProjectionOptions<A, E> {
39
13
  readonly gated: boolean;