@playfast/reform 1.2.0 → 1.3.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 (383) hide show
  1. package/dist/boundary/boundary.d.ts +64 -0
  2. package/dist/boundary/boundary.d.ts.map +1 -0
  3. package/dist/boundary/boundary.js +102 -0
  4. package/dist/boundary/boundary.js.map +1 -0
  5. package/dist/calc/asyncCalc.d.ts +21 -0
  6. package/dist/calc/asyncCalc.d.ts.map +1 -0
  7. package/dist/calc/asyncCalc.js +90 -0
  8. package/dist/calc/asyncCalc.js.map +1 -0
  9. package/dist/calc/asyncCalcTypes.d.ts +78 -0
  10. package/dist/calc/asyncCalcTypes.d.ts.map +1 -0
  11. package/dist/calc/asyncCalcTypes.js +2 -0
  12. package/dist/calc/asyncCalcTypes.js.map +1 -0
  13. package/dist/calc/asyncData.d.ts +29 -0
  14. package/dist/calc/asyncData.d.ts.map +1 -0
  15. package/dist/calc/asyncData.js +21 -0
  16. package/dist/calc/asyncData.js.map +1 -0
  17. package/dist/calc/calc.d.ts +39 -0
  18. package/dist/calc/calc.d.ts.map +1 -0
  19. package/dist/calc/calc.js +48 -0
  20. package/dist/calc/calc.js.map +1 -0
  21. package/dist/calc/calcFamily.d.ts +40 -0
  22. package/dist/calc/calcFamily.d.ts.map +1 -0
  23. package/dist/calc/calcFamily.js +113 -0
  24. package/dist/calc/calcFamily.js.map +1 -0
  25. package/dist/calc/compose.d.ts +5 -0
  26. package/dist/calc/compose.d.ts.map +1 -0
  27. package/dist/calc/compose.js +5 -0
  28. package/dist/calc/compose.js.map +1 -0
  29. package/dist/calc/queryState.d.ts +12 -0
  30. package/dist/calc/queryState.d.ts.map +1 -0
  31. package/dist/calc/queryState.js +17 -0
  32. package/dist/calc/queryState.js.map +1 -0
  33. package/dist/channel/channel.d.ts +51 -0
  34. package/dist/channel/channel.d.ts.map +1 -0
  35. package/dist/channel/channel.js +86 -0
  36. package/dist/channel/channel.js.map +1 -0
  37. package/dist/channel/procedures.d.ts +24 -0
  38. package/dist/channel/procedures.d.ts.map +1 -0
  39. package/dist/channel/procedures.js +82 -0
  40. package/dist/channel/procedures.js.map +1 -0
  41. package/dist/compose/composition.d.ts +12 -0
  42. package/dist/compose/composition.d.ts.map +1 -0
  43. package/dist/compose/composition.js +56 -0
  44. package/dist/compose/composition.js.map +1 -0
  45. package/dist/compose/compositionTypes.d.ts +127 -0
  46. package/dist/compose/compositionTypes.d.ts.map +1 -0
  47. package/dist/compose/compositionTypes.js +2 -0
  48. package/dist/compose/compositionTypes.js.map +1 -0
  49. package/dist/compose/host.d.ts +6 -0
  50. package/dist/compose/host.d.ts.map +1 -0
  51. package/dist/compose/host.js +2 -0
  52. package/dist/compose/host.js.map +1 -0
  53. package/dist/compose/props.d.ts +10 -0
  54. package/dist/compose/props.d.ts.map +1 -0
  55. package/dist/compose/props.js +6 -0
  56. package/dist/compose/props.js.map +1 -0
  57. package/dist/compose/provide.d.ts +18 -0
  58. package/dist/compose/provide.d.ts.map +1 -0
  59. package/dist/compose/provide.js +49 -0
  60. package/dist/compose/provide.js.map +1 -0
  61. package/dist/compose/slot.d.ts +70 -0
  62. package/dist/compose/slot.d.ts.map +1 -0
  63. package/dist/compose/slot.js +26 -0
  64. package/dist/compose/slot.js.map +1 -0
  65. package/dist/compose/structure.d.ts +51 -0
  66. package/dist/compose/structure.d.ts.map +1 -0
  67. package/dist/compose/structure.js +92 -0
  68. package/dist/compose/structure.js.map +1 -0
  69. package/dist/compose/ui.d.ts +112 -0
  70. package/dist/compose/ui.d.ts.map +1 -0
  71. package/dist/compose/ui.js +47 -0
  72. package/dist/compose/ui.js.map +1 -0
  73. package/dist/definition/definition.d.ts +11 -0
  74. package/dist/definition/definition.d.ts.map +1 -0
  75. package/dist/definition/definition.js +35 -0
  76. package/dist/definition/definition.js.map +1 -0
  77. package/dist/event/event.d.ts +52 -0
  78. package/dist/event/event.d.ts.map +1 -0
  79. package/dist/event/event.js +67 -0
  80. package/dist/event/event.js.map +1 -0
  81. package/dist/event/eventGroup.d.ts +8 -0
  82. package/dist/event/eventGroup.d.ts.map +1 -0
  83. package/dist/event/eventGroup.js +3 -0
  84. package/dist/event/eventGroup.js.map +1 -0
  85. package/dist/feature/feature.d.ts +27 -0
  86. package/dist/feature/feature.d.ts.map +1 -0
  87. package/dist/feature/feature.js +20 -0
  88. package/dist/feature/feature.js.map +1 -0
  89. package/dist/feature/featureBinding.d.ts +85 -0
  90. package/dist/feature/featureBinding.d.ts.map +1 -0
  91. package/dist/feature/featureBinding.js +10 -0
  92. package/dist/feature/featureBinding.js.map +1 -0
  93. package/dist/feature/featureClass.d.ts +10 -0
  94. package/dist/feature/featureClass.d.ts.map +1 -0
  95. package/dist/feature/featureClass.js +2 -0
  96. package/dist/feature/featureClass.js.map +1 -0
  97. package/dist/feature/featureConfig.d.ts +86 -0
  98. package/dist/feature/featureConfig.d.ts.map +1 -0
  99. package/dist/feature/featureConfig.js +13 -0
  100. package/dist/feature/featureConfig.js.map +1 -0
  101. package/dist/feature/featureFactory.d.ts +15 -0
  102. package/dist/feature/featureFactory.d.ts.map +1 -0
  103. package/dist/feature/featureFactory.js +59 -0
  104. package/dist/feature/featureFactory.js.map +1 -0
  105. package/dist/feature/featureModule.d.ts +28 -0
  106. package/dist/feature/featureModule.d.ts.map +1 -0
  107. package/dist/feature/featureModule.js +33 -0
  108. package/dist/feature/featureModule.js.map +1 -0
  109. package/dist/feature/featureNativeTree.d.ts +26 -0
  110. package/dist/feature/featureNativeTree.d.ts.map +1 -0
  111. package/dist/feature/featureNativeTree.js +2 -0
  112. package/dist/feature/featureNativeTree.js.map +1 -0
  113. package/dist/feature/featureRequirement.d.ts +43 -0
  114. package/dist/feature/featureRequirement.d.ts.map +1 -0
  115. package/dist/feature/featureRequirement.js +6 -0
  116. package/dist/feature/featureRequirement.js.map +1 -0
  117. package/dist/feature/featureVariants.d.ts +9 -0
  118. package/dist/feature/featureVariants.d.ts.map +1 -0
  119. package/dist/feature/featureVariants.js +59 -0
  120. package/dist/feature/featureVariants.js.map +1 -0
  121. package/dist/feature/mountFeature.d.ts +10 -0
  122. package/dist/feature/mountFeature.d.ts.map +1 -0
  123. package/dist/feature/mountFeature.js +14 -0
  124. package/dist/feature/mountFeature.js.map +1 -0
  125. package/dist/graph/closure.d.ts +77 -0
  126. package/dist/graph/closure.d.ts.map +1 -0
  127. package/dist/graph/closure.js +4 -0
  128. package/dist/graph/closure.js.map +1 -0
  129. package/dist/graph/services.d.ts +30 -0
  130. package/dist/graph/services.d.ts.map +1 -0
  131. package/dist/graph/services.js +2 -0
  132. package/dist/graph/services.js.map +1 -0
  133. package/dist/graph/summary.d.ts +60 -0
  134. package/dist/graph/summary.d.ts.map +1 -0
  135. package/dist/graph/summary.js +7 -0
  136. package/dist/graph/summary.js.map +1 -0
  137. package/dist/index.d.ts +51 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/index.js +34 -0
  140. package/dist/index.js.map +1 -0
  141. package/dist/internal/bucketCache.d.ts +19 -0
  142. package/dist/internal/bucketCache.d.ts.map +1 -0
  143. package/dist/internal/bucketCache.js +20 -0
  144. package/dist/internal/bucketCache.js.map +1 -0
  145. package/dist/internal/capture.d.ts +17 -0
  146. package/dist/internal/capture.d.ts.map +1 -0
  147. package/dist/internal/capture.js +5 -0
  148. package/dist/internal/capture.js.map +1 -0
  149. package/dist/internal/env.d.ts +2 -0
  150. package/dist/internal/env.d.ts.map +1 -0
  151. package/dist/internal/env.js +5 -0
  152. package/dist/internal/env.js.map +1 -0
  153. package/dist/internal/errors.d.ts +48 -0
  154. package/dist/internal/errors.d.ts.map +1 -0
  155. package/dist/internal/errors.js +69 -0
  156. package/dist/internal/errors.js.map +1 -0
  157. package/dist/internal/inspect.d.ts +5 -0
  158. package/dist/internal/inspect.d.ts.map +1 -0
  159. package/dist/internal/inspect.js +20 -0
  160. package/dist/internal/inspect.js.map +1 -0
  161. package/dist/internal/queryDriver.d.ts +7 -0
  162. package/dist/internal/queryDriver.d.ts.map +1 -0
  163. package/dist/internal/queryDriver.js +198 -0
  164. package/dist/internal/queryDriver.js.map +1 -0
  165. package/dist/internal/queryDriverHydrate.d.ts +17 -0
  166. package/dist/internal/queryDriverHydrate.d.ts.map +1 -0
  167. package/dist/internal/queryDriverHydrate.js +19 -0
  168. package/dist/internal/queryDriverHydrate.js.map +1 -0
  169. package/dist/internal/queryDriverStore.d.ts +54 -0
  170. package/dist/internal/queryDriverStore.d.ts.map +1 -0
  171. package/dist/internal/queryDriverStore.js +77 -0
  172. package/dist/internal/queryDriverStore.js.map +1 -0
  173. package/dist/internal/queryDriverTypes.d.ts +41 -0
  174. package/dist/internal/queryDriverTypes.d.ts.map +1 -0
  175. package/dist/internal/queryDriverTypes.js +9 -0
  176. package/dist/internal/queryDriverTypes.js.map +1 -0
  177. package/dist/internal/queryEvents.d.ts +12 -0
  178. package/dist/internal/queryEvents.d.ts.map +1 -0
  179. package/dist/internal/queryEvents.js +11 -0
  180. package/dist/internal/queryEvents.js.map +1 -0
  181. package/dist/internal/queryStore.d.ts +13 -0
  182. package/dist/internal/queryStore.d.ts.map +1 -0
  183. package/dist/internal/queryStore.js +11 -0
  184. package/dist/internal/queryStore.js.map +1 -0
  185. package/dist/internal/reuse.d.ts +2 -0
  186. package/dist/internal/reuse.d.ts.map +1 -0
  187. package/dist/internal/reuse.js +55 -0
  188. package/dist/internal/reuse.js.map +1 -0
  189. package/dist/internal/scheduler.d.ts +13 -0
  190. package/dist/internal/scheduler.d.ts.map +1 -0
  191. package/dist/internal/scheduler.js +38 -0
  192. package/dist/internal/scheduler.js.map +1 -0
  193. package/dist/internal/seeds.d.ts +3 -0
  194. package/dist/internal/seeds.d.ts.map +1 -0
  195. package/dist/internal/seeds.js +3 -0
  196. package/dist/internal/seeds.js.map +1 -0
  197. package/dist/internal/sources.d.ts +20 -0
  198. package/dist/internal/sources.d.ts.map +1 -0
  199. package/dist/internal/sources.js +39 -0
  200. package/dist/internal/sources.js.map +1 -0
  201. package/dist/internal/stateRegistry.d.ts +2 -0
  202. package/dist/internal/stateRegistry.d.ts.map +1 -0
  203. package/dist/internal/stateRegistry.js +15 -0
  204. package/dist/internal/stateRegistry.js.map +1 -0
  205. package/dist/internal/store.d.ts +15 -0
  206. package/dist/internal/store.d.ts.map +1 -0
  207. package/dist/internal/store.js +61 -0
  208. package/dist/internal/store.js.map +1 -0
  209. package/dist/internal/track.d.ts +15 -0
  210. package/dist/internal/track.d.ts.map +1 -0
  211. package/dist/internal/track.js +11 -0
  212. package/dist/internal/track.js.map +1 -0
  213. package/dist/internal/variance.d.ts +4 -0
  214. package/dist/internal/variance.d.ts.map +1 -0
  215. package/dist/internal/variance.js +2 -0
  216. package/dist/internal/variance.js.map +1 -0
  217. package/dist/internal.d.ts +42 -0
  218. package/dist/internal.d.ts.map +1 -0
  219. package/dist/internal.js +58 -0
  220. package/dist/internal.js.map +1 -0
  221. package/dist/namespace/namespace.d.ts +24 -0
  222. package/dist/namespace/namespace.d.ts.map +1 -0
  223. package/dist/namespace/namespace.js +20 -0
  224. package/dist/namespace/namespace.js.map +1 -0
  225. package/dist/procedure/procedure.d.ts +32 -0
  226. package/dist/procedure/procedure.d.ts.map +1 -0
  227. package/dist/procedure/procedure.js +34 -0
  228. package/dist/procedure/procedure.js.map +1 -0
  229. package/dist/reducer/reducer.d.ts +35 -0
  230. package/dist/reducer/reducer.d.ts.map +1 -0
  231. package/dist/reducer/reducer.js +73 -0
  232. package/dist/reducer/reducer.js.map +1 -0
  233. package/dist/remote/pendingQueue.d.ts +20 -0
  234. package/dist/remote/pendingQueue.d.ts.map +1 -0
  235. package/dist/remote/pendingQueue.js +113 -0
  236. package/dist/remote/pendingQueue.js.map +1 -0
  237. package/dist/remote/remoteState.d.ts +13 -0
  238. package/dist/remote/remoteState.d.ts.map +1 -0
  239. package/dist/remote/remoteState.js +176 -0
  240. package/dist/remote/remoteState.js.map +1 -0
  241. package/dist/remote/remoteStateMake.d.ts +8 -0
  242. package/dist/remote/remoteStateMake.d.ts.map +1 -0
  243. package/dist/remote/remoteStateMake.js +46 -0
  244. package/dist/remote/remoteStateMake.js.map +1 -0
  245. package/dist/remote/remoteStateSend.d.ts +41 -0
  246. package/dist/remote/remoteStateSend.d.ts.map +1 -0
  247. package/dist/remote/remoteStateSend.js +67 -0
  248. package/dist/remote/remoteStateSend.js.map +1 -0
  249. package/dist/remote/remoteStateTypes.d.ts +103 -0
  250. package/dist/remote/remoteStateTypes.d.ts.map +1 -0
  251. package/dist/remote/remoteStateTypes.js +4 -0
  252. package/dist/remote/remoteStateTypes.js.map +1 -0
  253. package/dist/runtime/appRuntime.d.ts +10 -0
  254. package/dist/runtime/appRuntime.d.ts.map +1 -0
  255. package/dist/runtime/appRuntime.js +6 -0
  256. package/dist/runtime/appRuntime.js.map +1 -0
  257. package/dist/runtime/bus.d.ts +17 -0
  258. package/dist/runtime/bus.d.ts.map +1 -0
  259. package/dist/runtime/bus.js +12 -0
  260. package/dist/runtime/bus.js.map +1 -0
  261. package/dist/runtime/capturedAppRuntime.d.ts +7 -0
  262. package/dist/runtime/capturedAppRuntime.d.ts.map +1 -0
  263. package/dist/runtime/capturedAppRuntime.js +151 -0
  264. package/dist/runtime/capturedAppRuntime.js.map +1 -0
  265. package/dist/runtime/eventBudget.d.ts +32 -0
  266. package/dist/runtime/eventBudget.d.ts.map +1 -0
  267. package/dist/runtime/eventBudget.js +67 -0
  268. package/dist/runtime/eventBudget.js.map +1 -0
  269. package/dist/runtime/featureMount.d.ts +16 -0
  270. package/dist/runtime/featureMount.d.ts.map +1 -0
  271. package/dist/runtime/featureMount.js +54 -0
  272. package/dist/runtime/featureMount.js.map +1 -0
  273. package/dist/runtime/instrumentation.d.ts +18 -0
  274. package/dist/runtime/instrumentation.d.ts.map +1 -0
  275. package/dist/runtime/instrumentation.js +16 -0
  276. package/dist/runtime/instrumentation.js.map +1 -0
  277. package/dist/runtime/loop.d.ts +32 -0
  278. package/dist/runtime/loop.d.ts.map +1 -0
  279. package/dist/runtime/loop.js +128 -0
  280. package/dist/runtime/loop.js.map +1 -0
  281. package/dist/runtime/queries.d.ts +20 -0
  282. package/dist/runtime/queries.d.ts.map +1 -0
  283. package/dist/runtime/queries.js +21 -0
  284. package/dist/runtime/queries.js.map +1 -0
  285. package/dist/runtime/runtimeHandle.d.ts +56 -0
  286. package/dist/runtime/runtimeHandle.d.ts.map +1 -0
  287. package/dist/runtime/runtimeHandle.js +2 -0
  288. package/dist/runtime/runtimeHandle.js.map +1 -0
  289. package/dist/scene/scene.d.ts +55 -0
  290. package/dist/scene/scene.d.ts.map +1 -0
  291. package/dist/scene/scene.js +74 -0
  292. package/dist/scene/scene.js.map +1 -0
  293. package/dist/state/state.d.ts +54 -0
  294. package/dist/state/state.d.ts.map +1 -0
  295. package/dist/state/state.js +41 -0
  296. package/dist/state/state.js.map +1 -0
  297. package/dist/state/stateFamily.d.ts +59 -0
  298. package/dist/state/stateFamily.d.ts.map +1 -0
  299. package/dist/state/stateFamily.js +91 -0
  300. package/dist/state/stateFamily.js.map +1 -0
  301. package/dist/state/stateGroup.d.ts +36 -0
  302. package/dist/state/stateGroup.d.ts.map +1 -0
  303. package/dist/state/stateGroup.js +33 -0
  304. package/dist/state/stateGroup.js.map +1 -0
  305. package/dist/state/token.d.ts +35 -0
  306. package/dist/state/token.d.ts.map +1 -0
  307. package/dist/state/token.js +18 -0
  308. package/dist/state/token.js.map +1 -0
  309. package/dist/synced/syncedStore.d.ts +44 -0
  310. package/dist/synced/syncedStore.d.ts.map +1 -0
  311. package/dist/synced/syncedStore.js +32 -0
  312. package/dist/synced/syncedStore.js.map +1 -0
  313. package/dist/testkit/flight.testkit.d.ts +18 -0
  314. package/dist/testkit/flight.testkit.d.ts.map +1 -0
  315. package/dist/testkit/flight.testkit.js +45 -0
  316. package/dist/testkit/flight.testkit.js.map +1 -0
  317. package/dist/ui/node.d.ts +3 -0
  318. package/dist/ui/node.d.ts.map +1 -0
  319. package/dist/ui/node.js +2 -0
  320. package/dist/ui/node.js.map +1 -0
  321. package/dist/ui/trigger.d.ts +2 -0
  322. package/dist/ui/trigger.d.ts.map +1 -0
  323. package/dist/ui/trigger.js +2 -0
  324. package/dist/ui/trigger.js.map +1 -0
  325. package/dist/wire/tree.d.ts +32 -0
  326. package/dist/wire/tree.d.ts.map +1 -0
  327. package/dist/wire/tree.js +59 -0
  328. package/dist/wire/tree.js.map +1 -0
  329. package/dist/wire/triggers.d.ts +25 -0
  330. package/dist/wire/triggers.d.ts.map +1 -0
  331. package/dist/wire/triggers.js +31 -0
  332. package/dist/wire/triggers.js.map +1 -0
  333. package/package.json +17 -5
  334. package/src/boundary/boundary.test.ts +26 -23
  335. package/src/calc/asyncCalc.invalidate.test.ts +258 -55
  336. package/src/calc/asyncCalc.test.ts +225 -85
  337. package/src/calc/asyncCalc.ts +27 -141
  338. package/src/calc/asyncCalcTypes.test.ts +64 -0
  339. package/src/calc/asyncCalcTypes.ts +139 -0
  340. package/src/calc/calc.test.ts +10 -11
  341. package/src/calc/calcFamily.test.ts +12 -12
  342. package/src/channel/channel.ts +8 -106
  343. package/src/channel/procedures.ts +108 -0
  344. package/src/compose/composition.ts +49 -246
  345. package/src/compose/compositionTypes.ts +249 -0
  346. package/src/event/event.fromSource.test.ts +12 -12
  347. package/src/feature/feature.ts +50 -1210
  348. package/src/feature/feature.typecheck.ts +2 -61
  349. package/src/feature/featureBinding.ts +158 -0
  350. package/src/feature/featureClass.ts +162 -0
  351. package/src/feature/featureConfig.ts +192 -0
  352. package/src/feature/featureFactory.ts +163 -0
  353. package/src/feature/featureModule.ts +136 -0
  354. package/src/feature/featureModule.typecheck.ts +63 -0
  355. package/src/feature/featureNativeTree.ts +152 -0
  356. package/src/feature/featureRequirement.ts +82 -0
  357. package/src/feature/featureVariants.ts +234 -0
  358. package/src/feature/mountFeature.ts +54 -0
  359. package/src/graph/closure.ts +45 -226
  360. package/src/graph/services.ts +95 -0
  361. package/src/graph/summary.ts +134 -0
  362. package/src/internal/queryDriver.ts +20 -89
  363. package/src/internal/queryDriverHydrate.ts +45 -0
  364. package/src/internal/queryDriverTypes.ts +8 -10
  365. package/src/internal/store.test.ts +27 -6
  366. package/src/remote/pendingQueue.ts +145 -0
  367. package/src/remote/remoteState.test.ts +28 -22
  368. package/src/remote/remoteState.ts +63 -489
  369. package/src/remote/remoteStateMake.ts +97 -0
  370. package/src/remote/remoteStateSend.ts +122 -0
  371. package/src/remote/remoteStateTypes.ts +155 -0
  372. package/src/runtime/appRuntime.activation.test.ts +9 -5
  373. package/src/runtime/appRuntime.test.ts +40 -16
  374. package/src/runtime/appRuntime.ts +17 -472
  375. package/src/runtime/capturedAppRuntime.ts +274 -0
  376. package/src/runtime/eventBudget.test.ts +38 -8
  377. package/src/runtime/featureMount.ts +94 -0
  378. package/src/runtime/hardening.test.ts +18 -4
  379. package/src/runtime/instrumentation.test.ts +49 -12
  380. package/src/runtime/loop.test.ts +51 -10
  381. package/src/runtime/runtimeHandle.ts +124 -0
  382. package/src/state/stateFamily.test.ts +25 -8
  383. package/src/testkit/flight.testkit.ts +9 -0
