@playfast/reform 1.3.0 → 1.4.0

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 (182) 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.map +1 -1
  28. package/dist/event/event.js +23 -2
  29. package/dist/event/event.js.map +1 -1
  30. package/dist/internal/familyKeys.d.ts +16 -0
  31. package/dist/internal/familyKeys.d.ts.map +1 -0
  32. package/dist/internal/familyKeys.js +35 -0
  33. package/dist/internal/familyKeys.js.map +1 -0
  34. package/dist/internal/platform.d.ts +43 -0
  35. package/dist/internal/platform.d.ts.map +1 -0
  36. package/dist/internal/platform.js +68 -0
  37. package/dist/internal/platform.js.map +1 -0
  38. package/dist/internal/queryDriver.d.ts.map +1 -1
  39. package/dist/internal/queryDriver.js +88 -64
  40. package/dist/internal/queryDriver.js.map +1 -1
  41. package/dist/internal/queryDriverConsume.d.ts +9 -0
  42. package/dist/internal/queryDriverConsume.d.ts.map +1 -0
  43. package/dist/internal/queryDriverConsume.js +16 -0
  44. package/dist/internal/queryDriverConsume.js.map +1 -0
  45. package/dist/internal/queryDriverHydrate.d.ts.map +1 -1
  46. package/dist/internal/queryDriverHydrate.js +9 -3
  47. package/dist/internal/queryDriverHydrate.js.map +1 -1
  48. package/dist/internal/queryDriverPersist.d.ts +16 -0
  49. package/dist/internal/queryDriverPersist.d.ts.map +1 -0
  50. package/dist/internal/queryDriverPersist.js +15 -0
  51. package/dist/internal/queryDriverPersist.js.map +1 -0
  52. package/dist/internal/queryDriverPersistWarn.d.ts +12 -0
  53. package/dist/internal/queryDriverPersistWarn.d.ts.map +1 -0
  54. package/dist/internal/queryDriverPersistWarn.js +31 -0
  55. package/dist/internal/queryDriverPersistWarn.js.map +1 -0
  56. package/dist/internal/queryDriverSettle.d.ts +23 -0
  57. package/dist/internal/queryDriverSettle.d.ts.map +1 -0
  58. package/dist/internal/queryDriverSettle.js +52 -0
  59. package/dist/internal/queryDriverSettle.js.map +1 -0
  60. package/dist/internal/queryDriverStore.d.ts +2 -28
  61. package/dist/internal/queryDriverStore.d.ts.map +1 -1
  62. package/dist/internal/queryDriverStore.js +5 -29
  63. package/dist/internal/queryDriverStore.js.map +1 -1
  64. package/dist/internal/queryDriverTypes.d.ts +3 -0
  65. package/dist/internal/queryDriverTypes.d.ts.map +1 -1
  66. package/dist/internal/scheduler.d.ts +1 -0
  67. package/dist/internal/scheduler.d.ts.map +1 -1
  68. package/dist/internal/scheduler.js +69 -6
  69. package/dist/internal/scheduler.js.map +1 -1
  70. package/dist/internal.d.ts +1 -0
  71. package/dist/internal.d.ts.map +1 -1
  72. package/dist/internal.js +1 -0
  73. package/dist/internal.js.map +1 -1
  74. package/dist/reducer/reducer.js +3 -3
  75. package/dist/reducer/reducer.js.map +1 -1
  76. package/dist/remote/pendingQueue.d.ts +4 -2
  77. package/dist/remote/pendingQueue.d.ts.map +1 -1
  78. package/dist/remote/pendingQueue.js +20 -4
  79. package/dist/remote/pendingQueue.js.map +1 -1
  80. package/dist/remote/remoteState.d.ts.map +1 -1
  81. package/dist/remote/remoteState.js +27 -14
  82. package/dist/remote/remoteState.js.map +1 -1
  83. package/dist/remote/remoteStateSend.d.ts +3 -1
  84. package/dist/remote/remoteStateSend.d.ts.map +1 -1
  85. package/dist/remote/remoteStateSend.js +19 -3
  86. package/dist/remote/remoteStateSend.js.map +1 -1
  87. package/dist/remote/remoteStateTypes.d.ts +3 -0
  88. package/dist/remote/remoteStateTypes.d.ts.map +1 -1
  89. package/dist/runtime/bus.d.ts +5 -0
  90. package/dist/runtime/bus.d.ts.map +1 -1
  91. package/dist/runtime/bus.js +1 -1
  92. package/dist/runtime/bus.js.map +1 -1
  93. package/dist/runtime/capturedAppRuntime.d.ts.map +1 -1
  94. package/dist/runtime/capturedAppRuntime.js +37 -51
  95. package/dist/runtime/capturedAppRuntime.js.map +1 -1
  96. package/dist/runtime/eventBudget.d.ts.map +1 -1
  97. package/dist/runtime/eventBudget.js +2 -1
  98. package/dist/runtime/eventBudget.js.map +1 -1
  99. package/dist/runtime/featureMount.d.ts +34 -2
  100. package/dist/runtime/featureMount.d.ts.map +1 -1
  101. package/dist/runtime/featureMount.js +66 -2
  102. package/dist/runtime/featureMount.js.map +1 -1
  103. package/dist/runtime/loop.d.ts +12 -0
  104. package/dist/runtime/loop.d.ts.map +1 -1
  105. package/dist/runtime/loop.js +8 -5
  106. package/dist/runtime/loop.js.map +1 -1
  107. package/dist/state/state.d.ts +2 -2
  108. package/dist/state/state.d.ts.map +1 -1
  109. package/dist/state/state.js +2 -2
  110. package/dist/state/state.js.map +1 -1
  111. package/dist/state/stateFamily.d.ts +2 -2
  112. package/dist/state/stateFamily.d.ts.map +1 -1
  113. package/dist/state/stateFamily.js +80 -32
  114. package/dist/state/stateFamily.js.map +1 -1
  115. package/dist/state/stateGroup.d.ts +5 -5
  116. package/dist/state/stateGroup.d.ts.map +1 -1
  117. package/dist/state/stateGroup.js +1 -1
  118. package/dist/state/stateGroup.js.map +1 -1
  119. package/dist/testkit/flight.testkit.d.ts.map +1 -1
  120. package/dist/testkit/flight.testkit.js +2 -1
  121. package/dist/testkit/flight.testkit.js.map +1 -1
  122. package/dist/wire/tree.d.ts.map +1 -1
  123. package/dist/wire/tree.js +6 -1
  124. package/dist/wire/tree.js.map +1 -1
  125. package/package.json +1 -1
  126. package/src/calc/asyncCalc-key-attribution.test.ts +182 -0
  127. package/src/calc/asyncCalc-registry-name.test.ts +82 -0
  128. package/src/calc/asyncCalc.superseded-commit.test.ts +162 -0
  129. package/src/calc/asyncCalc.test.ts +35 -7
  130. package/src/calc/asyncCalc.ts +33 -10
  131. package/src/calc/asyncCalcTypes.ts +6 -0
  132. package/src/calc/calcFamily.ts +81 -34
  133. package/src/calc/family-identity.test.ts +231 -0
  134. package/src/calc/queryState.ts +36 -5
  135. package/src/channel/channel-throttle-frames.test.ts +163 -0
  136. package/src/channel/channel.ts +5 -0
  137. package/src/compose/compose-identity.test.ts +175 -0
  138. package/src/compose/composition.ts +8 -4
  139. package/src/compose/structure.ts +45 -13
  140. package/src/compose/ui.ts +22 -5
  141. package/src/event/event.ts +31 -2
  142. package/src/event/syncTrigger.test.ts +66 -0
  143. package/src/internal/familyKeys.ts +41 -0
  144. package/src/internal/platform.test.ts +55 -0
  145. package/src/internal/platform.ts +72 -0
  146. package/src/internal/queryDriver-defect-attribution.test.ts +107 -0
  147. package/src/internal/queryDriver-persist-key.test.ts +118 -0
  148. package/src/internal/queryDriver.persistence-staleness.test.ts +209 -0
  149. package/src/internal/queryDriver.ts +92 -80
  150. package/src/internal/queryDriverConsume.ts +42 -0
  151. package/src/internal/queryDriverHydrate.ts +9 -3
  152. package/src/internal/queryDriverPersist.ts +42 -0
  153. package/src/internal/queryDriverPersistWarn.ts +61 -0
  154. package/src/internal/queryDriverSettle.ts +85 -0
  155. package/src/internal/queryDriverStore.ts +9 -74
  156. package/src/internal/queryDriverTypes.ts +10 -0
  157. package/src/internal/queryState-and-scheduler-audit.test.ts +170 -0
  158. package/src/internal/scheduler-multi-source-wake.test.ts +111 -0
  159. package/src/internal/scheduler.ts +80 -6
  160. package/src/internal.ts +1 -0
  161. package/src/reducer/reducer.ts +3 -3
  162. package/src/remote/pendingQueue.ts +35 -5
  163. package/src/remote/remoteState.intent-key-stamp.test.ts +207 -0
  164. package/src/remote/remoteState.key-attribution.test.ts +174 -0
  165. package/src/remote/remoteState.ts +27 -15
  166. package/src/remote/remoteStateSend.ts +29 -8
  167. package/src/remote/remoteStateTypes.ts +7 -0
  168. package/src/runtime/bus.ts +6 -1
  169. package/src/runtime/capturedAppRuntime.ts +134 -110
  170. package/src/runtime/eventBudget.ts +2 -1
  171. package/src/runtime/feature-mount-ownership.test.ts +539 -0
  172. package/src/runtime/featureMount.ts +110 -3
  173. package/src/runtime/loop.ts +29 -6
  174. package/src/runtime/mount-inflight-ownership.test.ts +361 -0
  175. package/src/runtime/mount-scope-hardening.test.ts +440 -0
  176. package/src/runtime/runtime.schema-identity.test.ts +188 -0
  177. package/src/state/state.ts +8 -4
  178. package/src/state/stateFamily.ts +86 -36
  179. package/src/state/stateGroup.ts +24 -6
  180. package/src/testkit/flight.testkit.ts +2 -1
  181. package/src/wire/tree-key-presence.test.ts +46 -0
  182. package/src/wire/tree.ts +9 -1
