@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
@@ -2,20 +2,20 @@ import {
2
2
  isLogicPlanEffect,
3
3
  make as make2,
4
4
  markAsLogicPlanEffect
5
- } from "./chunk-JGIWG6SR.js";
5
+ } from "./chunk-SNPNHU3H.js";
6
6
  import {
7
7
  LogicPhaseServiceTag,
8
8
  LogicUnitServiceTag,
9
9
  make
10
- } from "./chunk-BE3HW4FY.js";
10
+ } from "./chunk-ZBBMZMA6.js";
11
11
 
12
12
  // src/internal/runtime/ModuleFactory.ts
13
- import { Context, Effect, Layer, Option, Schema } from "effect";
13
+ import { Effect, Layer, Option, Schema, ServiceMap } from "effect";
14
14
  function Link(modules, logic) {
15
15
  return Effect.gen(function* () {
16
16
  const handles = {};
17
17
  for (const [key, module] of Object.entries(modules)) {
18
- const runtime = yield* module;
18
+ const runtime = yield* Effect.service(module).pipe(Effect.orDie);
19
19
  handles[key] = {
20
20
  read: (selector) => Effect.map(runtime.getState, selector),
21
21
  changes: runtime.changes,
@@ -35,22 +35,21 @@ function Link(modules, logic) {
35
35
  });
36
36
  }
37
37
  function Module(id, def) {
38
+ const actionMembers = Object.entries(def.actions).map(([tag2, token]) => {
39
+ const payload = token.schema;
40
+ return Schema.Struct(
41
+ payload === Schema.Void ? {
42
+ _tag: Schema.Literal(tag2),
43
+ payload: Schema.optional(payload)
44
+ } : {
45
+ _tag: Schema.Literal(tag2),
46
+ payload
47
+ }
48
+ );
49
+ });
38
50
  const shape = {
39
51
  stateSchema: def.state,
40
- actionSchema: Schema.Union(
41
- ...Object.entries(def.actions).map(([tag2, token]) => {
42
- const payload = token.schema;
43
- return Schema.Struct(
44
- payload === Schema.Void ? {
45
- _tag: Schema.Literal(tag2),
46
- payload: Schema.optional(payload)
47
- } : {
48
- _tag: Schema.Literal(tag2),
49
- payload
50
- }
51
- );
52
- })
53
- ),
52
+ actionSchema: Schema.Union(actionMembers),
54
53
  actionMap: def.actions
55
54
  };
56
55
  const reducers = def.reducers && Object.fromEntries(
@@ -66,7 +65,7 @@ function Module(id, def) {
66
65
  )
67
66
  ])
68
67
  );
69
- class ModuleTag extends Context.Tag(`@logixjs/Module/${id}`)() {
68
+ class ModuleTag extends ServiceMap.Service()(`@logixjs/Module/${id}`) {
70
69
  }
71
70
  const tag = ModuleTag;
72
71
  const moduleTag = Object.assign(tag, {
@@ -85,7 +84,7 @@ function Module(id, def) {
85
84
  */
86
85
  logic: (build) => {
87
86
  const logicEffect = Effect.gen(function* () {
88
- const runtime = yield* tag;
87
+ const runtime = yield* Effect.service(tag).pipe(Effect.orDie);
89
88
  const logicUnit = yield* Effect.serviceOption(LogicUnitServiceTag).pipe(
90
89
  Effect.map(Option.getOrUndefined)
91
90
  );
@@ -127,7 +126,7 @@ function Module(id, def) {
127
126
  * - R represents extra environment required by the logics (services / platform, etc.).
128
127
  * - ModuleRuntime itself only depends on Scope.Scope and is managed by Layer.scoped.
129
128
  */
130
- live: (initial, ...logics) => Layer.scoped(
129
+ live: (initial, ...logics) => Layer.effect(
131
130
  tag,
132
131
  make2(initial, {
133
132
  tag,
@@ -152,7 +151,7 @@ function Module(id, def) {
152
151
  }
153
152
  return [];
154
153
  });
155
- const baseLayer = Layer.scoped(
154
+ const baseLayer = Layer.effect(
156
155
  tag,
157
156
  make2(config.initial, {
158
157
  tag,
@@ -201,4 +200,4 @@ export {
201
200
  Link,
202
201
  Module
203
202
  };
204
- //# sourceMappingURL=chunk-JCXGZRMU.js.map
203
+ //# sourceMappingURL=chunk-AO4JEOKD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/runtime/ModuleFactory.ts"],"sourcesContent":["import { Effect, Layer, Option, Schema, ServiceMap } 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* Effect.service(module).pipe(Effect.orDie)\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 actionMembers = 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 }) as [AnySchema, ...AnySchema[]]\n\n const shape: ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap> = {\n stateSchema: def.state as any,\n actionSchema: Schema.Union(actionMembers) as unknown as Schema.Schema<ActionsFromMap<AMap>>,\n actionMap: def.actions as any,\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 ServiceMap.Service<\n ModuleTag,\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>\n >()(`@logixjs/Module/${id}`) {}\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* Effect.service(tag).pipe(Effect.orDie)\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.effect(\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 ServiceMap.Key<\n any,\n import('./core/module.js').ModuleRuntime<any, any>\n >,\n ]\n }\n return []\n })\n\n const baseLayer = Layer.effect(\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"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getNodeEnv,
3
3
  isDevEnv
4
- } from "./chunk-3QMIVH35.js";
4
+ } from "./chunk-S4S5N4BJ.js";
5
5
  import {
6
6
  __export
7
7
  } from "./chunk-PZ5AY32C.js";
@@ -20,4 +20,4 @@ export {
20
20
  isDevEnv2 as isDevEnv,
21
21
  Env_exports
22
22
  };
23
- //# sourceMappingURL=chunk-TAAPQVZN.js.map
23
+ //# sourceMappingURL=chunk-AYELIQXR.js.map
@@ -1,8 +1,19 @@
1
1
  import {
2
2
  record
3
- } from "./chunk-W3TEWHLO.js";
3
+ } from "./chunk-GNEN7NKO.js";
4
+ import {
5
+ __export
6
+ } from "./chunk-PZ5AY32C.js";
4
7
 
5
8
  // src/Middleware.ts
9
+ var Middleware_exports = {};
10
+ __export(Middleware_exports, {
11
+ applyDebug: () => applyDebug,
12
+ applyDebugObserver: () => applyDebugObserver,
13
+ makeDebugLogger: () => makeDebugLogger,
14
+ makeDebugObserver: () => makeDebugObserver,
15
+ withDebug: () => withDebug
16
+ });
6
17
  import { Effect } from "effect";
7
18
  var makeDebugLogger = (config) => (op) => Effect.gen(function* () {
8
19
  if (op.meta?.policy?.disableObservers) {
@@ -66,6 +77,7 @@ export {
66
77
  applyDebug,
67
78
  makeDebugObserver,
68
79
  applyDebugObserver,
69
- withDebug
80
+ withDebug,
81
+ Middleware_exports
70
82
  };
71
- //# sourceMappingURL=chunk-QMM6O4CD.js.map
83
+ //# sourceMappingURL=chunk-BLHZW7DG.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Middleware.ts"],"sourcesContent":["// Middleware namespace entry (@logixjs/core/Middleware).\n// - Helpers for EffectOp-based debugging/observation middleware.\n// - Query / DebugObserver capabilities extend from this namespace.\n\nimport { Effect } from 'effect'\nimport * as EffectOp from './EffectOp.js'\nimport * as Debug from './Debug.js'\n\nexport type Middleware = EffectOp.Middleware\nexport type MiddlewareStack = EffectOp.MiddlewareStack\n\nexport interface DebugLoggerConfig {\n /**\n * Optional: custom logger function (useful for capturing calls in tests).\n *\n * - When omitted, defaults to Effect.logDebug.\n */\n readonly logger?: (op: EffectOp.EffectOp<any, any, any>) => void\n}\n\n/**\n * Creates a simple debug logger middleware.\n *\n * - Logs once before executing the Effect.\n * - Does not change success/error semantics.\n */\nexport const makeDebugLogger =\n (config?: DebugLoggerConfig): Middleware =>\n <A, E, R>(op: EffectOp.EffectOp<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.gen(function* () {\n // Observation-only capability: can be locally disabled by policy.\n if (op.meta?.policy?.disableObservers) {\n return yield* op.effect\n }\n if (config?.logger) {\n config.logger(op)\n } else {\n yield* Effect.logDebug(`[EffectOp] kind=${op.kind} name=${op.name}`)\n }\n return yield* op.effect\n })\n\n/**\n * applyDebug:\n * - Appends a DebugLogger middleware to the end of an existing MiddlewareStack.\n * - Returns a new stack; does not mutate the input array.\n */\nexport const applyDebug = (stack: MiddlewareStack, config?: DebugLoggerConfig): MiddlewareStack => [\n ...stack,\n makeDebugLogger(config),\n]\n\n/**\n * DebugObserverConfig:\n * - Optional filter: select which EffectOps to observe (by module / kind / name, etc.).\n */\nexport interface DebugObserverConfig {\n readonly filter?: (op: EffectOp.EffectOp<any, any, any>) => boolean\n}\n\n/**\n * makeDebugObserver:\n * - Funnels EffectOp events into DebugSink (EffectOp → Debug.Event).\n * - Uses `trace:*` events to forward a slim view of EffectOp into the Debug stream (must not carry effect closures):\n * - type: 'trace:effectop'\n * - moduleId: from op.meta?.moduleId (when present)\n * - data: { id, kind, name, payload, meta }\n *\n * Notes:\n * - Does not change the underlying Effect behavior; only adds Debug-side observation.\n * - Devtools / Timeline UIs can rebuild an EffectOp timeline from `trace:effectop` events.\n */\nexport const makeDebugObserver =\n (config?: DebugObserverConfig): Middleware =>\n <A, E, R>(op: EffectOp.EffectOp<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.gen(function* () {\n // Observation-only capability: can be locally disabled by policy.\n if (op.meta?.policy?.disableObservers) {\n return yield* op.effect\n }\n if (!config?.filter || config.filter(op)) {\n const meta: any = op.meta ?? {}\n const slimOp = {\n id: op.id,\n kind: op.kind,\n name: op.name,\n payload: op.payload,\n meta: op.meta,\n }\n yield* Debug.record({\n type: 'trace:effectop',\n moduleId: typeof meta.moduleId === 'string' ? meta.moduleId : undefined,\n instanceId: typeof meta.instanceId === 'string' ? meta.instanceId : undefined,\n runtimeLabel: typeof meta.runtimeLabel === 'string' ? meta.runtimeLabel : undefined,\n txnSeq: typeof meta.txnSeq === 'number' && Number.isFinite(meta.txnSeq) ? Math.floor(meta.txnSeq) : undefined,\n data: slimOp,\n })\n }\n return yield* op.effect\n })\n\n/**\n * applyDebugObserver:\n * - Appends a DebugObserver middleware to the end of an existing MiddlewareStack.\n * - Returns a new stack; does not mutate the input array.\n */\nexport const applyDebugObserver = (stack: MiddlewareStack, config?: DebugObserverConfig): MiddlewareStack => [\n ...stack,\n makeDebugObserver(config),\n]\n\n/**\n * WithDebugOptions:\n * - High-level composition options for adding Debug capabilities onto an existing MiddlewareStack.\n *\n * Conventions:\n * - logger:\n * - undefined: enable the default DebugLogger (Effect.logDebug).\n * - function: use a custom logger(op) instead of the default.\n * - false: do not add DebugLogger middleware.\n * - observer:\n * - undefined: enable DebugObserver with default config.\n * - DebugObserverConfig: enable DebugObserver with the given config.\n * - false: do not add DebugObserver middleware.\n */\nexport interface WithDebugOptions {\n readonly logger?: DebugLoggerConfig['logger'] | false\n readonly observer?: DebugObserverConfig | false\n}\n\n/**\n * withDebug:\n * - Appends DebugLogger + DebugObserver presets onto an existing MiddlewareStack.\n * - Allows enabling/disabling logger/observer and configuring them via options.\n * - Returns a new stack; does not mutate the input array.\n *\n * @example\n *\n * let stack: MiddlewareStack = [metrics, timing]\n * stack = Middleware.withDebug(stack, {\n * logger: (op) => console.log(op.kind, op.name),\n * observer: { filter: (op) => op.kind !== 'service' },\n * })\n */\nexport const withDebug = (stack: MiddlewareStack, options?: WithDebugOptions): MiddlewareStack => {\n let next = stack\n\n // DebugLogger: enabled by default unless logger === false.\n if (options?.logger !== false) {\n const loggerConfig: DebugLoggerConfig | undefined =\n typeof options?.logger === 'function' ? { logger: options.logger } : undefined\n next = applyDebug(next, loggerConfig)\n }\n\n // DebugObserver: enabled by default unless observer === false.\n if (options?.observer !== false) {\n // observer === false has been filtered out; pass through the config object when provided.\n // undefined means using DebugObserver default behavior.\n const observerOption = options?.observer\n const observerConfig: DebugObserverConfig | undefined = observerOption === undefined ? undefined : observerOption\n next = applyDebugObserver(next, observerConfig)\n }\n\n return next\n}\n"],"mappings":";;;;;AAIA,SAAS,cAAc;AAsBhB,IAAM,kBACX,CAAC,WACD,CAAU,OACR,OAAO,IAAI,aAAa;AAEtB,MAAI,GAAG,MAAM,QAAQ,kBAAkB;AACrC,WAAO,OAAO,GAAG;AAAA,EACnB;AACA,MAAI,QAAQ,QAAQ;AAClB,WAAO,OAAO,EAAE;AAAA,EAClB,OAAO;AACL,WAAO,OAAO,SAAS,mBAAmB,GAAG,IAAI,SAAS,GAAG,IAAI,EAAE;AAAA,EACrE;AACA,SAAO,OAAO,GAAG;AACnB,CAAC;AAOE,IAAM,aAAa,CAAC,OAAwB,WAAgD;AAAA,EACjG,GAAG;AAAA,EACH,gBAAgB,MAAM;AACxB;AAsBO,IAAM,oBACX,CAAC,WACD,CAAU,OACR,OAAO,IAAI,aAAa;AAEtB,MAAI,GAAG,MAAM,QAAQ,kBAAkB;AACrC,WAAO,OAAO,GAAG;AAAA,EACnB;AACA,MAAI,CAAC,QAAQ,UAAU,OAAO,OAAO,EAAE,GAAG;AACxC,UAAM,OAAY,GAAG,QAAQ,CAAC;AAC9B,UAAM,SAAS;AAAA,MACb,IAAI,GAAG;AAAA,MACP,MAAM,GAAG;AAAA,MACT,MAAM,GAAG;AAAA,MACT,SAAS,GAAG;AAAA,MACZ,MAAM,GAAG;AAAA,IACX;AACA,WAAa,OAAO;AAAA,MAClB,MAAM;AAAA,MACN,UAAU,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AAAA,MAC9D,YAAY,OAAO,KAAK,eAAe,WAAW,KAAK,aAAa;AAAA,MACpE,cAAc,OAAO,KAAK,iBAAiB,WAAW,KAAK,eAAe;AAAA,MAC1E,QAAQ,OAAO,KAAK,WAAW,YAAY,OAAO,SAAS,KAAK,MAAM,IAAI,KAAK,MAAM,KAAK,MAAM,IAAI;AAAA,MACpG,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AACA,SAAO,OAAO,GAAG;AACnB,CAAC;AAOE,IAAM,qBAAqB,CAAC,OAAwB,WAAkD;AAAA,EAC3G,GAAG;AAAA,EACH,kBAAkB,MAAM;AAC1B;AAmCO,IAAM,YAAY,CAAC,OAAwB,YAAgD;AAChG,MAAI,OAAO;AAGX,MAAI,SAAS,WAAW,OAAO;AAC7B,UAAM,eACJ,OAAO,SAAS,WAAW,aAAa,EAAE,QAAQ,QAAQ,OAAO,IAAI;AACvE,WAAO,WAAW,MAAM,YAAY;AAAA,EACtC;AAGA,MAAI,SAAS,aAAa,OAAO;AAG/B,UAAM,iBAAiB,SAAS;AAChC,UAAM,iBAAkD,mBAAmB,SAAY,SAAY;AACnG,WAAO,mBAAmB,MAAM,cAAc;AAAA,EAChD;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/Middleware.ts"],"sourcesContent":["// Middleware namespace entry (@logixjs/core/Middleware).\n// - Helpers for EffectOp-based debugging/observation middleware.\n// - Query / DebugObserver capabilities extend from this namespace.\n\nimport { Effect } from 'effect'\nimport * as EffectOp from './EffectOp.js'\nimport * as Debug from './Debug.js'\n\nexport type Middleware = EffectOp.Middleware\nexport type MiddlewareStack = EffectOp.MiddlewareStack\n\nexport interface DebugLoggerConfig {\n /**\n * Optional: custom logger function (useful for capturing calls in tests).\n *\n * - When omitted, defaults to Effect.logDebug.\n */\n readonly logger?: (op: EffectOp.EffectOp<any, any, any>) => void\n}\n\n/**\n * Creates a simple debug logger middleware.\n *\n * - Logs once before executing the Effect.\n * - Does not change success/error semantics.\n */\nexport const makeDebugLogger =\n (config?: DebugLoggerConfig): Middleware =>\n <A, E, R>(op: EffectOp.EffectOp<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.gen(function* () {\n // Observation-only capability: can be locally disabled by policy.\n if (op.meta?.policy?.disableObservers) {\n return yield* op.effect\n }\n if (config?.logger) {\n config.logger(op)\n } else {\n yield* Effect.logDebug(`[EffectOp] kind=${op.kind} name=${op.name}`)\n }\n return yield* op.effect\n })\n\n/**\n * applyDebug:\n * - Appends a DebugLogger middleware to the end of an existing MiddlewareStack.\n * - Returns a new stack; does not mutate the input array.\n */\nexport const applyDebug = (stack: MiddlewareStack, config?: DebugLoggerConfig): MiddlewareStack => [\n ...stack,\n makeDebugLogger(config),\n]\n\n/**\n * DebugObserverConfig:\n * - Optional filter: select which EffectOps to observe (by module / kind / name, etc.).\n */\nexport interface DebugObserverConfig {\n readonly filter?: (op: EffectOp.EffectOp<any, any, any>) => boolean\n}\n\n/**\n * makeDebugObserver:\n * - Funnels EffectOp events into DebugSink (EffectOp → Debug.Event).\n * - Uses `trace:*` events to forward a slim view of EffectOp into the Debug stream (must not carry effect closures):\n * - type: 'trace:effectop'\n * - moduleId: from op.meta?.moduleId (when present)\n * - data: { id, kind, name, payload, meta }\n *\n * Notes:\n * - Does not change the underlying Effect behavior; only adds Debug-side observation.\n * - Devtools / Timeline UIs can rebuild an EffectOp timeline from `trace:effectop` events.\n */\nexport const makeDebugObserver =\n (config?: DebugObserverConfig): Middleware =>\n <A, E, R>(op: EffectOp.EffectOp<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.gen(function* () {\n // Observation-only capability: can be locally disabled by policy.\n if (op.meta?.policy?.disableObservers) {\n return yield* op.effect\n }\n if (!config?.filter || config.filter(op)) {\n const meta: any = op.meta ?? {}\n const slimOp = {\n id: op.id,\n kind: op.kind,\n name: op.name,\n payload: op.payload,\n meta: op.meta,\n }\n yield* Debug.record({\n type: 'trace:effectop',\n moduleId: typeof meta.moduleId === 'string' ? meta.moduleId : undefined,\n instanceId: typeof meta.instanceId === 'string' ? meta.instanceId : undefined,\n runtimeLabel: typeof meta.runtimeLabel === 'string' ? meta.runtimeLabel : undefined,\n txnSeq: typeof meta.txnSeq === 'number' && Number.isFinite(meta.txnSeq) ? Math.floor(meta.txnSeq) : undefined,\n data: slimOp,\n })\n }\n return yield* op.effect\n })\n\n/**\n * applyDebugObserver:\n * - Appends a DebugObserver middleware to the end of an existing MiddlewareStack.\n * - Returns a new stack; does not mutate the input array.\n */\nexport const applyDebugObserver = (stack: MiddlewareStack, config?: DebugObserverConfig): MiddlewareStack => [\n ...stack,\n makeDebugObserver(config),\n]\n\n/**\n * WithDebugOptions:\n * - High-level composition options for adding Debug capabilities onto an existing MiddlewareStack.\n *\n * Conventions:\n * - logger:\n * - undefined: enable the default DebugLogger (Effect.logDebug).\n * - function: use a custom logger(op) instead of the default.\n * - false: do not add DebugLogger middleware.\n * - observer:\n * - undefined: enable DebugObserver with default config.\n * - DebugObserverConfig: enable DebugObserver with the given config.\n * - false: do not add DebugObserver middleware.\n */\nexport interface WithDebugOptions {\n readonly logger?: DebugLoggerConfig['logger'] | false\n readonly observer?: DebugObserverConfig | false\n}\n\n/**\n * withDebug:\n * - Appends DebugLogger + DebugObserver presets onto an existing MiddlewareStack.\n * - Allows enabling/disabling logger/observer and configuring them via options.\n * - Returns a new stack; does not mutate the input array.\n *\n * @example\n *\n * let stack: MiddlewareStack = [metrics, timing]\n * stack = Middleware.withDebug(stack, {\n * logger: (op) => console.log(op.kind, op.name),\n * observer: { filter: (op) => op.kind !== 'service' },\n * })\n */\nexport const withDebug = (stack: MiddlewareStack, options?: WithDebugOptions): MiddlewareStack => {\n let next = stack\n\n // DebugLogger: enabled by default unless logger === false.\n if (options?.logger !== false) {\n const loggerConfig: DebugLoggerConfig | undefined =\n typeof options?.logger === 'function' ? { logger: options.logger } : undefined\n next = applyDebug(next, loggerConfig)\n }\n\n // DebugObserver: enabled by default unless observer === false.\n if (options?.observer !== false) {\n // observer === false has been filtered out; pass through the config object when provided.\n // undefined means using DebugObserver default behavior.\n const observerOption = options?.observer\n const observerConfig: DebugObserverConfig | undefined = observerOption === undefined ? undefined : observerOption\n next = applyDebugObserver(next, observerConfig)\n }\n\n return next\n}\n"],"mappings":";;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,SAAS,cAAc;AAsBhB,IAAM,kBACX,CAAC,WACD,CAAU,OACR,OAAO,IAAI,aAAa;AAEtB,MAAI,GAAG,MAAM,QAAQ,kBAAkB;AACrC,WAAO,OAAO,GAAG;AAAA,EACnB;AACA,MAAI,QAAQ,QAAQ;AAClB,WAAO,OAAO,EAAE;AAAA,EAClB,OAAO;AACL,WAAO,OAAO,SAAS,mBAAmB,GAAG,IAAI,SAAS,GAAG,IAAI,EAAE;AAAA,EACrE;AACA,SAAO,OAAO,GAAG;AACnB,CAAC;AAOE,IAAM,aAAa,CAAC,OAAwB,WAAgD;AAAA,EACjG,GAAG;AAAA,EACH,gBAAgB,MAAM;AACxB;AAsBO,IAAM,oBACX,CAAC,WACD,CAAU,OACR,OAAO,IAAI,aAAa;AAEtB,MAAI,GAAG,MAAM,QAAQ,kBAAkB;AACrC,WAAO,OAAO,GAAG;AAAA,EACnB;AACA,MAAI,CAAC,QAAQ,UAAU,OAAO,OAAO,EAAE,GAAG;AACxC,UAAM,OAAY,GAAG,QAAQ,CAAC;AAC9B,UAAM,SAAS;AAAA,MACb,IAAI,GAAG;AAAA,MACP,MAAM,GAAG;AAAA,MACT,MAAM,GAAG;AAAA,MACT,SAAS,GAAG;AAAA,MACZ,MAAM,GAAG;AAAA,IACX;AACA,WAAa,OAAO;AAAA,MAClB,MAAM;AAAA,MACN,UAAU,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AAAA,MAC9D,YAAY,OAAO,KAAK,eAAe,WAAW,KAAK,aAAa;AAAA,MACpE,cAAc,OAAO,KAAK,iBAAiB,WAAW,KAAK,eAAe;AAAA,MAC1E,QAAQ,OAAO,KAAK,WAAW,YAAY,OAAO,SAAS,KAAK,MAAM,IAAI,KAAK,MAAM,KAAK,MAAM,IAAI;AAAA,MACpG,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AACA,SAAO,OAAO,GAAG;AACnB,CAAC;AAOE,IAAM,qBAAqB,CAAC,OAAwB,WAAkD;AAAA,EAC3G,GAAG;AAAA,EACH,kBAAkB,MAAM;AAC1B;AAmCO,IAAM,YAAY,CAAC,OAAwB,YAAgD;AAChG,MAAI,OAAO;AAGX,MAAI,SAAS,WAAW,OAAO;AAC7B,UAAM,eACJ,OAAO,SAAS,WAAW,aAAa,EAAE,QAAQ,QAAQ,OAAO,IAAI;AACvE,WAAO,WAAW,MAAM,YAAY;AAAA,EACtC;AAGA,MAAI,SAAS,aAAa,OAAO;AAG/B,UAAM,iBAAiB,SAAS;AAChC,UAAM,iBAAkD,mBAAmB,SAAY,SAAY;AACnG,WAAO,mBAAmB,MAAM,cAAc;AAAA,EAChD;AAEA,SAAO;AACT;","names":[]}
@@ -4,4 +4,4 @@ var State_exports = {};
4
4
  export {
5
5
  State_exports
6
6
  };
7
- //# sourceMappingURL=chunk-TQOBJYDP.js.map
7
+ //# sourceMappingURL=chunk-CD4N74YC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/State.ts"],"sourcesContent":["import type { Layer as EffectLayer, ServiceMap } from 'effect'\n\n/**\n * State namespace (module-level):\n * - Provides State.Tag<S>: marks a state type in Env.\n * - Provides State.Layer<S>: builds a Layer that only carries State.Tag<S>.\n *\n * Type-level only; no additional runtime dependency.\n */\nexport type Tag<S> = ServiceMap.Key<any, S>\nexport type Layer<S> = EffectLayer.Layer<Tag<S>, never, never>\n"],"mappings":";AAAA;","names":[]}
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  ReplayLog,
3
3
  unsetAtPathMutating
4
- } from "./chunk-BABLDP24.js";
5
- import {
6
- inSyncTransactionFiber
7
- } from "./chunk-ZFLHVFUC.js";
4
+ } from "./chunk-EPQFNJU3.js";
8
5
  import {
9
6
  getBoundInternals,
10
7
  getModuleTraitsProgram
11
- } from "./chunk-3RMKLXHX.js";
8
+ } from "./chunk-63ZQ5RIN.js";
9
+ import {
10
+ inSyncTransactionFiber
11
+ } from "./chunk-S4S5N4BJ.js";
12
12
  import {
13
13
  __export
14
14
  } from "./chunk-PZ5AY32C.js";
@@ -25,7 +25,7 @@ __export(TraitLifecycle_exports, {
25
25
  });
26
26
 
27
27
  // src/internal/trait-lifecycle/index.ts
28
- import { Effect, FiberRef, Option } from "effect";
28
+ import { Effect, Option } from "effect";
29
29
  var Ref = {
30
30
  field: (path) => ({ kind: "field", path }),
31
31
  list: (path, listIndexPath) => ({
@@ -119,7 +119,7 @@ var scopedValidate = (bound, request) => Effect.gen(function* () {
119
119
  mode: request.mode,
120
120
  target: toTarget(request.target)
121
121
  };
122
- const inTxn = yield* FiberRef.get(inSyncTransactionFiber);
122
+ const inTxn = yield* Effect.service(inSyncTransactionFiber).pipe(Effect.orDie);
123
123
  if (inTxn) {
124
124
  enqueue(internal);
125
125
  return;
@@ -130,7 +130,7 @@ var scopedValidate = (bound, request) => Effect.gen(function* () {
130
130
  enqueue(internal);
131
131
  })
132
132
  );
133
- });
133
+ }).pipe(Effect.catchCause(() => Effect.void));
134
134
  var scopedExecute = (bound, request) => Effect.gen(function* () {
135
135
  if (request.kind === "source:refresh") {
136
136
  const toFieldPath = (ref) => {
@@ -199,7 +199,7 @@ var cleanup = (bound, request) => Effect.gen(function* () {
199
199
  return;
200
200
  }
201
201
  });
202
- const inTxn = yield* FiberRef.get(inSyncTransactionFiber);
202
+ const inTxn = yield* Effect.service(inSyncTransactionFiber).pipe(Effect.orDie);
203
203
  if (inTxn) {
204
204
  return yield* apply();
205
205
  }
@@ -214,7 +214,7 @@ var cleanup = (bound, request) => Effect.gen(function* () {
214
214
  return yield* apply();
215
215
  }
216
216
  return yield* runWithTxn({ kind: "trait", name: "cleanup", details: request }, apply);
217
- });
217
+ }).pipe(Effect.catchCause(() => Effect.void));
218
218
  var isAuxRootPath = (path) => path === "errors" || path === "ui" || path.startsWith("errors.") || path.startsWith("ui.");
219
219
  var toPatternPath = (path) => {
220
220
  if (!path) return path;
@@ -282,4 +282,4 @@ export {
282
282
  install2 as install,
283
283
  TraitLifecycle_exports
284
284
  };
285
- //# sourceMappingURL=chunk-ANLBCBDC.js.map
285
+ //# sourceMappingURL=chunk-CGE2HBTH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/TraitLifecycle.ts","../src/internal/trait-lifecycle/index.ts"],"sourcesContent":["// TraitLifecycle: shared lower-level interface for Form/Query (@logixjs/core/TraitLifecycle, Phase 2 placeholder).\n//\n// - Exposes serializable FieldRef and unified request protocols.\n// - Concrete implementation lives in internal/trait-lifecycle/*; this module provides public API + type exports.\n\nimport type { BoundApi } from './Bound.js'\nimport { Effect } from 'effect'\nimport * as Internal from './internal/trait-lifecycle/index.js'\n\nexport type FieldRef = Internal.FieldRef\nexport type ValidateMode = Internal.ValidateRequest['mode']\nexport type ValidateRequest = Internal.ValidateRequest\nexport type ExecuteRequest = Internal.ExecuteRequest\nexport type CleanupRequest = Internal.CleanupRequest\nexport type SourceWiring = ReturnType<typeof Internal.makeSourceWiring>\n\nexport const Ref = Internal.Ref\n\nexport const scopedValidate = (bound: BoundApi<any, any>, request: ValidateRequest): Effect.Effect<void, never, any> =>\n Internal.scopedValidate(bound as any, request)\n\nexport const scopedExecute = (bound: BoundApi<any, any>, request: ExecuteRequest): Effect.Effect<void, never, any> =>\n Internal.scopedExecute(bound as any, request)\n\nexport const cleanup = (bound: BoundApi<any, any>, request: CleanupRequest): Effect.Effect<void, never, any> =>\n Internal.cleanup(bound as any, request)\n\nexport const makeSourceWiring = (bound: BoundApi<any, any>, module: unknown): SourceWiring =>\n Internal.makeSourceWiring(bound as any, module)\n\nexport const install = (bound: BoundApi<any, any>): Effect.Effect<void, never, any> => Internal.install(bound as any)\n","import { Effect, Option } from 'effect'\nimport type { BoundApi } from '../runtime/core/module.js'\nimport * as TaskRunner from '../runtime/core/TaskRunner.js'\nimport * as ReplayLog from '../runtime/core/ReplayLog.js'\nimport type { CleanupRequest, ExecuteRequest, FieldRef, ValidateRequest } from './model.js'\nimport type * as StateTraitValidate from '../state-trait/validate.js'\nimport * as RowId from '../state-trait/rowid.js'\nimport { getBoundInternals, getModuleTraitsProgram } from '../runtime/core/runtimeInternalsAccessor.js'\n\nexport type { CleanupRequest, ExecuteRequest, FieldRef, ValidateRequest }\n\n/**\n * Ref: builders for FieldRef (serializable and comparable).\n *\n * Notes:\n * - Phase 2 provides only minimal constructors.\n * - Array optimizations (RowID/trackBy) and richer ref semantics will land in later phases.\n */\nexport const Ref = {\n field: (path: string): FieldRef => ({ kind: 'field', path }),\n list: (path: string, listIndexPath?: ReadonlyArray<number>): FieldRef => ({\n kind: 'list',\n path,\n listIndexPath,\n }),\n item: (\n path: string,\n index: number,\n options?: { readonly listIndexPath?: ReadonlyArray<number>; readonly field?: string },\n ): FieldRef => ({\n kind: 'item',\n path,\n index,\n listIndexPath: options?.listIndexPath,\n field: options?.field,\n }),\n /**\n * fromValuePath:\n * - Parse a valuePath (e.g. \"items.0.warehouseId\") into a FieldRef.\n * - Supports a single index (required) and multi-level indices via listIndexPath (optional but recommended).\n *\n * Conventions:\n * - If numeric segments are present, return an item ref (the last index becomes item.index; preceding indices go into listIndexPath).\n * - If no numeric segments are present:\n * - \"items[]\" (pattern list root) returns a list ref.\n * - Otherwise return a field ref (including pattern fields like \"items[].x\").\n * - \"$root\" / empty string returns the root ref.\n */\n fromValuePath: (valuePath: string): FieldRef => {\n const raw = typeof valuePath === 'string' ? valuePath.trim() : ''\n if (!raw || raw === '$root') return Ref.root()\n\n const segments = raw.split('.').filter(Boolean)\n if (segments.length === 0) return Ref.root()\n\n const isIndex = (seg: string): boolean => /^[0-9]+$/.test(seg)\n const stripPattern = (seg: string): string => (seg.endsWith('[]') ? seg.slice(0, -2) : seg)\n\n const indexPositions: Array<{ readonly pos: number; readonly index: number }> = []\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i]!\n if (!isIndex(seg)) continue\n const index = Number(seg)\n if (!Number.isFinite(index) || index < 0) return Ref.field(raw)\n indexPositions.push({ pos: i, index })\n }\n\n // valuePath with indices => item ref\n if (indexPositions.length > 0) {\n const last = indexPositions[indexPositions.length - 1]!\n const listIndexPath = indexPositions.slice(0, -1).map((p) => p.index)\n\n const listPath = segments\n .slice(0, last.pos)\n .filter((seg) => !isIndex(seg))\n .map(stripPattern)\n .join('.')\n\n if (!listPath) return Ref.field(raw)\n\n const fieldRest = segments\n .slice(last.pos + 1)\n .map(stripPattern)\n .join('.')\n\n return Ref.item(listPath, last.index, {\n listIndexPath: listIndexPath.length > 0 ? listIndexPath : undefined,\n field: fieldRest ? fieldRest : undefined,\n })\n }\n\n // pattern list root => list ref\n if (segments.some((s) => s.includes('[]'))) {\n const last = segments[segments.length - 1]!\n if (last.endsWith('[]')) {\n return Ref.list(segments.map(stripPattern).join('.'))\n }\n }\n\n return Ref.field(raw)\n },\n root: (): FieldRef => ({ kind: 'root' }),\n} as const\n\n/**\n * scopedValidate (placeholder): in later phases this will compute the minimal set via ReverseClosure and write back into the error tree.\n */\nexport const scopedValidate = (bound: BoundApi<any, any>, request: ValidateRequest): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n let internals: ReturnType<typeof getBoundInternals> | undefined\n try {\n internals = getBoundInternals(bound as any)\n } catch {\n return\n }\n\n const enqueue = internals.traits.enqueueStateTraitValidateRequest as unknown as\n | ((r: StateTraitValidate.ScopedValidateRequest) => void)\n | undefined\n\n if (!enqueue) return\n\n const toTarget = (ref: FieldRef): StateTraitValidate.ValidateTarget => {\n if (ref.kind === 'root') return { kind: 'root' }\n if (ref.kind === 'field') return { kind: 'field', path: ref.path }\n if (ref.kind === 'list') {\n return {\n kind: 'list',\n path: ref.path,\n ...(ref.listIndexPath ? { listIndexPath: ref.listIndexPath } : {}),\n }\n }\n return {\n kind: 'item',\n path: ref.path,\n index: ref.index,\n ...(ref.listIndexPath ? { listIndexPath: ref.listIndexPath } : {}),\n field: ref.field,\n }\n }\n\n const internal: StateTraitValidate.ScopedValidateRequest = {\n mode: request.mode as any,\n target: toTarget(request.target),\n }\n\n const inTxn = yield* Effect.service(TaskRunner.inSyncTransactionFiber).pipe(Effect.orDie)\n if (inTxn) {\n enqueue(internal)\n return\n }\n\n yield* internals.txn.runWithStateTransaction({ kind: 'trait', name: 'scopedValidate', details: request }, () =>\n Effect.sync(() => {\n enqueue(internal)\n }),\n )\n }).pipe(Effect.catchCause(() => Effect.void))\n\n/**\n * scopedExecute (placeholder): a unified execution entrypoint for query/resource actions (refresh/invalidate, etc.).\n */\nexport const scopedExecute = (bound: BoundApi<any, any>, request: ExecuteRequest): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n if (request.kind === 'source:refresh') {\n const toFieldPath = (ref: FieldRef): string | undefined => {\n if (ref.kind === 'root') return undefined\n if (ref.kind === 'field' || ref.kind === 'list') return ref.path\n const base = `${ref.path}[]`\n return ref.field ? `${base}.${ref.field}` : base\n }\n\n const fieldPath = toFieldPath(request.target)\n if (!fieldPath) {\n return\n }\n\n yield* bound.traits.source.refresh(fieldPath) as Effect.Effect<void, never, any>\n return\n }\n\n if (request.kind !== 'query:invalidate') {\n return\n }\n\n const replayLogOpt = yield* Effect.serviceOption(ReplayLog.ReplayLog)\n if (Option.isNone(replayLogOpt)) {\n return\n }\n\n let moduleId: string | undefined\n let instanceId: string | undefined\n try {\n const internals = getBoundInternals(bound as any)\n moduleId = internals.moduleId\n instanceId = internals.instanceId\n } catch {\n moduleId = undefined\n instanceId = undefined\n }\n\n yield* replayLogOpt.value.record({\n _tag: 'InvalidateRequest',\n timestamp: Date.now(),\n moduleId,\n instanceId,\n kind: 'query',\n target: 'query',\n meta: request.request,\n })\n })\n\n/**\n * cleanup (placeholder): deterministic cleanup under structural changes (errors/ui/resources).\n */\nexport const cleanup = (bound: BoundApi<any, any>, request: CleanupRequest): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const apply = () =>\n bound.state.mutate((draft) => {\n const clearAt = (root: 'errors' | 'ui', path: string): void => {\n if (!path) return\n RowId.unsetAtPathMutating(draft, `${root}.${path}`)\n }\n\n if (request.kind === 'field:unregister') {\n const target = request.target\n if (target.kind !== 'field') return\n clearAt('errors', target.path)\n clearAt('ui', target.path)\n return\n }\n\n if (request.kind === 'list:item:remove') {\n const target = request.target\n if (target.kind !== 'item') return\n const base = `${target.path}.${target.index}`\n const path = target.field ? `${base}.${target.field}` : base\n clearAt('errors', path)\n clearAt('ui', path)\n return\n }\n\n if (request.kind === 'list:reorder') {\n // Reorder does not change the external index semantics by itself.\n // Alignment of errors/ui should be handled by domain reducers or higher-level logic; keep it a no-op here.\n return\n }\n })\n\n const inTxn = yield* Effect.service(TaskRunner.inSyncTransactionFiber).pipe(Effect.orDie)\n if (inTxn) {\n return yield* apply()\n }\n\n let runWithTxn:\n | ((\n origin: { readonly kind: string; readonly name?: string; readonly details?: unknown },\n body: () => Effect.Effect<void, never, any>,\n ) => Effect.Effect<void, never, any>)\n | undefined\n\n try {\n const internals = getBoundInternals(bound as any)\n runWithTxn = (origin, body) => internals.txn.runWithStateTransaction(origin as any, body)\n } catch {\n runWithTxn = undefined\n }\n\n if (!runWithTxn) {\n return yield* apply()\n }\n\n return yield* runWithTxn({ kind: 'trait', name: 'cleanup', details: request }, apply)\n }).pipe(Effect.catchCause(() => Effect.void))\n\ntype SourceWiring = {\n readonly setup: Effect.Effect<void, never, any>\n readonly refreshOnKeyChange: (changedPath: string) => Effect.Effect<void, never, any>\n}\n\nconst isAuxRootPath = (path: string): boolean =>\n path === 'errors' || path === 'ui' || path.startsWith('errors.') || path.startsWith('ui.')\n\nconst toPatternPath = (path: string): string => {\n if (!path) return path\n const segments = path.split('.').filter(Boolean)\n return segments\n .map((seg) => (/^[0-9]+$/.test(seg) ? '[]' : seg))\n .join('.')\n .replace(/\\.\\[\\]/g, '[]')\n}\n\nconst isDepAffectedByChange = (dep: string, changed: string): boolean => {\n if (!dep || !changed) return false\n if (dep === changed) return true\n if (changed.startsWith(`${dep}.`)) return true\n if (changed.startsWith(`${dep}[]`)) return true\n // list root structural change (e.g. changed=\"items\") should affect any list-item deps (e.g. dep=\"items[].x\").\n if (dep.startsWith(`${changed}[]`)) return true\n return false\n}\n\nexport const makeSourceWiring = (bound: BoundApi<any, any>, module: unknown): SourceWiring => {\n const program = getModuleTraitsProgram(module as any) as { readonly entries?: ReadonlyArray<any> } | undefined\n\n const sources = program?.entries?.filter((e) => e && e.kind === 'source') ?? []\n\n const sourceOnMount = sources.filter((e: any) =>\n Array.isArray(e?.meta?.triggers) ? e.meta.triggers.includes('onMount') : false,\n )\n\n const sourceOnKeyChange = sources.filter((e: any) =>\n Array.isArray(e?.meta?.triggers) ? e.meta.triggers.includes('onKeyChange') : false,\n )\n\n const setup = Effect.sync(() => {\n if (sourceOnMount.length === 0) return\n bound.lifecycle.onStart(\n Effect.forEach(sourceOnMount, (entry: any) => bound.traits.source.refresh(entry.fieldPath), {\n concurrency: 'unbounded',\n }).pipe(Effect.asVoid),\n )\n })\n\n const refreshOnKeyChange = (changedPath: string): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n if (!changedPath || isAuxRootPath(changedPath)) return\n if (sourceOnKeyChange.length === 0) return\n\n const changedPattern = toPatternPath(changedPath)\n\n yield* Effect.forEach(\n sourceOnKeyChange,\n (entry: any) => {\n const deps = (entry?.meta?.deps ?? []) as ReadonlyArray<string>\n const affected = deps.some((dep) => isDepAffectedByChange(dep, changedPattern))\n if (!affected) return Effect.void\n return bound.traits.source.refresh(entry.fieldPath)\n },\n { concurrency: 'unbounded' },\n )\n }).pipe(Effect.asVoid)\n\n return { setup, refreshOnKeyChange }\n}\n\n/**\n * install (placeholder): the default wiring entrypoint for TraitLifecycle.\n *\n * Notes:\n * - Phase 2 only provides an entrypoint that feature packages can depend on.\n * - Concrete wiring for \"domain event → request → in-transaction execution\" will be composed by Form/Query default logics in later phases.\n */\nexport const install = (_bound: BoundApi<any, any>): Effect.Effect<void, never, any> => Effect.void\n"],"mappings":"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","names":["Ref","cleanup","install","makeSourceWiring","scopedExecute","scopedValidate","Ref","scopedValidate","scopedExecute","cleanup","makeSourceWiring","install"]}
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  OBSERVABILITY_PROTOCOL_VERSION,
3
3
  exportEvidencePackage
4
- } from "./chunk-M7IYCTJV.js";
4
+ } from "./chunk-R4LFQGP3.js";
5
5
  import {
6
6
  composeMiddleware,
7
7
  makeOperationRejected,
8
8
  runWithMiddleware
9
- } from "./chunk-JWOYLO27.js";
9
+ } from "./chunk-LPPZDFTD.js";
10
10
 
11
11
  // src/internal/observability/runSession.ts
12
- import { Context, Layer } from "effect";
13
- var RunSessionTagImpl = class extends Context.Tag("@logixjs/core/RunSession")() {
12
+ import { Layer, ServiceMap } from "effect";
13
+ var RunSessionTagImpl = class extends ServiceMap.Service()("@logixjs/core/RunSession") {
14
14
  };
15
15
  var RunSessionTag = RunSessionTagImpl;
16
16
  var NEXT_RUN_SEQ_KEY = /* @__PURE__ */ Symbol.for("@logixjs/core/runSession/nextRunSeq");
@@ -172,4 +172,4 @@ export {
172
172
  withMeta,
173
173
  run
174
174
  };
175
- //# sourceMappingURL=chunk-OFADUJWJ.js.map
175
+ //# sourceMappingURL=chunk-CYYSQMLO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/observability/runSession.ts","../src/internal/effect-op.ts"],"sourcesContent":["import { Layer, ServiceMap } from 'effect'\nimport type { JsonValue } from './jsonValue.js'\nimport type { EvidencePackage, EvidencePackageSource, ObservationEnvelope } from './evidence.js'\nimport { exportEvidencePackage, OBSERVABILITY_PROTOCOL_VERSION } from './evidence.js'\n\nexport type RunId = string\n\nexport interface RunSessionLocalState {\n /**\n * once: a de-dup key set for \"emit only once\" behavior (must be isolated per session to avoid cross-session pollution).\n * Returns true if it's the first occurrence, false if the key has been seen before.\n */\n readonly once: (key: string) => boolean\n\n /**\n * seq: allocate monotonic sequences by key (e.g. opSeq/eventSeq), must be isolated per session.\n */\n readonly nextSeq: (namespace: string, key: string) => number\n\n /** Tests/reset only: clear this session's local state. */\n readonly clear: () => void\n}\n\nexport interface RunSession {\n readonly runId: RunId\n readonly source: EvidencePackageSource\n readonly startedAt: number\n readonly local: RunSessionLocalState\n}\n\nclass RunSessionTagImpl extends ServiceMap.Service<RunSessionTagImpl, RunSession>()('@logixjs/core/RunSession') {}\n\nexport const RunSessionTag = RunSessionTagImpl\n\nexport interface EvidenceSink {\n readonly record: (type: string, payload: JsonValue, options?: { readonly timestamp?: number }) => void\n readonly export: (options?: {\n readonly protocolVersion?: string\n readonly createdAt?: number\n readonly summary?: JsonValue\n readonly maxEvents?: number\n }) => EvidencePackage\n readonly clear: () => void\n}\n\nconst NEXT_RUN_SEQ_KEY = Symbol.for('@logixjs/core/runSession/nextRunSeq')\nlet fallbackNextRunSeq = 0\n\nconst nextRunSeq = (): number => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g: any = globalThis as any\n const prev = typeof g[NEXT_RUN_SEQ_KEY] === 'number' ? (g[NEXT_RUN_SEQ_KEY] as number) : 0\n const next = prev + 1\n g[NEXT_RUN_SEQ_KEY] = next\n return next\n } catch {\n fallbackNextRunSeq += 1\n return fallbackNextRunSeq\n }\n}\n\nconst makeRunId = (startedAt: number): RunId => `run-${startedAt}.${nextRunSeq()}`\n\nexport const makeRunSessionLocalState = (): RunSessionLocalState => {\n const onceKeys = new Set<string>()\n const seqByNamespace = new Map<string, Map<string, number>>()\n\n return {\n once: (key) => {\n if (onceKeys.has(key)) return false\n onceKeys.add(key)\n return true\n },\n nextSeq: (namespace, key) => {\n const byKey = seqByNamespace.get(namespace) ?? new Map<string, number>()\n if (!seqByNamespace.has(namespace)) seqByNamespace.set(namespace, byKey)\n const prev = byKey.get(key) ?? 0\n const next = prev + 1\n byKey.set(key, next)\n return next\n },\n clear: () => {\n onceKeys.clear()\n seqByNamespace.clear()\n },\n }\n}\n\nexport const makeRunSession = (options?: {\n readonly runId?: RunId\n readonly source?: EvidencePackageSource\n readonly startedAt?: number\n readonly local?: RunSessionLocalState\n}): RunSession => {\n const startedAt = options?.startedAt ?? Date.now()\n return {\n runId: options?.runId ?? makeRunId(startedAt),\n source: options?.source ?? { host: 'unknown' },\n startedAt,\n local: options?.local ?? makeRunSessionLocalState(),\n }\n}\n\nexport const makeEvidenceSink = (session: RunSession): EvidenceSink => {\n const events: ObservationEnvelope[] = []\n let nextSeq = 1\n\n return {\n record: (type, payload, options) => {\n events.push({\n protocolVersion: OBSERVABILITY_PROTOCOL_VERSION,\n runId: session.runId,\n seq: nextSeq++,\n timestamp: options?.timestamp ?? Date.now(),\n type,\n payload,\n })\n },\n export: (options) => {\n const protocolVersion = options?.protocolVersion ?? OBSERVABILITY_PROTOCOL_VERSION\n const maxEvents = options?.maxEvents\n\n const selected =\n typeof maxEvents === 'number' && Number.isFinite(maxEvents) && maxEvents > 0\n ? events.slice(Math.max(0, events.length - Math.floor(maxEvents)))\n : events.slice()\n\n return exportEvidencePackage({\n protocolVersion,\n runId: session.runId,\n source: session.source,\n createdAt: options?.createdAt,\n events: selected,\n summary: options?.summary,\n })\n },\n clear: () => {\n events.length = 0\n nextSeq = 1\n },\n }\n}\n\nexport const runSessionLayer = (session?: RunSession): Layer.Layer<RunSessionTagImpl, never, never> =>\n Layer.succeed(RunSessionTag, session ?? makeRunSession()) as Layer.Layer<RunSessionTagImpl, never, never>\n","// Internal EffectOp API (for internal implementation code).\n//\n// Goal:\n// - Internal modules must never import root public submodules (e.g. `../EffectOp`).\n// - This file hosts the shared implementation; public `src/EffectOp.ts` delegates to it.\n\nimport { Effect, Option } from 'effect'\nimport * as Core from './runtime/core/EffectOpCore.js'\nimport { RunSessionTag } from './observability/runSession.js'\n\nexport type EffectOp<Out = unknown, Err = unknown, Env = unknown> = Core.EffectOp<Out, Err, Env>\n\nexport type OperationPolicy = Core.OperationPolicy\n\nexport type OperationRejected = Core.OperationRejected\n\nexport type OperationError<E> = Core.OperationError<E>\n\nexport type Middleware = Core.Middleware\n\nexport type MiddlewareStack = Core.MiddlewareStack\n\nexport const composeMiddleware = Core.composeMiddleware\n\nexport const makeOperationRejected = Core.makeOperationRejected\n\n/**\n * Generate a stable id for identifying an EffectOp.\n * - Uses a monotonic sequence by default to avoid non-replayability from randomness/time.\n * - If meta.instanceId is available, prefer deriving `${instanceId}::o${opSeq}`.\n */\nlet nextGlobalOpSeq = 0\n\nconst nextOpSeq = (): number => {\n nextGlobalOpSeq += 1\n return nextGlobalOpSeq\n}\n\nconst makeId = (instanceId: string | undefined, opSeq: number): string =>\n instanceId ? `${instanceId}::o${opSeq}` : `o${opSeq}`\n\n/**\n * EffectOp.make:\n * - Create an EffectOp with basic meta.\n * - Generates a stable id by default (based on `instanceId` + monotonic `opSeq`); callers may override externally.\n */\nexport const make = <A, E, R>(params: {\n readonly kind: EffectOp['kind']\n readonly name: string\n readonly effect: Effect.Effect<A, E, R>\n readonly payload?: unknown\n readonly meta?: EffectOp['meta']\n readonly id?: string\n}): EffectOp<A, E, R> => ({\n ...(params.id\n ? { id: params.id, meta: params.meta }\n : (() => {\n const meta: any = params.meta ?? {}\n const instanceId: string | undefined = meta.instanceId\n const opSeq: number =\n typeof meta.opSeq === 'number' && Number.isFinite(meta.opSeq) ? Math.floor(meta.opSeq) : nextOpSeq()\n return {\n id: makeId(instanceId, opSeq),\n meta: meta.opSeq === opSeq ? meta : { ...meta, opSeq },\n }\n })()),\n kind: params.kind,\n name: params.name,\n payload: params.payload,\n effect: params.effect,\n})\n\n/**\n * EffectOp.makeInRunSession:\n * - Allocate a stable `opSeq` within a RunSession scope (per-session + per-instance).\n * - If RunSession is missing from Env, fall back to a process-wide monotonic sequence (no process-wide Map).\n */\nexport const makeInRunSession = <A, E, R>(params: {\n readonly kind: EffectOp['kind']\n readonly name: string\n readonly effect: Effect.Effect<A, E, R>\n readonly payload?: unknown\n readonly meta?: EffectOp['meta']\n readonly id?: string\n}): Effect.Effect<EffectOp<A, E, R>, never, any> =>\n Effect.gen(function* () {\n if (params.id) {\n return {\n id: params.id,\n kind: params.kind,\n name: params.name,\n payload: params.payload,\n meta: params.meta,\n effect: params.effect,\n } satisfies EffectOp<A, E, R>\n }\n\n const meta: any = params.meta ?? {}\n const instanceId: string | undefined = meta.instanceId\n\n let opSeq: number\n if (typeof meta.opSeq === 'number' && Number.isFinite(meta.opSeq)) {\n opSeq = Math.floor(meta.opSeq)\n } else {\n const sessionOpt = yield* Effect.serviceOption(RunSessionTag)\n if (Option.isSome(sessionOpt)) {\n const key = instanceId ?? 'global'\n opSeq = sessionOpt.value.local.nextSeq('opSeq', key)\n } else {\n opSeq = nextOpSeq()\n }\n }\n\n return {\n id: makeId(instanceId, opSeq),\n kind: params.kind,\n name: params.name,\n payload: params.payload,\n meta: meta.opSeq === opSeq ? meta : { ...meta, opSeq },\n effect: params.effect,\n } satisfies EffectOp<A, E, R>\n })\n\n/**\n * EffectOp.withMeta:\n * - Append or override meta fields on an existing EffectOp.\n * - Does not change the effect itself.\n */\nexport const withMeta = <A, E, R>(\n op: EffectOp<A, E, R>,\n meta: Partial<NonNullable<EffectOp['meta']>>,\n): EffectOp<A, E, R> => ({\n ...op,\n meta: { ...(op.meta ?? {}), ...meta },\n})\n\n/**\n * EffectOp.run:\n * - Execute an EffectOp using the given MiddlewareStack.\n * - If the stack is empty, return op.effect directly.\n */\nexport const run = <A, E, R>(op: EffectOp<A, E, R>, stack: MiddlewareStack): Effect.Effect<A, E, R> =>\n Core.runWithMiddleware(op, stack)\n"],"mappings":"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","names":["composeMiddleware","makeOperationRejected"]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  exportStaticIr
3
- } from "./chunk-ZFY7U2FR.js";
3
+ } from "./chunk-HJM5Y5NU.js";
4
4
  import {
5
5
  isDevEnv
6
- } from "./chunk-3QMIVH35.js";
6
+ } from "./chunk-S4S5N4BJ.js";
7
7
 
8
8
  // src/internal/debug/ModuleTraitsRegistry.ts
9
9
  var programsByIdAndDigest = /* @__PURE__ */ new Map();
@@ -37,4 +37,4 @@ export {
37
37
  registerModuleProgram,
38
38
  getModuleProgramById
39
39
  };
40
- //# sourceMappingURL=chunk-66ALHVEX.js.map
40
+ //# sourceMappingURL=chunk-EB46EYI7.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  isDevEnv
3
- } from "./chunk-3QMIVH35.js";
3
+ } from "./chunk-S4S5N4BJ.js";
4
4
 
5
5
  // src/internal/resource.ts
6
- import { Context, Layer } from "effect";
6
+ import { Layer, ServiceMap } from "effect";
7
7
  var stableStringify = (value) => {
8
8
  const seen = /* @__PURE__ */ new WeakSet();
9
9
  const encode = (input) => {
@@ -75,7 +75,7 @@ var Snapshot = {
75
75
  error: params.error
76
76
  })
77
77
  };
78
- var ResourceRegistryTag = class extends Context.Tag("@logixjs/core/ResourceRegistry")() {
78
+ var ResourceRegistryTag = class extends ServiceMap.Service()("@logixjs/core/ResourceRegistry") {
79
79
  };
80
80
  var internal = {
81
81
  ResourceRegistryTag
@@ -103,4 +103,4 @@ export {
103
103
  make,
104
104
  layer
105
105
  };
106
- //# sourceMappingURL=chunk-NZJKFF45.js.map
106
+ //# sourceMappingURL=chunk-EKCDHWRK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/resource.ts"],"sourcesContent":["import { Layer, ServiceMap } from 'effect'\nimport { isDevEnv } from './runtime/core/env.js'\n\nexport interface ResourceSpec<Key, Out, Err, Env> {\n readonly id: string\n readonly keySchema: import('effect').Schema.Schema<Key>\n readonly load: (key: Key) => import('effect').Effect.Effect<Out, Err, Env>\n readonly meta?: {\n readonly cacheGroup?: string\n readonly description?: string\n readonly [k: string]: unknown\n }\n}\n\nexport type AnyResourceSpec = ResourceSpec<any, any, any, any>\n\nexport type ResourceStatus = 'idle' | 'loading' | 'success' | 'error'\n\nexport interface ResourceSnapshot<Data = unknown, Err = unknown> {\n readonly status: ResourceStatus\n readonly keyHash?: string\n readonly data?: Data\n readonly error?: Err\n}\n\nconst stableStringify = (value: unknown): string => {\n const seen = new WeakSet<object>()\n const encode = (input: unknown): unknown => {\n if (input === null) return null\n if (typeof input === 'string' || typeof input === 'number' || typeof input === 'boolean') {\n return input\n }\n if (typeof input === 'bigint') return input.toString()\n if (typeof input === 'undefined') return '__undefined__'\n if (typeof input === 'symbol') return `__symbol__:${String(input)}`\n if (typeof input === 'function') return '__function__'\n\n if (Array.isArray(input)) {\n return input.map((v) => encode(v))\n }\n if (input instanceof Date) {\n return `__date__:${input.toISOString()}`\n }\n if (input instanceof Error) {\n return {\n _tag: 'Error',\n name: input.name,\n message: input.message,\n }\n }\n if (input && typeof input === 'object') {\n const obj = input as object\n if (seen.has(obj)) return '__cycle__'\n seen.add(obj)\n\n const record = input as Record<string, unknown>\n const keys = Object.keys(record).sort()\n const out: Record<string, unknown> = {}\n for (const k of keys) {\n out[k] = encode(record[k])\n }\n return out\n }\n return String(input)\n }\n\n try {\n return JSON.stringify(encode(value))\n } catch {\n return String(value)\n }\n}\n\nexport const keyHash = (key: unknown): string => stableStringify(key)\n\nexport const Snapshot = {\n idle: <Data = never, Err = never>(): ResourceSnapshot<Data, Err> => ({\n status: 'idle',\n keyHash: undefined,\n data: undefined,\n error: undefined,\n }),\n loading: <Data = never, Err = never>(params: { readonly keyHash: string }): ResourceSnapshot<Data, Err> => ({\n status: 'loading',\n keyHash: params.keyHash,\n data: undefined,\n error: undefined,\n }),\n success: <Data>(params: { readonly keyHash: string; readonly data: Data }): ResourceSnapshot<Data, never> => ({\n status: 'success',\n keyHash: params.keyHash,\n data: params.data,\n error: undefined,\n }),\n error: <Err>(params: { readonly keyHash: string; readonly error: Err }): ResourceSnapshot<never, Err> => ({\n status: 'error',\n keyHash: params.keyHash,\n data: undefined,\n error: params.error,\n }),\n} as const\n\nexport interface ResourceRegistry {\n readonly specs: ReadonlyMap<string, AnyResourceSpec>\n}\n\nexport class ResourceRegistryTag extends ServiceMap.Service<\n ResourceRegistryTag,\n ResourceRegistry\n>()('@logixjs/core/ResourceRegistry') {}\n\nexport const internal = {\n ResourceRegistryTag,\n}\n\nexport type Spec<Key, Out, Err, Env> = ResourceSpec<Key, Out, Err, Env>\n\nexport const make = <Key, Out, Err, Env>(spec: ResourceSpec<Key, Out, Err, Env>): ResourceSpec<Key, Out, Err, Env> =>\n spec\n\nexport const layer = (specs: ReadonlyArray<AnyResourceSpec>): Layer.Layer<ResourceRegistryTag, never, never> =>\n Layer.succeed(\n ResourceRegistryTag,\n (() => {\n const map = new Map<string, AnyResourceSpec>()\n for (const spec of specs) {\n if (isDevEnv() && map.has(spec.id) && map.get(spec.id) !== spec) {\n throw new Error(`[Resource.layer] Duplicate resource id \"${spec.id}\" detected in the same runtime scope`)\n }\n map.set(spec.id, spec)\n }\n return { specs: map }\n })(),\n )\n"],"mappings":";;;;;AAAA,SAAS,OAAO,kBAAkB;AAyBlC,IAAM,kBAAkB,CAAC,UAA2B;AAClD,QAAM,OAAO,oBAAI,QAAgB;AACjC,QAAM,SAAS,CAAC,UAA4B;AAC1C,QAAI,UAAU,KAAM,QAAO;AAC3B,QAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW;AACxF,aAAO;AAAA,IACT;AACA,QAAI,OAAO,UAAU,SAAU,QAAO,MAAM,SAAS;AACrD,QAAI,OAAO,UAAU,YAAa,QAAO;AACzC,QAAI,OAAO,UAAU,SAAU,QAAO,cAAc,OAAO,KAAK,CAAC;AACjE,QAAI,OAAO,UAAU,WAAY,QAAO;AAExC,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAO,MAAM,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC;AAAA,IACnC;AACA,QAAI,iBAAiB,MAAM;AACzB,aAAO,YAAY,MAAM,YAAY,CAAC;AAAA,IACxC;AACA,QAAI,iBAAiB,OAAO;AAC1B,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,MAAM;AAAA,QACZ,SAAS,MAAM;AAAA,MACjB;AAAA,IACF;AACA,QAAI,SAAS,OAAO,UAAU,UAAU;AACtC,YAAM,MAAM;AACZ,UAAI,KAAK,IAAI,GAAG,EAAG,QAAO;AAC1B,WAAK,IAAI,GAAG;AAEZ,YAAM,SAAS;AACf,YAAM,OAAO,OAAO,KAAK,MAAM,EAAE,KAAK;AACtC,YAAM,MAA+B,CAAC;AACtC,iBAAW,KAAK,MAAM;AACpB,YAAI,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC;AAAA,MAC3B;AACA,aAAO;AAAA,IACT;AACA,WAAO,OAAO,KAAK;AAAA,EACrB;AAEA,MAAI;AACF,WAAO,KAAK,UAAU,OAAO,KAAK,CAAC;AAAA,EACrC,QAAQ;AACN,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;AAEO,IAAM,UAAU,CAAC,QAAyB,gBAAgB,GAAG;AAE7D,IAAM,WAAW;AAAA,EACtB,MAAM,OAA+D;AAAA,IACnE,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,SAAS,CAA4B,YAAuE;AAAA,IAC1G,QAAQ;AAAA,IACR,SAAS,OAAO;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,SAAS,CAAO,YAA8F;AAAA,IAC5G,QAAQ;AAAA,IACR,SAAS,OAAO;AAAA,IAChB,MAAM,OAAO;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,OAAO,CAAM,YAA6F;AAAA,IACxG,QAAQ;AAAA,IACR,SAAS,OAAO;AAAA,IAChB,MAAM;AAAA,IACN,OAAO,OAAO;AAAA,EAChB;AACF;AAMO,IAAM,sBAAN,cAAkC,WAAW,QAGlD,EAAE,gCAAgC,EAAE;AAAC;AAEhC,IAAM,WAAW;AAAA,EACtB;AACF;AAIO,IAAM,OAAO,CAAqB,SACvC;AAEK,IAAM,QAAQ,CAAC,UACpB,MAAM;AAAA,EACJ;AAAA,GACC,MAAM;AACL,UAAM,MAAM,oBAAI,IAA6B;AAC7C,eAAW,QAAQ,OAAO;AACxB,UAAI,SAAS,KAAK,IAAI,IAAI,KAAK,EAAE,KAAK,IAAI,IAAI,KAAK,EAAE,MAAM,MAAM;AAC/D,cAAM,IAAI,MAAM,2CAA2C,KAAK,EAAE,sCAAsC;AAAA,MAC1G;AACA,UAAI,IAAI,KAAK,IAAI,IAAI;AAAA,IACvB;AACA,WAAO,EAAE,OAAO,IAAI;AAAA,EACtB,GAAG;AACL;","names":[]}