@playfast/reform 0.0.7 → 0.0.8

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 (237) hide show
  1. package/package.json +2 -2
  2. package/src/boundary/boundary.test.ts +301 -0
  3. package/src/boundary/boundary.ts +192 -0
  4. package/src/calc/asyncCalc.test.ts +556 -0
  5. package/src/calc/asyncCalc.ts +267 -0
  6. package/src/calc/asyncData.ts +96 -0
  7. package/src/calc/calc.test.ts +287 -0
  8. package/src/calc/calc.ts +120 -0
  9. package/src/calc/calcFamily.test.ts +206 -0
  10. package/src/calc/calcFamily.ts +194 -0
  11. package/src/calc/compose.test.ts +68 -0
  12. package/src/calc/compose.ts +69 -0
  13. package/src/channel/channel.ts +269 -0
  14. package/src/compose/composition.ts +112 -0
  15. package/{dist/compose/host.d.ts → src/compose/host.ts} +9 -8
  16. package/{dist/compose/props.js → src/compose/props.ts} +7 -5
  17. package/src/compose/provide.ts +70 -0
  18. package/{dist/compose/slot.d.ts → src/compose/slot.ts} +36 -19
  19. package/src/compose/ui.test.ts +62 -0
  20. package/src/compose/ui.ts +226 -0
  21. package/src/compose/ui.typecheck.ts +56 -0
  22. package/src/definition/definition.ts +76 -0
  23. package/src/event/event.test.ts +23 -0
  24. package/src/event/event.ts +65 -0
  25. package/src/event/eventGroup.ts +14 -0
  26. package/src/feature/feature.mount.test.ts +82 -0
  27. package/src/feature/feature.test.ts +60 -0
  28. package/{dist/feature/feature.d.ts → src/feature/feature.ts} +178 -92
  29. package/src/feature/feature.typecheck.ts +108 -0
  30. package/src/index.ts +176 -0
  31. package/{dist/internal/capture.d.ts → src/internal/capture.ts} +13 -11
  32. package/{dist/internal/ctx.d.ts → src/internal/ctx.ts} +8 -4
  33. package/src/internal/errors.test.ts +33 -0
  34. package/src/internal/errors.ts +145 -0
  35. package/src/internal/inspect.test.ts +28 -0
  36. package/src/internal/inspect.ts +34 -0
  37. package/src/internal/queryDriver.ts +247 -0
  38. package/src/internal/reuse.test.ts +116 -0
  39. package/src/internal/reuse.ts +73 -0
  40. package/src/internal/scheduler.ts +93 -0
  41. package/{dist/internal/seeds.d.ts → src/internal/seeds.ts} +6 -3
  42. package/src/internal/sources.ts +104 -0
  43. package/{dist/internal/stateRegistry.js → src/internal/stateRegistry.ts} +18 -14
  44. package/src/internal/store.test.ts +80 -0
  45. package/src/internal/store.ts +105 -0
  46. package/{dist/internal/track.d.ts → src/internal/track.ts} +17 -11
  47. package/src/procedure/procedure.ts +89 -0
  48. package/src/reducer/reducer.ts +137 -0
  49. package/src/remote/remoteState.test.ts +695 -0
  50. package/src/remote/remoteState.ts +571 -0
  51. package/src/remote/remoteState.typecheck.ts +195 -0
  52. package/src/runtime/bus.ts +40 -0
  53. package/src/runtime/hardening.test.ts +69 -0
  54. package/src/runtime/loop.test.ts +178 -0
  55. package/src/runtime/loop.ts +171 -0
  56. package/src/scene/scene.ts +76 -0
  57. package/src/scene/seedScene.test.ts +169 -0
  58. package/src/state/state.ts +94 -0
  59. package/src/state/stateFamily.test.ts +138 -0
  60. package/src/state/stateFamily.ts +174 -0
  61. package/src/state/stateGroup.ts +105 -0
  62. package/{dist/state/token.d.ts → src/state/token.ts} +22 -13
  63. package/src/synced/syncedStore.ts +99 -0
  64. package/{dist/ui/node.d.ts → src/ui/node.ts} +3 -3
  65. package/{dist/ui/trigger.d.ts → src/ui/trigger.ts} +1 -2
  66. package/src/wire/tree.test.ts +81 -0
  67. package/src/wire/tree.ts +129 -0
  68. package/src/wire/triggers.test.ts +76 -0
  69. package/src/wire/triggers.ts +98 -0
  70. package/dist/boundary/boundary.d.ts +0 -72
  71. package/dist/boundary/boundary.d.ts.map +0 -1
  72. package/dist/boundary/boundary.js +0 -83
  73. package/dist/boundary/boundary.js.map +0 -1
  74. package/dist/calc/asyncCalc.d.ts +0 -91
  75. package/dist/calc/asyncCalc.d.ts.map +0 -1
  76. package/dist/calc/asyncCalc.js +0 -95
  77. package/dist/calc/asyncCalc.js.map +0 -1
  78. package/dist/calc/asyncData.d.ts +0 -57
  79. package/dist/calc/asyncData.d.ts.map +0 -1
  80. package/dist/calc/asyncData.js +0 -34
  81. package/dist/calc/asyncData.js.map +0 -1
  82. package/dist/calc/calc.d.ts +0 -57
  83. package/dist/calc/calc.d.ts.map +0 -1
  84. package/dist/calc/calc.js +0 -58
  85. package/dist/calc/calc.js.map +0 -1
  86. package/dist/calc/calcFamily.d.ts +0 -57
  87. package/dist/calc/calcFamily.d.ts.map +0 -1
  88. package/dist/calc/calcFamily.js +0 -124
  89. package/dist/calc/calcFamily.js.map +0 -1
  90. package/dist/calc/compose.d.ts +0 -16
  91. package/dist/calc/compose.d.ts.map +0 -1
  92. package/dist/calc/compose.js +0 -7
  93. package/dist/calc/compose.js.map +0 -1
  94. package/dist/channel/channel.d.ts +0 -115
  95. package/dist/channel/channel.d.ts.map +0 -1
  96. package/dist/channel/channel.js +0 -138
  97. package/dist/channel/channel.js.map +0 -1
  98. package/dist/compose/composition.d.ts +0 -72
  99. package/dist/compose/composition.d.ts.map +0 -1
  100. package/dist/compose/composition.js +0 -46
  101. package/dist/compose/composition.js.map +0 -1
  102. package/dist/compose/host.d.ts.map +0 -1
  103. package/dist/compose/host.js +0 -6
  104. package/dist/compose/host.js.map +0 -1
  105. package/dist/compose/props.d.ts +0 -13
  106. package/dist/compose/props.d.ts.map +0 -1
  107. package/dist/compose/props.js.map +0 -1
  108. package/dist/compose/provide.d.ts +0 -22
  109. package/dist/compose/provide.d.ts.map +0 -1
  110. package/dist/compose/provide.js +0 -28
  111. package/dist/compose/provide.js.map +0 -1
  112. package/dist/compose/slot.d.ts.map +0 -1
  113. package/dist/compose/slot.js +0 -23
  114. package/dist/compose/slot.js.map +0 -1
  115. package/dist/compose/ui.d.ts +0 -135
  116. package/dist/compose/ui.d.ts.map +0 -1
  117. package/dist/compose/ui.js +0 -63
  118. package/dist/compose/ui.js.map +0 -1
  119. package/dist/definition/definition.d.ts +0 -33
  120. package/dist/definition/definition.d.ts.map +0 -1
  121. package/dist/definition/definition.js +0 -42
  122. package/dist/definition/definition.js.map +0 -1
  123. package/dist/event/event.d.ts +0 -33
  124. package/dist/event/event.d.ts.map +0 -1
  125. package/dist/event/event.js +0 -30
  126. package/dist/event/event.js.map +0 -1
  127. package/dist/event/eventGroup.d.ts +0 -9
  128. package/dist/event/eventGroup.d.ts.map +0 -1
  129. package/dist/event/eventGroup.js +0 -4
  130. package/dist/event/eventGroup.js.map +0 -1
  131. package/dist/feature/feature.d.ts.map +0 -1
  132. package/dist/feature/feature.js +0 -98
  133. package/dist/feature/feature.js.map +0 -1
  134. package/dist/index.d.ts +0 -53
  135. package/dist/index.d.ts.map +0 -1
  136. package/dist/index.js +0 -62
  137. package/dist/index.js.map +0 -1
  138. package/dist/internal/capture.d.ts.map +0 -1
  139. package/dist/internal/capture.js +0 -12
  140. package/dist/internal/capture.js.map +0 -1
  141. package/dist/internal/ctx.d.ts.map +0 -1
  142. package/dist/internal/ctx.js +0 -2
  143. package/dist/internal/ctx.js.map +0 -1
  144. package/dist/internal/errors.d.ts +0 -89
  145. package/dist/internal/errors.d.ts.map +0 -1
  146. package/dist/internal/errors.js +0 -102
  147. package/dist/internal/errors.js.map +0 -1
  148. package/dist/internal/inspect.d.ts +0 -17
  149. package/dist/internal/inspect.d.ts.map +0 -1
  150. package/dist/internal/inspect.js +0 -32
  151. package/dist/internal/inspect.js.map +0 -1
  152. package/dist/internal/queryDriver.d.ts +0 -65
  153. package/dist/internal/queryDriver.d.ts.map +0 -1
  154. package/dist/internal/queryDriver.js +0 -134
  155. package/dist/internal/queryDriver.js.map +0 -1
  156. package/dist/internal/reuse.d.ts +0 -10
  157. package/dist/internal/reuse.d.ts.map +0 -1
  158. package/dist/internal/reuse.js +0 -68
  159. package/dist/internal/reuse.js.map +0 -1
  160. package/dist/internal/scheduler.d.ts +0 -47
  161. package/dist/internal/scheduler.d.ts.map +0 -1
  162. package/dist/internal/scheduler.js +0 -70
  163. package/dist/internal/scheduler.js.map +0 -1
  164. package/dist/internal/seeds.d.ts.map +0 -1
  165. package/dist/internal/seeds.js +0 -17
  166. package/dist/internal/seeds.js.map +0 -1
  167. package/dist/internal/sources.d.ts +0 -39
  168. package/dist/internal/sources.d.ts.map +0 -1
  169. package/dist/internal/sources.js +0 -59
  170. package/dist/internal/sources.js.map +0 -1
  171. package/dist/internal/stateRegistry.d.ts +0 -2
  172. package/dist/internal/stateRegistry.d.ts.map +0 -1
  173. package/dist/internal/stateRegistry.js.map +0 -1
  174. package/dist/internal/store.d.ts +0 -47
  175. package/dist/internal/store.d.ts.map +0 -1
  176. package/dist/internal/store.js +0 -73
  177. package/dist/internal/store.js.map +0 -1
  178. package/dist/internal/track.d.ts.map +0 -1
  179. package/dist/internal/track.js +0 -19
  180. package/dist/internal/track.js.map +0 -1
  181. package/dist/procedure/procedure.d.ts +0 -40
  182. package/dist/procedure/procedure.d.ts.map +0 -1
  183. package/dist/procedure/procedure.js +0 -50
  184. package/dist/procedure/procedure.js.map +0 -1
  185. package/dist/reducer/reducer.d.ts +0 -44
  186. package/dist/reducer/reducer.d.ts.map +0 -1
  187. package/dist/reducer/reducer.js +0 -63
  188. package/dist/reducer/reducer.js.map +0 -1
  189. package/dist/remote/remoteState.d.ts +0 -119
  190. package/dist/remote/remoteState.d.ts.map +0 -1
  191. package/dist/remote/remoteState.js +0 -270
  192. package/dist/remote/remoteState.js.map +0 -1
  193. package/dist/runtime/bus.d.ts +0 -27
  194. package/dist/runtime/bus.d.ts.map +0 -1
  195. package/dist/runtime/bus.js +0 -21
  196. package/dist/runtime/bus.js.map +0 -1
  197. package/dist/runtime/loop.d.ts +0 -45
  198. package/dist/runtime/loop.d.ts.map +0 -1
  199. package/dist/runtime/loop.js +0 -117
  200. package/dist/runtime/loop.js.map +0 -1
  201. package/dist/scene/scene.d.ts +0 -44
  202. package/dist/scene/scene.d.ts.map +0 -1
  203. package/dist/scene/scene.js +0 -31
  204. package/dist/scene/scene.js.map +0 -1
  205. package/dist/state/state.d.ts +0 -37
  206. package/dist/state/state.d.ts.map +0 -1
  207. package/dist/state/state.js +0 -46
  208. package/dist/state/state.js.map +0 -1
  209. package/dist/state/stateFamily.d.ts +0 -79
  210. package/dist/state/stateFamily.d.ts.map +0 -1
  211. package/dist/state/stateFamily.js +0 -99
  212. package/dist/state/stateFamily.js.map +0 -1
  213. package/dist/state/stateGroup.d.ts +0 -50
  214. package/dist/state/stateGroup.d.ts.map +0 -1
  215. package/dist/state/stateGroup.js +0 -54
  216. package/dist/state/stateGroup.js.map +0 -1
  217. package/dist/state/token.d.ts.map +0 -1
  218. package/dist/state/token.js +0 -20
  219. package/dist/state/token.js.map +0 -1
  220. package/dist/synced/syncedStore.d.ts +0 -51
  221. package/dist/synced/syncedStore.d.ts.map +0 -1
  222. package/dist/synced/syncedStore.js +0 -43
  223. package/dist/synced/syncedStore.js.map +0 -1
  224. package/dist/ui/node.d.ts.map +0 -1
  225. package/dist/ui/node.js +0 -2
  226. package/dist/ui/node.js.map +0 -1
  227. package/dist/ui/trigger.d.ts.map +0 -1
  228. package/dist/ui/trigger.js +0 -2
  229. package/dist/ui/trigger.js.map +0 -1
  230. package/dist/wire/tree.d.ts +0 -66
  231. package/dist/wire/tree.d.ts.map +0 -1
  232. package/dist/wire/tree.js +0 -60
  233. package/dist/wire/tree.js.map +0 -1
  234. package/dist/wire/triggers.d.ts +0 -44
  235. package/dist/wire/triggers.d.ts.map +0 -1
  236. package/dist/wire/triggers.js +0 -31
  237. package/dist/wire/triggers.js.map +0 -1
