@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 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { Context, Effect, FiberRef, Layer, Option, Schema } from 'effect';
2
+ import { yieldableClass } from '../definition/definition.js';
3
+ import { resolveScheduler } from '../internal/scheduler.js';
4
+ import { CurrentSeedOverrides } from '../internal/seeds.js';
5
+ import { resolveInstrumentation, stateUpdateHook } from '../runtime/instrumentation.js';
6
+ import { claimStateTag } from '../internal/stateRegistry.js';
7
+ import { makeStore } from '../internal/store.js';
8
+ import { readTracked } from '../internal/track.js';
9
+ export const StateStoreTypeId = Symbol.for('reform/StateStore');
10
+ export const make = (name, schema, options = {}) => {
11
+ const identifier = `reform/state/${name}`;
12
+ claimStateTag(identifier);
13
+ const store = Context.GenericTag(identifier);
14
+ const manifest = {
15
+ kind: 'State',
16
+ name,
17
+ schema,
18
+ ...(options.title !== undefined ? { title: options.title } : {}),
19
+ ...(options.description !== undefined ? { description: options.description } : {}),
20
+ };
21
+ const read = Effect.flatMap(store, readTracked);
22
+ const state = yieldableClass(read, {
23
+ manifest,
24
+ name,
25
+ store,
26
+ decodeUnknown: Schema.decodeUnknown(schema),
27
+ decodeUnknownSync: Schema.decodeUnknownSync(schema),
28
+ decodeUnknownOption: Schema.decodeUnknownOption(schema),
29
+ capture: (visit) => visit(state),
30
+ });
31
+ return state;
32
+ };
33
+ const resolveSeed = (state, initial) => Effect.map(FiberRef.get(CurrentSeedOverrides), (overrides) => {
34
+ if (!(state.manifest.name in overrides)) {
35
+ return initial;
36
+ }
37
+ const override = state.decodeUnknownOption(overrides[state.manifest.name]);
38
+ return Option.getOrElse(override, () => initial);
39
+ });
40
+ export const live = (state, initial) => Layer.effect(state.store, Effect.all([resolveScheduler, resolveSeed(state, initial), resolveInstrumentation]).pipe(Effect.map(([scheduler, seed, instrumentation]) => makeStore(seed, scheduler, stateUpdateHook(instrumentation, state.manifest.name)))));
41
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { Context, Effect, Layer, Schema } from 'effect';
2
+ import { type Manifest } from '../definition/definition.js';
3
+ import { type Store } from '../internal/store.js';
4
+ export declare const Tombstone: unique symbol;
5
+ export type Tombstone = typeof Tombstone;
6
+ export interface FamilyStore<K, V> {
7
+ at(key: K): Store<V>;
8
+ forget(key: K): void;
9
+ clear(): void;
10
+ size(): number;
11
+ }
12
+ export interface FamilyOptionsExternalApi {
13
+ readonly evictWhenUnused?: boolean;
14
+ }
15
+ export type FamilyOptions = FamilyOptionsExternalApi;
16
+ export interface FamilySchemaReflection {
17
+ readonly ast: Schema.Schema<unknown, unknown, unknown>['ast'];
18
+ }
19
+ export interface StateFamilyManifestExternalApi<N extends string> extends Manifest {
20
+ readonly kind: 'StateFamily';
21
+ readonly name: N;
22
+ readonly key: FamilySchemaReflection;
23
+ readonly value: FamilySchemaReflection;
24
+ readonly title?: string;
25
+ readonly description?: string;
26
+ }
27
+ export type StateFamilyManifest<N extends string> = StateFamilyManifestExternalApi<N>;
28
+ export declare const StateFamilyStoreTypeId: unique symbol;
29
+ export type StateFamilyStoreTypeId = typeof StateFamilyStoreTypeId;
30
+ export interface StateFamilyStore<N extends string, in out K, in out V> extends FamilyStore<K, V> {
31
+ readonly [StateFamilyStoreTypeId]: N;
32
+ }
33
+ export type StateFamilyCapture<Result> = <N extends string, K, V>(family: StateFamilyClass<N, K, V>) => Result;
34
+ export interface AnyFamily {
35
+ new (): {};
36
+ readonly manifest: StateFamilyManifest<string>;
37
+ readonly capture: <Result>(visit: StateFamilyCapture<Result>) => Result;
38
+ }
39
+ export interface StateFamilyClass<N extends string, K, V> {
40
+ new (): {
41
+ readonly Key: K;
42
+ };
43
+ readonly manifest: StateFamilyManifest<N>;
44
+ readonly capture: <Result>(visit: StateFamilyCapture<Result>) => Result;
45
+ readonly store: Context.Tag<StateFamilyStore<N, K, V>, FamilyStore<K, V>>;
46
+ readonly decodeKeySync: (input: unknown) => K;
47
+ readonly decodeValueSync: (input: unknown) => V;
48
+ }
49
+ export type FamilyName<F> = F extends StateFamilyClass<infer N, infer _K, infer _V> ? N : never;
50
+ export type FamilyKey<F> = F extends StateFamilyClass<infer _N, infer K, infer _V> ? K : never;
51
+ export type FamilyValue<F> = F extends StateFamilyClass<infer _N, infer _K, infer V> ? V : never;
52
+ export interface StateFamilyMakeOptionsExternalApi {
53
+ readonly title?: string;
54
+ readonly description?: string;
55
+ }
56
+ export declare const make: <const N extends string, K, KeyEncoded, V, ValueEncoded>(name: N, key: Schema.Schema<K, KeyEncoded, never>, valueSchema: Schema.Schema<V, ValueEncoded, never>, options?: StateFamilyMakeOptionsExternalApi) => StateFamilyClass<N, K, V>;
57
+ export declare const read: <N extends string, K, V>(family: StateFamilyClass<N, K, V>, key: K) => Effect.Effect<V, never, StateFamilyStore<N, K, V>>;
58
+ export declare const live: <N extends string, K, V>(family: StateFamilyClass<N, K, V>, initial: V | ((key: K) => V), options?: FamilyOptions) => Layer.Layer<StateFamilyStore<N, K, V>>;
59
+ //# sourceMappingURL=stateFamily.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateFamily.d.ts","sourceRoot":"","sources":["../../src/state/stateFamily.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import { Context, Effect, Layer, Option, Schema } from 'effect';
2
+ import { definitionClass } from '../definition/definition.js';
3
+ import { resolveScheduler } from '../internal/scheduler.js';
4
+ import { claimStateTag } from '../internal/stateRegistry.js';
5
+ import { resolveInstrumentation, stateUpdateHook } from '../runtime/instrumentation.js';
6
+ import { makeStore } from '../internal/store.js';
7
+ import { readTracked } from '../internal/track.js';
8
+ export const Tombstone = Symbol.for('reform/StateFamily/Tombstone');
9
+ const makeFamilyStore = (seed, scheduler, options = {}, onChange = () => { }) => {
10
+ const entries = new Map();
11
+ const evictWhenUnused = options.evictWhenUnused === true;
12
+ const subscribers = new Map();
13
+ const liveSubscriberCount = (key) => Option.getOrElse(Option.fromNullable(subscribers.get(key)), () => 0);
14
+ const refCounted = (key, store) => ({
15
+ ...store,
16
+ subscribe: (listener) => {
17
+ subscribers.set(key, liveSubscriberCount(key) + 1);
18
+ const off = store.subscribe(listener);
19
+ const released = { done: false };
20
+ return () => {
21
+ if (released.done) {
22
+ return;
23
+ }
24
+ released.done = true;
25
+ off();
26
+ const remaining = (subscribers.get(key) ?? 1) - 1;
27
+ if (remaining > 0) {
28
+ subscribers.set(key, remaining);
29
+ return;
30
+ }
31
+ subscribers.delete(key);
32
+ queueMicrotask(() => {
33
+ if (liveSubscriberCount(key) === 0) {
34
+ entries.delete(key);
35
+ }
36
+ });
37
+ };
38
+ },
39
+ });
40
+ return {
41
+ at: (key) => {
42
+ const existing = entries.get(key);
43
+ if (existing !== undefined) {
44
+ return existing;
45
+ }
46
+ const base = makeStore(seed(key), scheduler, onChange);
47
+ const created = evictWhenUnused ? refCounted(key, base) : base;
48
+ entries.set(key, created);
49
+ return created;
50
+ },
51
+ forget: (key) => {
52
+ entries.delete(key);
53
+ subscribers.delete(key);
54
+ },
55
+ clear: () => {
56
+ entries.clear();
57
+ subscribers.clear();
58
+ },
59
+ size: () => entries.size,
60
+ };
61
+ };
62
+ export const StateFamilyStoreTypeId = Symbol.for('reform/StateFamilyStore');
63
+ export const make = (name, key, valueSchema, options = {}) => {
64
+ const identifier = `reform/family/${name}`;
65
+ claimStateTag(identifier);
66
+ const store = Context.GenericTag(identifier);
67
+ const manifest = {
68
+ kind: 'StateFamily',
69
+ name,
70
+ key,
71
+ value: valueSchema,
72
+ ...(options.title !== undefined ? { title: options.title } : {}),
73
+ ...(options.description !== undefined ? { description: options.description } : {}),
74
+ };
75
+ const family = definitionClass({
76
+ manifest,
77
+ store,
78
+ decodeKeySync: Schema.decodeUnknownSync(key),
79
+ decodeValueSync: Schema.decodeUnknownSync(valueSchema),
80
+ capture: (visit) => visit(family),
81
+ });
82
+ return family;
83
+ };
84
+ export const read = (family, key) => Effect.flatMap(family.store, (familyStore) => readTracked(familyStore.at(key)));
85
+ export const live = (family, initial, options = {}) => {
86
+ const seed = (key) => typeof initial === 'function'
87
+ ? family.decodeValueSync(Reflect.apply(initial, undefined, [key]))
88
+ : initial;
89
+ return Layer.effect(family.store, Effect.zipWith(resolveScheduler, resolveInstrumentation, (scheduler, instrumentation) => makeFamilyStore(seed, scheduler, options, stateUpdateHook(instrumentation, family.manifest.name))));
90
+ };
91
+ //# sourceMappingURL=stateFamily.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateFamily.js","sourceRoot":"","sources":["../../src/state/stateFamily.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { Layer } from 'effect';
2
+ import { type StoresOf } from '../internal/sources.js';
3
+ import { type AnyState, type StateName, type StateValue } from './state.js';
4
+ import { StateToken } from './token.js';
5
+ type MemberForName<Members extends ReadonlyArray<AnyState>, N extends string> = Extract<Members[number], {
6
+ readonly manifest: {
7
+ readonly name: N;
8
+ };
9
+ }>;
10
+ type ValueForName<Members extends ReadonlyArray<AnyState>, N extends string> = StateValue<MemberForName<Members, N>>;
11
+ export interface StateGroupClass<Members extends ReadonlyArray<AnyState>> {
12
+ new (): {};
13
+ readonly kind: 'StateGroup';
14
+ readonly members: Members;
15
+ readonly byName: ReadonlyMap<string, AnyState>;
16
+ }
17
+ export type AnyStateGroup = StateGroupClass<ReadonlyArray<AnyState>>;
18
+ type DuplicateStateName<N extends string> = readonly ['reform: duplicate state name in group', N];
19
+ type NoDuplicateNames<Members extends ReadonlyArray<AnyState>, Seen extends string = never> = Members extends readonly [
20
+ infer Head extends AnyState,
21
+ ...infer Tail extends ReadonlyArray<AnyState>
22
+ ] ? readonly [
23
+ StateName<Head> extends Seen ? DuplicateStateName<StateName<Head>> : Head,
24
+ ...NoDuplicateNames<Tail, Seen | StateName<Head>>
25
+ ] : readonly [];
26
+ export type GroupSeeds<G extends AnyStateGroup> = G extends StateGroupClass<infer Members> ? {
27
+ readonly [N in StateName<Members[number]>]: ValueForName<Members, N>;
28
+ } : never;
29
+ type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
30
+ type EntrySeeds<G> = G extends AnyStateGroup ? GroupSeeds<G> : never;
31
+ export type SeedsOf<St extends ReadonlyArray<unknown>> = Partial<UnionToIntersection<EntrySeeds<St[number]>>>;
32
+ export declare const make: <const Members extends ReadonlyArray<AnyState>>(...members: Members & NoDuplicateNames<Members>) => StateGroupClass<Members>;
33
+ export declare const select: <Members extends ReadonlyArray<AnyState>, N extends StateName<Members[number]>>(group: StateGroupClass<Members>, name: N) => StateToken<N, ValueForName<Members, N>>;
34
+ export declare function live<Members extends ReadonlyArray<AnyState>>(group: StateGroupClass<Members>, seeds: GroupSeeds<StateGroupClass<Members>>): Layer.Layer<StoresOf<Members>>;
35
+ export {};
36
+ //# sourceMappingURL=stateGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateGroup.d.ts","sourceRoot":"","sources":["../../src/state/stateGroup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { Array as Arr, Context, Effect, Layer, Option } from 'effect';
2
+ import { definitionClass } from '../definition/definition.js';
3
+ import { DuplicateRegistration, UnknownGroupState } from '../internal/errors.js';
4
+ import {} from '../internal/sources.js';
5
+ import { live as stateLive, } from './state.js';
6
+ import { StateToken } from './token.js';
7
+ export const make = (...members) => {
8
+ const names = members.map((member) => member.manifest.name);
9
+ const duplicate = Arr.findFirst(names, (name, index) => Option.exists(Arr.findFirstIndex(names, (candidate) => candidate === name), (firstIndex) => firstIndex !== index));
10
+ if (Option.isSome(duplicate)) {
11
+ // oxlint-disable-next-line reform-rules/no-throw -- definition-time invariant; sync factory has no Effect context (see internal/errors.ts)
12
+ throw new DuplicateRegistration({ kind: 'state in group', name: duplicate.value });
13
+ }
14
+ return definitionClass({
15
+ kind: 'StateGroup',
16
+ members,
17
+ byName: new Map(members.map((member) => [member.manifest.name, member])),
18
+ });
19
+ };
20
+ export const select = (group, name) => {
21
+ const member = group.byName.get(name);
22
+ if (member === undefined) {
23
+ // oxlint-disable-next-line reform-rules/no-throw -- definition-time invariant; sync lookup has no Effect context (see internal/errors.ts)
24
+ throw new UnknownGroupState({ name });
25
+ }
26
+ const store = Context.GenericTag(`reform/state/${name}`);
27
+ return new StateToken(name, store);
28
+ };
29
+ export function live(group, seeds) {
30
+ const layers = group.members.map((member) => member.capture((state) => Layer.unwrapEffect(state.decodeUnknown(seeds[state.manifest.name]).pipe(Effect.orDie, Effect.map((seed) => stateLive(state, seed))))));
31
+ return layers.reduce((merged, memberLayer) => Layer.merge(merged, memberLayer), Layer.empty);
32
+ }
33
+ //# sourceMappingURL=stateGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateGroup.js","sourceRoot":"","sources":["../../src/state/stateGroup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { Context, Effect, Effectable } from 'effect';
2
+ import type { Store } from '../internal/store.js';
3
+ import type { StateStore } from './state.js';
4
+ export declare class StateToken<N extends string, in out A, Identifier = StateStore<N, A>> extends Effectable.Class<A, never, Identifier> {
5
+ readonly name: N;
6
+ readonly store: Context.Tag<Identifier, Store<A>>;
7
+ constructor(name: N, store: Context.Tag<Identifier, Store<A>>);
8
+ commit(): Effect.Effect<A, never, Identifier>;
9
+ capture<Result>(visit: SourceCapture<Result>): Result;
10
+ }
11
+ export type SourceCapture<Result> = <N extends string, A, Identifier>(source: Source<N, A, Identifier>) => Result;
12
+ export interface AnySource {
13
+ readonly name: string;
14
+ readonly store: {
15
+ readonly key: string;
16
+ };
17
+ }
18
+ export interface Source<N extends string, A, Identifier> extends AnySource {
19
+ readonly name: N;
20
+ readonly store: Context.Tag<Identifier, Store<A>>;
21
+ }
22
+ export type SourceName<S> = S extends {
23
+ readonly manifest: {
24
+ readonly name: infer N extends string;
25
+ };
26
+ } ? N : S extends {
27
+ readonly name: infer N extends string;
28
+ } ? N : never;
29
+ export type SourceValue<S> = S extends {
30
+ readonly store: Context.Tag<infer _Identifier, Store<infer A>>;
31
+ } ? A : never;
32
+ export type SourceIdentifier<S> = S extends {
33
+ readonly store: Context.Tag<infer Identifier, infer _Service>;
34
+ } ? Identifier : never;
35
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/state/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,qBAAa,UAAU,CACrB,CAAC,SAAS,MAAM,EAChB,EAAE,CAAC,GAAG,CAAC,CAAC,EACR,UAAU,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAC7B,SAAQ,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBACrC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAK7D,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;IAG7C,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM;CAGtD;AAED,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,UAAU,EAClE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,KAC7B,MAAM,CAAA;AAEX,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CACzC;AAED,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,UAAU,CAAE,SAAQ,SAAS;IACxE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;CAClD;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS;IACpC,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;KAAE,CAAA;CAC7D,GACG,CAAC,GACD,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GACjD,CAAC,GACD,KAAK,CAAA;AACX,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS;IACrC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CAC/D,GACG,CAAC,GACD,KAAK,CAAA;AACT,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,EAAE,MAAM,QAAQ,CAAC,CAAA;CAC9D,GACG,UAAU,GACV,KAAK,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { Context, Effect, Effectable } from 'effect';
2
+ import { readTracked } from '../internal/track.js';
3
+ export class StateToken extends Effectable.Class {
4
+ name;
5
+ store;
6
+ constructor(name, store) {
7
+ super();
8
+ this.name = name;
9
+ this.store = store;
10
+ }
11
+ commit() {
12
+ return Effect.flatMap(this.store, readTracked);
13
+ }
14
+ capture(visit) {
15
+ return visit(this);
16
+ }
17
+ }
18
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/state/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,MAAM,OAAO,UAIX,SAAQ,UAAU,CAAC,KAA2B;IACrC,IAAI,CAAG;IACP,KAAK,CAAmC;IACjD,YAAY,IAAO,EAAE,KAAwC;QAC3D,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IACD,MAAM;QACJ,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,CAAS,KAA4B;QAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ import { Context, Effect, Layer, Option, type Schema, type Scope } from 'effect';
2
+ import type { Effect as EffectType } from 'effect/Effect';
3
+ import { type Manifest } from '../definition/definition.js';
4
+ import { type Store } from '../internal/store.js';
5
+ import type { AnySource, Source, SourceCapture } from '../state/token.js';
6
+ import type { StateOptions } from '../state/state.js';
7
+ export interface SyncedSource<A> {
8
+ readonly snapshot: () => A;
9
+ readonly subscribe: (onChange: () => void) => () => void;
10
+ }
11
+ export interface SyncedStoreSchemaReflection {
12
+ readonly ast: Schema.Schema<unknown, unknown, unknown>['ast'];
13
+ }
14
+ export interface SyncedStoreManifest<N extends string> extends Manifest {
15
+ readonly kind: 'SyncedStore';
16
+ readonly name: N;
17
+ readonly schema: SyncedStoreSchemaReflection;
18
+ readonly title: Option.Option<string>;
19
+ readonly description: Option.Option<string>;
20
+ }
21
+ export declare const SyncedStoreIdentifierTypeId: unique symbol;
22
+ export type SyncedStoreIdentifierTypeId = typeof SyncedStoreIdentifierTypeId;
23
+ export interface SyncedStoreIdentifier<N extends string, in out A> extends Store<A> {
24
+ readonly [SyncedStoreIdentifierTypeId]: N;
25
+ }
26
+ export interface SyncedStoreClass<N extends string, in out A> extends EffectType<A, never, SyncedStoreIdentifier<N, A>>, Source<N, A, SyncedStoreIdentifier<N, A>> {
27
+ new (): {};
28
+ readonly manifest: SyncedStoreManifest<N>;
29
+ readonly store: Context.Tag<SyncedStoreIdentifier<N, A>, Store<A>>;
30
+ readonly name: N;
31
+ readonly capture: <Result>(visit: SourceCapture<Result>) => Result;
32
+ }
33
+ export interface StoreCarrier<Identifier, A> {
34
+ readonly store: Context.Tag<Identifier, Store<A>>;
35
+ }
36
+ export type AnySyncedStore = AnySource & {
37
+ readonly manifest: Manifest & {
38
+ readonly kind: 'SyncedStore';
39
+ };
40
+ };
41
+ export type SyncedValue<S> = S extends SyncedStoreClass<infer _N, infer A> ? A : never;
42
+ export declare const make: <const N extends string, ValueSchema extends Schema.Schema.AnyNoContext>(name: N, schema: ValueSchema, options?: StateOptions) => SyncedStoreClass<N, Schema.Schema.Type<ValueSchema>>;
43
+ export declare const live: <Identifier, A, R>(def: StoreCarrier<Identifier, A>, acquire: Effect.Effect<SyncedSource<A>, never, R>) => Layer.Layer<Identifier, never, Exclude<R, Scope.Scope>>;
44
+ //# sourceMappingURL=syncedStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncedStore.d.ts","sourceRoot":"","sources":["../../src/synced/syncedStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Context, Effect, Layer, Option } from 'effect';
2
+ import { yieldableClass } from '../definition/definition.js';
3
+ import { resolveScheduler } from '../internal/scheduler.js';
4
+ import { makeDerivedStore } from '../internal/store.js';
5
+ import { readTracked } from '../internal/track.js';
6
+ export const SyncedStoreIdentifierTypeId = Symbol.for('reform/SyncedStoreIdentifier');
7
+ export const make = (name, schema, options = {}) => {
8
+ const store = Context.GenericTag(`reform/syncedStore/${name}`);
9
+ const manifest = {
10
+ kind: 'SyncedStore',
11
+ name,
12
+ schema,
13
+ title: Option.fromNullable(options.title),
14
+ description: Option.fromNullable(options.description),
15
+ };
16
+ const read = Effect.flatMap(store, readTracked);
17
+ const synced = yieldableClass(read, {
18
+ manifest,
19
+ store,
20
+ name,
21
+ capture: (visit) => visit(synced),
22
+ });
23
+ return synced;
24
+ };
25
+ export const live = (def, acquire) => Layer.scoped(def.store, Effect.gen(function* () {
26
+ const scheduler = yield* resolveScheduler;
27
+ const source = yield* acquire;
28
+ const { store, unsubscribe } = makeDerivedStore(source.snapshot, source.subscribe, scheduler);
29
+ yield* Effect.addFinalizer(() => Effect.sync(unsubscribe));
30
+ return store;
31
+ }));
32
+ //# sourceMappingURL=syncedStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncedStore.js","sourceRoot":"","sources":["../../src/synced/syncedStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAA2B,MAAM,QAAQ,CAAA;AAEhF,OAAO,EAAiB,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAc,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAqB/C,MAAM,CAAC,MAAM,2BAA2B,GAAkB,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;AA2BpG,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,IAAO,EACP,MAAmB,EACnB,UAAwB,EAAE,EAC4B,EAAE;IAExD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAC9B,sBAAsB,IAAI,EAAE,CAC7B,CAAA;IACD,MAAM,QAAQ,GAA2B;QACvC,IAAI,EAAE,aAAa;QACnB,IAAI;QACJ,MAAM;QACN,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;QACzC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;KACtD,CAAA;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC/C,MAAM,MAAM,GAA2B,cAAc,CAAC,IAAI,EAAE;QAC1D,QAAQ;QACR,KAAK;QACL,IAAI;QACJ,OAAO,EAAE,CAAS,KAA4B,EAAU,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;KACzE,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,GAAgC,EAChC,OAAiD,EACQ,EAAE,CAC3D,KAAK,CAAC,MAAM,CACV,GAAG,CAAC,KAAK,EACT,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAA;IACzC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAA;IAC7B,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IAC7F,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;IAC1D,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CACH,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { Effect } from 'effect';
2
+ export declare const tick: (ms?: number) => Effect.Effect<void>;
3
+ export declare const flush: (turns?: number) => Effect.Effect<void>;
4
+ export declare const until: <A>(read: () => A, predicate: (value: A) => boolean, rounds?: number) => Effect.Effect<A>;
5
+ export interface FlightGate {
6
+ /** Wrap a query body: it records its entry, then parks while the gate holds. */
7
+ readonly through: <A, E, R>(body: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
8
+ /** Park every flight that reaches the gate from now on. */
9
+ readonly hold: Effect.Effect<void>;
10
+ /** Let the parked flights settle; later flights pass straight through. */
11
+ readonly release: Effect.Effect<void>;
12
+ /** Resolve once `count` flights have reached the gate. */
13
+ readonly awaitEntry: (count: number) => Effect.Effect<void>;
14
+ /** How many flights have reached the gate. */
15
+ readonly entered: () => number;
16
+ }
17
+ export declare const makeFlightGate: () => FlightGate;
18
+ //# sourceMappingURL=flight.testkit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flight.testkit.d.ts","sourceRoot":"","sources":["../../src/testkit/flight.testkit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,EAAsB,MAAM,QAAQ,CAAA;AAUvE,eAAO,MAAM,IAAI,GAAI,WAAO,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAsC,CAAA;AAMvF,eAAO,MAAM,KAAK,GAAI,cAAS,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAGjD,CAAA;AAEH,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,MAAM,MAAM,CAAC,EACb,WAAW,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAChC,eAAY,KACX,MAAM,CAAC,MAAM,CAAC,CAAC,CAMd,CAAA;AAEJ,MAAM,WAAW,UAAU;IACzB,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACnF,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3D,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,MAAM,CAAA;CAC/B;AAED,eAAO,MAAM,cAAc,QAAO,UAqCjC,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { Deferred, Duration, Effect, MutableRef, Option } from 'effect';
2
+ // Coalescing/cancellation semantics are only meaningful while a query is still
3
+ // in flight. Tests used to build that overlap by racing wall-clock — a 25ms
4
+ // query delay against 5ms gaps between input writes — which silently stops
5
+ // overlapping on a loaded machine: the runs serialize, every key gets its own
6
+ // flight, and the assertion fails reporting a coalescing bug that isn't there.
7
+ // A gate makes the overlap explicit: hold the flight open, land the burst,
8
+ // release.
9
+ export const tick = (ms = 10) => Effect.sleep(Duration.millis(ms));
10
+ // The runtime notifies on the microtask queue (scheduler, stateFamily, calcFamily),
11
+ // so draining turns is exact where a duration is a guess: a microtask cannot be
12
+ // starved by host load the way a 10ms budget can. Use this to let the graph
13
+ // quiesce before asserting that something did NOT happen.
14
+ export const flush = (turns = 3) => Effect.promise(() => new Promise((resolve) => queueMicrotask(resolve))).pipe(Effect.repeatN(Math.max(turns - 1, 0)));
15
+ export const until = (read, predicate, rounds = 200) => Effect.suspend(() => {
16
+ const value = read();
17
+ return predicate(value) || rounds <= 0
18
+ ? Effect.succeed(value)
19
+ : Effect.flatMap(tick(10), () => until(read, predicate, rounds - 1));
20
+ });
21
+ export const makeFlightGate = () => {
22
+ const latch = MutableRef.make(Option.none());
23
+ const entered = MutableRef.make(0);
24
+ return {
25
+ through: (body) => body.pipe(Effect.tap(() => Effect.suspend(() => {
26
+ MutableRef.update(entered, (count) => count + 1);
27
+ return Option.match(MutableRef.get(latch), {
28
+ onNone: () => Effect.void,
29
+ onSome: (parked) => Deferred.await(parked),
30
+ });
31
+ }))),
32
+ hold: Effect.flatMap(Deferred.make(), (parked) => Effect.sync(() => MutableRef.set(latch, Option.some(parked)))),
33
+ release: Effect.suspend(() => {
34
+ const parked = MutableRef.get(latch);
35
+ MutableRef.set(latch, Option.none());
36
+ return Option.match(parked, {
37
+ onNone: () => Effect.void,
38
+ onSome: (deferred) => Effect.asVoid(Deferred.succeed(deferred, undefined)),
39
+ });
40
+ }),
41
+ awaitEntry: (count) => Effect.asVoid(until(() => MutableRef.get(entered), (reached) => reached >= count)),
42
+ entered: () => MutableRef.get(entered),
43
+ };
44
+ };
45
+ //# sourceMappingURL=flight.testkit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flight.testkit.js","sourceRoot":"","sources":["../../src/testkit/flight.testkit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ReactNode } from 'react';
2
+ export type Node = ReactNode;
3
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/ui/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,MAAM,IAAI,GAAG,SAAS,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/ui/node.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export type Trigger<P> = (payload: P) => void;
2
+ //# sourceMappingURL=trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/ui/trigger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../src/ui/trigger.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ export type WireProp = {
2
+ readonly _tag: 'Data';
3
+ readonly name: string;
4
+ readonly value: unknown;
5
+ } | {
6
+ readonly _tag: 'Event';
7
+ readonly name: string;
8
+ readonly handle: string;
9
+ };
10
+ export interface WireNodeExternalApi {
11
+ readonly id: string;
12
+ readonly name: string;
13
+ readonly parentId: string | null;
14
+ readonly childIndex: number;
15
+ readonly slot: string | null;
16
+ readonly key: string | null;
17
+ readonly props: ReadonlyArray<WireProp>;
18
+ }
19
+ export type WireNode = WireNodeExternalApi;
20
+ export type WireTree = ReadonlyArray<WireNode>;
21
+ export type WirePatch = {
22
+ readonly _tag: 'Upsert';
23
+ readonly node: WireNode;
24
+ } | {
25
+ readonly _tag: 'Delete';
26
+ readonly id: string;
27
+ };
28
+ export declare const diff: (previous: WireTree, next: WireTree) => ReadonlyArray<WirePatch>;
29
+ export declare const apply: (state: WireTree, patches: ReadonlyArray<WirePatch>) => WireTree;
30
+ export declare const roots: (tree: WireTree) => WireTree;
31
+ export declare const childrenOf: (tree: WireTree, parentId: string) => WireTree;
32
+ //# sourceMappingURL=tree.d.ts.map