@@ -1 +1 @@
1
- {"version":3,"file":"queryDriverStore.d.ts","sourceRoot":"","sources":["../../src/internal/queryDriverStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryDriverStore.d.ts","sourceRoot":"","sources":["../../src/internal/queryDriverStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAU,MAAM,QAAQ,CAAA;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,KAAK,UAAU,EAAe,MAAM,oBAAoB,CAAA;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AAEtD,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;CACzD;AAED,eAAO,MAAM,qBAAqB,GAChC,SAAS,kBAAkB,EAC3B,UAAU,kBAAkB,GAAG,SAAS,EACxC,UAAU,MAAM,IAAI,KACnB,CAAC,MAAM,IAAI,CAOb,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,EACnC,YAAY,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACnC,OAAO,CAAC,EACR,eAAe,OAAO,KACrB,IAGF,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,YAAY,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,KAAG,MAG/E,CAAA;AAED,UAAU,sBAAsB,CAAC,CAAC,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;CAC7C;AAED,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,CAAC,EACtC,SAAS,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,KACpC;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAA;CAqB/E,CAAA;AAED,UAAU,kBAAkB,CAAC,CAAC,EAAE,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACzC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAA;CACnC;AAED,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,CAAC,EACrC,SAAS,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,KAChC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAczB,CAAA"}
@@ -1,31 +1,6 @@
1
- import { Effect, MutableRef, Option, Schema } from 'effect';
1
+ import { MutableRef, Option } from 'effect';
2
2
  import { toAsyncData } from '../calc/queryState.js';
3
3
  import { makeDerivedStore } from './store.js';
4
- export const hydrateQuery = (options) => Effect.flatMap(options.queryStore.get(options.cacheKey), (cached) => Option.match(cached, {
5
- onNone: () => Effect.void,
6
- onSome: (raw) => Schema.decodeUnknown(options.schema)(raw).pipe(Effect.match({
7
- onFailure: () => undefined,
8
- onSuccess: (decoded) => options.stateStore.set({
9
- data: Option.some(decoded),
10
- error: Option.none(),
11
- isFetching: false,
12
- isStale: true,
13
- }),
14
- })),
15
- }));
16
- export const persistQueryValue = (options) => Schema.encode(options.schema)(options.produced).pipe(Effect.flatMap((encoded) => options.queryStore.set(options.cacheKey, encoded)), Effect.ignore);
17
- export const makePersistWriter = (options) => {
18
- if (options.persist === undefined) {
19
- return () => Effect.void;
20
- }
21
- const persist = options.persist;
22
- return (produced, inputs) => persistQueryValue({
23
- cacheKey: typeof persist.key === 'function' ? persist.key(inputs) : persist.key,
24
- produced,
25
- queryStore: options.queryStore,
26
- schema: persist.schema,
27
- });
28
- };
29
4
  export const subscribeQuerySources = (sources, extraKey, listener) => {
30
5
  const offSources = sources.subscribe(listener);
31
6
  const offExtra = extraKey?.subscribe(listener);
@@ -34,9 +9,9 @@ export const subscribeQuerySources = (sources, extraKey, listener) => {
34
9
  offExtra?.();
35
10
  };
36
11
  };
37
- export const settleQueryError = (stateStore, error) => {
12
+ export const settleQueryError = (stateStore, error, isPreviousKey) => {
38
13
  const previous = stateStore.get();
39
- stateStore.set({ ...previous, error: Option.some(error), isFetching: false });
14
+ stateStore.set({ ...previous, error: Option.some(error), isFetching: false, isPreviousKey });
40
15
  };
41
16
  export const incrementGeneration = (generation) => {
42
17
  MutableRef.update(generation, (current) => current + 1);
@@ -50,7 +25,8 @@ export const makeQueryProjection = (options) => {
50
25
  if (previous !== undefined &&
51
26
  previous.state.data === state.data &&
52
27
  previous.state.error === state.error &&
53
- previous.state.isFetching === state.isFetching) {
28
+ previous.state.isFetching === state.isFetching &&
29
+ previous.state.isPreviousKey === state.isPreviousKey) {
54
30
  return previous.view;
55
31
  }
56
32
  const view = toAsyncData(state, options.gated);
@@ -1 +1 @@
1
- {"version":3,"file":"queryDriverStore.js","sourceRoot":"","sources":["../../src/internal/queryDriverStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryDriverStore.js","sourceRoot":"","sources":["../../src/internal/queryDriverStore.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ export interface QueryDriverOptions<Inputs extends ReadonlyArray<AnySource>, A,
24
24
  readonly disabled?: ((inputs: InputsObject<Inputs>) => boolean) | undefined;
25
25
  readonly coalesce?: 'switch' | 'trailing' | undefined;
26
26
  readonly reuse?: boolean | undefined;
27
+ readonly keepPreviousData?: boolean | undefined;
27
28
  readonly extraKey?: {
28
29
  readonly read: () => unknown;
29
30
  readonly subscribe: (listener: () => void) => () => void;
@@ -37,5 +38,7 @@ export interface QueryDriverOptions<Inputs extends ReadonlyArray<AnySource>, A,
37
38
  export interface QueryDriver<A, E> {
38
39
  readonly store: Store<AnyAsyncData<A, E>>;
39
40
  readonly requested: () => number;
41
+ readonly key: () => ReadonlyArray<unknown>;
42
+ readonly subscribeKey: (listener: () => void) => () => void;
40
43
  }
41
44
  //# sourceMappingURL=queryDriverTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryDriverTypes.d.ts","sourceRoot":"","sources":["../../src/internal/queryDriverTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryDriverTypes.d.ts","sourceRoot":"","sources":["../../src/internal/queryDriverTypes.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { Context, Effect, Layer } from 'effect';
2
2
  export interface Scheduler {
3
3
  readonly schedule: (listeners: Iterable<() => void>) => void;
4
4
  }
5
+ export declare const withInlineNotifications: <A>(run: () => A) => A;
5
6
  export declare const makeScheduler: () => Scheduler;
6
7
  export declare const defaultScheduler: Scheduler;
7
8
  declare const NotificationsBase: Context.TagClass<Notifications, 'reform/Notifications', Scheduler>;
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/internal/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAsB,MAAM,QAAQ,CAAA;AAEnE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAA;CAC7D;AAED,eAAO,MAAM,aAAa,QAAO,SA0ChC,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,SAA2B,CAAA;AAE1D,QAAA,MAAM,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,sBAAsB,EAAE,SAAS,CACzB,CAAA;AACjE,qBAAa,aAAc,SAAQ,iBAAiB;CAAG;AAEvD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAGzD,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAGrD,CAAA"}
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/internal/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAiC,MAAM,QAAQ,CAAA;AAG9E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAA;CAC7D;AAgBD,eAAO,MAAM,uBAAuB,GAAI,CAAC,EAAE,KAAK,MAAM,CAAC,KAAG,CAMzD,CAAA;AAED,eAAO,MAAM,aAAa,QAAO,SA6FhC,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,SAA2B,CAAA;AAE1D,QAAA,MAAM,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,sBAAsB,EAAE,SAAS,CACzB,CAAA;AACjE,qBAAa,aAAc,SAAQ,iBAAiB;CAAG;AAEvD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAGzD,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAGrD,CAAA"}
@@ -1,30 +1,93 @@
1
- import { Context, Effect, Layer, MutableRef, Option } from 'effect';
1
+ import { Context, Effect, Layer, MutableRef, Option, Predicate } from 'effect';
2
+ import { microtask } from './platform.js';
3
+ /**
4
+ * Notifications normally coalesce onto a microtask. Inside this window they run
5
+ * inline instead, because the synchronous trigger path needs subscribers
6
+ * re-rendered before it returns: React restores a controlled input's DOM value at
7
+ * the end of the discrete event, and a listener that has not run by then leaves it
8
+ * restoring stale props over the character the user just typed.
9
+ *
10
+ * A module-level flag rather than a method on one Scheduler: stores and triggers
11
+ * resolve `Notifications` from their own contexts and can legitimately land on
12
+ * different instances, so flushing "the" scheduler would flush the wrong one.
13
+ * Nothing awaits inside the window, so it cannot interleave with another trigger.
14
+ */
15
+ const inlineNotifications = MutableRef.make(false);
16
+ export const withInlineNotifications = (run) => {
17
+ const outer = MutableRef.get(inlineNotifications);
18
+ MutableRef.set(inlineNotifications, true);
19
+ const ran = run();
20
+ MutableRef.set(inlineNotifications, outer);
21
+ return ran;
22
+ };
2
23
  export const makeScheduler = () => {
3
24
  const pending = new Set();
4
25
  const armed = MutableRef.make(false);
5
- const runListener = (listener) => Effect.runSync(Effect.try({ try: listener, catch: (error) => error }).pipe(Effect.catchAll((error) => Effect.sync(() => queueMicrotask(() => {
26
+ const flushing = MutableRef.make(false);
27
+ const runListener = (listener) => Effect.runSync(Effect.try({ try: listener, catch: (error) => error }).pipe(Effect.catchAll((error) => Effect.sync(() => microtask(() => {
6
28
  // oxlint-disable-next-line reform-rules/no-throw -- only way to surface a listener defect to the host's global error handler
7
29
  throw error;
8
30
  })))));
31
+ // Membership at flush time. A re-readable source — a `Set`, the hot path every store
32
+ // passes, or an array — is read again so a listener that unsubscribed in between is
33
+ // dropped. Anything else is judged against the schedule-time snapshot, because an
34
+ // `Iterable` may be one-shot (`map.values()`, a generator) and taking that snapshot
35
+ // already drained it.
36
+ const isLive = (queued, listener) => {
37
+ if (Predicate.isSet(queued.source)) {
38
+ return queued.source.has(listener);
39
+ }
40
+ if (Array.isArray(queued.source)) {
41
+ return queued.source.includes(listener);
42
+ }
43
+ return queued.members.includes(listener);
44
+ };
9
45
  const drain = () => {
10
46
  if (pending.size === 0) {
11
47
  return;
12
48
  }
13
49
  const due = [...pending];
14
50
  pending.clear();
15
- due.forEach(runListener);
51
+ // One wake per listener, however many writes queued it, in schedule order. Each
52
+ // write is judged against its OWN source at the moment it would run: an earlier
53
+ // listener in this same flush can tear a later one down — a scope closing, a
54
+ // family key forgotten, a composition unmounting — and a listener that has since
55
+ // unsubscribed must not be woken. A listener registered in several stores is
56
+ // still owed the wakes of the stores it did not leave, so each queued write gets
57
+ // its own answer rather than one memoised for the whole drain.
58
+ const woken = new Set();
59
+ due.forEach((queued) => {
60
+ queued.members.forEach((listener) => {
61
+ if (!woken.has(listener) && isLive(queued, listener)) {
62
+ woken.add(listener);
63
+ runListener(listener);
64
+ }
65
+ });
66
+ });
16
67
  drain();
17
68
  };
69
+ // A listener that triggers another event re-enters here; the guard drops the inner
70
+ // call because `drain` already loops until `pending` is empty, so the outer pass
71
+ // still runs whatever the listener queued.
18
72
  const flush = () => {
73
+ if (MutableRef.get(flushing)) {
74
+ return;
75
+ }
76
+ MutableRef.set(flushing, true);
19
77
  MutableRef.set(armed, false);
78
+ // `runListener` absorbs every listener defect, so `drain` cannot throw past here.
20
79
  drain();
80
+ MutableRef.set(flushing, false);
21
81
  };
22
82
  const schedule = (listeners) => {
23
- ;
24
- [...listeners].forEach((listener) => pending.add(listener));
83
+ pending.add({ source: listeners, members: Array.from(listeners) });
84
+ if (MutableRef.get(inlineNotifications)) {
85
+ flush();
86
+ return;
87
+ }
25
88
  if (pending.size > 0 && !MutableRef.get(armed)) {
26
89
  MutableRef.set(armed, true);
27
- queueMicrotask(flush);
90
+ microtask(flush);
28
91
  }
29
92
  };
30
93
  return { schedule };
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/internal/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAMnE,MAAM,CAAC,MAAM,aAAa,GAAG,GAAc,EAAE;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAc,CAAA;IACrC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAEpC,MAAM,WAAW,GAAG,CAAC,QAAoB,EAAQ,EAAE,CACjD,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CACf,cAAc,CAAC,GAAG,EAAE;QAClB,6HAA6H;QAC7H,MAAM,KAAK,CAAA;IACb,CAAC,CAAC,CACH,CACF,CACF,CACF,CAAA;IAEH,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,OAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,CAAA;QACxB,OAAO,CAAC,KAAK,EAAE,CAAA;QACf,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACxB,KAAK,EAAE,CAAA;IACT,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC5B,KAAK,EAAE,CAAA;IACT,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,CAAC,SAA+B,EAAE,EAAE;QACnD,CAAC;QAAA,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC5D,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAC3B,cAAc,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;IACH,CAAC,CAAA;IAED,OAAO,EAAE,QAAQ,EAAE,CAAA;AACrB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAc,aAAa,EAAE,CAAA;AAE1D,MAAM,iBAAiB,GACrB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAA4B,CAAA;AACjE,MAAM,OAAO,aAAc,SAAQ,iBAAiB;CAAG;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAA+B,KAAK,CAAC,IAAI,CACtE,aAAa,EACb,aAAa,CACd,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAA6B,MAAM,CAAC,GAAG,CAClE,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,EACnC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,CACzC,CAAA"}
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/internal/scheduler.ts"],"names":[],"mappings":"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"}
@@ -39,4 +39,5 @@ export { type CapturedRender, CaptureSink, type CaptureSinkApi } from './interna
39
39
  export { defaultScheduler, makeScheduler, Notifications, notificationsLayer, resolveScheduler, type Scheduler, } from './internal/scheduler.js';
40
40
  export { makeStore, type Store } from './internal/store.js';
41
41
  export { type Kind, type Manifest, yieldableClass } from './definition/definition.js';
42
+ export { microtask, operationId } from './internal/platform.js';
42
43
  //# sourceMappingURL=internal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"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"}
package/dist/internal.js CHANGED
@@ -55,4 +55,5 @@ export { makeStore } from './internal/store.js';
55
55
  // first-class `Source`s which must participate in dependency tracking and
56
56
  // reflection exactly like a `Calc`.
57
57
  export { yieldableClass } from './definition/definition.js';
58
+ export { microtask, operationId } from './internal/platform.js';
58
59
  //# sourceMappingURL=internal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"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"}
@@ -38,7 +38,7 @@ export function live(reducer, fold) {
38
38
  // The loop calls entries only for handled events. At this
39
39
  // existential boundary the family's decoders restore the
40
40
  // exact key/value types before either touches its store.
41
- const key = familyDefinition.decodeKeySync(sync(Reflect.apply(config.keyOf, undefined, [narrowHandled(event)])));
41
+ const key = familyDefinition.validateKeySync(sync(Reflect.apply(config.keyOf, undefined, [narrowHandled(event)])));
42
42
  const previous = family.at(key).get();
43
43
  const next = sync(Reflect.apply(fold, undefined, [previous, event]));
44
44
  if (next === Tombstone) {
@@ -47,7 +47,7 @@ export function live(reducer, fold) {
47
47
  else if (next !== previous) {
48
48
  // Same-reference return means "no change": skip the nominal re-decode,
49
49
  // which would mint a fresh value and repaint every tracker of this slice.
50
- family.at(key).set(familyDefinition.decodeValueSync(next));
50
+ family.at(key).set(familyDefinition.validateValueSync(next));
51
51
  }
52
52
  },
53
53
  })));
@@ -63,7 +63,7 @@ export function live(reducer, fold) {
63
63
  if (next === previous) {
64
64
  return;
65
65
  }
66
- store.set(state.decodeUnknownSync(next));
66
+ store.set(state.validateSync(next));
67
67
  },
68
68
  })));
69
69
  });
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.js","sourceRoot":"","sources":["../../src/reducer/reducer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reducer.js","sourceRoot":"","sources":["../../src/reducer/reducer.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
- import { MutableRef } from 'effect';
1
+ import { MutableRef, Option } from 'effect';
2
2
  import type { Scheduler } from '../internal/scheduler.js';
3
3
  import type { Store } from '../internal/store.js';
4
4
  import type { PendingIntent } from './remoteStateTypes.js';
5
5
  export interface PendingNode<I> {
6
6
  readonly entry: MutableRef.MutableRef<PendingIntent<I>>;
7
+ readonly key: Option.Option<ReadonlyArray<unknown>>;
7
8
  }
8
9
  export interface PendingOpEntry<I> {
9
10
  readonly nodes: Set<PendingNode<I>>;
@@ -12,7 +13,8 @@ export interface PendingQueue<I> {
12
13
  readonly store: Store<ReadonlyArray<PendingIntent<I>>>;
13
14
  readonly revision: () => number;
14
15
  readonly fold: <B>(initial: B, combine: (accumulator: B, entry: PendingIntent<I>) => B) => B;
15
- readonly append: (entry: PendingIntent<I>) => void;
16
+ readonly foldFor: <B>(key: ReadonlyArray<unknown>, initial: B, combine: (accumulator: B, entry: PendingIntent<I>) => B) => B;
17
+ readonly append: (entry: PendingIntent<I>, key: Option.Option<ReadonlyArray<unknown>>) => void;
16
18
  readonly ack: (opId: string) => void;
17
19
  readonly settle: (opId: string) => void;
18
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pendingQueue.d.ts","sourceRoot":"","sources":["../../src/remote/pendingQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAU,MAAM,QAAQ,CAAA;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;CACxD;AAGD,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5F,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAClD,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,WAAW,SAAS,KAAG,YAAY,CAAC,CAAC,CAwHxE,CAAA"}
1
+ {"version":3,"file":"pendingQueue.d.ts","sourceRoot":"","sources":["../../src/remote/pendingQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IAGvD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;CACpD;AAGD,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE5F,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAClB,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,EAC3B,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,KACpD,CAAC,CAAA;IACN,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAA;IAC9F,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,WAAW,SAAS,KAAG,YAAY,CAAC,CAAC,CA4IxE,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { Equal, MutableRef, Option } from 'effect';
2
2
  import { inspectable } from '../internal/inspect.js';
3
+ import { sameKey } from '../internal/sources.js';
3
4
  export const makePendingQueue = (scheduler) => {
4
5
  // Set insertion order preserves dispatch/apply order while allowing O(1) updates.
5
6
  const ordered = new Set();
@@ -22,9 +23,10 @@ export const makePendingQueue = (scheduler) => {
22
23
  MutableRef.update(revision, (current) => current + 1);
23
24
  scheduler.schedule(listeners);
24
25
  };
25
- const link = (entry) => {
26
+ const link = (entry, key) => {
26
27
  const node = {
27
28
  entry: MutableRef.make(entry),
29
+ key,
28
30
  };
29
31
  ordered.add(node);
30
32
  const indexed = byOpId.get(entry.opId);
@@ -46,8 +48,21 @@ export const makePendingQueue = (scheduler) => {
46
48
  });
47
49
  return MutableRef.get(folded);
48
50
  };
49
- const append = (entry) => {
50
- link(entry);
51
+ const foldFor = (key, initialValue, combine) => {
52
+ const folded = MutableRef.make(initialValue);
53
+ ordered.forEach((node) => {
54
+ const applies = Option.match(node.key, {
55
+ onNone: () => true,
56
+ onSome: (issuedFor) => sameKey(issuedFor, key),
57
+ });
58
+ if (applies) {
59
+ MutableRef.update(folded, (accumulator) => combine(accumulator, MutableRef.get(node.entry)));
60
+ }
61
+ });
62
+ return MutableRef.get(folded);
63
+ };
64
+ const append = (entry, key) => {
65
+ link(entry, key);
51
66
  announce(Option.none());
52
67
  };
53
68
  const ack = (opId) => {
@@ -90,7 +105,7 @@ export const makePendingQueue = (scheduler) => {
90
105
  return;
91
106
  }
92
107
  clear();
93
- next.forEach(link);
108
+ next.forEach((entry) => link(entry, Option.none()));
94
109
  announce(Option.some(next));
95
110
  },
96
111
  subscribe: (listener) => {
@@ -105,6 +120,7 @@ export const makePendingQueue = (scheduler) => {
105
120
  store,
106
121
  revision: () => MutableRef.get(revision),
107
122
  fold,
123
+ foldFor,
108
124
  append,
109
125
  ack,
110
126
  settle,
@@ -1 +1 @@
1
- {"version":3,"file":"pendingQueue.js","sourceRoot":"","sources":["../../src/remote/pendingQueue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pendingQueue.js","sourceRoot":"","sources":["../../src/remote/pendingQueue.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"remoteState.d.ts","sourceRoot":"","sources":["../../src/remote/remoteState.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,EAAuC,MAAM,QAAQ,CAAA;AAE9F,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AASvC,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,qBAAqB,CAAA;AAG/D,OAAO,EAAE,GAAG,EAAW,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAI/C,OAAO,KAAK,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EAEvB,qBAAqB,EACrB,uBAAuB,EAGxB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,4BAA4B,EAC5B,0BAA0B,EAC1B,8BAA8B,EAC9B,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,oBAAoB,CAAA;AAE3B,eAAO,MAAM,IAAI,GACf,CAAC,SAAS,MAAM,EAChB,MAAM,SAAS,aAAa,CAAC,SAAS,CAAC,EACvC,OAAO,SAAS,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAC7C,CAAC,EACD,CAAC,EACD,KAAK,SAAS,OAAO,EACrB,CAAC,EACD,EAAE,EACF,YAAY,SAAS,KAAK,CAAC,QAAQ,GAAG,KAAK,EAE3C,QAAQ,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EACzD,QAAQ,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,KACpF,KAAK,CAAC,KAAK,CACZ,uBAAuB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,EAClF,KAAK,EACL,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,GAAG,GAAG,CAsNtF,CAAA"}
1
+ {"version":3,"file":"remoteState.d.ts","sourceRoot":"","sources":["../../src/remote/remoteState.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,EAAuC,MAAM,QAAQ,CAAA;AAE9F,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAUvC,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,qBAAqB,CAAA;AAG/D,OAAO,EAAE,GAAG,EAAW,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAI/C,OAAO,KAAK,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EAEvB,qBAAqB,EACrB,uBAAuB,EAGxB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,4BAA4B,EAC5B,0BAA0B,EAC1B,8BAA8B,EAC9B,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,oBAAoB,CAAA;AAE3B,eAAO,MAAM,IAAI,GACf,CAAC,SAAS,MAAM,EAChB,MAAM,SAAS,aAAa,CAAC,SAAS,CAAC,EACvC,OAAO,SAAS,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAC7C,CAAC,EACD,CAAC,EACD,KAAK,SAAS,OAAO,EACrB,CAAC,EACD,EAAE,EACF,YAAY,SAAS,KAAK,CAAC,QAAQ,GAAG,KAAK,EAE3C,QAAQ,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EACzD,QAAQ,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,KACpF,KAAK,CAAC,KAAK,CACZ,uBAAuB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,EAClF,KAAK,EACL,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,GAAG,GAAG,CAiOtF,CAAA"}
@@ -5,6 +5,7 @@ import * as Event from '../event/event.js';
5
5
  import { bumpRevision, makeQueryDriver, RevisionSchema, revisionZero, } from '../internal/queryDriver.js';
6
6
  import { reuse as shareStructure } from '../internal/reuse.js';
7
7
  import { resolveScheduler } from '../internal/scheduler.js';
8
+ import { resolvePersistSlot } from '../internal/queryDriverPersistWarn.js';
8
9
  import { sameKey } from '../internal/sources.js';
9
10
  import { makeDerivedStore } from '../internal/store.js';
10
11
  import * as Reducer from '../reducer/reducer.js';
@@ -55,11 +56,13 @@ export const live = (remote, config) => {
55
56
  generationWaiters.add({ opId });
56
57
  }
57
58
  };
58
- const persistOption = config.persist;
59
- const persistKey = persistOption === true || persistOption === undefined || persistOption === false
60
- ? name
61
- : (persistOption.key ?? name);
62
- const persist = persistOption === undefined || persistOption === false
59
+ const persistKey = yield* resolvePersistSlot({
60
+ label: 'RemoteState',
61
+ name,
62
+ inputs: remote.inputs.length,
63
+ option: config.persist,
64
+ });
65
+ const persist = config.persist === undefined || config.persist === false
63
66
  ? undefined
64
67
  : { key: persistKey, codec: remote.codec };
65
68
  const revisionKey = (source) => ({
@@ -77,6 +80,7 @@ export const live = (remote, config) => {
77
80
  disabled: config.disabled,
78
81
  coalesce: config.coalesce,
79
82
  reuse: config.reuse,
83
+ keepPreviousData: config.keepPreviousData,
80
84
  persist,
81
85
  extraKey,
82
86
  onSettled,
@@ -102,6 +106,8 @@ export const live = (remote, config) => {
102
106
  const link = {
103
107
  requested: driver.requested,
104
108
  register: (opId, waitFor) => registerWaiter({ opId, waitFor }),
109
+ key: driver.key,
110
+ subscribeKey: driver.subscribeKey,
105
111
  };
106
112
  return Context.make(truthTag, narrowStore(driver.store)).pipe(Context.add(linkTag, link));
107
113
  }));
@@ -109,16 +115,21 @@ export const live = (remote, config) => {
109
115
  const scheduler = yield* resolveScheduler;
110
116
  const feedStore = widenStore(yield* truthTag);
111
117
  const queue = yield* pendingQueueTag;
118
+ const link = yield* linkTag;
112
119
  const memo = MutableRef.make(undefined);
113
120
  const recompute = () => {
114
121
  const feed = feedStore.getSnapshot();
115
- const key = [feed, queue.revision()];
122
+ const inputKey = link.key();
123
+ // The input key joins the memo key: which intents apply depends on it.
124
+ const key = [feed, queue.revision(), ...inputKey];
116
125
  const prev = MutableRef.get(memo);
117
126
  if (prev !== undefined && sameKey(key, prev.key)) {
118
127
  return prev.output;
119
128
  }
120
129
  // Full replay preserves observable value identity when apply allocates and reuse is off.
121
- const applyPending = (base) => queue.fold(base, (applied, entry) => config.apply(applied, entry.intent));
130
+ // Only this key's intents: an optimistic write issued on another key is not
131
+ // about this payload, and applying it injects or deletes rows it never targeted.
132
+ const applyPending = (base) => queue.foldFor(inputKey, base, (applied, entry) => config.apply(applied, entry.intent));
122
133
  const overlaid = feed._tag === 'Success'
123
134
  ? AsyncData.success(applyPending(feed.value), feed.refetching)
124
135
  : feed;
@@ -134,12 +145,16 @@ export const live = (remote, config) => {
134
145
  MutableRef.set(memo, { key, output });
135
146
  return output;
136
147
  };
148
+ // The key is a third input: it decides which queued intents apply, and it can
149
+ // move without the feed or the queue writing anything.
137
150
  const subscribe = (listener) => {
138
151
  const offFeed = feedStore.subscribe(listener);
139
152
  const offQueue = queue.store.subscribe(listener);
153
+ const offKey = link.subscribeKey(listener);
140
154
  return () => {
141
155
  offFeed();
142
156
  offQueue();
157
+ offKey();
143
158
  };
144
159
  };
145
160
  const derived = makeDerivedStore(recompute, subscribe, scheduler);
@@ -147,21 +162,19 @@ export const live = (remote, config) => {
147
162
  return narrowStore(derived.store);
148
163
  }));
149
164
  const channel = config.channel ?? Channel.make(`${name}/sends`, { policy: { _tag: 'merge' } });
150
- const intentEvents = {
151
- queued: Queued,
152
- acked: Acked,
153
- settled: Settled,
154
- invalidated: Invalidated,
155
- };
165
+ const intentEvents = { queued: Queued, acked: Acked, settled: Settled, invalidated: Invalidated };
166
+ const intentTags = new Set(remote.intents.map((event) => event.tag));
156
167
  const pendingReducer = queueReducerLayer({
168
+ linkTag,
157
169
  name: `${name}/pending`,
158
170
  queueTag: pendingQueueTag,
171
+ handles: intentTags,
159
172
  events: intentEvents,
160
173
  });
161
174
  const sendProcedure = sendProcedureLayer({
162
175
  name: `${name}/send`,
163
176
  channel,
164
- handles: new Set(remote.intents.map((event) => event.tag)),
177
+ handles: intentTags,
165
178
  linkTag,
166
179
  failed: remote.Failed,
167
180
  send: config.send,