@@ -0,0 +1,64 @@
1
+ import { Context, Layer } from 'effect';
2
+ import type { Effect as EffectType } from 'effect/Effect';
3
+ import { type Manifest } from '../definition/definition.js';
4
+ import { type InputStores } from '../internal/sources.js';
5
+ import { type Store } from '../internal/store.js';
6
+ import { type AnySource, type SourceCapture, type SourceValue } from '../state/token.js';
7
+ export interface BoundaryPending {
8
+ readonly _tag: 'Pending';
9
+ }
10
+ export interface BoundaryErrored {
11
+ readonly _tag: 'Errored';
12
+ readonly errors: ReadonlyArray<unknown>;
13
+ }
14
+ export interface BoundaryReady {
15
+ readonly _tag: 'Ready';
16
+ }
17
+ export type BoundaryState = BoundaryPending | BoundaryErrored | BoundaryReady;
18
+ export declare const BoundaryStoreTypeId: unique symbol;
19
+ export type BoundaryStoreTypeId = typeof BoundaryStoreTypeId;
20
+ export interface BoundaryStore<N extends string> {
21
+ readonly [BoundaryStoreTypeId]: N;
22
+ }
23
+ export type AnyLifecycleSource = AnySource;
24
+ declare const BoundaryLifecycleMismatchTypeId: unique symbol;
25
+ interface BoundaryLifecycleMismatch<Value> {
26
+ readonly [BoundaryLifecycleMismatchTypeId]: Value;
27
+ }
28
+ type CheckedLifecycleValue<Value> = Value extends {
29
+ readonly _tag: 'Idle' | 'Loading';
30
+ } ? Value : Value extends {
31
+ readonly _tag: 'Success';
32
+ readonly value: infer _Success;
33
+ readonly refetching: boolean;
34
+ } ? Value : Value extends {
35
+ readonly _tag: 'Error';
36
+ readonly error: infer _Failure;
37
+ readonly refetching: boolean;
38
+ } ? Value : BoundaryLifecycleMismatch<Value>;
39
+ type CheckedLifecycleSource<Source extends AnySource> = [SourceValue<Source>] extends [never] ? BoundaryLifecycleMismatch<Source> : SourceValue<Source> extends CheckedLifecycleValue<SourceValue<Source>> ? Source : BoundaryLifecycleMismatch<SourceValue<Source>>;
40
+ type CheckedLifecycleSources<Over extends ReadonlyArray<AnyLifecycleSource>> = {
41
+ readonly [Index in keyof Over]: Over[Index] extends AnySource ? CheckedLifecycleSource<Over[Index]> : BoundaryLifecycleMismatch<Over[Index]>;
42
+ };
43
+ export interface BoundaryManifest<N extends string> extends Manifest {
44
+ readonly kind: 'Boundary';
45
+ readonly name: N;
46
+ }
47
+ export interface BoundaryClass<N extends string, out Over extends ReadonlyArray<AnyLifecycleSource>> extends EffectType<BoundaryState, never, BoundaryStore<N>> {
48
+ new (): {};
49
+ readonly manifest: BoundaryManifest<N>;
50
+ readonly store: Context.Tag<BoundaryStore<N>, Store<BoundaryState>>;
51
+ readonly name: N;
52
+ readonly over: Over;
53
+ readonly capture: <Result>(visit: SourceCapture<Result>) => Result;
54
+ }
55
+ export interface BoundaryConfig<Over extends ReadonlyArray<AnyLifecycleSource>> {
56
+ readonly over: Over & CheckedLifecycleSources<Over>;
57
+ }
58
+ export interface BoundaryOptions {
59
+ readonly once?: boolean;
60
+ }
61
+ export declare const make: <const N extends string, const Over extends ReadonlyArray<AnyLifecycleSource>>(name: N, config: BoundaryConfig<Over>) => BoundaryClass<N, Over>;
62
+ export declare const live: <N extends string, Over extends ReadonlyArray<AnyLifecycleSource>>(boundary: BoundaryClass<N, Over>, options?: BoundaryOptions) => Layer.Layer<BoundaryStore<N>, never, InputStores<Over>>;
63
+ export {};
64
+ //# sourceMappingURL=boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../src/boundary/boundary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { Context, Data, Effect, Equal, Layer, MutableRef, Option, Predicate } from 'effect';
2
+ import { yieldableClass } from '../definition/definition.js';
3
+ import { resolveScheduler } from '../internal/scheduler.js';
4
+ import { wireSources } from '../internal/sources.js';
5
+ import { makeDerivedStore } from '../internal/store.js';
6
+ import { readTracked } from '../internal/track.js';
7
+ import {} from '../state/token.js';
8
+ export const BoundaryStoreTypeId = Symbol.for('reform/BoundaryStore');
9
+ const pendingArm = { _tag: 'Pending' };
10
+ const readyArm = { _tag: 'Ready' };
11
+ const erroredArm = (errors) => Data.struct({ _tag: 'Errored', errors: Data.array(errors) });
12
+ export const make = (name, config) => {
13
+ const store = Context.GenericTag(`reform/boundary/${name}`);
14
+ const manifest = { kind: 'Boundary', name };
15
+ const read = Effect.flatMap(store, readTracked);
16
+ const boundary = yieldableClass(read, {
17
+ manifest,
18
+ store,
19
+ name,
20
+ over: config.over,
21
+ capture: (visit) => visit(boundary),
22
+ });
23
+ return boundary;
24
+ };
25
+ const tagOf = (arm) => Predicate.hasProperty(arm, '_tag') && Predicate.isString(arm._tag) ? arm._tag : '';
26
+ const errorOf = (arm) => Predicate.hasProperty(arm, 'error') && tagOf(arm) === 'Error'
27
+ ? Option.some(arm.error)
28
+ : Option.none();
29
+ export const live = (boundary, options = {}) => Layer.scoped(boundary.store, Effect.gen(function* () {
30
+ const scheduler = yield* resolveScheduler;
31
+ const sourceWires = yield* Effect.forEach(boundary.over, (source) => wireSources([source]));
32
+ const readSource = (source) => source.keyOf(source.snapshot())[0];
33
+ const arms = sourceWires.map((source) => MutableRef.make(readSource(source)));
34
+ const loadingCount = MutableRef.make(arms.reduce((count, arm) => count + (tagOf(MutableRef.get(arm)) === 'Loading' ? 1 : 0), 0));
35
+ const errorCount = MutableRef.make(arms.reduce((count, arm) => count + (Option.isSome(errorOf(MutableRef.get(arm))) ? 1 : 0), 0));
36
+ const collectErrors = () => arms.flatMap((arm) => Option.toArray(errorOf(MutableRef.get(arm))));
37
+ const errorArm = MutableRef.make(erroredArm(collectErrors()));
38
+ const updateSlot = (update) => {
39
+ const armRef = arms[update.slot];
40
+ if (armRef === undefined) {
41
+ return;
42
+ }
43
+ const previous = MutableRef.get(armRef);
44
+ if (Equal.equals(previous, update.arm)) {
45
+ return;
46
+ }
47
+ MutableRef.set(armRef, update.arm);
48
+ MutableRef.update(loadingCount, (count) => count +
49
+ (tagOf(update.arm) === 'Loading' ? 1 : 0) -
50
+ (tagOf(previous) === 'Loading' ? 1 : 0));
51
+ const previousError = errorOf(previous);
52
+ const nextError = errorOf(update.arm);
53
+ if (!Equal.equals(previousError, nextError)) {
54
+ MutableRef.update(errorCount, (count) => count + (Option.isSome(nextError) ? 1 : 0) - (Option.isSome(previousError) ? 1 : 0));
55
+ MutableRef.set(errorArm, erroredArm(collectErrors()));
56
+ }
57
+ };
58
+ const synchronize = () => sourceWires.forEach((source, slot) => updateSlot({ slot, arm: readSource(source) }));
59
+ const latched = MutableRef.make(false);
60
+ const incremental = MutableRef.make(false);
61
+ const recompute = () => {
62
+ if (options.once === true && MutableRef.get(latched)) {
63
+ return readyArm;
64
+ }
65
+ if (!MutableRef.get(incremental)) {
66
+ synchronize();
67
+ }
68
+ return MutableRef.get(errorCount) > 0
69
+ ? MutableRef.get(errorArm)
70
+ : MutableRef.get(loadingCount) > 0
71
+ ? pendingArm
72
+ : readyArm;
73
+ };
74
+ const subscribe = (onChange) => {
75
+ const publish = () => {
76
+ MutableRef.set(incremental, true);
77
+ onChange();
78
+ MutableRef.set(incremental, false);
79
+ };
80
+ const settle = () => scheduler.schedule([publish]);
81
+ const unsubscribes = sourceWires.map((source, sourceIndex) => source.subscribe(() => {
82
+ updateSlot({ slot: sourceIndex, arm: readSource(source) });
83
+ scheduler.schedule([settle]);
84
+ }));
85
+ return () => unsubscribes.forEach((unsubscribe) => unsubscribe());
86
+ };
87
+ const derived = makeDerivedStore(recompute, subscribe, scheduler);
88
+ yield* Effect.addFinalizer(() => Effect.sync(derived.unsubscribe));
89
+ if (options.once === true) {
90
+ if (recompute()._tag === 'Ready') {
91
+ MutableRef.set(latched, true);
92
+ }
93
+ const offSelf = derived.store.subscribe(() => {
94
+ if (derived.store.get()._tag === 'Ready') {
95
+ MutableRef.set(latched, true);
96
+ }
97
+ });
98
+ yield* Effect.addFinalizer(() => Effect.sync(offSelf));
99
+ }
100
+ return derived.store;
101
+ }));
102
+ //# sourceMappingURL=boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../src/boundary/boundary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Effect, Layer, Schema } from 'effect';
2
+ import { type AnyEvent } from '../event/event.js';
3
+ import { type InputStores } from '../internal/sources.js';
4
+ import { type GatedOf } from '../internal/queryDriver.js';
5
+ import { Reducers } from '../runtime/loop.js';
6
+ import { Queries } from '../runtime/queries.js';
7
+ import { type AnySource } from '../state/token.js';
8
+ import type { AsyncCalcClass, AsyncCalcConfig, AsyncCalcLive, AsyncCalcStore, DefinedAsyncCalcClass } from './asyncCalcTypes.js';
9
+ export { AsyncCalcStoreTypeId } from './asyncCalcTypes.js';
10
+ export type { AsyncCalcClass, AsyncCalcConfig, AsyncCalcLive, AsyncCalcLiveView, AsyncCalcLiveWithInvalidateOn, AsyncCalcManifest, AsyncCalcSchemaReflection, AsyncCalcStore, DefinedAsyncCalcClass, } from './asyncCalcTypes.js';
11
+ export declare function make<const N extends string, const Inputs extends ReadonlyArray<AnySource>, OutputSchema extends Schema.Schema.AnyNoContext, ErrorSchema extends Schema.Schema.AnyNoContext | undefined = undefined, const AlwaysOn extends boolean = false>(name: N, config: AsyncCalcConfig<Inputs, OutputSchema, ErrorSchema, AlwaysOn>): DefinedAsyncCalcClass<N, Inputs, Schema.Schema.Type<OutputSchema>, ErrorSchema extends Schema.Schema.AnyNoContext ? Schema.Schema.Type<ErrorSchema> : never, GatedOf<AlwaysOn>>;
12
+ export declare function live<N extends string, Inputs extends ReadonlyArray<AnySource>, A, E, Gated extends boolean, R>(calc: AsyncCalcClass<N, Inputs, A, E, Gated>, config: AsyncCalcLive<Inputs, A, E, Gated, R> & {
13
+ readonly invalidateOn: ReadonlyArray<AnyEvent>;
14
+ }): Layer.Layer<AsyncCalcStore<N, A, E, Gated>, never, InputStores<Inputs> | R | Reducers>;
15
+ export declare function live<N extends string, Inputs extends ReadonlyArray<AnySource>, A, E, Gated extends boolean, R>(calc: AsyncCalcClass<N, Inputs, A, E, Gated>, config: AsyncCalcLive<Inputs, A, E, Gated, R>): Layer.Layer<AsyncCalcStore<N, A, E, Gated>, never, InputStores<Inputs> | R>;
16
+ export interface NamedCalc {
17
+ readonly name: string;
18
+ }
19
+ export declare const invalidate: (calc: NamedCalc) => Effect.Effect<void, never, Queries>;
20
+ export declare const refetch: (calc: NamedCalc) => Effect.Effect<void, never, Queries>;
21
+ //# sourceMappingURL=asyncCalc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncCalc.d.ts","sourceRoot":"","sources":["../../src/calc/asyncCalc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { Context, Effect, Layer, Match, Option, Schema } from 'effect';
2
+ import { yieldableClass } from '../definition/definition.js';
3
+ import {} from '../event/event.js';
4
+ import {} from '../internal/sources.js';
5
+ import { bumpRevision, gatedFlag, makeQueryDriver, RevisionSchema, revisionZero, } from '../internal/queryDriver.js';
6
+ import {} from '../internal/store.js';
7
+ import { readTracked } from '../internal/track.js';
8
+ import * as Reducer from '../reducer/reducer.js';
9
+ import { Reducers } from '../runtime/loop.js';
10
+ import { Queries } from '../runtime/queries.js';
11
+ import * as State from '../state/state.js';
12
+ import {} from '../state/token.js';
13
+ import { narrowStore } from './asyncData.js';
14
+ export { AsyncCalcStoreTypeId } from './asyncCalcTypes.js';
15
+ export function make(name, config) {
16
+ const store = Context.GenericTag(`reform/asyncCalc/${name}`);
17
+ const gated = gatedFlag(config.alwaysOn);
18
+ const manifest = {
19
+ kind: 'AsyncCalc',
20
+ name,
21
+ output: config.output,
22
+ gated,
23
+ ...(config.error !== undefined ? { error: config.error } : {}),
24
+ };
25
+ const codec = {
26
+ encode: Schema.encode(config.output),
27
+ decode: Schema.decodeUnknown(config.output),
28
+ };
29
+ const read = Effect.flatMap(store, readTracked);
30
+ const calc = yieldableClass(read, {
31
+ manifest,
32
+ codec,
33
+ store,
34
+ name,
35
+ inputs: config.inputs,
36
+ gated,
37
+ capture: (visit) => visit(calc),
38
+ });
39
+ return calc;
40
+ }
41
+ export function live(calc, config) {
42
+ const revisionState = config.invalidateOn === undefined
43
+ ? undefined
44
+ : State.make(`${calc.manifest.name}/invalidateOn`, RevisionSchema);
45
+ const driver = Layer.scoped(calc.store, Effect.gen(function* () {
46
+ const cfg = config;
47
+ const persistOption = cfg.persist;
48
+ const persistKey = persistOption === true || persistOption === undefined || persistOption === false
49
+ ? calc.manifest.name
50
+ : (persistOption.key ?? calc.manifest.name);
51
+ const persistCodec = {
52
+ encode: Schema.encode(calc.manifest.output),
53
+ decode: Schema.decodeUnknown(calc.manifest.output),
54
+ };
55
+ const persist = persistOption === undefined || persistOption === false
56
+ ? undefined
57
+ : { key: persistKey, codec: persistCodec };
58
+ const revision = yield* Match.value(revisionState).pipe(Match.when(undefined, () => Effect.succeed(undefined)), Match.orElse((state) => Effect.serviceOption(state.store).pipe(Effect.map(Option.getOrUndefined))));
59
+ const extraKeyFor = (rev) => ({
60
+ read: () => rev.getSnapshot(),
61
+ subscribe: (listener) => rev.subscribe(listener),
62
+ });
63
+ const extraKey = revision === undefined ? undefined : extraKeyFor(revision);
64
+ const driver = yield* makeQueryDriver({
65
+ name: calc.manifest.name,
66
+ label: 'AsyncCalc',
67
+ gated: calc.gated,
68
+ inputs: calc.inputs,
69
+ query: cfg.query,
70
+ invalidateBy: cfg.invalidateBy,
71
+ disabled: cfg.disabled,
72
+ coalesce: cfg.coalesce,
73
+ reuse: cfg.reuse,
74
+ persist,
75
+ extraKey,
76
+ });
77
+ return narrowStore(driver.store);
78
+ }));
79
+ if (config.invalidateOn === undefined || revisionState === undefined) {
80
+ return driver;
81
+ }
82
+ const revisionReducer = Reducer.make(`${calc.manifest.name}/invalidateOn`, {
83
+ states: [revisionState],
84
+ events: config.invalidateOn,
85
+ });
86
+ return Layer.merge(driver, Reducer.live(revisionReducer, bumpRevision)).pipe(Layer.provide(State.live(revisionState, revisionZero)));
87
+ }
88
+ export const invalidate = (calc) => Effect.flatMap(Queries, (queries) => Effect.sync(() => queries.byName.get(calc.name)?.invalidate()));
89
+ export const refetch = (calc) => Effect.flatMap(Queries, (queries) => Effect.sync(() => queries.byName.get(calc.name)?.refetch()));
90
+ //# sourceMappingURL=asyncCalc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncCalc.js","sourceRoot":"","sources":["../../src/calc/asyncCalc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import type { Context, Effect, Schema } from 'effect';
2
+ import type { Effect as EffectType } from 'effect/Effect';
3
+ import type { Manifest } from '../definition/definition.js';
4
+ import type { AnyEvent } from '../event/event.js';
5
+ import type { InputsObject, InvalidateBy } from '../internal/sources.js';
6
+ import type { QueryCodec } from '../internal/queryDriver.js';
7
+ import type { Store } from '../internal/store.js';
8
+ import type { AnySchema } from '../internal/variance.js';
9
+ import type { AnySource, Source, SourceCapture } from '../state/token.js';
10
+ import type { AsyncData } from './asyncData.js';
11
+ export interface AsyncCalcSchemaReflection {
12
+ readonly ast: Schema.Schema<unknown, unknown, unknown>['ast'];
13
+ }
14
+ export interface AsyncCalcManifest<N extends string, A = unknown, E = never> extends Manifest {
15
+ readonly kind: 'AsyncCalc';
16
+ readonly name: N;
17
+ readonly output: AnySchema<A>;
18
+ readonly error?: AnySchema<E>;
19
+ readonly gated: boolean;
20
+ }
21
+ export declare const AsyncCalcStoreTypeId: unique symbol;
22
+ export type AsyncCalcStoreTypeId = typeof AsyncCalcStoreTypeId;
23
+ interface AsyncCalcStoreCompatibilityExternalApi<N extends string, in out A, in out E, in out Gated extends boolean> extends Store<AsyncData<A, E, Gated>> {
24
+ readonly [AsyncCalcStoreTypeId]?: N;
25
+ }
26
+ export type AsyncCalcStore<N extends string, A, E, Gated extends boolean> = AsyncCalcStoreCompatibilityExternalApi<N, A, E, Gated>;
27
+ export interface AsyncCalcClass<N extends string, Inputs extends ReadonlyArray<AnySource>, A, E, Gated extends boolean> extends EffectType<AsyncData<A, E, Gated>, never, AsyncCalcStore<N, A, E, Gated>>, Source<N, AsyncData<A, E, Gated>, AsyncCalcStore<N, A, E, Gated>> {
28
+ new (): {};
29
+ readonly manifest: AsyncCalcManifest<N, A, E>;
30
+ readonly store: Context.Tag<AsyncCalcStore<N, A, E, Gated>, Store<AsyncData<A, E, Gated>>>;
31
+ readonly name: N;
32
+ readonly inputs: Inputs;
33
+ readonly gated: Gated;
34
+ }
35
+ export interface DefinedAsyncCalcClass<N extends string, Inputs extends ReadonlyArray<AnySource>, A, E, Gated extends boolean> extends AsyncCalcClass<N, Inputs, A, E, Gated> {
36
+ readonly codec: QueryCodec<A>;
37
+ readonly capture: <Result>(visit: SourceCapture<Result>) => Result;
38
+ }
39
+ export interface AsyncCalcConfig<Inputs extends ReadonlyArray<AnySource>, OutputSchema, ErrorSchema, AlwaysOn extends boolean> {
40
+ readonly inputs: Inputs;
41
+ readonly output: OutputSchema;
42
+ readonly error?: ErrorSchema;
43
+ readonly alwaysOn?: AlwaysOn;
44
+ }
45
+ export interface AsyncCalcMakeConfigExternalApi<Inputs extends ReadonlyArray<AnySource>, OutputSchema extends Schema.Schema.AnyNoContext, ErrorSchema extends Schema.Schema.AnyNoContext | undefined, AlwaysOn extends boolean> {
46
+ readonly inputs: Inputs;
47
+ readonly output: OutputSchema;
48
+ readonly error?: ErrorSchema;
49
+ readonly alwaysOn?: AlwaysOn;
50
+ }
51
+ export type AsyncCalcLive<Inputs extends ReadonlyArray<AnySource>, A, E, Gated extends boolean, R> = {
52
+ readonly query: (inputs: InputsObject<Inputs>) => Effect.Effect<A, E, R>;
53
+ readonly invalidateBy?: InvalidateBy<Inputs>;
54
+ readonly coalesce?: 'switch' | 'trailing';
55
+ readonly reuse?: boolean;
56
+ readonly persist?: boolean | {
57
+ readonly key?: string | ((inputs: InputsObject<Inputs>) => string);
58
+ };
59
+ } & (Gated extends true ? {
60
+ readonly disabled?: (inputs: InputsObject<Inputs>) => boolean;
61
+ } : {
62
+ readonly disabled?: never;
63
+ });
64
+ export type AsyncCalcLiveWithInvalidateOn<Inputs extends ReadonlyArray<AnySource>, A, E, Gated extends boolean, R> = AsyncCalcLive<Inputs, A, E, Gated, R> & {
65
+ readonly invalidateOn?: ReadonlyArray<AnyEvent>;
66
+ };
67
+ export interface AsyncCalcLiveView<Inputs extends ReadonlyArray<AnySource>, A, E, R> {
68
+ readonly query: (inputs: InputsObject<Inputs>) => Effect.Effect<A, E, R>;
69
+ readonly invalidateBy?: InvalidateBy<Inputs>;
70
+ readonly disabled?: (inputs: InputsObject<Inputs>) => boolean;
71
+ readonly coalesce?: 'switch' | 'trailing';
72
+ readonly reuse?: boolean;
73
+ readonly persist?: boolean | {
74
+ readonly key?: string | ((inputs: InputsObject<Inputs>) => string);
75
+ };
76
+ }
77
+ export {};
78
+ //# sourceMappingURL=asyncCalcTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncCalcTypes.d.ts","sourceRoot":"","sources":["../../src/calc/asyncCalcTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export const AsyncCalcStoreTypeId = Symbol.for('reform/AsyncCalcStore');
2
+ //# sourceMappingURL=asyncCalcTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncCalcTypes.js","sourceRoot":"","sources":["../../src/calc/asyncCalcTypes.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,MAAM,oBAAoB,GAAkB,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { type Store } from '../internal/store.js';
2
+ export interface AsyncIdle {
3
+ readonly _tag: 'Idle';
4
+ }
5
+ export interface AsyncLoading {
6
+ readonly _tag: 'Loading';
7
+ }
8
+ export interface AsyncSuccess<A> {
9
+ readonly _tag: 'Success';
10
+ readonly value: A;
11
+ readonly refetching: boolean;
12
+ }
13
+ export interface AsyncError<E> {
14
+ readonly _tag: 'Error';
15
+ readonly error: E;
16
+ readonly refetching: boolean;
17
+ }
18
+ export type AsyncData<A, E = never, Gated extends boolean = false> = (Gated extends true ? AsyncIdle : never) | AsyncLoading | AsyncSuccess<A> | ([E] extends [never] ? never : AsyncError<E>);
19
+ export type AnyAsyncData<A, E> = AsyncIdle | AsyncLoading | AsyncSuccess<A> | AsyncError<E>;
20
+ export interface AsyncDataConstructors {
21
+ readonly idle: AsyncIdle;
22
+ readonly loading: AsyncLoading;
23
+ readonly success: <A>(value: A, refetching?: boolean) => AsyncSuccess<A>;
24
+ readonly error: <E>(err: E, refetching?: boolean) => AsyncError<E>;
25
+ }
26
+ export declare const AsyncData: AsyncDataConstructors;
27
+ export declare const narrowStore: <A, E, Gated extends boolean>(store: Store<AnyAsyncData<A, E>>) => Store<AsyncData<A, E, Gated>>;
28
+ export declare const widenStore: <A, E, Gated extends boolean>(store: Store<AsyncData<A, E, Gated>>) => Store<AnyAsyncData<A, E>>;
29
+ //# sourceMappingURL=asyncData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncData.d.ts","sourceRoot":"","sources":["../../src/calc/asyncData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CACzB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,SAAS,OAAO,GAAG,KAAK,IAC7D,CAAC,KAAK,SAAS,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,GACxC,YAAY,GACZ,YAAY,CAAC,CAAC,CAAC,GACf,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AAEjD,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,SAAS,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;AAe3F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,CAAA;IACxE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,CAAA;CACnE;AAED,eAAO,MAAM,SAAS,EAAE,qBAAyD,CAAA;AAEjF,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,EAAE,KAAK,SAAS,OAAO,EACrD,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAC/B,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAEoB,CAAA;AAEnD,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,CAAC,EAAE,KAAK,SAAS,OAAO,EACpD,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,KACnC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAEoB,CAAA"}
@@ -0,0 +1,21 @@
1
+ import {} from '../internal/store.js';
2
+ const idle = { _tag: 'Idle' };
3
+ const loading = { _tag: 'Loading' };
4
+ const success = (payload, refetching = false) => ({
5
+ _tag: 'Success',
6
+ value: payload,
7
+ refetching,
8
+ });
9
+ const error = (err, refetching = false) => ({
10
+ _tag: 'Error',
11
+ error: err,
12
+ refetching,
13
+ });
14
+ export const AsyncData = { idle, loading, success, error };
15
+ export const narrowStore = (store) =>
16
+ // oxlint-disable-next-line reform-rules/no-type-assertion -- type-level narrow of the SAME runtime store to the definition's permitted arms; the single documented home for this seam
17
+ store;
18
+ export const widenStore = (store) =>
19
+ // oxlint-disable-next-line reform-rules/no-type-assertion -- read-only widen of the SAME runtime store back to the full union; sound for reads, documented inverse of narrowStore
20
+ store;
21
+ //# sourceMappingURL=asyncData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncData.js","sourceRoot":"","sources":["../../src/calc/asyncData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,mBAAmB,CAAA;AA8B9C,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACxC,MAAM,OAAO,GAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;AACjD,MAAM,OAAO,GAAG,CAAI,OAAU,EAAE,UAAU,GAAG,KAAK,EAAmB,EAAE,CAAC,CAAC;IACvE,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,OAAO;IACd,UAAU;CACX,CAAC,CAAA;AACF,MAAM,KAAK,GAAG,CAAI,GAAM,EAAE,UAAU,GAAG,KAAK,EAAiB,EAAE,CAAC,CAAC;IAC/D,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,GAAG;IACV,UAAU;CACX,CAAC,CAAA;AASF,MAAM,CAAC,MAAM,SAAS,GAA0B,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAEjF,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAgC,EACD,EAAE;AACjC,sLAAsL;AACtL,KAAiD,CAAA;AAEnD,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,KAAoC,EACT,EAAE;AAC7B,kLAAkL;AAClL,KAA6C,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { Context, Layer, type Schema } from 'effect';
2
+ import type { Effect as EffectType } from 'effect/Effect';
3
+ import { type Manifest } from '../definition/definition.js';
4
+ import { type InputsObject, type InputStores, type InvalidateBy } from '../internal/sources.js';
5
+ import { type Store } from '../internal/store.js';
6
+ import { type AnySource, type Source, type SourceCapture } from '../state/token.js';
7
+ export { type InputsObject, type InputStores, type InvalidateBy } from '../internal/sources.js';
8
+ export interface CalcOptionsExternalApi<Inputs extends ReadonlyArray<AnySource>> {
9
+ readonly invalidateBy?: InvalidateBy<Inputs>;
10
+ readonly reuse?: boolean;
11
+ }
12
+ export interface CalcSchemaReflection {
13
+ readonly ast: Schema.Schema<unknown, unknown, unknown>['ast'];
14
+ }
15
+ export interface CalcManifest<N extends string> extends Manifest {
16
+ readonly kind: 'Calc';
17
+ readonly name: N;
18
+ readonly output: CalcSchemaReflection;
19
+ }
20
+ export declare const CalcStoreTypeId: unique symbol;
21
+ export type CalcStoreTypeId = typeof CalcStoreTypeId;
22
+ export interface CalcStore<N extends string, in out Out> extends Store<Out> {
23
+ readonly [CalcStoreTypeId]: N;
24
+ }
25
+ export interface CalcClass<N extends string, Inputs extends ReadonlyArray<AnySource>, Out> extends EffectType<Out, never, CalcStore<N, Out>>, Source<N, Out, CalcStore<N, Out>> {
26
+ new (): {};
27
+ readonly manifest: CalcManifest<N>;
28
+ readonly store: Context.Tag<CalcStore<N, Out>, Store<Out>>;
29
+ readonly name: N;
30
+ readonly inputs: Inputs;
31
+ readonly capture: <Result>(visit: SourceCapture<Result>) => Result;
32
+ }
33
+ export interface CalcConfig<Inputs extends ReadonlyArray<AnySource>, OutputSchema extends Schema.Schema.AnyNoContext> {
34
+ readonly inputs: Inputs;
35
+ readonly output: OutputSchema;
36
+ }
37
+ export declare const make: <const N extends string, const Inputs extends ReadonlyArray<AnySource>, OutputSchema extends Schema.Schema.AnyNoContext>(name: N, config: CalcConfig<Inputs, OutputSchema>) => CalcClass<N, Inputs, Schema.Schema.Type<OutputSchema>>;
38
+ export declare const live: <N extends string, Inputs extends ReadonlyArray<AnySource>, Out>(calc: CalcClass<N, Inputs, Out>, compute: (inputs: InputsObject<Inputs>) => Out, options?: CalcOptionsExternalApi<Inputs>) => Layer.Layer<CalcStore<N, Out>, never, InputStores<Inputs>>;
39
+ //# sourceMappingURL=calc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calc.d.ts","sourceRoot":"","sources":["../../src/calc/calc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { Context, Effect, Layer, MutableRef } from 'effect';
2
+ import { yieldableClass } from '../definition/definition.js';
3
+ import { sameKey, wireSources, } from '../internal/sources.js';
4
+ import { resolveScheduler } from '../internal/scheduler.js';
5
+ import { resolveInstrumentation, stateUpdateHook } from '../runtime/instrumentation.js';
6
+ import { reuse } from '../internal/reuse.js';
7
+ import { makeDerivedStore } from '../internal/store.js';
8
+ import { readTracked } from '../internal/track.js';
9
+ import {} from '../state/token.js';
10
+ export {} from '../internal/sources.js';
11
+ export const CalcStoreTypeId = Symbol.for('reform/CalcStore');
12
+ export const make = (name, config) => {
13
+ const store = Context.GenericTag(`reform/calc/${name}`);
14
+ const manifest = { kind: 'Calc', name, output: config.output };
15
+ const read = Effect.flatMap(store, readTracked);
16
+ const calc = yieldableClass(read, {
17
+ manifest,
18
+ store,
19
+ name,
20
+ inputs: config.inputs,
21
+ capture: (visit) => visit(calc),
22
+ });
23
+ return calc;
24
+ };
25
+ export const live = (calc, compute, options = {}) => Layer.scoped(calc.store, Effect.gen(function* () {
26
+ const scheduler = yield* resolveScheduler;
27
+ const instrumentation = yield* resolveInstrumentation;
28
+ const sources = yield* wireSources(calc.inputs, options.invalidateBy);
29
+ const memo = MutableRef.make(undefined);
30
+ const recompute = () => {
31
+ const args = sources.snapshot();
32
+ const key = sources.keyOf(args);
33
+ const prev = MutableRef.get(memo);
34
+ if (prev !== undefined && sameKey(key, prev.key)) {
35
+ return prev.output;
36
+ }
37
+ const end = instrumentation.calcRecomputed(calc.manifest.name);
38
+ const fresh = compute(args);
39
+ const output = options.reuse === true && prev !== undefined ? reuse(prev.output, fresh) : fresh;
40
+ end();
41
+ MutableRef.set(memo, { key, output });
42
+ return output;
43
+ };
44
+ const derived = makeDerivedStore(recompute, sources.subscribe, scheduler, stateUpdateHook(instrumentation, calc.manifest.name));
45
+ yield* Effect.addFinalizer(() => Effect.sync(derived.unsubscribe));
46
+ return derived.store;
47
+ }));
48
+ //# sourceMappingURL=calc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calc.js","sourceRoot":"","sources":["../../src/calc/calc.ts"],"names":[],"mappings":"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"}