@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
@@ -0,0 +1,763 @@
1
+ import {
2
+ build,
3
+ installSourceRefresh,
4
+ onceInRunSession
5
+ } from "./chunk-IVXSVHO4.js";
6
+ import {
7
+ getAtPath,
8
+ setAtPathMutating
9
+ } from "./chunk-EPQFNJU3.js";
10
+ import {
11
+ exportStaticIr
12
+ } from "./chunk-HJM5Y5NU.js";
13
+ import {
14
+ sanitizeWithReport
15
+ } from "./chunk-J3CWXIPV.js";
16
+ import {
17
+ normalizeFieldPath
18
+ } from "./chunk-SOOBFXRR.js";
19
+ import {
20
+ getBoundInternals
21
+ } from "./chunk-63ZQ5RIN.js";
22
+ import {
23
+ DeclarativeLinkRuntimeTag,
24
+ inSyncTransactionFiber,
25
+ isDevEnv
26
+ } from "./chunk-S4S5N4BJ.js";
27
+ import {
28
+ getExternalStoreDescriptor
29
+ } from "./chunk-NZMWWDAY.js";
30
+ import {
31
+ currentDiagnosticsLevel,
32
+ record
33
+ } from "./chunk-V2SBGVDO.js";
34
+ import {
35
+ __export
36
+ } from "./chunk-PZ5AY32C.js";
37
+
38
+ // src/StateTrait.ts
39
+ var StateTrait_exports = {};
40
+ __export(StateTrait_exports, {
41
+ $root: () => $root,
42
+ build: () => build2,
43
+ computed: () => computed,
44
+ exportStaticIr: () => exportStaticIr2,
45
+ externalStore: () => externalStore,
46
+ from: () => from,
47
+ install: () => install2,
48
+ link: () => link,
49
+ list: () => list,
50
+ node: () => node,
51
+ source: () => source
52
+ });
53
+
54
+ // src/internal/state-trait/install.ts
55
+ import { Effect as Effect3 } from "effect";
56
+
57
+ // src/internal/state-trait/external-store.ts
58
+ import { Effect, Fiber, Option, ServiceMap, Stream } from "effect";
59
+ import { create } from "mutative";
60
+ var isFn = (value) => typeof value === "function";
61
+ var writebackCoordinatorByInternals = /* @__PURE__ */ new WeakMap();
62
+ var getOrCreateExternalStoreWritebackCoordinator = (args) => Effect.gen(function* () {
63
+ const cached = writebackCoordinatorByInternals.get(args.internals);
64
+ if (cached) return cached;
65
+ let closed = false;
66
+ let inFlight = false;
67
+ let pendingWrites = /* @__PURE__ */ new Map();
68
+ const drainPendingWrites = () => {
69
+ if (pendingWrites.size === 0) return [];
70
+ const drained = pendingWrites;
71
+ pendingWrites = /* @__PURE__ */ new Map();
72
+ return Array.from(drained.values());
73
+ };
74
+ const applyWritebackBatch = (batch) => Effect.gen(function* () {
75
+ if (batch.length === 0) return;
76
+ if (batch.length === 1) {
77
+ const req = batch[0];
78
+ const prevState2 = yield* args.bound.state.read;
79
+ const prevValue = getAtPath(prevState2, req.fieldPath);
80
+ if (req.isEqual(prevValue, req.nextValue)) return;
81
+ const nextDraft2 = create(prevState2, (draft) => {
82
+ setAtPathMutating(draft, req.fieldPath, req.nextValue);
83
+ });
84
+ args.internals.txn.recordStatePatch(
85
+ req.normalizedPatchPath,
86
+ "trait-external-store",
87
+ prevValue,
88
+ req.nextValue,
89
+ req.traitNodeId
90
+ );
91
+ args.internals.txn.updateDraft(nextDraft2);
92
+ return;
93
+ }
94
+ const prevState = yield* args.bound.state.read;
95
+ const changes = [];
96
+ for (let i = 0; i < batch.length; i++) {
97
+ const req = batch[i];
98
+ const prevValue = getAtPath(prevState, req.fieldPath);
99
+ if (req.isEqual(prevValue, req.nextValue)) continue;
100
+ changes.push({ request: req, prevValue });
101
+ }
102
+ if (changes.length === 0) return;
103
+ const nextDraft = create(prevState, (draft) => {
104
+ for (let i = 0; i < changes.length; i++) {
105
+ const { request } = changes[i];
106
+ setAtPathMutating(draft, request.fieldPath, request.nextValue);
107
+ }
108
+ });
109
+ for (let i = 0; i < changes.length; i++) {
110
+ const { request, prevValue } = changes[i];
111
+ args.internals.txn.recordStatePatch(
112
+ request.normalizedPatchPath,
113
+ "trait-external-store",
114
+ prevValue,
115
+ request.nextValue,
116
+ request.traitNodeId
117
+ );
118
+ }
119
+ args.internals.txn.updateDraft(nextDraft);
120
+ });
121
+ const coordinator = {
122
+ enqueue: (request) => Effect.gen(function* () {
123
+ if (closed) return;
124
+ pendingWrites.set(request.fieldPath, request);
125
+ if (inFlight) return;
126
+ inFlight = true;
127
+ try {
128
+ while (true) {
129
+ const batch = drainPendingWrites();
130
+ if (batch.length === 0) return;
131
+ const commitPriority = batch.some((x) => x.commitPriority === "normal") ? "normal" : "low";
132
+ const originName = batch.length === 1 ? batch[0].fieldPath : "externalStore:batched";
133
+ yield* args.internals.txn.runWithStateTransaction(
134
+ {
135
+ kind: "trait-external-store",
136
+ name: originName,
137
+ details: {
138
+ stateCommit: {
139
+ priority: commitPriority
140
+ }
141
+ }
142
+ },
143
+ () => applyWritebackBatch(batch).pipe(Effect.asVoid)
144
+ ).pipe(Effect.provide(args.env));
145
+ }
146
+ } finally {
147
+ inFlight = false;
148
+ }
149
+ })
150
+ };
151
+ writebackCoordinatorByInternals.set(args.internals, coordinator);
152
+ yield* Effect.addFinalizer(
153
+ () => Effect.sync(() => {
154
+ closed = true;
155
+ pendingWrites.clear();
156
+ })
157
+ );
158
+ return coordinator;
159
+ });
160
+ var resolveStore = (entry) => Effect.gen(function* () {
161
+ const store = entry.meta?.store;
162
+ const descriptor = getExternalStoreDescriptor(store);
163
+ if (descriptor?.kind === "service") {
164
+ const service = yield* Effect.service(descriptor.tag).pipe(Effect.orDie);
165
+ return descriptor.map(service);
166
+ }
167
+ return store;
168
+ });
169
+ var installExternalStoreSync = (bound, step, entry) => Effect.gen(function* () {
170
+ const fieldPath = step.targetFieldPath;
171
+ if (!fieldPath) return;
172
+ const env = yield* Effect.services();
173
+ let internals;
174
+ try {
175
+ internals = getBoundInternals(bound);
176
+ } catch {
177
+ return;
178
+ }
179
+ const select = entry.meta?.select;
180
+ const equals = entry.meta?.equals;
181
+ const computeValue = (snapshot) => isFn(select) ? select(snapshot) : snapshot;
182
+ const isEqual = (a, b) => isFn(equals) ? equals(a, b) : Object.is(a, b);
183
+ const traitLane = entry.meta?.priority;
184
+ const rawStore = entry.meta?.store;
185
+ const rawDescriptor = getExternalStoreDescriptor(rawStore);
186
+ const makeScopedDescriptorStore = () => Effect.gen(function* () {
187
+ if (rawDescriptor?.kind === "subscriptionRef") {
188
+ let current = yield* Effect.provideService(rawDescriptor.ref.get, inSyncTransactionFiber, false);
189
+ const listeners = /* @__PURE__ */ new Set();
190
+ const notify = () => {
191
+ for (const listener of listeners) {
192
+ listener();
193
+ }
194
+ };
195
+ const fiber2 = yield* Effect.forkDetach(
196
+ Effect.provideService(Stream.runForEach(
197
+ rawDescriptor.ref.changes,
198
+ (value) => Effect.sync(() => {
199
+ current = value;
200
+ notify();
201
+ })
202
+ ).pipe(Effect.catchCause(() => Effect.void)), inSyncTransactionFiber, false),
203
+ { startImmediately: true }
204
+ );
205
+ internals.lifecycle.registerDestroy(Fiber.interrupt(fiber2).pipe(Effect.asVoid), { name: `externalStore:${fieldPath}:subscriptionRef` });
206
+ return {
207
+ getSnapshot: () => current,
208
+ subscribe: (listener) => {
209
+ listeners.add(listener);
210
+ return () => {
211
+ listeners.delete(listener);
212
+ };
213
+ }
214
+ };
215
+ }
216
+ if (rawDescriptor?.kind === "stream") {
217
+ let current = rawDescriptor.initial;
218
+ const listeners = /* @__PURE__ */ new Set();
219
+ const notify = () => {
220
+ for (const listener of listeners) {
221
+ listener();
222
+ }
223
+ };
224
+ const fiber2 = yield* Effect.forkDetach(
225
+ Effect.provideService(Stream.runForEach(
226
+ rawDescriptor.stream,
227
+ (value) => Effect.sync(() => {
228
+ current = value;
229
+ notify();
230
+ })
231
+ ).pipe(Effect.catchCause(() => Effect.void)), inSyncTransactionFiber, false),
232
+ { startImmediately: true }
233
+ );
234
+ internals.lifecycle.registerDestroy(Fiber.interrupt(fiber2).pipe(Effect.asVoid), { name: `externalStore:${fieldPath}:stream` });
235
+ return {
236
+ getSnapshot: () => current,
237
+ subscribe: (listener) => {
238
+ listeners.add(listener);
239
+ return () => {
240
+ listeners.delete(listener);
241
+ };
242
+ }
243
+ };
244
+ }
245
+ return void 0;
246
+ });
247
+ if (rawDescriptor?.kind === "module") {
248
+ const linkRuntimeOpt = yield* Effect.serviceOption(
249
+ DeclarativeLinkRuntimeTag
250
+ );
251
+ if (Option.isNone(linkRuntimeOpt)) {
252
+ return yield* Effect.die(new Error("[StateTrait.externalStore] Missing DeclarativeLinkRuntime service (073)."));
253
+ }
254
+ const module = rawDescriptor.module;
255
+ const sourceRuntime = (() => {
256
+ if (module && typeof module === "object") {
257
+ const moduleId = module.moduleId;
258
+ const instanceId = module.instanceId;
259
+ const getState = module.getState;
260
+ if (typeof moduleId === "string" && moduleId.length > 0 && typeof instanceId === "string" && instanceId.length > 0 && getState) {
261
+ return module;
262
+ }
263
+ const tag = module.tag;
264
+ if (tag && ServiceMap.isKey(tag)) {
265
+ return internals.imports.get(tag);
266
+ }
267
+ if (ServiceMap.isKey(module)) {
268
+ return internals.imports.get(module);
269
+ }
270
+ }
271
+ return void 0;
272
+ })();
273
+ if (!sourceRuntime) {
274
+ return yield* Effect.die(new Error(`[StateTrait.externalStore] Module-as-Source store is unresolved for "${fieldPath}". Fix: include the source ModuleTag in module imports (moduleId=${rawDescriptor.moduleId}).`));
275
+ }
276
+ if (rawDescriptor.instanceId && rawDescriptor.instanceId !== sourceRuntime.instanceId) {
277
+ return yield* Effect.die(new Error(`[StateTrait.externalStore] Module-as-Source instanceId mismatch for "${fieldPath}". descriptor.instanceId=${rawDescriptor.instanceId}, resolved.instanceId=${sourceRuntime.instanceId}`));
278
+ }
279
+ if (sourceRuntime.moduleId !== rawDescriptor.moduleId) {
280
+ return yield* Effect.die(new Error(`[StateTrait.externalStore] Module-as-Source moduleId mismatch for "${fieldPath}". descriptor.moduleId=${rawDescriptor.moduleId}, resolved.moduleId=${sourceRuntime.moduleId}`));
281
+ }
282
+ const staticIr = rawDescriptor.readQuery.staticIr;
283
+ const isRecognizableStatic = staticIr.lane === "static" && staticIr.readsDigest != null && staticIr.fallbackReason == null;
284
+ if (!isRecognizableStatic) {
285
+ yield* record({
286
+ type: "diagnostic",
287
+ moduleId: internals.moduleId,
288
+ instanceId: internals.instanceId,
289
+ code: "external_store::module_source_degraded",
290
+ severity: "warning",
291
+ message: "[StateTrait.externalStore] Module-as-Source selector is not fully IR-recognizable; falling back to module-topic edge (may reduce perf).",
292
+ hint: "Fix: provide a static ReadQuery (ReadQuery.make) or annotate selector.fieldPaths to get a stable readsDigest; avoid dynamic lane.",
293
+ kind: "module_as_source_degraded",
294
+ trigger: {
295
+ kind: "trait",
296
+ name: "externalStore.moduleSource",
297
+ details: {
298
+ sourceModuleId: rawDescriptor.moduleId,
299
+ selectorId: staticIr.selectorId,
300
+ lane: staticIr.lane,
301
+ fallbackReason: staticIr.fallbackReason,
302
+ readsDigest: staticIr.readsDigest
303
+ }
304
+ }
305
+ });
306
+ }
307
+ const moduleInstanceKey = `${sourceRuntime.moduleId}::${sourceRuntime.instanceId}`;
308
+ const writeValue = (nextValue) => Effect.gen(function* () {
309
+ const inTxn = yield* Effect.service(inSyncTransactionFiber).pipe(Effect.orDie);
310
+ const body = Effect.gen(function* () {
311
+ const prevState = yield* bound.state.read;
312
+ const prevValue = getAtPath(prevState, fieldPath);
313
+ if (isEqual(prevValue, nextValue)) {
314
+ return;
315
+ }
316
+ const nextDraft = create(prevState, (draft) => {
317
+ setAtPathMutating(draft, fieldPath, nextValue);
318
+ });
319
+ const normalized = normalizeFieldPath(fieldPath) ?? [];
320
+ internals.txn.recordStatePatch(normalized, "trait-external-store", prevValue, nextValue, step.id);
321
+ internals.txn.updateDraft(nextDraft);
322
+ });
323
+ if (inTxn) {
324
+ return yield* body;
325
+ }
326
+ const stateCommitPriority = traitLane === "nonUrgent" ? "low" : "normal";
327
+ return yield* internals.txn.runWithStateTransaction(
328
+ {
329
+ kind: "trait-external-store",
330
+ name: fieldPath,
331
+ details: {
332
+ stateCommit: {
333
+ priority: stateCommitPriority
334
+ }
335
+ }
336
+ },
337
+ () => body.pipe(Effect.asVoid)
338
+ );
339
+ }).pipe(Effect.provideServices(env));
340
+ const unregister = linkRuntimeOpt.value.registerModuleAsSourceLink({
341
+ id: `${internals.instanceId}::externalStore:${step.id}`,
342
+ sourceModuleInstanceKey: moduleInstanceKey,
343
+ readQuery: rawDescriptor.readQuery,
344
+ computeValue,
345
+ equalsValue: isEqual,
346
+ applyValue: writeValue
347
+ });
348
+ yield* Effect.addFinalizer(
349
+ () => Effect.sync(() => {
350
+ unregister();
351
+ })
352
+ );
353
+ const initialState = yield* sourceRuntime.getState;
354
+ const initialSelected = rawDescriptor.readQuery.select(initialState);
355
+ yield* writeValue(computeValue(initialSelected));
356
+ return;
357
+ }
358
+ const scopedDescriptorStore = yield* makeScopedDescriptorStore();
359
+ const store = scopedDescriptorStore ?? (rawDescriptor?.kind === "service" ? yield* resolveStore(entry) : rawStore);
360
+ if (!store || typeof store !== "object") {
361
+ return yield* Effect.die(new Error(`[StateTrait.externalStore] Invalid store for "${fieldPath}". Expected { getSnapshot, subscribe }.`));
362
+ }
363
+ if (!isFn(store.getSnapshot) || !isFn(store.subscribe)) {
364
+ return yield* Effect.die(new Error(`[StateTrait.externalStore] Invalid store for "${fieldPath}". Expected { getSnapshot, subscribe }.`));
365
+ }
366
+ let fused = false;
367
+ let fuseCause;
368
+ let fuseRecorded = false;
369
+ let pending = false;
370
+ let resume;
371
+ const recordFuseDiagnostic = Effect.gen(function* () {
372
+ if (fuseRecorded) return;
373
+ fuseRecorded = true;
374
+ const errorMessage = (() => {
375
+ if (fuseCause instanceof Error) return fuseCause.message;
376
+ if (typeof fuseCause === "string") return fuseCause;
377
+ return "unknown";
378
+ })();
379
+ yield* record({
380
+ type: "diagnostic",
381
+ moduleId: internals.moduleId,
382
+ instanceId: internals.instanceId,
383
+ code: "external_store::snapshot_threw",
384
+ severity: "warning",
385
+ message: `[StateTrait.externalStore] store.getSnapshot() threw; trait is fused and will stop syncing for "${fieldPath}".`,
386
+ hint: "Fix: ensure getSnapshot is synchronous and non-throwing; async resources should use StateTrait.source or ExternalStore.fromStream({ current/initial }).",
387
+ kind: "external_store_fused:get_snapshot",
388
+ trigger: {
389
+ kind: "trait",
390
+ name: "externalStore.getSnapshot",
391
+ details: {
392
+ fieldPath,
393
+ traitId: step.id,
394
+ storeKind: rawDescriptor?.kind ?? "raw",
395
+ error: errorMessage
396
+ }
397
+ }
398
+ });
399
+ });
400
+ const signal = () => {
401
+ if (fused) return;
402
+ if (resume) {
403
+ const r = resume;
404
+ pending = false;
405
+ r();
406
+ return;
407
+ }
408
+ pending = true;
409
+ };
410
+ const awaitSignal = () => {
411
+ if (pending) {
412
+ pending = false;
413
+ return Effect.void;
414
+ }
415
+ return Effect.promise(
416
+ (signal2) => new Promise((resolve) => {
417
+ let done = false;
418
+ const r = () => {
419
+ if (done) return;
420
+ done = true;
421
+ resume = void 0;
422
+ resolve();
423
+ };
424
+ resume = r;
425
+ signal2.addEventListener(
426
+ "abort",
427
+ () => {
428
+ if (resume === r) {
429
+ resume = void 0;
430
+ }
431
+ },
432
+ { once: true }
433
+ );
434
+ })
435
+ );
436
+ };
437
+ const getSnapshotOrFuse = () => {
438
+ try {
439
+ return store.getSnapshot();
440
+ } catch (err) {
441
+ fused = true;
442
+ fuseCause = err;
443
+ return void 0;
444
+ }
445
+ };
446
+ const readSnapshotOrFuse = Effect.provideService(Effect.sync(getSnapshotOrFuse), inSyncTransactionFiber, false);
447
+ const before = yield* readSnapshotOrFuse;
448
+ if (fused) {
449
+ yield* recordFuseDiagnostic;
450
+ return;
451
+ }
452
+ const unsubscribe = store.subscribe(signal);
453
+ yield* Effect.addFinalizer(
454
+ () => Effect.sync(() => {
455
+ try {
456
+ unsubscribe?.();
457
+ } catch {
458
+ }
459
+ })
460
+ );
461
+ const after = yield* readSnapshotOrFuse;
462
+ if (fused) {
463
+ yield* recordFuseDiagnostic;
464
+ return;
465
+ }
466
+ const coordinator = yield* getOrCreateExternalStoreWritebackCoordinator({ internals, bound, env });
467
+ const normalizedPatchPath = normalizeFieldPath(fieldPath) ?? [];
468
+ const commitPriority = traitLane === "nonUrgent" ? "low" : "normal";
469
+ const writeValueSync = (nextValue) => Effect.gen(function* () {
470
+ const inTxn = yield* Effect.service(inSyncTransactionFiber).pipe(Effect.orDie);
471
+ const body = Effect.gen(function* () {
472
+ const prevState = yield* bound.state.read;
473
+ const prevValue = getAtPath(prevState, fieldPath);
474
+ if (isEqual(prevValue, nextValue)) {
475
+ return;
476
+ }
477
+ const nextDraft = create(prevState, (draft) => {
478
+ setAtPathMutating(draft, fieldPath, nextValue);
479
+ });
480
+ internals.txn.recordStatePatch(normalizedPatchPath, "trait-external-store", prevValue, nextValue, step.id);
481
+ internals.txn.updateDraft(nextDraft);
482
+ });
483
+ if (inTxn) {
484
+ return yield* body;
485
+ }
486
+ return yield* internals.txn.runWithStateTransaction(
487
+ {
488
+ kind: "trait-external-store",
489
+ name: fieldPath,
490
+ details: {
491
+ stateCommit: {
492
+ priority: commitPriority
493
+ }
494
+ }
495
+ },
496
+ () => body.pipe(Effect.asVoid)
497
+ );
498
+ }).pipe(Effect.provideServices(env));
499
+ const enqueueWriteValue = (nextValue) => coordinator.enqueue({
500
+ fieldPath,
501
+ traitNodeId: step.id,
502
+ normalizedPatchPath,
503
+ nextValue,
504
+ isEqual,
505
+ commitPriority
506
+ });
507
+ yield* writeValueSync(computeValue(after));
508
+ if (!isEqual(before, after)) {
509
+ signal();
510
+ }
511
+ const fiber = yield* Effect.forkDetach(
512
+ Effect.provideService(Effect.gen(function* () {
513
+ while (true) {
514
+ yield* awaitSignal();
515
+ if (fused) return;
516
+ const snapshot = yield* readSnapshotOrFuse;
517
+ if (fused) {
518
+ yield* recordFuseDiagnostic;
519
+ return;
520
+ }
521
+ yield* enqueueWriteValue(computeValue(snapshot));
522
+ }
523
+ }), inSyncTransactionFiber, false),
524
+ { startImmediately: true }
525
+ );
526
+ internals.lifecycle.registerDestroy(Fiber.interrupt(fiber).pipe(Effect.asVoid), { name: `externalStore:${fieldPath}:writeback` });
527
+ });
528
+
529
+ // src/internal/state-trait/meta-diagnostics.ts
530
+ import { Effect as Effect2 } from "effect";
531
+ var formatList = (items, limit = 6) => {
532
+ if (!items || items.length === 0) return void 0;
533
+ if (items.length <= limit) return items.join(", ");
534
+ return `${items.slice(0, limit).join(", ")}, \u2026(+${items.length - limit})`;
535
+ };
536
+ var formatPart = (label, value) => {
537
+ if (value === void 0) return void 0;
538
+ return `${label}=${value}`;
539
+ };
540
+ var formatIssue = (issue) => {
541
+ const r = issue.report;
542
+ const parts = [];
543
+ if (r.invalidInput) parts.push("invalidInput=true");
544
+ const unknownKeys = formatList(r.unknownKeys, 6);
545
+ if (unknownKeys) {
546
+ parts.push(
547
+ `unknownKeys=[${unknownKeys}]${typeof r.unknownKeyCount === "number" && r.unknownKeyCount > r.unknownKeys.length ? ` total=${r.unknownKeyCount}` : ""}`
548
+ );
549
+ }
550
+ const droppedKeys = formatList(r.droppedKeys, 6);
551
+ if (droppedKeys) parts.push(`droppedKeys=[${droppedKeys}]`);
552
+ if (typeof r.droppedTagItems === "number" && r.droppedTagItems > 0) {
553
+ parts.push(`droppedTagItems=${r.droppedTagItems}`);
554
+ }
555
+ const ignoredAnnotationKeys = formatList(r.ignoredAnnotationKeys, 6);
556
+ if (ignoredAnnotationKeys) {
557
+ parts.push(
558
+ `ignoredAnnotationKeys=[${ignoredAnnotationKeys}]${typeof r.ignoredAnnotationKeyCount === "number" && r.ignoredAnnotationKeyCount > r.ignoredAnnotationKeys.length ? ` total=${r.ignoredAnnotationKeyCount}` : ""}`
559
+ );
560
+ }
561
+ const droppedAnnotationKeys = formatList(r.droppedAnnotationKeys, 6);
562
+ if (droppedAnnotationKeys) {
563
+ parts.push(
564
+ `droppedAnnotationKeys=[${droppedAnnotationKeys}]${typeof r.droppedAnnotationKeyCount === "number" && r.droppedAnnotationKeyCount > r.droppedAnnotationKeys.length ? ` total=${r.droppedAnnotationKeyCount}` : ""}`
565
+ );
566
+ }
567
+ const droppedValues = formatPart("droppedAnnotationValues", r.droppedAnnotationValues);
568
+ if (droppedValues) parts.push(droppedValues);
569
+ const nonSerializable = formatPart("nonSerializable", r.droppedAnnotationNonSerializable);
570
+ const depthExceeded = formatPart("depthExceeded", r.droppedAnnotationDepthExceeded);
571
+ const nonFiniteNumber = formatPart("nonFiniteNumber", r.droppedAnnotationNonFiniteNumber);
572
+ const reasons = [nonSerializable, depthExceeded, nonFiniteNumber].filter((x) => x !== void 0);
573
+ if (reasons.length > 0) parts.push(`reasons={${reasons.join(", ")}}`);
574
+ return `[${issue.origin}] ${parts.join(" ")}`;
575
+ };
576
+ var collectNodeMetaIssues = (program) => {
577
+ const spec = program.spec;
578
+ if (!spec || typeof spec !== "object") return [];
579
+ const isNode = (value) => typeof value === "object" && value !== null && value._tag === "StateTraitNode";
580
+ const isList = (value) => typeof value === "object" && value !== null && value._tag === "StateTraitList";
581
+ const issues = [];
582
+ const add = (origin, meta) => {
583
+ const { report } = sanitizeWithReport(meta);
584
+ if (report) issues.push({ origin, report });
585
+ };
586
+ for (const key of Object.keys(spec)) {
587
+ const raw = spec[key];
588
+ if (!raw) continue;
589
+ if (isList(raw)) {
590
+ if (raw.item && isNode(raw.item) && raw.item.meta !== void 0) {
591
+ add(`node:${key}[]`, raw.item.meta);
592
+ }
593
+ if (raw.list && isNode(raw.list) && raw.list.meta !== void 0) {
594
+ add(`node:${key}`, raw.list.meta);
595
+ }
596
+ continue;
597
+ }
598
+ if (isNode(raw)) {
599
+ if (raw.meta === void 0) continue;
600
+ add(`node:${key === "$root" ? "$root" : key}`, raw.meta);
601
+ continue;
602
+ }
603
+ }
604
+ return issues;
605
+ };
606
+ var collectEntryMetaIssues = (program) => {
607
+ const issues = [];
608
+ for (const entry of program.entries) {
609
+ if (entry.kind !== "source" && entry.kind !== "externalStore") continue;
610
+ const rawMeta = entry.meta?.meta;
611
+ if (rawMeta === void 0) continue;
612
+ const origin = entry.kind === "source" ? `source:${entry.fieldPath}` : `externalStore:${entry.fieldPath}`;
613
+ const { report } = sanitizeWithReport(rawMeta);
614
+ if (report) issues.push({ origin, report });
615
+ }
616
+ return issues;
617
+ };
618
+ var emitMetaSanitizeDiagnostics = (program, ctx) => Effect2.gen(function* () {
619
+ if (!isDevEnv()) return;
620
+ const level = yield* Effect2.service(currentDiagnosticsLevel).pipe(Effect2.orDie);
621
+ if (level === "off") return;
622
+ const moduleId = ctx.moduleId ?? "unknown";
623
+ const shouldEmit = yield* onceInRunSession(`meta_sanitize:${moduleId}`);
624
+ if (!shouldEmit) return;
625
+ const issues = [...collectNodeMetaIssues(program), ...collectEntryMetaIssues(program)];
626
+ if (issues.length === 0) return;
627
+ const limit = level === "light" || level === "sampled" ? 8 : 24;
628
+ const lines = issues.slice(0, limit).map(formatIssue);
629
+ if (issues.length > limit) {
630
+ lines.push(`\u2026(+${issues.length - limit})`);
631
+ }
632
+ yield* record({
633
+ type: "diagnostic",
634
+ moduleId: ctx.moduleId,
635
+ instanceId: ctx.instanceId,
636
+ code: "state_trait::meta_sanitized",
637
+ severity: "warning",
638
+ message: `[meta] TraitMeta contains non-exportable fields/values and will be sanitized (total ${issues.length}):
639
+ ${lines.join("\n")}`,
640
+ hint: "TraitMeta is export-only (Devtools/Static IR) and MUST be JsonValue. Use `annotations` with `x-*` keys for extension hints; avoid closures/functions/Effect/Fiber/Tag/DOM/BigInt/circular refs. See specs/016 and docs/ssot/platform/contracts/03-control-surface-manifest.md.",
641
+ kind: "meta_sanitized"
642
+ });
643
+ });
644
+
645
+ // src/internal/state-trait/install.ts
646
+ var buildEntryIndex = (entries) => {
647
+ const index = /* @__PURE__ */ new Map();
648
+ for (const entry of entries) {
649
+ const list2 = index.get(entry.fieldPath) ?? [];
650
+ list2.push(entry);
651
+ index.set(entry.fieldPath, list2);
652
+ }
653
+ return index;
654
+ };
655
+ var install = (bound, program) => {
656
+ return Effect3.gen(function* () {
657
+ let internals;
658
+ try {
659
+ internals = getBoundInternals(bound);
660
+ internals.traits.registerStateTraitProgram(program, {
661
+ bumpReason: "logic_installed"
662
+ });
663
+ } catch {
664
+ }
665
+ if (internals) {
666
+ yield* emitMetaSanitizeDiagnostics(program, {
667
+ moduleId: internals.moduleId,
668
+ instanceId: internals.instanceId
669
+ });
670
+ }
671
+ const entryIndex = buildEntryIndex(program.entries);
672
+ const installStep = (step) => {
673
+ if (!step.targetFieldPath) {
674
+ return Effect3.void;
675
+ }
676
+ if (step.kind !== "source-refresh" && step.kind !== "external-store-sync") {
677
+ return Effect3.void;
678
+ }
679
+ const candidates = entryIndex.get(step.targetFieldPath);
680
+ if (!candidates || candidates.length === 0) {
681
+ return Effect3.void;
682
+ }
683
+ const entry = step.kind === "source-refresh" ? candidates.find((e) => e.kind === "source") : candidates.find((e) => e.kind === "externalStore");
684
+ if (!entry) {
685
+ return Effect3.void;
686
+ }
687
+ return step.kind === "source-refresh" ? installSourceRefresh(bound, step, entry) : installExternalStoreSync(bound, step, entry);
688
+ };
689
+ yield* Effect3.forEach(program.plan.steps, (step) => installStep(step)).pipe(Effect3.asVoid);
690
+ }).pipe(Effect3.asVoid);
691
+ };
692
+
693
+ // src/StateTrait.ts
694
+ var $root = "$root";
695
+ var from = (_schema) => (spec) => spec;
696
+ var node = (spec) => ({
697
+ _tag: "StateTraitNode",
698
+ ...spec
699
+ });
700
+ var list = (spec) => ({
701
+ _tag: "StateTraitList",
702
+ ...spec
703
+ });
704
+ var computed = (input) => {
705
+ const derive = (state) => {
706
+ const args = input.deps.map((dep) => getAtPath(state, dep));
707
+ return input.get(...args);
708
+ };
709
+ return {
710
+ fieldPath: void 0,
711
+ kind: "computed",
712
+ meta: {
713
+ deps: input.deps,
714
+ derive,
715
+ equals: input.equals,
716
+ ...input.scheduling ? { scheduling: input.scheduling } : {}
717
+ }
718
+ };
719
+ };
720
+ var source = (input) => {
721
+ const key = (state) => {
722
+ const args = input.deps.map((dep) => getAtPath(state, dep));
723
+ return input.key(...args);
724
+ };
725
+ return {
726
+ fieldPath: void 0,
727
+ kind: "source",
728
+ meta: { ...input, key }
729
+ };
730
+ };
731
+ var externalStore = (input) => ({
732
+ fieldPath: void 0,
733
+ kind: "externalStore",
734
+ meta: input
735
+ });
736
+ var link = (meta) => ({
737
+ fieldPath: void 0,
738
+ kind: "link",
739
+ meta: { ...meta, ...meta.scheduling ? { scheduling: meta.scheduling } : {} }
740
+ });
741
+ var build2 = (stateSchema, spec) => build(stateSchema, spec);
742
+ var install2 = (bound, program) => install(bound, program);
743
+ var exportStaticIr2 = (program, moduleId, options) => exportStaticIr({
744
+ program,
745
+ moduleId,
746
+ version: options?.version
747
+ });
748
+
749
+ export {
750
+ $root,
751
+ from,
752
+ node,
753
+ list,
754
+ computed,
755
+ source,
756
+ externalStore,
757
+ link,
758
+ build2 as build,
759
+ install2 as install,
760
+ exportStaticIr2 as exportStaticIr,
761
+ StateTrait_exports
762
+ };
763
+ //# sourceMappingURL=chunk-GWSM4KLB.js.map