@logixjs/core 0.0.1 → 1.0.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 (398) hide show
  1. package/LICENSE +201 -0
  2. package/dist/{Action-mqVvtEHt.d.ts → Action-DYl88bwj.d.ts} +1 -1
  3. package/dist/{Action-BkRHy2vg.d.cts → Action-DkxsI_DK.d.cts} +1 -1
  4. package/dist/Action.cjs.map +1 -1
  5. package/dist/Action.d.cts +1 -1
  6. package/dist/Action.d.ts +1 -1
  7. package/dist/Action.js +2 -2
  8. package/dist/{Actions-AsQ07yTP.d.cts → Actions-Dicm7jdc.d.cts} +2 -2
  9. package/dist/{Actions-AsQ07yTP.d.ts → Actions-Dicm7jdc.d.ts} +2 -2
  10. package/dist/Actions.cjs.map +1 -1
  11. package/dist/Actions.d.cts +1 -1
  12. package/dist/Actions.d.ts +1 -1
  13. package/dist/Actions.js +1 -1
  14. package/dist/{Bound-BN1DQ_lM.d.ts → Bound-1OJLzVIS.d.ts} +2 -2
  15. package/dist/{Bound-BPIfH9SS.d.cts → Bound-BMLrtQ1V.d.cts} +2 -2
  16. package/dist/Bound.cjs +1737 -399
  17. package/dist/Bound.cjs.map +1 -1
  18. package/dist/Bound.d.cts +5 -5
  19. package/dist/Bound.d.ts +5 -5
  20. package/dist/Bound.js +19 -17
  21. package/dist/{Debug-B5q5Bkzx.d.ts → Debug-DKrWP5H1.d.ts} +40 -22
  22. package/dist/{Debug-Bq8Sqjcr.d.cts → Debug-hIT44XsY.d.cts} +40 -22
  23. package/dist/Debug.cjs +1348 -318
  24. package/dist/Debug.cjs.map +1 -1
  25. package/dist/Debug.d.cts +12 -11
  26. package/dist/Debug.d.ts +12 -11
  27. package/dist/Debug.js +20 -11
  28. package/dist/EffectOp.cjs +15 -6
  29. package/dist/EffectOp.cjs.map +1 -1
  30. package/dist/EffectOp.js +3 -3
  31. package/dist/Env.cjs +772 -6
  32. package/dist/Env.cjs.map +1 -1
  33. package/dist/Env.js +5 -2
  34. package/dist/ExternalStore-DqJKKRJ4.d.ts +61 -0
  35. package/dist/ExternalStore-JC-gAgEI.d.cts +61 -0
  36. package/dist/ExternalStore.cjs +774 -0
  37. package/dist/ExternalStore.cjs.map +1 -0
  38. package/dist/ExternalStore.d.cts +8 -0
  39. package/dist/ExternalStore.d.ts +8 -0
  40. package/dist/ExternalStore.js +19 -0
  41. package/dist/ExternalStore.js.map +1 -0
  42. package/dist/{Flow-BhpjE22E.d.ts → Flow-CZmXRDqp.d.cts} +13 -4
  43. package/dist/{Flow-1fZT8MpX.d.cts → Flow-DIVDxz7R.d.ts} +13 -4
  44. package/dist/Flow.cjs +765 -148
  45. package/dist/Flow.cjs.map +1 -1
  46. package/dist/Flow.d.cts +6 -6
  47. package/dist/Flow.d.ts +6 -6
  48. package/dist/Flow.js +9 -8
  49. package/dist/{Handle-D_cLW1Z3.d.ts → Handle-Bo6cAFut.d.ts} +1 -1
  50. package/dist/{Handle-D8D1zPb_.d.cts → Handle-CfDvSqN7.d.cts} +1 -1
  51. package/dist/Handle.d.cts +5 -5
  52. package/dist/Handle.d.ts +5 -5
  53. package/dist/{Kernel-8kC-jOda.d.cts → Kernel-CuXBF9S_.d.cts} +16 -7
  54. package/dist/{Kernel-CnGE1Fyk.d.ts → Kernel-D9guNwRL.d.ts} +16 -7
  55. package/dist/Kernel.cjs +814 -26
  56. package/dist/Kernel.cjs.map +1 -1
  57. package/dist/Kernel.d.cts +13 -12
  58. package/dist/Kernel.d.ts +13 -12
  59. package/dist/Kernel.js +7 -4
  60. package/dist/{Link-Db7975nU.d.ts → Link-CUM0yUCH.d.ts} +10 -3
  61. package/dist/{Link-fX8x1eCK.d.cts → Link-NAfR6uGD.d.cts} +10 -3
  62. package/dist/Link.cjs +1294 -121
  63. package/dist/Link.cjs.map +1 -1
  64. package/dist/Link.d.cts +5 -5
  65. package/dist/Link.d.ts +5 -5
  66. package/dist/Link.js +37 -29
  67. package/dist/{Logic-DRh4sDZj.d.cts → Logic-09VQpIj3.d.cts} +7 -4
  68. package/dist/{Logic-BRjEMr-W.d.ts → Logic-DKg7ghGy.d.ts} +7 -4
  69. package/dist/Logic.cjs +2 -1
  70. package/dist/Logic.cjs.map +1 -1
  71. package/dist/Logic.d.cts +5 -5
  72. package/dist/Logic.d.ts +5 -5
  73. package/dist/Logic.js +1 -1
  74. package/dist/{MatchBuilder-CJk5oCkR.d.cts → MatchBuilder-CsW5jgrL.d.ts} +1 -1
  75. package/dist/{MatchBuilder-0QOc-nlU.d.ts → MatchBuilder-Dksk07F4.d.cts} +1 -1
  76. package/dist/MatchBuilder.cjs +2 -2
  77. package/dist/MatchBuilder.cjs.map +1 -1
  78. package/dist/MatchBuilder.d.cts +6 -6
  79. package/dist/MatchBuilder.d.ts +6 -6
  80. package/dist/MatchBuilder.js +2 -2
  81. package/dist/Middleware-D8tUDLv_.d.cts +100 -0
  82. package/dist/Middleware-DS7CbTTN.d.ts +100 -0
  83. package/dist/Middleware.cjs +678 -58
  84. package/dist/Middleware.cjs.map +1 -1
  85. package/dist/Middleware.d.cts +2 -86
  86. package/dist/Middleware.d.ts +2 -86
  87. package/dist/Middleware.js +15 -12
  88. package/dist/{Module-DnzluX2J.d.ts → Module-B_Cntyms.d.ts} +54 -25
  89. package/dist/{Module-B_0xRDMR.d.cts → Module-CmNOVXzf.d.cts} +54 -25
  90. package/dist/Module.cjs +9331 -3317
  91. package/dist/Module.cjs.map +1 -1
  92. package/dist/Module.d.cts +7 -6
  93. package/dist/Module.d.ts +7 -6
  94. package/dist/Module.js +39 -31
  95. package/dist/ModuleTag-CGho_InD.d.ts +113 -0
  96. package/dist/ModuleTag-CITb8L_G.d.cts +113 -0
  97. package/dist/ModuleTag.cjs +7248 -2847
  98. package/dist/ModuleTag.cjs.map +1 -1
  99. package/dist/ModuleTag.d.cts +6 -6
  100. package/dist/ModuleTag.d.ts +6 -6
  101. package/dist/ModuleTag.js +35 -29
  102. package/dist/Observability-Bdhnx2Dv.d.ts +385 -0
  103. package/dist/Observability-DXGAFBIT.d.cts +385 -0
  104. package/dist/Observability.cjs +5093 -1556
  105. package/dist/Observability.cjs.map +1 -1
  106. package/dist/Observability.d.cts +6 -7
  107. package/dist/Observability.d.ts +6 -7
  108. package/dist/Observability.js +28 -23
  109. package/dist/{Platform-CHX8o-U4.d.ts → Platform-B4s8tg6C.d.cts} +4 -5
  110. package/dist/{Platform-C49Pv956.d.cts → Platform-BV_0MW7g.d.cts} +5 -2
  111. package/dist/{Platform-C49Pv956.d.ts → Platform-BV_0MW7g.d.ts} +5 -2
  112. package/dist/{Platform-CVlv0xLQ.d.cts → Platform-W0Mefy_e.d.ts} +4 -5
  113. package/dist/Platform.cjs +2 -1
  114. package/dist/Platform.cjs.map +1 -1
  115. package/dist/Platform.d.cts +2 -3
  116. package/dist/Platform.d.ts +2 -3
  117. package/dist/Platform.js +2 -2
  118. package/dist/{Process-CM9xbMdP.d.ts → Process-CO8G7HO9.d.cts} +30 -5
  119. package/dist/{Process-mL8fHDSB.d.cts → Process-Cyf6VNDR.d.ts} +30 -5
  120. package/dist/Process.cjs +1288 -120
  121. package/dist/Process.cjs.map +1 -1
  122. package/dist/Process.d.cts +6 -6
  123. package/dist/Process.d.ts +6 -6
  124. package/dist/Process.js +34 -26
  125. package/dist/ReadQuery-C_or5nLC.d.ts +128 -0
  126. package/dist/ReadQuery-DXLzCE0E.d.cts +614 -0
  127. package/dist/ReadQuery-DXLzCE0E.d.ts +614 -0
  128. package/dist/ReadQuery-Yve1lmUo.d.cts +128 -0
  129. package/dist/ReadQuery.cjs +290 -5
  130. package/dist/ReadQuery.cjs.map +1 -1
  131. package/dist/ReadQuery.d.cts +3 -2
  132. package/dist/ReadQuery.d.ts +3 -2
  133. package/dist/ReadQuery.js +23 -5
  134. package/dist/{Reflection-CQnKwPXj.d.ts → Reflection-B2Xi1e4Q.d.ts} +89 -7
  135. package/dist/{Reflection-Kabo1mlU.d.cts → Reflection-DNB4V4_e.d.cts} +89 -7
  136. package/dist/Reflection.cjs +3227 -1617
  137. package/dist/Reflection.cjs.map +1 -1
  138. package/dist/Reflection.d.cts +17 -15
  139. package/dist/Reflection.d.ts +17 -15
  140. package/dist/Reflection.js +33 -25
  141. package/dist/{Resource-Dy1xD_DG.d.cts → Resource-pKvQQ4x5.d.cts} +3 -3
  142. package/dist/{Resource-Dy1xD_DG.d.ts → Resource-pKvQQ4x5.d.ts} +3 -3
  143. package/dist/Resource.cjs +781 -15
  144. package/dist/Resource.cjs.map +1 -1
  145. package/dist/Resource.d.cts +1 -1
  146. package/dist/Resource.d.ts +1 -1
  147. package/dist/Resource.js +6 -3
  148. package/dist/{Root-7ADUMk4t.d.cts → Root-CCVuFHB6.d.cts} +3 -3
  149. package/dist/{Root-7ADUMk4t.d.ts → Root-CCVuFHB6.d.ts} +3 -3
  150. package/dist/Root.cjs +786 -20
  151. package/dist/Root.cjs.map +1 -1
  152. package/dist/Root.d.cts +2 -2
  153. package/dist/Root.d.ts +2 -2
  154. package/dist/Root.js +7 -3
  155. package/dist/{Runtime-CtyzZG4i.d.ts → Runtime-CRmvwK4I.d.ts} +70 -14
  156. package/dist/{Runtime-B-aL-f29.d.cts → Runtime-C_wJM9mN.d.cts} +70 -14
  157. package/dist/Runtime.cjs +4942 -1601
  158. package/dist/Runtime.cjs.map +1 -1
  159. package/dist/Runtime.d.cts +17 -15
  160. package/dist/Runtime.d.ts +17 -15
  161. package/dist/Runtime.js +44 -32
  162. package/dist/{ScopeRegistry-D1owDNSm.d.cts → ScopeRegistry-BhYzqWri.d.cts} +6 -6
  163. package/dist/{ScopeRegistry-D1owDNSm.d.ts → ScopeRegistry-BhYzqWri.d.ts} +6 -6
  164. package/dist/ScopeRegistry.cjs +776 -10
  165. package/dist/ScopeRegistry.cjs.map +1 -1
  166. package/dist/ScopeRegistry.d.cts +1 -1
  167. package/dist/ScopeRegistry.d.ts +1 -1
  168. package/dist/ScopeRegistry.js +6 -3
  169. package/dist/{State-CU50R26M.d.cts → State-rNFsFPTl.d.cts} +2 -2
  170. package/dist/{State-CU50R26M.d.ts → State-rNFsFPTl.d.ts} +2 -2
  171. package/dist/State.cjs.map +1 -1
  172. package/dist/State.d.cts +1 -1
  173. package/dist/State.d.ts +1 -1
  174. package/dist/State.js +1 -1
  175. package/dist/{StateTrait-BGsZghTz.d.ts → StateTrait-CijdwNb6.d.ts} +25 -8
  176. package/dist/{StateTrait-OWhbj12c.d.cts → StateTrait-Dltto6PU.d.cts} +25 -8
  177. package/dist/StateTrait.cjs +1890 -528
  178. package/dist/StateTrait.cjs.map +1 -1
  179. package/dist/StateTrait.d.cts +9 -7
  180. package/dist/StateTrait.d.ts +9 -7
  181. package/dist/StateTrait.js +18 -14
  182. package/dist/{TraitLifecycle-CwV5WPFX.d.cts → TraitLifecycle-BKzDqzLu.d.cts} +2 -2
  183. package/dist/{TraitLifecycle-LdIWmKlg.d.ts → TraitLifecycle-Cvo94uDB.d.ts} +2 -2
  184. package/dist/TraitLifecycle.cjs +630 -67
  185. package/dist/TraitLifecycle.cjs.map +1 -1
  186. package/dist/TraitLifecycle.d.cts +6 -6
  187. package/dist/TraitLifecycle.d.ts +6 -6
  188. package/dist/TraitLifecycle.js +8 -7
  189. package/dist/Workflow-C_OWr4dV.d.ts +415 -0
  190. package/dist/Workflow-DmydkHO8.d.cts +415 -0
  191. package/dist/Workflow.cjs +3150 -0
  192. package/dist/Workflow.cjs.map +1 -0
  193. package/dist/Workflow.d.cts +7 -0
  194. package/dist/Workflow.d.ts +7 -0
  195. package/dist/Workflow.js +58 -0
  196. package/dist/Workflow.js.map +1 -0
  197. package/dist/{action-DiMDD_0v.d.cts → action-BQxjPFEw.d.cts} +5 -5
  198. package/dist/{action-DiMDD_0v.d.ts → action-BQxjPFEw.d.ts} +5 -5
  199. package/dist/chunk-2XRLXDWR.js +276 -0
  200. package/dist/chunk-2XRLXDWR.js.map +1 -0
  201. package/dist/chunk-3L6QGFMM.js +701 -0
  202. package/dist/chunk-3L6QGFMM.js.map +1 -0
  203. package/dist/{chunk-GMPEOUP2.js → chunk-4MZ7BT3R.js} +2 -2
  204. package/dist/chunk-4MZ7BT3R.js.map +1 -0
  205. package/dist/{chunk-3IYZ5IGG.js → chunk-5WKUGEBY.js} +2 -2
  206. package/dist/{chunk-3RMKLXHX.js → chunk-63ZQ5RIN.js} +2 -2
  207. package/dist/{chunk-M3WTHJHJ.js → chunk-67DIEA53.js} +385 -148
  208. package/dist/chunk-67DIEA53.js.map +1 -0
  209. package/dist/{chunk-YS3AZQ2G.js → chunk-6HFAW2MH.js} +1 -1
  210. package/dist/chunk-6HFAW2MH.js.map +1 -0
  211. package/dist/{chunk-EY4NZKDR.js → chunk-6Y2TKCNY.js} +2 -2
  212. package/dist/{chunk-76WT3HOR.js → chunk-6YZOXFPQ.js} +25 -24
  213. package/dist/chunk-6YZOXFPQ.js.map +1 -0
  214. package/dist/{chunk-G5ZBFPNU.js → chunk-A2RQOJC7.js} +2 -2
  215. package/dist/{chunk-AUIR5O6W.js → chunk-AFSB6NKM.js} +13 -19
  216. package/dist/chunk-AFSB6NKM.js.map +1 -0
  217. package/dist/{chunk-JCXGZRMU.js → chunk-AO4JEOKD.js} +22 -23
  218. package/dist/chunk-AO4JEOKD.js.map +1 -0
  219. package/dist/{chunk-TAAPQVZN.js → chunk-AYELIQXR.js} +2 -2
  220. package/dist/{chunk-QMM6O4CD.js → chunk-BLHZW7DG.js} +15 -3
  221. package/dist/{chunk-QMM6O4CD.js.map → chunk-BLHZW7DG.js.map} +1 -1
  222. package/dist/{chunk-TQOBJYDP.js → chunk-CD4N74YC.js} +1 -1
  223. package/dist/chunk-CD4N74YC.js.map +1 -0
  224. package/dist/{chunk-ANLBCBDC.js → chunk-CGE2HBTH.js} +11 -11
  225. package/dist/chunk-CGE2HBTH.js.map +1 -0
  226. package/dist/{chunk-OFADUJWJ.js → chunk-CYYSQMLO.js} +5 -5
  227. package/dist/chunk-CYYSQMLO.js.map +1 -0
  228. package/dist/{chunk-66ALHVEX.js → chunk-EB46EYI7.js} +3 -3
  229. package/dist/{chunk-NZJKFF45.js → chunk-EKCDHWRK.js} +4 -4
  230. package/dist/chunk-EKCDHWRK.js.map +1 -0
  231. package/dist/{chunk-BABLDP24.js → chunk-EPQFNJU3.js} +152 -7
  232. package/dist/chunk-EPQFNJU3.js.map +1 -0
  233. package/dist/{chunk-OGWBVHB3.js → chunk-ESR6HGOY.js} +73 -14
  234. package/dist/chunk-ESR6HGOY.js.map +1 -0
  235. package/dist/{chunk-NBD3KUOZ.js → chunk-F6RP62H3.js} +150 -98
  236. package/dist/chunk-F6RP62H3.js.map +1 -0
  237. package/dist/chunk-FBYW3QDI.js +252 -0
  238. package/dist/chunk-FBYW3QDI.js.map +1 -0
  239. package/dist/{chunk-IPF7E66P.js → chunk-FYAODKVP.js} +2 -2
  240. package/dist/chunk-GNEN7NKO.js +908 -0
  241. package/dist/chunk-GNEN7NKO.js.map +1 -0
  242. package/dist/chunk-GWSM4KLB.js +763 -0
  243. package/dist/chunk-GWSM4KLB.js.map +1 -0
  244. package/dist/{chunk-4SO6JMZL.js → chunk-HDMXCUZL.js} +1 -1
  245. package/dist/chunk-HDMXCUZL.js.map +1 -0
  246. package/dist/{chunk-ZFY7U2FR.js → chunk-HJM5Y5NU.js} +43 -3
  247. package/dist/chunk-HJM5Y5NU.js.map +1 -0
  248. package/dist/{chunk-ZGDVUPTM.js → chunk-IOZ3VKPK.js} +129 -68
  249. package/dist/chunk-IOZ3VKPK.js.map +1 -0
  250. package/dist/{chunk-PYOE4VSI.js → chunk-IVXSVHO4.js} +303 -247
  251. package/dist/chunk-IVXSVHO4.js.map +1 -0
  252. package/dist/chunk-J3CWXIPV.js +242 -0
  253. package/dist/chunk-J3CWXIPV.js.map +1 -0
  254. package/dist/chunk-K6JQW266.js +42 -0
  255. package/dist/chunk-K6JQW266.js.map +1 -0
  256. package/dist/chunk-KMZYQF6Q.js +202 -0
  257. package/dist/chunk-KMZYQF6Q.js.map +1 -0
  258. package/dist/{chunk-JWOYLO27.js → chunk-LPPZDFTD.js} +22 -12
  259. package/dist/chunk-LPPZDFTD.js.map +1 -0
  260. package/dist/{chunk-PAYXCY6A.js → chunk-MYB2B5WX.js} +997 -576
  261. package/dist/chunk-MYB2B5WX.js.map +1 -0
  262. package/dist/chunk-MYKNINNN.js +228 -0
  263. package/dist/chunk-MYKNINNN.js.map +1 -0
  264. package/dist/chunk-NSQIRMVF.js +27 -0
  265. package/dist/{chunk-QCHIQWAJ.js.map → chunk-NSQIRMVF.js.map} +1 -1
  266. package/dist/chunk-NUDBM4MM.js +30 -0
  267. package/dist/chunk-NUDBM4MM.js.map +1 -0
  268. package/dist/chunk-NZMWWDAY.js +23 -0
  269. package/dist/chunk-NZMWWDAY.js.map +1 -0
  270. package/dist/{chunk-RNFE3ML2.js → chunk-OCUV2Y25.js} +4 -3
  271. package/dist/chunk-OCUV2Y25.js.map +1 -0
  272. package/dist/chunk-P4ZJOQA7.js +271 -0
  273. package/dist/chunk-P4ZJOQA7.js.map +1 -0
  274. package/dist/chunk-P6C5EZ3D.js +342 -0
  275. package/dist/chunk-P6C5EZ3D.js.map +1 -0
  276. package/dist/{chunk-CW6T36TN.js → chunk-PBD7BJUN.js} +62 -4
  277. package/dist/chunk-PBD7BJUN.js.map +1 -0
  278. package/dist/chunk-PBIUCQY3.js +696 -0
  279. package/dist/chunk-PBIUCQY3.js.map +1 -0
  280. package/dist/chunk-PD6YECQH.js +845 -0
  281. package/dist/chunk-PD6YECQH.js.map +1 -0
  282. package/dist/{chunk-M7IYCTJV.js → chunk-R4LFQGP3.js} +2 -2
  283. package/dist/chunk-RHJIGDUE.js +21 -0
  284. package/dist/chunk-RHJIGDUE.js.map +1 -0
  285. package/dist/{chunk-KP7MUZNX.js → chunk-RLXO27MW.js} +30 -8
  286. package/dist/chunk-RLXO27MW.js.map +1 -0
  287. package/dist/{chunk-DFNM3WX2.js → chunk-S44BEV4B.js} +168 -45
  288. package/dist/chunk-S44BEV4B.js.map +1 -0
  289. package/dist/chunk-S4S5N4BJ.js +1461 -0
  290. package/dist/chunk-S4S5N4BJ.js.map +1 -0
  291. package/dist/{chunk-BZ2SHDN2.js → chunk-SGTRAXXX.js} +3 -3
  292. package/dist/chunk-SGTRAXXX.js.map +1 -0
  293. package/dist/{chunk-M2RGJPXX.js → chunk-SJAE5PB5.js} +3 -3
  294. package/dist/{chunk-JGIWG6SR.js → chunk-SNPNHU3H.js} +3937 -1776
  295. package/dist/chunk-SNPNHU3H.js.map +1 -0
  296. package/dist/{chunk-IHVBV5C2.js → chunk-SOOBFXRR.js} +94 -71
  297. package/dist/chunk-SOOBFXRR.js.map +1 -0
  298. package/dist/{chunk-ZDTRWK5F.js → chunk-TAHFWKS6.js} +2 -2
  299. package/dist/chunk-UEFFTVPY.js +9 -0
  300. package/dist/chunk-UEFFTVPY.js.map +1 -0
  301. package/dist/{chunk-24VULZ7A.js → chunk-UR5BXLBP.js} +3 -3
  302. package/dist/chunk-UR5BXLBP.js.map +1 -0
  303. package/dist/{chunk-DMBALCE2.js → chunk-V2SBGVDO.js} +471 -186
  304. package/dist/chunk-V2SBGVDO.js.map +1 -0
  305. package/dist/chunk-VJLWD47W.js +23 -0
  306. package/dist/chunk-VJLWD47W.js.map +1 -0
  307. package/dist/{chunk-4CQAV7YB.js → chunk-W647DX5Z.js} +2 -2
  308. package/dist/{chunk-THATMZXD.js → chunk-WFIIU3YZ.js} +2 -2
  309. package/dist/{chunk-THATMZXD.js.map → chunk-WFIIU3YZ.js.map} +1 -1
  310. package/dist/chunk-YZDJMAKL.js +82 -0
  311. package/dist/chunk-YZDJMAKL.js.map +1 -0
  312. package/dist/{chunk-3TMODYZV.js → chunk-Z5XH6VHY.js} +5 -5
  313. package/dist/chunk-Z5XH6VHY.js.map +1 -0
  314. package/dist/{chunk-BE3HW4FY.js → chunk-ZBBMZMA6.js} +377 -170
  315. package/dist/chunk-ZBBMZMA6.js.map +1 -0
  316. package/dist/index.cjs +21224 -11714
  317. package/dist/index.cjs.map +1 -1
  318. package/dist/index.d.cts +195 -49
  319. package/dist/index.d.ts +195 -49
  320. package/dist/index.js +150 -74
  321. package/dist/index.js.map +1 -1
  322. package/dist/{ir-BMP7yxJJ.d.cts → ir-BSosEwc8.d.cts} +1 -1
  323. package/dist/{ir-DUOz6H-5.d.ts → ir-D-uqwL_4.d.ts} +1 -1
  324. package/dist/{module-B8CBqIZ_.d.cts → module-Ds4tarcI.d.cts} +230 -140
  325. package/dist/{module-k7m3txak.d.ts → module-Zd1Gn-Nj.d.ts} +230 -140
  326. package/package.json +20 -4
  327. package/dist/ModuleTag-C8FHY_sY.d.ts +0 -93
  328. package/dist/ModuleTag-EGbgBMpZ.d.cts +0 -93
  329. package/dist/Observability-COqEvp2C.d.cts +0 -713
  330. package/dist/Observability-cY4kLn0S.d.ts +0 -713
  331. package/dist/ReadQuery-BlMwhe-F.d.ts +0 -30
  332. package/dist/ReadQuery-CL5XlXts.d.cts +0 -30
  333. package/dist/ReadQuery-SinbStGF.d.cts +0 -38
  334. package/dist/ReadQuery-SinbStGF.d.ts +0 -38
  335. package/dist/chunk-24VULZ7A.js.map +0 -1
  336. package/dist/chunk-3QMIVH35.js +0 -43
  337. package/dist/chunk-3QMIVH35.js.map +0 -1
  338. package/dist/chunk-3TMODYZV.js.map +0 -1
  339. package/dist/chunk-4SO6JMZL.js.map +0 -1
  340. package/dist/chunk-76WT3HOR.js.map +0 -1
  341. package/dist/chunk-ANLBCBDC.js.map +0 -1
  342. package/dist/chunk-AUIR5O6W.js.map +0 -1
  343. package/dist/chunk-BABLDP24.js.map +0 -1
  344. package/dist/chunk-BE3HW4FY.js.map +0 -1
  345. package/dist/chunk-BZ2SHDN2.js.map +0 -1
  346. package/dist/chunk-CW6T36TN.js.map +0 -1
  347. package/dist/chunk-DFNM3WX2.js.map +0 -1
  348. package/dist/chunk-DMBALCE2.js.map +0 -1
  349. package/dist/chunk-EGK3KN7B.js +0 -406
  350. package/dist/chunk-EGK3KN7B.js.map +0 -1
  351. package/dist/chunk-GMPEOUP2.js.map +0 -1
  352. package/dist/chunk-IHVBV5C2.js.map +0 -1
  353. package/dist/chunk-JCXGZRMU.js.map +0 -1
  354. package/dist/chunk-JGIWG6SR.js.map +0 -1
  355. package/dist/chunk-JWOYLO27.js.map +0 -1
  356. package/dist/chunk-KIXAU3GM.js +0 -137
  357. package/dist/chunk-KIXAU3GM.js.map +0 -1
  358. package/dist/chunk-KL5ACTCT.js +0 -8
  359. package/dist/chunk-KL5ACTCT.js.map +0 -1
  360. package/dist/chunk-KP7MUZNX.js.map +0 -1
  361. package/dist/chunk-M3BFQ7HK.js +0 -13
  362. package/dist/chunk-M3BFQ7HK.js.map +0 -1
  363. package/dist/chunk-M3WTHJHJ.js.map +0 -1
  364. package/dist/chunk-NBD3KUOZ.js.map +0 -1
  365. package/dist/chunk-NQZ2OSGR.js +0 -151
  366. package/dist/chunk-NQZ2OSGR.js.map +0 -1
  367. package/dist/chunk-NZJKFF45.js.map +0 -1
  368. package/dist/chunk-OFADUJWJ.js.map +0 -1
  369. package/dist/chunk-OGWBVHB3.js.map +0 -1
  370. package/dist/chunk-PAYXCY6A.js.map +0 -1
  371. package/dist/chunk-PYOE4VSI.js.map +0 -1
  372. package/dist/chunk-QCHIQWAJ.js +0 -21
  373. package/dist/chunk-RNFE3ML2.js.map +0 -1
  374. package/dist/chunk-TKZ7MEIA.js +0 -27
  375. package/dist/chunk-TKZ7MEIA.js.map +0 -1
  376. package/dist/chunk-TQOBJYDP.js.map +0 -1
  377. package/dist/chunk-VZB726PE.js +0 -93
  378. package/dist/chunk-VZB726PE.js.map +0 -1
  379. package/dist/chunk-W3TEWHLO.js +0 -568
  380. package/dist/chunk-W3TEWHLO.js.map +0 -1
  381. package/dist/chunk-YS3AZQ2G.js.map +0 -1
  382. package/dist/chunk-ZFLHVFUC.js +0 -192
  383. package/dist/chunk-ZFLHVFUC.js.map +0 -1
  384. package/dist/chunk-ZFY7U2FR.js.map +0 -1
  385. package/dist/chunk-ZGDVUPTM.js.map +0 -1
  386. package/dist/protocol-g_1897M2.d.cts +0 -127
  387. package/dist/protocol-g_1897M2.d.ts +0 -127
  388. /package/dist/{chunk-3IYZ5IGG.js.map → chunk-5WKUGEBY.js.map} +0 -0
  389. /package/dist/{chunk-3RMKLXHX.js.map → chunk-63ZQ5RIN.js.map} +0 -0
  390. /package/dist/{chunk-EY4NZKDR.js.map → chunk-6Y2TKCNY.js.map} +0 -0
  391. /package/dist/{chunk-G5ZBFPNU.js.map → chunk-A2RQOJC7.js.map} +0 -0
  392. /package/dist/{chunk-TAAPQVZN.js.map → chunk-AYELIQXR.js.map} +0 -0
  393. /package/dist/{chunk-66ALHVEX.js.map → chunk-EB46EYI7.js.map} +0 -0
  394. /package/dist/{chunk-IPF7E66P.js.map → chunk-FYAODKVP.js.map} +0 -0
  395. /package/dist/{chunk-M7IYCTJV.js.map → chunk-R4LFQGP3.js.map} +0 -0
  396. /package/dist/{chunk-M2RGJPXX.js.map → chunk-SJAE5PB5.js.map} +0 -0
  397. /package/dist/{chunk-ZDTRWK5F.js.map → chunk-TAHFWKS6.js.map} +0 -0
  398. /package/dist/{chunk-4CQAV7YB.js.map → chunk-W647DX5Z.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/runtime/core/runner/ProgramRunner.errors.ts","../src/internal/runtime/AppRuntime.ts","../src/internal/runtime/core/runner/ProgramRunner.closeScope.ts","../src/internal/runtime/core/runner/ProgramRunner.signals.ts","../src/internal/runtime/core/runner/ProgramRunner.kernel.ts"],"sourcesContent":["export type ProgramRunnerErrorTag = 'BootError' | 'MainError' | 'DisposeError' | 'DisposeTimeout'\n\nexport interface ProgramIdentity {\n moduleId: string\n instanceId: string\n}\n\nconst summarizeCause = (cause: unknown): { name?: string; message?: string } => {\n if (cause instanceof Error) {\n return { name: cause.name, message: cause.message }\n }\n return { message: typeof cause === 'string' ? cause : undefined }\n}\n\nabstract class ProgramRunnerErrorBase extends Error {\n abstract readonly _tag: ProgramRunnerErrorTag\n readonly moduleId: string\n readonly instanceId: string\n readonly entrypoint: 'boot' | 'main' | 'dispose'\n readonly hint?: string\n\n protected constructor(params: {\n readonly message: string\n readonly identity: ProgramIdentity\n readonly entrypoint: 'boot' | 'main' | 'dispose'\n readonly hint?: string\n }) {\n super(params.message)\n this.moduleId = params.identity.moduleId\n this.instanceId = params.identity.instanceId\n this.entrypoint = params.entrypoint\n this.hint = params.hint\n }\n\n toJSON(): Record<string, unknown> {\n return {\n _tag: this._tag,\n name: this.name,\n message: this.message,\n moduleId: this.moduleId,\n instanceId: this.instanceId,\n entrypoint: this.entrypoint,\n hint: this.hint,\n }\n }\n}\n\nexport class BootError extends ProgramRunnerErrorBase {\n readonly _tag = 'BootError' as const\n readonly cause?: { name?: string; message?: string }\n\n constructor(identity: ProgramIdentity, cause: unknown) {\n super({\n message: '[Logix] Program boot failed',\n identity,\n entrypoint: 'boot',\n hint: 'Check that options.layer / imports / providers are complete, and that no dependencies are missing during assembly.',\n })\n this.name = 'BootError'\n this.cause = summarizeCause(cause)\n }\n\n override toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), cause: this.cause }\n }\n}\n\nexport class MainError extends ProgramRunnerErrorBase {\n readonly _tag = 'MainError' as const\n readonly cause?: { name?: string; message?: string }\n\n constructor(identity: ProgramIdentity, cause: unknown) {\n super({\n message: '[Logix] Program main failed',\n identity,\n entrypoint: 'main',\n hint: 'Main failed: ensure main handles domain errors explicitly, and check for interruption or missing dependencies.',\n })\n this.name = 'MainError'\n this.cause = summarizeCause(cause)\n }\n\n override toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), cause: this.cause }\n }\n}\n\nexport class DisposeError extends ProgramRunnerErrorBase {\n readonly _tag = 'DisposeError' as const\n readonly cause?: { name?: string; message?: string }\n\n constructor(identity: ProgramIdentity, cause: unknown) {\n super({\n message: '[Logix] Program dispose failed',\n identity,\n entrypoint: 'dispose',\n hint: 'Dispose failed: a finalizer may have thrown, or scope/resource handles may be invalid; check onError/logs.',\n })\n this.name = 'DisposeError'\n this.cause = summarizeCause(cause)\n }\n\n override toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), cause: this.cause }\n }\n}\n\nexport class DisposeTimeoutError extends ProgramRunnerErrorBase {\n readonly _tag = 'DisposeTimeout' as const\n readonly timeoutMs: number\n readonly elapsedMs: number\n readonly suggestions: ReadonlyArray<string>\n\n constructor(identity: ProgramIdentity, params: { readonly timeoutMs: number; readonly elapsedMs: number }) {\n super({\n message: '[Logix] Program dispose timed out',\n identity,\n entrypoint: 'dispose',\n hint: 'Dispose timed out: if the program cannot exit naturally, resources may not be released or background fibers are still running.',\n })\n this.name = 'DisposeTimeoutError'\n this.timeoutMs = params.timeoutMs\n this.elapsedMs = params.elapsedMs\n this.suggestions = [\n 'Check for event listeners that were not unregistered (e.g. process.on / emitter.on).',\n 'Check for fibers that were not joined/interrupt (long-lived watchers / Stream.run*).',\n 'Check for resource handles that were not closed (timer / socket / file handle).',\n ]\n }\n\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n timeoutMs: this.timeoutMs,\n elapsedMs: this.elapsedMs,\n suggestions: this.suggestions,\n }\n }\n}\n","import { Context, Deferred, Effect, Layer, ManagedRuntime } from 'effect'\nimport {\n ConcurrencyPolicyTag,\n ReadQueryStrictGateConfigTag,\n StateTransactionConfigTag,\n type ConcurrencyPolicy,\n type ReadQueryStrictGateRuntimeConfig,\n type StateTransactionRuntimeConfig,\n} from './core/env.js'\nimport { RootContextTag, type RootContext } from './core/RootContext.js'\nimport * as ProcessRuntime from './core/process/ProcessRuntime.js'\nimport type { AnyModuleShape, ModuleTag, ModuleRuntime, StateOf, ActionOf } from './core/module.js'\n\n/**\n * AppModuleEntry: a module entry produced by Logix.provide.\n *\n * - module: the Module definition object (both a Tag and a carrier of shape info + factory capability).\n * - layer: the runtime Layer for the Module.\n */\nexport interface AppModuleEntry {\n readonly module: ModuleTag<any, any>\n readonly layer: Layer.Layer<any, any, any>\n /**\n * Optional: list of Service Tags provided by this module's layer.\n *\n * - Used only during app assembly for tag collision detection and Env topology analysis.\n * - Internally, AppRuntime assembly can declare this explicitly via provideWithTags.\n * - Does not affect runtime behavior; if omitted, the module layer is treated as \"no explicit service tags declared\".\n */\n readonly serviceTags?: ReadonlyArray<Context.Tag<any, any>>\n}\n\nexport interface LogixAppConfig<R> {\n readonly layer: Layer.Layer<R, never, never>\n readonly modules: ReadonlyArray<AppModuleEntry>\n readonly processes: ReadonlyArray<Effect.Effect<void, any, any>>\n readonly onError?: (cause: import('effect').Cause.Cause<unknown>) => Effect.Effect<void>\n /**\n * Runtime-level default StateTransaction config:\n * - If not provided, each ModuleRuntime falls back to NODE_ENV-based default instrumentation.\n * - If instrumentation is provided, it becomes the default instrumentation for modules under this Runtime;\n * individual modules may still override it via ModuleImpl.stateTransaction.\n */\n readonly stateTransaction?: StateTransactionRuntimeConfig\n /**\n * Runtime-level concurrency policy:\n * - If not provided, each entrypoint falls back to builtin defaults (e.g. concurrencyLimit=16).\n * - If provided, it becomes the default policy for modules under this Runtime;\n * individual modules may still override via runtime_module/provider (merged by ModuleRuntime resolver).\n */\n readonly concurrencyPolicy?: ConcurrencyPolicy\n /**\n * ReadQuery strict gate (057):\n * - Used in CI/perf gates to upgrade dynamic fallbacks into failures or warnings.\n * - Not provided by default (preserve usability).\n */\n readonly readQueryStrictGate?: ReadQueryStrictGateRuntimeConfig\n}\n\nexport interface AppDefinition<R> {\n readonly definition: LogixAppConfig<R>\n readonly layer: Layer.Layer<R, never, never>\n readonly makeRuntime: () => ManagedRuntime.ManagedRuntime<R, never>\n}\n\ninterface TagInfo {\n readonly key: string\n readonly tag: Context.Tag<any, any>\n readonly ownerModuleId: string\n readonly source: 'module' | 'service'\n}\n\ninterface TagCollision {\n readonly key: string\n readonly conflicts: ReadonlyArray<TagInfo>\n}\n\ninterface TagCollisionError extends Error {\n readonly _tag: 'TagCollisionError'\n readonly collisions: ReadonlyArray<TagCollision>\n}\n\nconst getTagKey = (tag: Context.Tag<any, any>): string => {\n const anyTag = tag as any\n if (typeof anyTag.key === 'string') {\n return anyTag.key\n }\n if (typeof anyTag._id === 'string') {\n return anyTag._id\n }\n if (typeof anyTag.toString === 'function') {\n return anyTag.toString()\n }\n return '[unknown-tag]'\n}\n\nconst buildTagIndex = (entries: ReadonlyArray<AppModuleEntry>): Map<string, TagInfo[]> => {\n const index = new Map<string, TagInfo[]>()\n\n for (const entry of entries) {\n const ownerId = String(entry.module.id)\n\n // Record the Module tag itself.\n const moduleTag = entry.module as unknown as Context.Tag<any, any>\n const moduleKey = getTagKey(moduleTag)\n const moduleInfo: TagInfo = {\n key: moduleKey,\n tag: moduleTag,\n ownerModuleId: ownerId,\n source: 'module',\n }\n const existingModuleInfos = index.get(moduleKey)\n if (existingModuleInfos) {\n existingModuleInfos.push(moduleInfo)\n } else {\n index.set(moduleKey, [moduleInfo])\n }\n\n // Record explicitly declared service tags (if any).\n if (entry.serviceTags && entry.serviceTags.length > 0) {\n for (const tag of entry.serviceTags) {\n const key = getTagKey(tag)\n const info: TagInfo = {\n key,\n tag,\n ownerModuleId: ownerId,\n source: 'service',\n }\n const existingInfos = index.get(key)\n if (existingInfos) {\n existingInfos.push(info)\n } else {\n index.set(key, [info])\n }\n }\n }\n }\n\n return index\n}\n\nconst validateTags = (entries: ReadonlyArray<AppModuleEntry>): void => {\n const index = buildTagIndex(entries)\n const collisions: TagCollision[] = []\n\n for (const [key, infos] of index) {\n if (infos.length <= 1) {\n continue\n }\n const owners = new Set<string>()\n for (const info of infos) {\n owners.add(info.ownerModuleId)\n }\n // Treat it as a collision only when the same key appears under multiple different modules.\n // Duplicates within a single module are not considered an error (may come from multi-layer composition).\n if (owners.size > 1) {\n collisions.push({ key, conflicts: infos })\n }\n }\n\n if (collisions.length === 0) {\n return\n }\n\n const message =\n '[Logix] Tag collision detected:\\n' +\n collisions\n .map((c) => {\n const header = `- key: ${c.key}`\n const lines = c.conflicts.map((i) => ` - owner: ${i.ownerModuleId}, source: ${i.source}`)\n return [header, ...lines].join('\\n')\n })\n .join('\\n')\n\n const error: TagCollisionError = Object.assign(new Error(message), {\n _tag: 'TagCollisionError' as const,\n collisions,\n })\n\n throw error\n}\n\nexport const makeApp = <R>(config: LogixAppConfig<R>): AppDefinition<R> => {\n const seenIds = new Set<string>()\n for (const entry of config.modules) {\n const id = String(entry.module.id)\n\n if (seenIds.has(id)) {\n throw new Error(\n `[Logix] Duplicate Module ID/Tag detected: \"${id}\". \\nEnsure all modules in the application Runtime have unique IDs.`,\n )\n }\n seenIds.add(id)\n }\n\n // Validate tag collisions before merging layers.\n // This exposes \"the same ServiceTag implemented by multiple modules\" early, avoiding silent Env overrides.\n validateTags(config.modules)\n\n // If the Runtime provides a unified StateTransaction config, attach the corresponding service to the app Env.\n const stateTxnLayer: Layer.Layer<R, never, never> = config.stateTransaction\n ? (Layer.succeed(StateTransactionConfigTag, config.stateTransaction) as Layer.Layer<R, never, never>)\n : (Layer.empty as Layer.Layer<R, never, never>)\n\n // If the Runtime provides a unified ConcurrencyPolicy, attach the corresponding service to the app Env.\n const concurrencyPolicyLayer: Layer.Layer<R, never, never> = config.concurrencyPolicy\n ? (Layer.succeed(ConcurrencyPolicyTag, config.concurrencyPolicy) as Layer.Layer<R, never, never>)\n : (Layer.empty as Layer.Layer<R, never, never>)\n\n // If the Runtime provides a ReadQuery strict gate, attach the corresponding service to the app Env.\n const readQueryStrictGateLayer: Layer.Layer<R, never, never> = config.readQueryStrictGate\n ? (Layer.succeed(ReadQueryStrictGateConfigTag, config.readQueryStrictGate) as Layer.Layer<R, never, never>)\n : (Layer.empty as Layer.Layer<R, never, never>)\n\n const appModuleIds = config.modules.map((entry) => String(entry.module.id))\n const appId = appModuleIds.length === 1 ? appModuleIds[0]! : appModuleIds.slice().sort().join('~')\n\n const baseLayer = Layer.mergeAll(\n config.layer,\n stateTxnLayer,\n concurrencyPolicyLayer,\n readQueryStrictGateLayer,\n ProcessRuntime.layer(),\n Layer.effect(\n RootContextTag,\n Effect.gen(function* () {\n const ready = yield* Deferred.make<Context.Context<any>>()\n return { context: undefined, ready, appId, appModuleIds } satisfies RootContext\n }),\n ),\n ) as Layer.Layer<R, never, never>\n\n const moduleLayers = config.modules.map((entry) =>\n // Ensure each module layer can see the app Env (baseLayer) to avoid missing root env during initialization.\n Layer.provide(entry.layer, baseLayer),\n )\n const envLayer = moduleLayers.length > 0 ? Layer.mergeAll(baseLayer, ...moduleLayers) : baseLayer\n\n const finalLayer = Layer.unwrapScoped(\n Effect.gen(function* () {\n const scope = yield* Effect.scope\n\n // buildWithScope builds envLayer within the current scope and patches FiberRefs (e.g. Debug sinks).\n // We wrap it with diffFiberRefs to capture FiberRef patch changes, then feed the patch back as a Layer,\n // so FiberRef modifications are not \"washed out\" during assembly.\n const [patch, env] = yield* Effect.diffFiberRefs(Layer.buildWithScope(envLayer, scope))\n\n // After envLayer is built, complete RootContext (single source of truth for the root provider).\n // Note: module logics may already be forked and waiting for RootContext in the run phase; completing it here unblocks them.\n // RootContextTag is an internal service injected by AppRuntime (should not leak into external R types);\n // keep types minimal to avoid incorrect generic inference in Context.get.\n const rootContext = Context.get(env as Context.Context<any>, RootContextTag as any) as RootContext\n\n rootContext.context = env as Context.Context<any>\n yield* Deferred.succeed(rootContext.ready, env as Context.Context<any>)\n\n const processRuntime = Context.get(\n env as Context.Context<any>,\n ProcessRuntime.ProcessRuntimeTag as any,\n ) as ProcessRuntime.ProcessRuntime\n\n // After Env is fully ready, start app-level long-lived processes (Process / Link / watchers / host bridges, etc.).\n yield* Effect.forEach(\n config.processes,\n (process) =>\n Effect.gen(function* () {\n const installation = yield* Effect.provide(\n processRuntime.install(process as any, {\n scope: { type: 'app', appId },\n enabled: true,\n installedAt: 'appRuntime',\n }),\n env,\n )\n\n // Legacy fallback: a raw Effect is still allowed as a process host, but it has no Process static surface/diagnostics.\n if (installation === undefined) {\n yield* Effect.forkScoped(\n Effect.provide(config.onError ? Effect.catchAllCause(process, config.onError) : process, env),\n )\n }\n }),\n { discard: true },\n )\n\n const fiberRefsLayer = Layer.scopedDiscard(Effect.patchFiberRefs(patch))\n\n return Layer.mergeAll(Layer.succeedContext(env), fiberRefsLayer)\n }),\n ) as Layer.Layer<R, never, never>\n\n return {\n definition: config,\n layer: finalLayer,\n makeRuntime: () => ManagedRuntime.make(finalLayer),\n }\n}\n\n/**\n * Sugar: pair a Module with a runtime instance or layer for AppRuntime's modules config.\n */\nexport const provide = <Sh extends AnyModuleShape, R, E>(\n module: ModuleTag<any, Sh>,\n resource: Layer.Layer<ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>, E, R> | ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>,\n): AppModuleEntry => {\n const layer = isLayer(resource)\n ? resource\n : Layer.succeed(module, resource as ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>)\n\n return { module, layer }\n}\n\n/**\n * Sugar: attach explicit ServiceTag metadata to an app module entry for tag collision detection.\n *\n * - serviceTags should include only services implemented by this module's layer.\n * - Internal-only helper: `@logixjs/core` blocks `./internal/*` in package exports, so this is not a public API surface.\n */\nexport const provideWithTags = <Sh extends AnyModuleShape, R, E>(\n module: ModuleTag<any, Sh>,\n resource: Layer.Layer<ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>, E, R> | ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>,\n serviceTags: ReadonlyArray<Context.Tag<any, any>>,\n): AppModuleEntry => {\n const base = provide(module, resource)\n return {\n ...base,\n serviceTags,\n }\n}\n\nconst isLayer = (value: unknown): value is Layer.Layer<any, any, any> =>\n typeof value === 'object' && value !== null && Layer.LayerTypeId in value\n","import { Cause, Effect, Exit, Fiber, Option, Scope } from 'effect'\nimport { DisposeError, DisposeTimeoutError, type ProgramIdentity } from './ProgramRunner.errors.js'\n\nexport const closeProgramScope = (params: {\n readonly scope: Scope.CloseableScope\n readonly timeoutMs: number\n readonly identity: ProgramIdentity\n readonly onError?: (cause: Cause.Cause<unknown>) => Effect.Effect<void, never, never>\n}): Effect.Effect<void, never, never> => {\n return Effect.gen(function* () {\n const start = Date.now()\n\n const fiber = yield* Effect.forkDaemon(Scope.close(params.scope, Exit.void))\n\n while (true) {\n const exitOpt = yield* Fiber.poll(fiber)\n if (Option.isSome(exitOpt)) {\n const exit = exitOpt.value\n if (exit._tag === 'Success') {\n return\n }\n return yield* Effect.die(new DisposeError(params.identity, exit.cause))\n }\n\n const elapsedMs = Date.now() - start\n if (elapsedMs >= params.timeoutMs) {\n const error = new DisposeTimeoutError(params.identity, {\n timeoutMs: params.timeoutMs,\n elapsedMs,\n })\n\n if (typeof params.onError === 'function') {\n yield* params.onError(Cause.die(error)).pipe(Effect.catchAllCause(() => Effect.void))\n }\n\n yield* Fiber.interruptFork(fiber)\n return yield* Effect.die(error)\n }\n\n // NOTE: Use a microtask yield (not TestClock-based) to avoid being blocked by TestClock,\n // while keeping the \"successful close\" fast path cheap (perf-critical for tight loops).\n yield* Effect.promise(() => new Promise<void>((r) => queueMicrotask(r)))\n }\n })\n}\n","import { Effect, Exit, Scope } from 'effect'\n\nconst getProcess = (): any => (globalThis as any).process\n\nconst isNodeProcess = (\n value: unknown,\n): value is {\n on: (event: string, handler: () => void) => void\n off?: (event: string, handler: () => void) => void\n removeListener?: (event: string, handler: () => void) => void\n} => typeof value === 'object' && value !== null && typeof (value as any).on === 'function'\n\nconst removeListener = (proc: any, event: string, handler: () => void): void => {\n if (typeof proc.off === 'function') {\n proc.off(event, handler)\n return\n }\n if (typeof proc.removeListener === 'function') {\n proc.removeListener(event, handler)\n }\n}\n\nexport const installGracefulShutdownHandlers = (params: {\n readonly scope: Scope.CloseableScope\n readonly enabled: boolean\n}): Effect.Effect<void> => {\n if (!params.enabled) {\n return Effect.void\n }\n\n const proc = getProcess()\n if (!isNodeProcess(proc)) {\n return Effect.void\n }\n\n const handler = (): void => {\n void Effect.runPromise(Scope.close(params.scope, Exit.void))\n }\n\n return Effect.gen(function* () {\n yield* Scope.addFinalizer(\n params.scope,\n Effect.sync(() => {\n removeListener(proc, 'SIGINT', handler)\n removeListener(proc, 'SIGTERM', handler)\n }),\n )\n\n yield* Effect.sync(() => {\n proc.on('SIGINT', handler)\n proc.on('SIGTERM', handler)\n })\n })\n}\n","import { Effect, Scope } from 'effect'\nimport type { ManagedRuntime } from 'effect'\nimport type { AnyModuleShape, ModuleImpl } from '../module.js'\nimport { make as makeBoundApi } from '../BoundApiRuntime.js'\nimport { closeProgramScope } from './ProgramRunner.closeScope.js'\nimport type { ProgramIdentity } from './ProgramRunner.errors.js'\nimport { installGracefulShutdownHandlers } from './ProgramRunner.signals.js'\nimport type { ProgramRunContext } from './ProgramRunner.context.js'\n\nexport type RuntimeFactory = (\n rootImpl: ModuleImpl<any, AnyModuleShape, any>,\n options?: unknown,\n) => ManagedRuntime.ManagedRuntime<any, never>\n\nexport interface ProgramRunnerKernel<Sh extends AnyModuleShape> {\n readonly scope: Scope.CloseableScope\n readonly runtime: ManagedRuntime.ManagedRuntime<any, never>\n readonly identity: ProgramIdentity\n readonly installSignals: (enabled: boolean) => Effect.Effect<void>\n readonly close: (params: {\n readonly timeoutMs: number\n readonly onError?: (cause: import('effect').Cause.Cause<unknown>) => Effect.Effect<void, never, never>\n }) => Effect.Effect<void, never, never>\n readonly setInstanceId: (value: unknown) => void\n readonly toContext: (moduleRuntime: unknown) => ProgramRunContext<Sh>\n}\n\nexport const makeProgramRunnerKernel = <Sh extends AnyModuleShape>(\n makeRuntime: RuntimeFactory,\n rootImpl: ModuleImpl<any, Sh, any>,\n options?: unknown,\n): Effect.Effect<ProgramRunnerKernel<Sh>> =>\n Effect.gen(function* () {\n const identity: ProgramIdentity = {\n moduleId: String(rootImpl.module.id),\n instanceId: 'unknown',\n }\n\n const scope = yield* Scope.make()\n const runtime = makeRuntime(rootImpl as unknown as ModuleImpl<any, AnyModuleShape, any>, options)\n\n yield* Scope.addFinalizer(scope, Effect.promise(() => runtime.dispose()).pipe(Effect.asVoid))\n\n const setInstanceId = (value: unknown) => {\n identity.instanceId = typeof value === 'string' && value.length > 0 ? value : String(value ?? 'unknown')\n }\n\n const close = (params: {\n readonly timeoutMs: number\n readonly onError?: (cause: import('effect').Cause.Cause<unknown>) => Effect.Effect<void, never, never>\n }) =>\n closeProgramScope({\n scope,\n timeoutMs: params.timeoutMs,\n identity,\n onError: params.onError,\n })\n\n const installSignals = (enabled: boolean) => installGracefulShutdownHandlers({ scope, enabled })\n\n const toContext = (moduleRuntime: unknown) =>\n ({\n scope,\n runtime,\n module: moduleRuntime as any,\n $: makeBoundApi(rootImpl.module.shape as any, moduleRuntime as any) as any,\n }) satisfies ProgramRunContext<Sh>\n\n return {\n scope,\n runtime,\n identity,\n installSignals,\n close,\n setInstanceId,\n toContext,\n }\n })\n"],"mappings":"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","names":["layer","Effect","Effect","Effect","Exit","Scope","Effect","Scope","Effect","Scope"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/digest.ts"],"sourcesContent":["/**\n * internal/digest:\n * - Minimal \"stable digest\" utilities for Runtime / Static IR / Traits, etc.\n * - Goal: stable output across runs/processes while staying lightweight (no extra dependencies).\n *\n * Note: stableStringify does not aim for full JSON equivalence; it only covers the subset needed by this repo:\n * - Stable key ordering (object fields sorted lexicographically).\n * - Non-finite numbers (NaN/±Infinity) degrade to null.\n * - Other non-representable values (undefined/function/symbol, etc.) degrade to null.\n * - undefined inside objects is not omitted; it is encoded as null (differs from JSON.stringify).\n */\n\nexport const stableStringify = (value: unknown): string => {\n if (value === null) return 'null'\n const t = typeof value\n if (t === 'string') return JSON.stringify(value)\n if (t === 'number') return Number.isFinite(value) ? String(value) : 'null'\n if (t === 'boolean') return value ? 'true' : 'false'\n\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`\n }\n\n if (t === 'object') {\n const record = value as Record<string, unknown>\n const keys = Object.keys(record).sort((a, b) => a.localeCompare(b))\n return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(record[k])}`).join(',')}}`\n }\n\n return 'null'\n}\n\n/**\n * fnv1a32:\n * - 32-bit FNV-1a hash (for short digests); outputs fixed 8-char hex.\n */\nexport const fnv1a32 = (input: string): string => {\n let hash = 0x811c9dc5\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i)\n hash = (hash * 0x01000193) >>> 0\n }\n return hash.toString(16).padStart(8, '0')\n}\n"],"mappings":";AAYO,IAAM,kBAAkB,CAAC,UAA2B;AACzD,MAAI,UAAU,KAAM,QAAO;AAC3B,QAAM,IAAI,OAAO;AACjB,MAAI,MAAM,SAAU,QAAO,KAAK,UAAU,KAAK;AAC/C,MAAI,MAAM,SAAU,QAAO,OAAO,SAAS,KAAK,IAAI,OAAO,KAAK,IAAI;AACpE,MAAI,MAAM,UAAW,QAAO,QAAQ,SAAS;AAE7C,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,IAAI,MAAM,IAAI,eAAe,EAAE,KAAK,GAAG,CAAC;AAAA,EACjD;AAEA,MAAI,MAAM,UAAU;AAClB,UAAM,SAAS;AACf,UAAM,OAAO,OAAO,KAAK,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAClE,WAAO,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,KAAK,UAAU,CAAC,CAAC,IAAI,gBAAgB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA,EAC5F;AAEA,SAAO;AACT;AAMO,IAAM,UAAU,CAAC,UAA0B;AAChD,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAQ,MAAM,WAAW,CAAC;AAC1B,WAAQ,OAAO,aAAgB;AAAA,EACjC;AACA,SAAO,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAC1C;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/field-path.ts"],"sourcesContent":["export type FieldPath = ReadonlyArray<string>\nexport type FieldPathId = number\n\nexport type DirtyAllReason = 'unknownWrite' | 'customMutation' | 'nonTrackablePatch' | 'fallbackPolicy'\n\nexport type PatchReason =\n | 'reducer'\n | 'trait-computed'\n | 'trait-link'\n | 'source-refresh'\n | 'devtools'\n | 'perf'\n | 'unknown'\n\nexport const normalizePatchReason = (reason: unknown): PatchReason => {\n switch (reason) {\n case 'reducer':\n case 'trait-computed':\n case 'trait-link':\n case 'source-refresh':\n case 'devtools':\n case 'perf':\n case 'unknown':\n return reason\n default:\n return typeof reason === 'string' && reason.startsWith('source:') ? 'source-refresh' : 'unknown'\n }\n}\n\nexport interface DirtySet {\n readonly dirtyAll: boolean\n /**\n * When dirtyAll=true, a stable reason code must be provided; when dirtyAll=false, it should be omitted.\n */\n readonly reason?: DirtyAllReason\n /**\n * FieldPathId (Static IR table index).\n * - When dirtyAll=true, must be an empty array;\n * - When dirtyAll=false, roots are deduped / prefix-free / stably sorted.\n */\n readonly rootIds: ReadonlyArray<FieldPathId>\n readonly rootCount: number\n readonly keySize: number\n readonly keyHash: number\n /**\n * Optional: mark when the output is TopK-truncated (light/full).\n * Note: truncation does not affect the definition of keyHash/keySize/rootCount (they still refer to full roots).\n */\n readonly rootIdsTruncated?: boolean\n}\n\ninterface FieldPathTrieNode {\n id?: FieldPathId\n children: Map<string, FieldPathTrieNode>\n}\n\nexport interface FieldPathIdRegistry {\n readonly fieldPaths: ReadonlyArray<FieldPath>\n readonly root: FieldPathTrieNode\n /**\n * Fast path: direct lookup for common string inputs (e.g. 'a.b').\n *\n * Note: This map is only safe for \"dot-separated\" paths. If a schema key itself contains '.',\n * it is ambiguous with nested paths and should not rely on string-path APIs.\n */\n readonly pathStringToId?: ReadonlyMap<string, FieldPathId>\n}\n\nexport const isFieldPathSegment = (seg: string): boolean => {\n if (!seg) return false\n if (seg === '*') return false\n if (/^\\d+$/.test(seg)) return false\n if (seg.includes('[') || seg.includes(']')) return false\n return true\n}\n\nexport const normalizeFieldPath = (input: string | FieldPath): FieldPath | undefined => {\n if (typeof input === 'string') {\n const segs = splitSegments(input)\n if (!segs || segs.length === 0) return undefined\n const normalized = segs.filter(isFieldPathSegment)\n return normalized.length > 0 ? normalized : undefined\n }\n\n if (input.length === 0) return undefined\n\n let needsFilter = false\n for (const seg of input) {\n if (!isFieldPathSegment(seg)) {\n needsFilter = true\n break\n }\n }\n\n if (!needsFilter) return input\n\n const normalized = input.filter(isFieldPathSegment)\n return normalized.length > 0 ? normalized : undefined\n}\n\nexport const compareFieldPath = (a: FieldPath, b: FieldPath): number => {\n const len = Math.min(a.length, b.length)\n for (let i = 0; i < len; i++) {\n const as = a[i]!\n const bs = b[i]!\n if (as === bs) continue\n return as < bs ? -1 : 1\n }\n return a.length - b.length\n}\n\nexport const isPrefixOf = (prefix: FieldPath, full: FieldPath): boolean => {\n if (prefix.length > full.length) return false\n for (let i = 0; i < prefix.length; i++) {\n if (prefix[i] !== full[i]) return false\n }\n return true\n}\n\nexport const toKey = (path: FieldPath): string => JSON.stringify(path)\n\nexport const toPathString = (path: FieldPath): string => path.join('.')\n\nexport const canonicalizeRoots = (roots: Iterable<FieldPath>): ReadonlyArray<FieldPath> => {\n const byKey = new Map<string, FieldPath>()\n for (const root of roots) {\n const key = toKey(root)\n if (!byKey.has(key)) byKey.set(key, root)\n }\n\n const sorted = Array.from(byKey.values()).sort(compareFieldPath)\n const out: Array<FieldPath> = []\n for (const next of sorted) {\n const prev = out[out.length - 1]\n if (prev && isPrefixOf(prev, next)) {\n continue\n }\n out.push(next)\n }\n return out\n}\n\nexport const canonicalizeRootsFast = (roots: Iterable<FieldPath>): ReadonlyArray<FieldPath> => {\n const sorted = Array.from(roots).sort(compareFieldPath)\n const out: Array<FieldPath> = []\n for (const next of sorted) {\n const prev = out[out.length - 1]\n if (prev && isPrefixOf(prev, next)) continue\n out.push(next)\n }\n return out\n}\n\nexport const makeFieldPathIdRegistry = (fieldPaths: ReadonlyArray<FieldPath>): FieldPathIdRegistry => {\n const root: FieldPathTrieNode = { children: new Map() }\n const pathStringToId = new Map<string, FieldPathId>()\n const ambiguousPathStrings = new Set<string>()\n\n for (let id = 0; id < fieldPaths.length; id++) {\n const path = fieldPaths[id]!\n let node = root\n for (const seg of path) {\n const children = node.children\n let next = children.get(seg)\n if (!next) {\n next = { children: new Map() }\n children.set(seg, next)\n }\n node = next\n }\n node.id = id\n\n if (path.length > 0 && path.some((seg) => seg.includes('.'))) {\n const key = path.join('.')\n ambiguousPathStrings.add(key)\n pathStringToId.delete(key)\n }\n\n if (path.length > 0 && path.every((seg) => !seg.includes('.') && !seg.includes('[') && !seg.includes(']'))) {\n const key = path.join('.')\n if (ambiguousPathStrings.has(key)) continue\n if (pathStringToId.has(key)) {\n ambiguousPathStrings.add(key)\n pathStringToId.delete(key)\n continue\n }\n pathStringToId.set(key, id)\n }\n }\n\n return { fieldPaths, root, pathStringToId }\n}\n\nexport const getFieldPathId = (registry: FieldPathIdRegistry, path: FieldPath): FieldPathId | undefined => {\n let node = registry.root\n for (const seg of path) {\n const next = node.children.get(seg)\n if (!next) return undefined\n node = next\n }\n return node.id\n}\n\nexport const getFieldPathIdFromString = (registry: FieldPathIdRegistry, path: string): FieldPathId | undefined => {\n if (!path || path === '*') return undefined\n const normalized = normalizeFieldPath(path)\n if (!normalized) return undefined\n return getFieldPathId(registry, normalized)\n}\n\nexport const hashFieldPathIds = (ids: ReadonlyArray<number>): number => {\n // FNV-1a (32-bit)\n let hash = 2166136261 >>> 0\n for (const id of ids) {\n hash ^= id >>> 0\n hash = Math.imul(hash, 16777619)\n }\n return hash >>> 0\n}\n\nexport const dirtyPathsToRootIds = (options: {\n readonly dirtyPaths?: Iterable<string | FieldPath | FieldPathId>\n readonly registry: FieldPathIdRegistry\n readonly dirtyAllReason?: DirtyAllReason\n}): DirtySet => {\n if (options.dirtyAllReason) {\n return {\n dirtyAll: true,\n reason: options.dirtyAllReason,\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n }\n }\n\n let sawStar = false\n let hasInvalid = false\n let missing = false\n\n const ids: Array<number> = []\n for (const raw of options.dirtyPaths ?? []) {\n if (raw === '*') {\n sawStar = true\n continue\n }\n\n if (typeof raw === 'number') {\n if (!Number.isFinite(raw)) {\n hasInvalid = true\n continue\n }\n const id = Math.floor(raw)\n if (id < 0) {\n hasInvalid = true\n continue\n }\n if (!options.registry.fieldPaths[id]) {\n missing = true\n continue\n }\n ids.push(id)\n continue\n }\n\n if (typeof raw === 'string') {\n const direct = options.registry.pathStringToId?.get(raw)\n if (direct != null) {\n ids.push(direct)\n continue\n }\n\n // String path is treated as dot-separated boundary input only.\n // If it cannot be mapped directly, it is considered ambiguous/unmappable.\n missing = true\n continue\n }\n\n const normalized = normalizeFieldPath(raw)\n if (!normalized) {\n hasInvalid = true\n continue\n }\n\n const id = getFieldPathId(options.registry, normalized)\n if (id == null) {\n missing = true\n continue\n }\n ids.push(id)\n }\n\n if (hasInvalid) {\n return {\n dirtyAll: true,\n reason: 'nonTrackablePatch',\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n }\n }\n\n if (missing) {\n return {\n dirtyAll: true,\n reason: 'fallbackPolicy',\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n }\n }\n\n // Any non-trackable write must explicitly degrade (do not \"ignore *\" when roots exist).\n if (sawStar) {\n return {\n dirtyAll: true,\n reason: 'unknownWrite',\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n }\n }\n\n const fieldPathsById = options.registry.fieldPaths\n ids.sort((a, b) => {\n const ap = fieldPathsById[a]\n const bp = fieldPathsById[b]\n if (!ap || !bp) return a - b\n const cmp = compareFieldPath(ap, bp)\n return cmp !== 0 ? cmp : a - b\n })\n\n const rootIds: Array<number> = []\n let prev: FieldPath | undefined\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i]!\n const path = fieldPathsById[id]\n if (!path) continue\n if (prev && isPrefixOf(prev, path)) continue\n rootIds.push(id)\n prev = path\n }\n\n const hasSpecific = rootIds.length > 0\n\n if (!hasSpecific) {\n return {\n dirtyAll: true,\n reason: 'unknownWrite',\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n }\n }\n\n rootIds.sort((a, b) => a - b)\n\n const keyHash = hashFieldPathIds(rootIds)\n return {\n dirtyAll: false,\n rootIds,\n rootCount: rootIds.length,\n keySize: rootIds.length,\n keyHash,\n }\n}\n\nconst splitSegments = (path: string): Array<string> | undefined => {\n if (!path) return undefined\n if (path === '*') return undefined\n\n const parts = path.split('.').filter((p) => p.length > 0)\n const segs: Array<string> = []\n\n for (const part of parts) {\n if (!part) continue\n if (part === '*') {\n return undefined\n }\n if (part.endsWith('[]')) {\n const base = part.slice(0, -2)\n if (base) segs.push(base)\n continue\n }\n const bracket = /^(.+)\\[(\\d+)\\]$/.exec(part)\n if (bracket) {\n segs.push(bracket[1]!)\n continue\n }\n if (/^\\d+$/.test(part)) {\n continue\n }\n if (part.includes('[') || part.includes(']')) {\n return undefined\n }\n segs.push(part)\n }\n\n return segs\n}\n"],"mappings":";AAcO,IAAM,uBAAuB,CAAC,WAAiC;AACpE,UAAQ,QAAQ;AAAA,IACd,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO,OAAO,WAAW,YAAY,OAAO,WAAW,SAAS,IAAI,mBAAmB;AAAA,EAC3F;AACF;AAyCO,IAAM,qBAAqB,CAAC,QAAyB;AAC1D,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI,QAAQ,IAAK,QAAO;AACxB,MAAI,QAAQ,KAAK,GAAG,EAAG,QAAO;AAC9B,MAAI,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,GAAG,EAAG,QAAO;AACnD,SAAO;AACT;AAEO,IAAM,qBAAqB,CAAC,UAAqD;AACtF,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,OAAO,cAAc,KAAK;AAChC,QAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO;AACvC,UAAMA,cAAa,KAAK,OAAO,kBAAkB;AACjD,WAAOA,YAAW,SAAS,IAAIA,cAAa;AAAA,EAC9C;AAEA,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,MAAI,cAAc;AAClB,aAAW,OAAO,OAAO;AACvB,QAAI,CAAC,mBAAmB,GAAG,GAAG;AAC5B,oBAAc;AACd;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,YAAa,QAAO;AAEzB,QAAM,aAAa,MAAM,OAAO,kBAAkB;AAClD,SAAO,WAAW,SAAS,IAAI,aAAa;AAC9C;AAEO,IAAM,mBAAmB,CAAC,GAAc,MAAyB;AACtE,QAAM,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM;AACvC,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAM,KAAK,EAAE,CAAC;AACd,UAAM,KAAK,EAAE,CAAC;AACd,QAAI,OAAO,GAAI;AACf,WAAO,KAAK,KAAK,KAAK;AAAA,EACxB;AACA,SAAO,EAAE,SAAS,EAAE;AACtB;AAEO,IAAM,aAAa,CAAC,QAAmB,SAA6B;AACzE,MAAI,OAAO,SAAS,KAAK,OAAQ,QAAO;AACxC,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,QAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAG,QAAO;AAAA,EACpC;AACA,SAAO;AACT;AAoCO,IAAM,0BAA0B,CAAC,eAA8D;AACpG,QAAM,OAA0B,EAAE,UAAU,oBAAI,IAAI,EAAE;AACtD,QAAM,iBAAiB,oBAAI,IAAyB;AACpD,QAAM,uBAAuB,oBAAI,IAAY;AAE7C,WAAS,KAAK,GAAG,KAAK,WAAW,QAAQ,MAAM;AAC7C,UAAM,OAAO,WAAW,EAAE;AAC1B,QAAI,OAAO;AACX,eAAW,OAAO,MAAM;AACtB,YAAM,WAAW,KAAK;AACtB,UAAI,OAAO,SAAS,IAAI,GAAG;AAC3B,UAAI,CAAC,MAAM;AACT,eAAO,EAAE,UAAU,oBAAI,IAAI,EAAE;AAC7B,iBAAS,IAAI,KAAK,IAAI;AAAA,MACxB;AACA,aAAO;AAAA,IACT;AACA,SAAK,KAAK;AAEV,QAAI,KAAK,SAAS,KAAK,KAAK,KAAK,CAAC,QAAQ,IAAI,SAAS,GAAG,CAAC,GAAG;AAC5D,YAAM,MAAM,KAAK,KAAK,GAAG;AACzB,2BAAqB,IAAI,GAAG;AAC5B,qBAAe,OAAO,GAAG;AAAA,IAC3B;AAEA,QAAI,KAAK,SAAS,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,GAAG;AAC1G,YAAM,MAAM,KAAK,KAAK,GAAG;AACzB,UAAI,qBAAqB,IAAI,GAAG,EAAG;AACnC,UAAI,eAAe,IAAI,GAAG,GAAG;AAC3B,6BAAqB,IAAI,GAAG;AAC5B,uBAAe,OAAO,GAAG;AACzB;AAAA,MACF;AACA,qBAAe,IAAI,KAAK,EAAE;AAAA,IAC5B;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,MAAM,eAAe;AAC5C;AAEO,IAAM,iBAAiB,CAAC,UAA+B,SAA6C;AACzG,MAAI,OAAO,SAAS;AACpB,aAAW,OAAO,MAAM;AACtB,UAAM,OAAO,KAAK,SAAS,IAAI,GAAG;AAClC,QAAI,CAAC,KAAM,QAAO;AAClB,WAAO;AAAA,EACT;AACA,SAAO,KAAK;AACd;AASO,IAAM,mBAAmB,CAAC,QAAuC;AAEtE,MAAI,OAAO,eAAe;AAC1B,aAAW,MAAM,KAAK;AACpB,YAAQ,OAAO;AACf,WAAO,KAAK,KAAK,MAAM,QAAQ;AAAA,EACjC;AACA,SAAO,SAAS;AAClB;AAEO,IAAM,sBAAsB,CAAC,YAIpB;AACd,MAAI,QAAQ,gBAAgB;AAC1B,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ,QAAQ;AAAA,MAChB,SAAS,CAAC;AAAA,MACV,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EACF;AAEA,MAAI,UAAU;AACd,MAAI,aAAa;AACjB,MAAI,UAAU;AAEd,QAAM,MAAqB,CAAC;AAC5B,aAAW,OAAO,QAAQ,cAAc,CAAC,GAAG;AAC1C,QAAI,QAAQ,KAAK;AACf,gBAAU;AACV;AAAA,IACF;AAEA,QAAI,OAAO,QAAQ,UAAU;AAC3B,UAAI,CAAC,OAAO,SAAS,GAAG,GAAG;AACzB,qBAAa;AACb;AAAA,MACF;AACA,YAAMC,MAAK,KAAK,MAAM,GAAG;AACzB,UAAIA,MAAK,GAAG;AACV,qBAAa;AACb;AAAA,MACF;AACA,UAAI,CAAC,QAAQ,SAAS,WAAWA,GAAE,GAAG;AACpC,kBAAU;AACV;AAAA,MACF;AACA,UAAI,KAAKA,GAAE;AACX;AAAA,IACF;AAEA,QAAI,OAAO,QAAQ,UAAU;AAC3B,YAAM,SAAS,QAAQ,SAAS,gBAAgB,IAAI,GAAG;AACvD,UAAI,UAAU,MAAM;AAClB,YAAI,KAAK,MAAM;AACf;AAAA,MACF;AAIA,gBAAU;AACV;AAAA,IACF;AAEA,UAAM,aAAa,mBAAmB,GAAG;AACzC,QAAI,CAAC,YAAY;AACf,mBAAa;AACb;AAAA,IACF;AAEA,UAAM,KAAK,eAAe,QAAQ,UAAU,UAAU;AACtD,QAAI,MAAM,MAAM;AACd,gBAAU;AACV;AAAA,IACF;AACA,QAAI,KAAK,EAAE;AAAA,EACb;AAEA,MAAI,YAAY;AACd,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EACF;AAEA,MAAI,SAAS;AACX,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EACF;AAGA,MAAI,SAAS;AACX,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EACF;AAEA,QAAM,iBAAiB,QAAQ,SAAS;AACxC,MAAI,KAAK,CAAC,GAAG,MAAM;AACjB,UAAM,KAAK,eAAe,CAAC;AAC3B,UAAM,KAAK,eAAe,CAAC;AAC3B,QAAI,CAAC,MAAM,CAAC,GAAI,QAAO,IAAI;AAC3B,UAAM,MAAM,iBAAiB,IAAI,EAAE;AACnC,WAAO,QAAQ,IAAI,MAAM,IAAI;AAAA,EAC/B,CAAC;AAED,QAAM,UAAyB,CAAC;AAChC,MAAI;AACJ,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,KAAK,IAAI,CAAC;AAChB,UAAM,OAAO,eAAe,EAAE;AAC9B,QAAI,CAAC,KAAM;AACX,QAAI,QAAQ,WAAW,MAAM,IAAI,EAAG;AACpC,YAAQ,KAAK,EAAE;AACf,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,QAAQ,SAAS;AAErC,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EACF;AAEA,UAAQ,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAE5B,QAAM,UAAU,iBAAiB,OAAO;AACxC,SAAO;AAAA,IACL,UAAU;AAAA,IACV;AAAA,IACA,WAAW,QAAQ;AAAA,IACnB,SAAS,QAAQ;AAAA,IACjB;AAAA,EACF;AACF;AAEA,IAAM,gBAAgB,CAAC,SAA4C;AACjE,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,SAAS,IAAK,QAAO;AAEzB,QAAM,QAAQ,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AACxD,QAAM,OAAsB,CAAC;AAE7B,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,KAAM;AACX,QAAI,SAAS,KAAK;AAChB,aAAO;AAAA,IACT;AACA,QAAI,KAAK,SAAS,IAAI,GAAG;AACvB,YAAM,OAAO,KAAK,MAAM,GAAG,EAAE;AAC7B,UAAI,KAAM,MAAK,KAAK,IAAI;AACxB;AAAA,IACF;AACA,UAAM,UAAU,kBAAkB,KAAK,IAAI;AAC3C,QAAI,SAAS;AACX,WAAK,KAAK,QAAQ,CAAC,CAAE;AACrB;AAAA,IACF;AACA,QAAI,QAAQ,KAAK,IAAI,GAAG;AACtB;AAAA,IACF;AACA,QAAI,KAAK,SAAS,GAAG,KAAK,KAAK,SAAS,GAAG,GAAG;AAC5C,aAAO;AAAA,IACT;AACA,SAAK,KAAK,IAAI;AAAA,EAChB;AAEA,SAAO;AACT;","names":["normalized","id"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/runtime/ModuleFactory.ts"],"sourcesContent":["import { Context, Effect, Layer, Option, Schema } from 'effect'\nimport * as ModuleRuntimeImpl from './ModuleRuntime.js'\nimport * as BoundApiRuntime from './BoundApiRuntime.js'\nimport * as LogicDiagnostics from './core/LogicDiagnostics.js'\nimport * as LogicPlanMarker from './core/LogicPlanMarker.js'\nimport type * as Action from '../action.js'\nimport type { FieldPath } from '../field-path.js'\nimport type {\n AnyModuleShape,\n AnySchema,\n ActionsFromMap,\n ModuleTag as LogixModuleTag,\n ModuleShape,\n ReducersFromMap,\n StateOf,\n ActionOf,\n ModuleHandle,\n ModuleLogic,\n ModuleImpl,\n ModuleImplementStateTransactionOptions,\n} from './core/module.js'\n\n/**\n * v3: Link (formerly Orchestrator)\n * A glue layer for cross-module collaboration.\n *\n * - Does not own its own State.\n * - Can access multiple Modules' readonly handles.\n * - Can define Logic only; cannot define State/Action.\n */\nexport function Link<Modules extends Record<string, LogixModuleTag<any, AnyModuleShape>>, E = never, R = never>(\n modules: Modules,\n logic: ($: { [K in keyof Modules]: ModuleHandle<Modules[K]['shape']> }) => Effect.Effect<void, E, R>,\n): Effect.Effect<void, E, R> {\n return Effect.gen(function* () {\n const handles: Record<string, ModuleHandle<AnyModuleShape>> = {}\n\n for (const [key, module] of Object.entries(modules)) {\n const runtime = yield* module\n\n handles[key] = {\n read: (selector: any) => Effect.map(runtime.getState, selector),\n changes: runtime.changes,\n dispatch: runtime.dispatch,\n actions$: runtime.actions$,\n actions: new Proxy(\n {},\n {\n get: (_target, prop) => (payload: any) => runtime.dispatch({ _tag: prop as string, payload }),\n },\n ),\n }\n }\n\n return yield* logic(\n handles as {\n [K in keyof Modules]: ModuleHandle<Modules[K]['shape']>\n },\n )\n })\n}\n\n/**\n * Module factory implementation: construct a ModuleTag from an id and Schema definitions.\n */\nexport function Module<Id extends string, SSchema extends AnySchema, AMap extends Record<string, Action.AnyActionToken>>(\n id: Id,\n def: {\n readonly state: SSchema\n readonly actions: AMap\n readonly reducers?: ReducersFromMap<SSchema, AMap>\n },\n): LogixModuleTag<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>> {\n const shape: ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap> = {\n stateSchema: def.state,\n actionSchema: Schema.Union(\n ...Object.entries(def.actions).map(([tag, token]) => {\n const payload = (token as Action.AnyActionToken).schema as AnySchema\n return Schema.Struct(\n payload === Schema.Void\n ? {\n _tag: Schema.Literal(tag),\n payload: Schema.optional(payload),\n }\n : {\n _tag: Schema.Literal(tag),\n payload,\n },\n )\n }),\n ) as unknown as Schema.Schema<ActionsFromMap<AMap>>,\n actionMap: def.actions,\n }\n\n type ShapeState = StateOf<typeof shape>\n type ShapeAction = ActionOf<typeof shape>\n\n // Normalize tag-keyed reducers into `_tag -> (state, action, sink?) => state` for the runtime.\n const reducers =\n def.reducers &&\n (Object.fromEntries(\n Object.entries(def.reducers).map(([tag, reducer]) => [\n tag,\n (state: ShapeState, action: ShapeAction, sink?: (path: string | FieldPath) => void) =>\n // Relies on the runtime `_tag` convention: only actions matching the current tag are routed to this reducer.\n (reducer as any)(\n state,\n action as {\n readonly _tag: string\n readonly payload: unknown\n },\n sink,\n ) as ShapeState,\n ]),\n ) as Record<\n string,\n (state: ShapeState, action: ShapeAction, sink?: (path: string | FieldPath) => void) => ShapeState\n >)\n\n class ModuleTag extends Context.Tag(`@logixjs/Module/${id}`)<\n ModuleTag,\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>\n >() {}\n\n const tag = ModuleTag\n\n const moduleTag = Object.assign(tag, {\n _kind: 'ModuleTag' as const,\n id,\n shape,\n stateSchema: shape.stateSchema,\n actionSchema: shape.actionSchema,\n actions: shape.actionMap,\n reducers: def.reducers,\n /**\n * Build a Logic program for the current Module:\n * - Read its ModuleRuntime from Context at runtime.\n * - Build a BoundApi from the runtime.\n * - Pass the BoundApi to the caller to build business logic.\n */\n logic: <R = unknown, E = never>(\n build: (api: import('./core/module.js').BoundApi<typeof shape, R>) => ModuleLogic<typeof shape, R, E>,\n ): ModuleLogic<typeof shape, R, E> => {\n const logicEffect = Effect.gen(function* () {\n const runtime = yield* tag\n const logicUnit = yield* Effect.serviceOption(LogicDiagnostics.LogicUnitServiceTag).pipe(\n Effect.map(Option.getOrUndefined),\n )\n const phaseService = yield* Effect.serviceOption(LogicDiagnostics.LogicPhaseServiceTag).pipe(\n Effect.map(Option.getOrUndefined),\n )\n const api = BoundApiRuntime.make<typeof shape, R>(shape, runtime, {\n getPhase: () => phaseService?.current ?? 'run',\n phaseService,\n moduleId: id,\n logicUnit,\n })\n\n let built: unknown\n try {\n built = build(api)\n } catch (err) {\n // Convert synchronously thrown LogicPhaseError into Effect.fail so runSync won't treat it as an \"async pending fiber\".\n if ((err as any)?._tag === 'LogicPhaseError') {\n return yield* Effect.fail(err as any)\n }\n throw err\n }\n\n if (LogicPlanMarker.isLogicPlanEffect(built)) {\n return yield* built as Effect.Effect<any, any, any>\n }\n\n const isLogicPlan = (value: unknown): value is import('./core/module.js').LogicPlan<typeof shape, R, E> =>\n Boolean(value && typeof value === 'object' && 'setup' in (value as any) && 'run' in (value as any))\n\n const plan = isLogicPlan(built)\n ? built\n : ({\n setup: Effect.void,\n run: built as Effect.Effect<any, any, any>,\n } satisfies import('./core/module.js').LogicPlan<typeof shape, R, E>)\n\n return plan\n })\n\n LogicPlanMarker.markAsLogicPlanEffect(logicEffect)\n return logicEffect\n },\n\n /**\n * live: given an initial state and a set of logics, construct a scoped ModuleRuntime Layer.\n *\n * Env conventions:\n * - R represents extra environment required by the logics (services / platform, etc.).\n * - ModuleRuntime itself only depends on Scope.Scope and is managed by Layer.scoped.\n */\n live: <R = never, E = never>(\n initial: StateOf<typeof shape>,\n ...logics: Array<ModuleLogic<typeof shape, R, E>>\n ): Layer.Layer<import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>, E, R> =>\n Layer.scoped(\n tag,\n ModuleRuntimeImpl.make<StateOf<typeof shape>, ActionOf<typeof shape>, R>(initial, {\n tag,\n logics: logics as ReadonlyArray<Effect.Effect<any, any, any>>,\n moduleId: id,\n reducers,\n }),\n ) as unknown as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n E,\n R\n >,\n\n /**\n * implement: build a ModuleImpl blueprint from Module definition + initial state + a set of logics.\n *\n * - R represents the Env required by the logics.\n * - The returned ModuleImpl.layer carries R as its input environment.\n * - withLayer/withLayers can progressively narrow R to a more concrete Env (even never).\n */\n implement: <R = never>(config: {\n initial: StateOf<typeof shape>\n logics?: Array<ModuleLogic<typeof shape, R, never>>\n imports?: ReadonlyArray<Layer.Layer<any, any, any> | ModuleImpl<any, AnyModuleShape, any>>\n /**\n * processes: a set of long-lived flows bound to this Module implementation (including Link).\n *\n * - These Effects will be forked by the runtime container (e.g. Runtime.make).\n * - Types use relaxed E/R to enable composing cross-module orchestration logic.\n * - Business code typically builds these flows via Link.make.\n */\n processes?: ReadonlyArray<Effect.Effect<void, any, any>>\n /**\n * stateTransaction: module-level StateTransaction config.\n *\n * - If instrumentation is not provided, fall back to Runtime-level config (if any) or NODE_ENV defaults.\n * - If instrumentation is provided, it takes precedence over Runtime-level config and defaults.\n */\n stateTransaction?: ModuleImplementStateTransactionOptions\n }): ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, R> => {\n const importedModules = (config.imports ?? []).flatMap((item) => {\n if ((item as ModuleImpl<any, AnyModuleShape, any>)._tag === 'ModuleImpl') {\n return [\n (item as ModuleImpl<any, AnyModuleShape, any>).module as unknown as Context.Tag<\n any,\n import('./core/module.js').ModuleRuntime<any, any>\n >,\n ]\n }\n return []\n })\n\n const baseLayer = Layer.scoped(\n tag,\n ModuleRuntimeImpl.make<StateOf<typeof shape>, ActionOf<typeof shape>, R>(config.initial, {\n tag,\n logics: (config.logics || []) as ReadonlyArray<Effect.Effect<any, any, any>>,\n processes: (config.processes || []) as ReadonlyArray<Effect.Effect<void, any, any>>,\n moduleId: id,\n imports: importedModules,\n reducers,\n stateTransaction: config.stateTransaction,\n }),\n ) as unknown as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >\n\n const processes = config.processes ?? []\n\n const makeImplWithLayer = (\n layer: Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >,\n ): ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, any> => ({\n _tag: 'ModuleImpl',\n module: moduleTag as unknown as LogixModuleTag<\n Id,\n ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>\n >,\n layer,\n processes,\n stateTransaction: config.stateTransaction,\n withLayer: (\n extra: Layer.Layer<any, never, any>,\n ): ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, any> => {\n const provided = (\n layer as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >\n ).pipe(Layer.provide(extra as Layer.Layer<any, never, any>))\n\n const merged = Layer.mergeAll(provided, extra as Layer.Layer<any, never, any>) as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >\n\n return makeImplWithLayer(merged)\n },\n withLayers: (\n ...extras: ReadonlyArray<Layer.Layer<any, never, any>>\n ): ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, any> =>\n extras.reduce<ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, any>>(\n (implAcc, extra) => implAcc.withLayer(extra),\n makeImplWithLayer(\n layer as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >,\n ),\n ),\n })\n\n // Start from baseLayer and layer-in imports (Layer or other ModuleImpl.layer) sequentially.\n const initialImpl = makeImplWithLayer(\n baseLayer as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >,\n )\n\n const imports = config.imports ?? []\n\n const finalImpl = imports.reduce<\n ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, any>\n >((implAcc, item) => {\n const layer =\n (item as ModuleImpl<any, AnyModuleShape, any>)._tag === 'ModuleImpl'\n ? (item as ModuleImpl<any, AnyModuleShape, any>).layer\n : (item as Layer.Layer<any, any, any>)\n\n return implAcc.withLayer(layer as Layer.Layer<any, never, any>)\n }, initialImpl)\n\n return finalImpl\n },\n })\n\n return moduleTag as LogixModuleTag<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>>\n}\n"],"mappings":"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","names":["tag","make"]}