@@ -1,73 +0,0 @@
1
- import { Equal, MutableRef } from 'effect';
2
- import { inspectable } from './inspect';
3
- import { defaultScheduler } from './scheduler';
4
- export const makeStore = (initial, scheduler = defaultScheduler) => {
5
- // The store is a mutable reactive slot by design, so its value lives in a
6
- // `MutableRef` we update in place (no reassigned binding).
7
- const value = MutableRef.make(initial);
8
- const version = MutableRef.make(0);
9
- const listeners = new Set();
10
- return {
11
- get: () => MutableRef.get(value),
12
- getSnapshot: () => MutableRef.get(value),
13
- getVersion: () => MutableRef.get(version),
14
- set: (next) => {
15
- if (Equal.equals(MutableRef.get(value), next))
16
- return;
17
- MutableRef.set(value, next);
18
- MutableRef.update(version, (n) => n + 1);
19
- scheduler.schedule(listeners);
20
- },
21
- subscribe: (listener) => {
22
- listeners.add(listener);
23
- return () => {
24
- listeners.delete(listener);
25
- };
26
- },
27
- ...inspectable(() => ({ _id: 'reform/Store', value: MutableRef.get(value) })),
28
- };
29
- };
30
- /**
31
- * A read-only `Store` whose value is computed from upstream sources.
32
- *
33
- * Reads are pull-fresh: `get`/`getSnapshot` call `compute` directly, so a
34
- * headless snapshot always reflects the current source state without waiting for
35
- * a notification (`compute` must memoize so an unchanged read returns a stable
36
- * reference — `useSyncExternalStore` requires it). *Notifications*, by contrast,
37
- * run through the same coalescing scheduler as `makeStore`: an upstream change
38
- * recomputes once and wakes subscribers only when the output actually moves (by
39
- * `Equal.equals`), so every store kind shares one notification timing. `set` is
40
- * a no-op — the only writer is the upstream subscription.
41
- */
42
- export const makeDerivedStore = (compute, subscribeUpstream, scheduler = defaultScheduler) => {
43
- const listeners = new Set();
44
- const version = MutableRef.make(0);
45
- // The last output we notified against — tracked only here, never touched by
46
- // reads, so a `get` racing ahead of `onChange` can't suppress a notification.
47
- const seen = MutableRef.make({ value: compute() });
48
- const onChange = () => {
49
- const previous = MutableRef.get(seen);
50
- const next = compute();
51
- MutableRef.set(seen, { value: next });
52
- if (previous === undefined || !Equal.equals(previous.value, next)) {
53
- MutableRef.update(version, (n) => n + 1);
54
- scheduler.schedule(listeners);
55
- }
56
- };
57
- const unsubscribe = subscribeUpstream(onChange);
58
- const store = {
59
- get: compute,
60
- getSnapshot: compute,
61
- getVersion: () => MutableRef.get(version),
62
- set: () => { },
63
- subscribe: (listener) => {
64
- listeners.add(listener);
65
- return () => {
66
- listeners.delete(listener);
67
- };
68
- },
69
- ...inspectable(() => ({ _id: 'reform/Store', value: compute() })),
70
- };
71
- return { store, unsubscribe };
72
- };
73
- //# sourceMappingURL=store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/internal/store.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/internal/track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IAC3C,UAAU,IAAI,MAAM,CAAA;CACrB;AAED,qFAAqF;AACrF,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;CAChC;AAED;;;GAGG;AACH,QAAA,MAAM,kBAAkB,EAAE,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,gBAAgB,EAAE,OAAO,CAC1B,CAAA;AAC1D,qBAAa,cAAe,SAAQ,kBAAkB;CAAG;AAEzD;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAI5D,CAAA"}
@@ -1,19 +0,0 @@
1
- import { Context, Effect, Option } from 'effect';
2
- /**
3
- * The active render's dependency tracker (D5). Present only while a composition
4
- * is rendering under `@reform/react`; absent in procedures and headless reads.
5
- */
6
- const CurrentTrackerBase = Context.Tag('reform/Tracker')();
7
- export class CurrentTracker extends CurrentTrackerBase {
8
- }
9
- /**
10
- * Read a store's current snapshot and, if a tracker is active, record the store
11
- * as a dependency of the current render. One read API, two behaviors by context
12
- * (D5): inside a render it subscribes the slice; elsewhere it just snapshots.
13
- */
14
- export const readTracked = (store) => Effect.map(Effect.serviceOption(CurrentTracker), (tracker) => {
15
- if (Option.isSome(tracker))
16
- tracker.value.add(store);
17
- return store.getSnapshot();
18
- });
19
- //# sourceMappingURL=track.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/internal/track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAqBhD;;;GAGG;AACH,MAAM,kBAAkB,GACtB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAA2B,CAAA;AAC1D,MAAM,OAAO,cAAe,SAAQ,kBAAkB;CAAG;AAEzD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,KAAe,EAAoB,EAAE,CAClE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE;IAC3D,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACpD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;AAC5B,CAAC,CAAC,CAAA"}
@@ -1,40 +0,0 @@
1
- import { Effect, Layer } from 'effect';
2
- import type { YieldWrap } from 'effect/Utils';
3
- import { type ChannelClass, Procedures } from '../channel/channel';
4
- import { type Manifest } from '../definition/definition';
5
- import { type AnyEvent, type EventType } from '../event/event';
6
- import { type Ctx } from '../internal/ctx';
7
- import { Bus } from '../runtime/bus';
8
- /** The reflectable descriptor a procedure carries. */
9
- export interface ProcedureManifest extends Manifest {
10
- readonly kind: 'Procedure';
11
- }
12
- export interface ProcedureClass<Events extends ReadonlyArray<AnyEvent>> {
13
- new (): {};
14
- readonly manifest: ProcedureManifest;
15
- /** The trigger events (marker data; read by `Procedure.live`). */
16
- readonly events: Events;
17
- /** The channel this procedure's runs are scheduled on (marker data). */
18
- readonly channel: ChannelClass;
19
- }
20
- export interface ProcedureConfig<Events extends ReadonlyArray<AnyEvent>> {
21
- readonly events: Events;
22
- /** The scheduling lane. Replaces the old `concurrency` option. */
23
- readonly channel: ChannelClass;
24
- }
25
- export type AnyProcedure = ProcedureClass<ReadonlyArray<AnyEvent>>;
26
- /**
27
- * A cross-event-loop flow. The *definition* declares its trigger events and the
28
- * channel it runs on; the *implementation* is the effectful body. Procedures no
29
- * longer subscribe to the bus themselves — the single drain loop routes events
30
- * to the channel, which runs the registered bodies under its policy.
31
- */
32
- export declare const make: <const Events extends ReadonlyArray<AnyEvent>>(name: string, config: ProcedureConfig<Events>) => ProcedureClass<Events>;
33
- /**
34
- * Register the flow body into its channel. The body may read state and dispatch
35
- * events, but never writes state (the core invariant); its context requirements
36
- * (RPC clients, etc.) are captured here so the channel fiber can run it with no
37
- * outstanding R.
38
- */
39
- export declare const live: <Events extends ReadonlyArray<AnyEvent>, Eff extends YieldWrap<Effect.Effect<any, any, any>>, Done>(procedure: ProcedureClass<Events>, body: (event: EventType<Events[number]>) => Generator<Eff, Done, never>) => Layer.Layer<never, never, Procedures | Bus | Ctx<Eff>>;
40
- //# sourceMappingURL=procedure.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"procedure.d.ts","sourceRoot":"","sources":["../../src/procedure/procedure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,KAAK,YAAY,EAAuB,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACvF,OAAO,EAAE,KAAK,QAAQ,EAAmB,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,GAAG,EAAiB,MAAM,gBAAgB,CAAA;AAEnD,sDAAsD;AACtD,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc,CAAC,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC;IACpE,QAAQ,EAAE,CAAA;IACV,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;CAC/B;AAED,MAAM,WAAW,eAAe,CAAC,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC;IACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;CAC/B;AAED,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAA;AAElE;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,KAAK,CAAC,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC,EAC/D,MAAM,MAAM,EACZ,QAAQ,eAAe,CAAC,MAAM,CAAC,KAC9B,cAAc,CAAC,MAAM,CAKpB,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GACf,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC,EACtC,GAAG,SAAS,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EACnD,IAAI,EAEJ,WAAW,cAAc,CAAC,MAAM,CAAC,EACjC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,KACtE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CA6BvD,CAAA"}
@@ -1,50 +0,0 @@
1
- import { Effect, Layer } from 'effect';
2
- import { Procedures } from '../channel/channel';
3
- import { definitionClass } from '../definition/definition';
4
- import {} from '../event/event';
5
- import {} from '../internal/ctx';
6
- import { Bus, narrowHandled } from '../runtime/bus';
7
- /**
8
- * A cross-event-loop flow. The *definition* declares its trigger events and the
9
- * channel it runs on; the *implementation* is the effectful body. Procedures no
10
- * longer subscribe to the bus themselves — the single drain loop routes events
11
- * to the channel, which runs the registered bodies under its policy.
12
- */
13
- export const make = (name, config) => definitionClass({
14
- manifest: { kind: 'Procedure', name },
15
- events: config.events,
16
- channel: config.channel,
17
- });
18
- /**
19
- * Register the flow body into its channel. The body may read state and dispatch
20
- * events, but never writes state (the core invariant); its context requirements
21
- * (RPC clients, etc.) are captured here so the channel fiber can run it with no
22
- * outstanding R.
23
- */
24
- export const live = (procedure, body) => {
25
- const name = procedure.manifest.name;
26
- const channelName = procedure.channel.manifest.name;
27
- const handles = new Set(procedure.events.map((e) => e.tag));
28
- // Scoped registration (see `Reducer.live`): an eager procedure's scope is the
29
- // root runtime's, so behavior is unchanged; a lazy feature's procedure registers
30
- // on mount and unregisters on unmount, so it stops running and is reclaimed.
31
- return Layer.scopedDiscard(Effect.gen(function* () {
32
- const procedures = yield* Procedures;
33
- if (procedures.entries.some((e) => e.name === name)) {
34
- yield* Effect.logWarning(`reform: duplicate procedure name '${name}' registered`);
35
- }
36
- // Snapshot the body's full context (Bus + RPC clients) so `run` is total.
37
- const runtime = yield* Effect.runtime();
38
- const entry = {
39
- name,
40
- channelName,
41
- // The channel only routes events whose tag is in `handles`, so at runtime
42
- // `event` is always one of `Events`; `narrowHandled` restores the body's
43
- // declared event union from the erased `Tagged` envelope.
44
- handles,
45
- run: (event) => Effect.provide(Effect.gen(() => body(narrowHandled(event))), runtime),
46
- };
47
- yield* Effect.acquireRelease(Effect.sync(() => procedures.register(entry)), () => Effect.sync(() => procedures.unregister(entry)));
48
- }));
49
- };
50
- //# sourceMappingURL=procedure.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"procedure.js","sourceRoot":"","sources":["../../src/procedure/procedure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,EAA0C,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACvF,OAAO,EAAiB,eAAe,EAAE,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAAiC,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAY,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAwBnD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,IAAY,EACZ,MAA+B,EACP,EAAE,CAC1B,eAAe,CAAyB;IACtC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAoB,EAAE,IAAI,EAA8B;IAC1E,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC,OAAO;CACxB,CAAC,CAAA;AAEJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAKlB,SAAiC,EACjC,IAAuE,EACf,EAAE;IAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAA;IACpC,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3D,8EAA8E;IAC9E,iFAAiF;IACjF,6EAA6E;IAC7E,OAAO,KAAK,CAAC,aAAa,CACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAA;QACpC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,qCAAqC,IAAI,cAAc,CAAC,CAAA;QACnF,CAAC;QACD,0EAA0E;QAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAkB,CAAA;QACvD,MAAM,KAAK,GAAmB;YAC5B,IAAI;YACJ,WAAW;YACX,0EAA0E;YAC1E,yEAAyE;YACzE,0DAA0D;YAC1D,OAAO;YACP,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;SACtF,CAAA;QACD,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAC/E,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAChD,CAAA;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAA"}
@@ -1,44 +0,0 @@
1
- import { Layer } from 'effect';
2
- import { type Manifest } from '../definition/definition';
3
- import { type AnyEvent, type EventType } from '../event/event';
4
- import type { Store } from '../internal/store';
5
- import { type AnyState, type StateValue } from '../state/state';
6
- import { type AnyFamily, type FamilyKey, type FamilyStore, type FamilyValue, Tombstone } from '../state/stateFamily';
7
- import { Reducers } from '../runtime/loop';
8
- /** The reflectable descriptor a reducer carries, like every other primitive's `*Manifest`. */
9
- export interface ReducerManifest extends Manifest {
10
- readonly kind: 'Reducer';
11
- }
12
- export interface StateReducerConfig<S extends AnyState, Events extends ReadonlyArray<AnyEvent>> {
13
- readonly states: readonly [S];
14
- readonly events: Events;
15
- }
16
- export interface FamilyReducerConfig<F extends AnyFamily, Events extends ReadonlyArray<AnyEvent>> {
17
- readonly family: F;
18
- readonly keyOf: (event: EventType<Events[number]>) => FamilyKey<F>;
19
- readonly events: Events;
20
- }
21
- export interface StateReducerClass<S extends AnyState, Events extends ReadonlyArray<AnyEvent>> {
22
- new (): {};
23
- readonly manifest: ReducerManifest;
24
- /** Marker data read by `Reducer.live`. */
25
- readonly config: StateReducerConfig<S, Events>;
26
- readonly handles: ReadonlySet<string>;
27
- }
28
- export interface FamilyReducerClass<F extends AnyFamily, Events extends ReadonlyArray<AnyEvent>> {
29
- new (): {};
30
- readonly manifest: ReducerManifest;
31
- readonly config: FamilyReducerConfig<F, Events>;
32
- readonly handles: ReadonlySet<string>;
33
- }
34
- /**
35
- * Reducers are the only writers of state. The *definition* (`Reducer.make`)
36
- * declares which state and events it touches; the *implementation*
37
- * (`Reducer.live`) is the pure fold. An unhandled event is a no-op because
38
- * it is never in `handles`.
39
- */
40
- export declare function make<S extends AnyState, const Events extends ReadonlyArray<AnyEvent>>(name: string, config: StateReducerConfig<S, Events>): StateReducerClass<S, Events>;
41
- export declare function make<F extends AnyFamily, const Events extends ReadonlyArray<AnyEvent>>(name: string, config: FamilyReducerConfig<F, Events>): FamilyReducerClass<F, Events>;
42
- export declare function live<S extends AnyState, Events extends ReadonlyArray<AnyEvent>>(reducer: StateReducerClass<S, Events>, fold: (value: StateValue<S>, event: EventType<Events[number]>) => StateValue<S>): Layer.Layer<never, never, Reducers | Store<StateValue<S>>>;
43
- export declare function live<F extends AnyFamily, Events extends ReadonlyArray<AnyEvent>>(reducer: FamilyReducerClass<F, Events>, fold: (entry: FamilyValue<F>, event: EventType<Events[number]>) => FamilyValue<F> | Tombstone): Layer.Layer<never, never, Reducers | FamilyStore<FamilyKey<F>, FamilyValue<F>>>;
44
- //# sourceMappingURL=reducer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../src/reducer/reducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,KAAK,QAAQ,EAAmB,MAAM,0BAA0B,CAAA;AAEzE,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,SAAS,EACV,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAqB,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE7D,8FAA8F;AAC9F,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CACzB;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC;IAC5F,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC;IAC9F,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAClB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAA;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC;IAC3F,QAAQ,EAAE,CAAA;IACV,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;IAClC,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC;IAC7F,QAAQ,EAAE,CAAA;IACV,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAC/C,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACtC;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,KAAK,CAAC,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC,EACnF,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,GACpC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AAC/B,wBAAgB,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,CAAC,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC,EACpF,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,GACrC,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AAuBhC,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC,EAC7E,OAAO,EAAE,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,EACrC,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,GAC9E,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7D,wBAAgB,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC,EAC9E,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,EACtC,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,GAC5F,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -1,63 +0,0 @@
1
- import { Effect, Layer } from 'effect';
2
- import { definitionClass } from '../definition/definition';
3
- import { AsyncReducer } from '../internal/errors';
4
- import {} from '../event/event';
5
- import {} from '../state/state';
6
- import { Tombstone, } from '../state/stateFamily';
7
- import { narrowHandled } from '../runtime/bus';
8
- import { Reducers } from '../runtime/loop';
9
- export function make(name, config) {
10
- return definitionClass({
11
- manifest: { kind: 'Reducer', name },
12
- config,
13
- handles: new Set(config.events.map((e) => e.tag)),
14
- });
15
- }
16
- /** Reject an accidentally-async fold up front: a reducer must be a pure sync write. */
17
- const sync = (value) => {
18
- // Loose `!= null` so a reducer returning `undefined` doesn't crash the guard.
19
- if (value != null && typeof value.then === 'function') {
20
- throw new AsyncReducer();
21
- }
22
- return value;
23
- };
24
- export function live(reducer, fold) {
25
- const { config, handles } = reducer;
26
- const name = reducer.manifest.name;
27
- // Scoped registration: register on build, unregister on scope close. For an eager
28
- // app the scope is the root runtime's (closes only at dispose), so behavior is
29
- // unchanged; for a lazy feature the scope is the feature's, so unmount removes the
30
- // entry — it stops folding and is reclaimed instead of leaking onto a dead store.
31
- return Layer.scopedDiscard(Effect.gen(function* () {
32
- const reducers = yield* Reducers;
33
- if (reducers.entries.some((e) => e.name === name)) {
34
- yield* Effect.logWarning(`reform: duplicate reducer name '${name}' registered`);
35
- }
36
- const entry = yield* Effect.gen(function* () {
37
- if ('family' in config) {
38
- const family = yield* config.family.store;
39
- return {
40
- name,
41
- handles,
42
- apply: (event) => {
43
- // The loop only invokes `apply` for events in `handles`, so `event`
44
- // is one of this reducer's declared events; `narrowHandled` restores
45
- // that typed view from the erased `Tagged` envelope `keyOf` is fed.
46
- const key = config.keyOf(narrowHandled(event));
47
- const next = fold(family.at(key).get(), event);
48
- // A fold may return the eviction sentinel to drop the key's store
49
- // (bounding an otherwise-unbounded family) instead of a new value.
50
- if (next === Tombstone)
51
- family.forget(key);
52
- else
53
- family.at(key).set(sync(next));
54
- },
55
- };
56
- }
57
- const store = yield* config.states[0].store;
58
- return { name, handles, apply: (event) => store.set(sync(fold(store.get(), event))) };
59
- });
60
- yield* Effect.acquireRelease(Effect.sync(() => reducers.register(entry)), () => Effect.sync(() => reducers.unregister(entry)));
61
- }));
62
- }
63
- //# sourceMappingURL=reducer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reducer.js","sourceRoot":"","sources":["../../src/reducer/reducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAiB,eAAe,EAAE,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAiC,MAAM,gBAAgB,CAAA;AAE9D,OAAO,EAAkC,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAKL,SAAS,GACV,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAqB,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AA+C7D,MAAM,UAAU,IAAI,CAClB,IAAY,EACZ,MAE2D;IAE3D,OAAO,eAAe,CAAU;QAC9B,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,IAAI,EAA4B;QACtE,MAAM;QACN,OAAO,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KAClD,CAAC,CAAA;AACJ,CAAC;AAED,uFAAuF;AACvF,MAAM,IAAI,GAAG,CAAI,KAAQ,EAAK,EAAE;IAC9B,8EAA8E;IAC9E,IAAI,KAAK,IAAI,IAAI,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9E,MAAM,IAAI,YAAY,EAAE,CAAA;IAC1B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAUD,MAAM,UAAU,IAAI,CAClB,OAE0D,EAC1D,IAAmC;IAEnC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA;IAClC,kFAAkF;IAClF,+EAA+E;IAC/E,mFAAmF;IACnF,kFAAkF;IAClF,OAAO,KAAK,CAAC,aAAa,CACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAA;QAChC,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAClD,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,mCAAmC,IAAI,cAAc,CAAC,CAAA;QACjF,CAAC;QACD,MAAM,KAAK,GAAiB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrD,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAA;gBACzC,OAAO;oBACL,IAAI;oBACJ,OAAO;oBACP,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE;wBACvB,oEAAoE;wBACpE,qEAAqE;wBACrE,oEAAoE;wBACpE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;wBAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;wBAC9C,kEAAkE;wBAClE,mEAAmE;wBACnE,IAAI,IAAI,KAAK,SAAS;4BAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;;4BACrC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;oBACrC,CAAC;iBACF,CAAA;YACH,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;YAC3C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAC/F,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAC7E,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAC9C,CAAA;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
@@ -1,119 +0,0 @@
1
- import { Context, Effect, Layer, Schema } from 'effect';
2
- import { AsyncData } from '../calc/asyncData';
3
- import * as Channel from '../channel/channel';
4
- import { type Manifest } from '../definition/definition';
5
- import * as Event from '../event/event';
6
- import { type GatedOf } from '../internal/queryDriver';
7
- import { type InputsObject, type InputStores, type InvalidateBy } from '../internal/sources';
8
- import { type Store } from '../internal/store';
9
- import { Bus } from '../runtime/bus';
10
- import { Reducers } from '../runtime/loop';
11
- import { type AnySource, StateToken } from '../state/token';
12
- /** One queued intent: the dispatched event value plus the lifecycle metadata. */
13
- export interface PendingIntent<I> {
14
- readonly opId: string;
15
- /** The dispatched intent event (`{ _tag, ...payload }`). */
16
- readonly intent: I;
17
- /** `'sending'` until the RPC acks; `'confirmed'` until the post-ack refetch lands. */
18
- readonly status: 'sending' | 'confirmed';
19
- }
20
- /** The payload of the public `Failed` event: which intent, and what `send` raised. */
21
- export interface FailedIntent<I> {
22
- readonly intent: I;
23
- readonly error: unknown;
24
- }
25
- export interface RemoteStateManifest<N extends string, A, E> extends Manifest {
26
- readonly kind: 'RemoteState';
27
- readonly name: N;
28
- /** Schema of the server value (`Success` arm / `apply`'s domain). */
29
- readonly output: Schema.Schema<A, any>;
30
- readonly error?: Schema.Schema<E, any>;
31
- /** Whether the query can be disabled (drives the `Idle` arm). */
32
- readonly gated: boolean;
33
- /** The mutation vocabulary — intent event tags, reflectable without running logic. */
34
- readonly intents: ReadonlyArray<string>;
35
- }
36
- export interface RemoteStateClass<out N extends string, out Inputs extends ReadonlyArray<AnySource>, in out Intents extends ReadonlyArray<Event.AnyEvent>, in out A, in out E, in out Gated extends boolean> extends Effect.Effect<AsyncData<A, E, Gated>, never, Store<AsyncData<A, E, Gated>>> {
37
- new (): {};
38
- readonly manifest: RemoteStateManifest<N, A, E>;
39
- /** The OVERLAID view (`pending.reduce(apply, truth)`) — what `yield*` reads. */
40
- readonly store: Context.Tag<Store<AsyncData<A, E, Gated>>, Store<AsyncData<A, E, Gated>>>;
41
- /** The name, so the class doubles as a `Source` input to another calc. */
42
- readonly name: N;
43
- /** Marker data read by `RemoteState.live`. */
44
- readonly inputs: Inputs;
45
- /** The intent event definitions (marker data; read by `RemoteState.live`). */
46
- readonly intents: Intents;
47
- /** Runtime mirror of `Gated`: whether `disabled` is honored / `Idle` can occur. */
48
- readonly gated: Gated;
49
- /** The un-overlaid query lifecycle — for chrome that must show server truth. */
50
- readonly truth: StateToken<`${N}/truth`, AsyncData<A, E, Gated>>;
51
- /**
52
- * The pending queue as a read-only `Source` (badges, "saving…" chrome). Not a
53
- * `StateClass`, so no user reducer can target it — the hidden queue reducer
54
- * is its sole writer.
55
- */
56
- readonly pending: StateToken<`${N}/pending`, ReadonlyArray<PendingIntent<Event.EventType<Intents[number]>>>>;
57
- /** Public fact: a send failed; its intent left the queue and the view reverted. */
58
- readonly Failed: Event.EventClass<`${N}/Failed`, FailedIntent<Event.EventType<Intents[number]>>>;
59
- }
60
- export interface RemoteStateConfig<Inputs extends ReadonlyArray<AnySource>, Intents extends ReadonlyArray<Event.AnyEvent>, A, E, AlwaysOn extends boolean> {
61
- readonly inputs: Inputs;
62
- /** Schema of the server value. */
63
- readonly output: Schema.Schema<A, any>;
64
- /** Schema of the query failure. Omitted ⇒ infallible query, no `Error` arm. */
65
- readonly error?: Schema.Schema<E, any>;
66
- /** `true` ⇒ the query is always on: no `Idle` arm and `disabled` is rejected on `.live`. */
67
- readonly alwaysOn?: AlwaysOn;
68
- /** The mutation vocabulary: ordinary `Event.make` definitions. */
69
- readonly intents: Intents;
70
- }
71
- /**
72
- * Define a remote state: a query (like `AsyncCalc.make`) plus the intent
73
- * events that mutate it. `yield* TheClass` reads the overlaid view;
74
- * `TheClass.truth` / `TheClass.pending` / `TheClass.Failed` expose the rest of
75
- * the surface. The query/send/apply logic is supplied by `RemoteState.live`.
76
- */
77
- export declare const make: <const N extends string, const Inputs extends ReadonlyArray<AnySource>, const Intents extends ReadonlyArray<Event.AnyEvent>, A, E = never, const AlwaysOn extends boolean = false>(name: N, config: RemoteStateConfig<Inputs, Intents, A, E, AlwaysOn>) => RemoteStateClass<N, Inputs, Intents, A, E, GatedOf<AlwaysOn>>;
78
- /**
79
- * The `.live` config: the query (same contract as `AsyncCalc.live`), the
80
- * delivery effect, and the pure per-intent fold.
81
- */
82
- export type RemoteStateLive<Inputs extends ReadonlyArray<AnySource>, Intents extends ReadonlyArray<Event.AnyEvent>, A, E, Gated extends boolean, R, R2> = {
83
- readonly query: (inputs: InputsObject<Inputs>) => Effect.Effect<A, E, R>;
84
- /**
85
- * Deliver one intent to the server. ANY failure (typed failure or defect)
86
- * settles the intent and dispatches `Failed`; the result value is ignored —
87
- * truth comes back through the invalidated query, never through the response.
88
- */
89
- readonly send: (intent: Event.EventType<Intents[number]>) => Effect.Effect<unknown, unknown, R2>;
90
- /**
91
- * The pure per-intent fold over the server value (typically one
92
- * `Match.exhaustive` over the intent union). MUST be idempotent against
93
- * truth that already carries the intent — see the module doc.
94
- */
95
- readonly apply: (value: A, intent: Event.EventType<Intents[number]>) => A;
96
- /** The send lane. Default: a generated `${name}/sends` merge channel. */
97
- readonly channel?: Channel.ChannelClass;
98
- readonly invalidateBy?: InvalidateBy<Inputs>;
99
- /** Extra refetch triggers (realtime pushes, unrelated mutations) — `AsyncCalc`'s sugar. */
100
- readonly invalidateOn?: ReadonlyArray<Event.AnyEvent>;
101
- /** Refetch conciliation — see `AsyncCalc.live`. Mutation bursts favor `'trailing'`. */
102
- readonly coalesce?: 'switch' | 'trailing';
103
- /** Structural sharing across refetches AND overlay recomputes — see `AsyncCalc.live`. */
104
- readonly reuse?: boolean;
105
- } & (Gated extends true ? {
106
- readonly disabled?: (inputs: InputsObject<Inputs>) => boolean;
107
- } : {
108
- readonly disabled?: never;
109
- });
110
- /**
111
- * Wire a remote state: the query driver (truth), the overlay (visible view),
112
- * the hidden queue reducer, the send procedure, and the settle link between
113
- * them — one layer. Hidden names minted per call, namespaced by the remote
114
- * state's name: events `…/Queued`/`…/Acked`/`…/Settled`/`…/Invalidated`, state
115
- * `…/revision`, reducers `…/pending`/`…/revision`, procedure `…/send`, default
116
- * channel `…/sends`.
117
- */
118
- export declare const live: <N extends string, Inputs extends ReadonlyArray<AnySource>, Intents extends ReadonlyArray<Event.AnyEvent>, A, E, Gated extends boolean, R, R2>(remote: RemoteStateClass<N, Inputs, Intents, A, E, Gated>, config: RemoteStateLive<Inputs, Intents, A, E, Gated, R, R2>) => Layer.Layer<Store<AsyncData<A, E, Gated>> | Store<ReadonlyArray<PendingIntent<Event.EventType<Intents[number]>>>>, never, InputStores<Inputs> | R | R2 | Reducers | Channel.Procedures | Channel.Channels | Bus>;
119
- //# sourceMappingURL=remoteState.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remoteState.d.ts","sourceRoot":"","sources":["../../src/remote/remoteState.ts"],"names":[],"mappings":"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"}