@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 @@
1
+ {"version":3,"sources":["../src/internal/runtime/core/process/meta.ts","../src/internal/observability/evidenceCollector.ts","../src/internal/observability/evidenceExportPipeline.ts","../src/internal/runtime/core/process/ProcessRuntime.make.ts","../src/internal/runtime/core/process/identity.ts","../src/internal/runtime/core/process/concurrency.ts","../src/internal/runtime/core/process/events.ts","../src/internal/runtime/core/process/selectorSchema.ts","../src/internal/runtime/core/process/triggerStartPlan.ts","../src/internal/runtime/core/process/triggerStreams.ts","../src/internal/runtime/core/process/selectorDiagnostics.ts","../src/internal/runtime/core/process/supervision.ts"],"sourcesContent":["import type { Effect } from 'effect'\nimport type { ProcessDefinition, ProcessScope } from './protocol.js'\n\nexport type ProcessMeta = {\n readonly definition: ProcessDefinition\n /**\n * installationScope: part of Static IR.\n * - For instance-scope / subtree-scope scenarios, the runtime overwrites this field during installation with a derived effect.\n * - This field is for export/diagnostics only; it does not participate in stable identity derivation (see identity.ts).\n */\n readonly installationScope?: ProcessScope\n readonly kind?: 'process' | 'link' | 'declarativeLink'\n}\n\nexport const PROCESS_META = Symbol.for('@logixjs/core/processMeta')\n\nexport type ProcessEffect<E = never, R = never> = Effect.Effect<void, E, R> & {\n readonly [PROCESS_META]?: ProcessMeta\n}\n\nconst defineHidden = (target: object, key: symbol, value: unknown): void => {\n Object.defineProperty(target, key, {\n value,\n enumerable: false,\n configurable: true,\n writable: false,\n })\n}\n\nexport const getMeta = (effect: Effect.Effect<void, any, any>): ProcessMeta | undefined =>\n (effect as ProcessEffect)[PROCESS_META]\n\nexport const getDefinition = (effect: Effect.Effect<void, any, any>): ProcessDefinition | undefined =>\n getMeta(effect)?.definition\n\nexport const attachMeta = <E, R>(effect: Effect.Effect<void, E, R>, meta: ProcessMeta): ProcessEffect<E, R> => {\n defineHidden(effect as any, PROCESS_META, meta)\n return effect as ProcessEffect<E, R>\n}\n","import { Effect, Layer, ServiceMap } from 'effect'\nimport type { JsonValue } from './jsonValue.js'\nimport { projectJsonValue } from './jsonValue.js'\nimport type { EvidencePackage } from './evidence.js'\nimport { collectEvidenceExport, reExportEvidencePackage, summarizeEvidenceExport } from './evidenceExportPipeline.js'\nimport type { RunSession } from './runSession.js'\nimport { makeEvidenceSink } from './runSession.js'\nimport {\n currentDiagnosticsLevel,\n toRuntimeDebugEventRef,\n type Event as DebugEvent,\n type Sink as DebugSink,\n} from '../runtime/core/DebugSink.js'\n\nexport interface EvidenceCollector {\n readonly session: RunSession\n readonly debugSink: DebugSink\n readonly registerConvergeStaticIr: (staticIr: unknown) => void\n readonly setKernelImplementationRef: (ref: unknown) => void\n readonly setRuntimeServicesEvidence: (evidence: unknown) => void\n readonly exportEvidencePackage: (options?: { readonly maxEvents?: number }) => EvidencePackage\n readonly clear: () => void\n}\n\nclass EvidenceCollectorTagImpl extends ServiceMap.Service<\n EvidenceCollectorTagImpl,\n EvidenceCollector\n>()('@logixjs/core/EvidenceCollector') {}\n\nexport const EvidenceCollectorTag = EvidenceCollectorTagImpl\n\nexport const evidenceCollectorLayer = (\n collector: EvidenceCollector,\n): Layer.Layer<EvidenceCollectorTagImpl, never, never> =>\n Layer.succeed(EvidenceCollectorTag, collector) as Layer.Layer<EvidenceCollectorTagImpl, never, never>\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nexport const makeEvidenceCollector = (session: RunSession): EvidenceCollector => {\n const sink = makeEvidenceSink(session)\n\n const convergeStaticIrByDigest = new Map<string, JsonValue>()\n let kernelImplementationRef: JsonValue | undefined\n let runtimeServicesEvidence: JsonValue | undefined\n\n const exportBudget = {\n dropped: 0,\n oversized: 0,\n nonSerializable: 0,\n }\n\n const debugSink: DebugSink = {\n record: (event: DebugEvent) =>\n Effect.gen(function* () {\n const level = yield* Effect.service(currentDiagnosticsLevel)\n const instanceIdRaw = (event as any).instanceId\n const instanceId = typeof instanceIdRaw === 'string' && instanceIdRaw.length > 0 ? instanceIdRaw : 'unknown'\n const eventSeq = level === 'off' ? undefined : session.local.nextSeq('eventSeq', instanceId)\n const ref = toRuntimeDebugEventRef(event, {\n diagnosticsLevel: level,\n eventSeq,\n onMetaProjection: ({ stats }) => {\n exportBudget.dropped += stats.dropped\n exportBudget.oversized += stats.oversized\n },\n })\n if (!ref) return\n\n const projected = projectJsonValue(ref)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n\n sink.record('debug:event', projected.value, {\n timestamp: ref.timestamp,\n })\n }),\n }\n\n const registerConvergeStaticIr = (staticIr: unknown): void => {\n if (!isRecord(staticIr)) return\n const digest = staticIr.staticIrDigest\n if (typeof digest !== 'string' || digest.length === 0) return\n const projected = projectJsonValue(staticIr)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n convergeStaticIrByDigest.set(digest, projected.value)\n }\n\n const setKernelImplementationRef = (ref: unknown): void => {\n const projected = projectJsonValue(ref)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n kernelImplementationRef = projected.value\n }\n\n const setRuntimeServicesEvidence = (evidence: unknown): void => {\n const projected = projectJsonValue(evidence)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n runtimeServicesEvidence = projected.value\n }\n\n const exportEvidencePackage = (options?: { readonly maxEvents?: number }): EvidencePackage => {\n const collection = collectEvidenceExport({\n convergeStaticIrByDigest,\n kernelImplementationRef,\n runtimeServicesEvidence,\n })\n const summary = summarizeEvidenceExport(collection)\n\n return reExportEvidencePackage({\n sink,\n maxEvents: options?.maxEvents,\n summary,\n })\n }\n\n const clear = (): void => {\n sink.clear()\n convergeStaticIrByDigest.clear()\n kernelImplementationRef = undefined\n runtimeServicesEvidence = undefined\n exportBudget.dropped = 0\n exportBudget.oversized = 0\n exportBudget.nonSerializable = 0\n }\n\n return {\n session,\n debugSink,\n registerConvergeStaticIr,\n setKernelImplementationRef,\n setRuntimeServicesEvidence,\n exportEvidencePackage,\n clear,\n }\n}\n","import type { EvidencePackage } from './evidence.js'\nimport type { JsonValue } from './jsonValue.js'\nimport type { EvidenceSink } from './runSession.js'\n\nexport interface EvidenceExportCollection {\n readonly convergeSummary?: JsonValue\n readonly runtimeSummary?: JsonValue\n}\n\nexport interface EvidenceExportSummary {\n readonly summary?: JsonValue\n}\n\nexport const collectEvidenceExport = (args: {\n readonly convergeStaticIrByDigest: ReadonlyMap<string, JsonValue>\n readonly kernelImplementationRef?: JsonValue\n readonly runtimeServicesEvidence?: JsonValue\n}): EvidenceExportCollection => {\n const convergeSummary =\n args.convergeStaticIrByDigest.size > 0\n ? ({\n staticIrByDigest: Object.fromEntries(\n Array.from(args.convergeStaticIrByDigest.entries()).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)),\n ),\n } as unknown as JsonValue)\n : undefined\n\n const runtimeSummary =\n args.kernelImplementationRef != null || args.runtimeServicesEvidence != null\n ? ({\n ...(args.kernelImplementationRef != null ? { kernelImplementationRef: args.kernelImplementationRef } : {}),\n ...(args.runtimeServicesEvidence != null ? { services: args.runtimeServicesEvidence } : {}),\n } as unknown as JsonValue)\n : undefined\n\n return {\n convergeSummary,\n runtimeSummary,\n }\n}\n\nexport const summarizeEvidenceExport = (collection: EvidenceExportCollection): EvidenceExportSummary => {\n const summary =\n collection.convergeSummary != null || collection.runtimeSummary != null\n ? ({\n ...(collection.convergeSummary != null ? { converge: collection.convergeSummary } : {}),\n ...(collection.runtimeSummary != null ? { runtime: collection.runtimeSummary } : {}),\n } as unknown as JsonValue)\n : undefined\n\n return { summary }\n}\n\nexport const reExportEvidencePackage = (args: {\n readonly sink: EvidenceSink\n readonly maxEvents?: number\n readonly summary: EvidenceExportSummary\n}): EvidencePackage =>\n args.sink.export({\n maxEvents: args.maxEvents,\n summary: args.summary.summary,\n })\n","import { Cause, Deferred, Effect, Fiber, Layer, Option, PubSub, Queue, Ref, ServiceMap, Scope, Stream } from 'effect'\nimport * as Debug from '../DebugSink.js'\nimport { toSerializableErrorSummary } from '../errorSummary.js'\nimport * as TaskRunner from '../TaskRunner.js'\nimport { isDevEnv } from '../env.js'\nimport { getRuntimeInternals } from '../runtimeInternalsAccessor.js'\nimport * as Identity from './identity.js'\nimport * as ProcessConcurrency from './concurrency.js'\nimport * as ProcessEvents from './events.js'\nimport * as Meta from './meta.js'\nimport { resolveSchemaAst } from './selectorSchema.js'\nimport { compileProcessTriggerStartPlan, type ProcessTriggerStartPlan } from './triggerStartPlan.js'\nimport { makeNonPlatformTriggerStreamFactory } from './triggerStreams.js'\nimport { moduleRuntimeTagFromModuleId } from '../../../serviceId.js'\nimport type {\n ProcessControlRequest,\n ProcessDefinition,\n ProcessEvent,\n ProcessInstallation,\n ProcessInstanceIdentity,\n ProcessInstanceStatus,\n ProcessPlatformEvent,\n ProcessScope,\n ProcessTrigger,\n ProcessTriggerSpec,\n SerializableErrorSummary,\n} from './protocol.js'\nimport * as Supervision from './supervision.js'\n\ntype InstallationKey = string\ntype ProcessInstanceId = string\n\ntype ProcessInstallMode = 'switch' | 'exhaust'\n\ntype PlatformEventTriggerSpec = Extract<ProcessTriggerSpec, { readonly kind: 'platformEvent' }>\n\ntype InstallationState = {\n readonly identity: {\n readonly processId: string\n readonly scope: ProcessScope\n }\n readonly scopeKey: string\n readonly definition: ProcessDefinition\n env: ServiceMap.ServiceMap<any>\n forkScope: Scope.Scope\n readonly process: Effect.Effect<void, any, unknown>\n readonly kind: Meta.ProcessMeta['kind']\n readonly platformEventTriggerIndex: ReadonlyMap<string, ReadonlyArray<PlatformEventTriggerSpec>>\n readonly platformEventNames: ReadonlyArray<string>\n readonly startPlan: ProcessTriggerStartPlan\n enabled: boolean\n installedAt?: string\n nextRunSeq: number\n supervision: Supervision.SupervisionState\n currentInstanceId?: ProcessInstanceId\n pendingStart?: { readonly forkScope: Scope.Scope }\n}\n\ntype InstanceState = {\n readonly installationKey: InstallationKey\n readonly processInstanceId: ProcessInstanceId\n readonly identity: ProcessInstanceIdentity\n readonly processId: string\n readonly scope: ProcessScope\n readonly forkScope: Scope.Scope\n readonly platformTriggersQueue: Queue.Queue<ProcessTrigger>\n status: ProcessInstanceStatus\n nextEventSeq: number\n nextTriggerSeq: number\n fiber?: Fiber.Fiber<unknown, unknown>\n}\n\nexport interface ProcessRuntime {\n readonly install: <E, R>(\n process: Effect.Effect<void, E, R>,\n options: {\n readonly scope: ProcessScope\n readonly enabled?: boolean\n readonly installedAt?: string\n readonly mode?: ProcessInstallMode\n },\n ) => Effect.Effect<ProcessInstallation | undefined, never, R>\n readonly listInstallations: (filter?: {\n readonly scopeType?: ProcessScope['type']\n readonly scopeKey?: string\n }) => Effect.Effect<ReadonlyArray<ProcessInstallation>>\n readonly getInstanceStatus: (processInstanceId: string) => Effect.Effect<ProcessInstanceStatus | undefined>\n readonly controlInstance: (processInstanceId: string, request: ProcessControlRequest) => Effect.Effect<void>\n readonly deliverPlatformEvent: (event: ProcessPlatformEvent) => Effect.Effect<void>\n readonly events: Stream.Stream<ProcessEvent>\n readonly getEventsSnapshot: () => Effect.Effect<ReadonlyArray<ProcessEvent>>\n}\n\nexport class ProcessRuntimeTag extends ServiceMap.Service<ProcessRuntimeTag, ProcessRuntime>()('@logixjs/core/ProcessRuntime') {}\n\nconst currentProcessTrigger = ServiceMap.Reference<ProcessTrigger | undefined>('@logixjs/core/ProcessRuntime.currentTrigger', {\n defaultValue: () => undefined,\n})\nconst currentProcessEventBudget = ServiceMap.Reference<Ref.Ref<ProcessEvents.ProcessRunEventBudgetState> | undefined>(\n '@logixjs/core/ProcessRuntime.currentEventBudget',\n {\n defaultValue: () => undefined,\n },\n)\nconst RUNTIME_BOOT_EVENT = 'runtime:boot' as const\nconst PROCESS_EVENT_HISTORY_MAX_CAPACITY = 0xffff_fffe\n\nconst deriveDebugModuleId = (processId: string): string => `process:${processId}`\n\ntype ProcessDispatchPayload = NonNullable<ProcessEvent['dispatch']>\n\nconst deriveTxnAnchor = (event: ProcessEvent): { readonly txnSeq?: number; readonly txnId?: string } => {\n const trigger: any = event.trigger\n if (!trigger) return {}\n if (\n (trigger.kind === 'moduleAction' || trigger.kind === 'moduleStateChange') &&\n typeof trigger.instanceId === 'string' &&\n typeof trigger.txnSeq === 'number' &&\n Number.isFinite(trigger.txnSeq) &&\n trigger.txnSeq >= 1\n ) {\n const txnSeq = Math.floor(trigger.txnSeq)\n return {\n txnSeq,\n txnId: `${trigger.instanceId}::t${txnSeq}`,\n }\n }\n return {}\n}\n\ntype ProcessTriggerChainKernel = {\n readonly assignTriggerSeq: (trigger: ProcessTrigger) => ProcessTrigger\n readonly run: (trigger: ProcessTrigger, fatal: Deferred.Deferred<Cause.Cause<any>>) => Effect.Effect<void>\n readonly onDrop: (trigger: ProcessTrigger) => Effect.Effect<void>\n}\n\nconst makeProcessTriggerChainKernel = (args: {\n readonly shouldRecordChainEvents: boolean\n readonly nextTriggerSeq: () => number\n readonly makeBudgetState: (trigger: ProcessTrigger) => ProcessEvents.ProcessRunEventBudgetState\n readonly emitTriggerEvent: (trigger: ProcessTrigger, severity: ProcessEvent['severity']) => Effect.Effect<void>\n readonly runWithoutChainBudget: (\n trigger: ProcessTrigger,\n fatal: Deferred.Deferred<Cause.Cause<any>>,\n ) => Effect.Effect<void>\n}): ProcessTriggerChainKernel => {\n const assignTriggerSeq = (trigger: ProcessTrigger): ProcessTrigger => {\n if (!args.shouldRecordChainEvents) {\n return trigger\n }\n return {\n ...trigger,\n triggerSeq: args.nextTriggerSeq(),\n }\n }\n\n const run = (trigger: ProcessTrigger, fatal: Deferred.Deferred<Cause.Cause<any>>): Effect.Effect<void> => {\n if (!args.shouldRecordChainEvents) {\n return args.runWithoutChainBudget(trigger, fatal)\n }\n\n return Effect.gen(function* () {\n const budgetRef = yield* Ref.make(args.makeBudgetState(trigger))\n return yield* Effect.provideService(args.emitTriggerEvent(trigger, 'info').pipe(Effect.flatMap(() => args.runWithoutChainBudget(trigger, fatal))), currentProcessEventBudget, budgetRef)\n })\n }\n\n const onDrop = (trigger: ProcessTrigger): Effect.Effect<void> => args.emitTriggerEvent(trigger, 'warning')\n\n return {\n assignTriggerSeq,\n run,\n onDrop,\n }\n}\n\nconst shouldNoopDueToSyncTxn = (scope: ProcessScope, kind: string): Effect.Effect<boolean, never, never> => {\n const moduleId = scope.type === 'moduleInstance' ? scope.moduleId : undefined\n const instanceId = scope.type === 'moduleInstance' ? scope.instanceId : undefined\n return Effect.provideService(\n TaskRunner.shouldNoopInSyncTransactionFiber({\n moduleId,\n instanceId,\n code: 'process::invalid_usage',\n severity: 'error',\n message:\n 'ProcessRuntime scheduling is not allowed inside a synchronous StateTransaction body (it may deadlock the txnQueue).',\n hint:\n \"Trigger/schedule Process outside the transaction window (e.g. in a watcher's run section or a separate fiber); \" +\n 'do not trigger Process directly inside a reducer / synchronous transaction body.',\n kind,\n }),\n TaskRunner.inSyncTransactionFiber,\n false,\n )\n}\n\nconst resolveRuntimeStateSchemaAst = (runtime: unknown): ReturnType<typeof resolveSchemaAst> => {\n try {\n const internals = getRuntimeInternals(runtime as any)\n return resolveSchemaAst(internals.stateSchema)\n } catch {\n return undefined\n }\n}\n\nconst withModuleHint = (error: Error, moduleId: string): Error => {\n const hint = (error as any).hint\n if (typeof hint === 'string' && hint.length > 0) {\n if (!hint.includes('moduleId=')) {\n ;(error as any).hint = `moduleId=${moduleId}\\n${hint}`\n }\n return error\n }\n ;(error as any).hint = `moduleId=${moduleId}`\n return error\n}\n\nconst actionIdFromUnknown = (action: unknown): string | undefined => {\n if (!action || typeof action !== 'object') return undefined\n const anyAction = action as any\n if (typeof anyAction._tag === 'string' && anyAction._tag.length > 0) return anyAction._tag\n if (typeof anyAction.type === 'string' && anyAction.type.length > 0) return anyAction.type\n return undefined\n}\n\nconst buildPlatformEventTriggerIndex = (\n definition: ProcessDefinition,\n): ReadonlyMap<string, ReadonlyArray<PlatformEventTriggerSpec>> => {\n const index = new Map<string, PlatformEventTriggerSpec[]>()\n for (const trigger of definition.triggers) {\n if (trigger.kind !== 'platformEvent') continue\n const current = index.get(trigger.platformEvent)\n if (current) {\n current.push(trigger)\n } else {\n index.set(trigger.platformEvent, [trigger])\n }\n }\n return index\n}\n\nconst syncPlatformEventInstallations = (options: {\n installationKey: InstallationKey,\n previousEventNames: ReadonlyArray<string>\n nextTriggerIndex: ReadonlyMap<string, ReadonlyArray<PlatformEventTriggerSpec>>\n installationsByEventName: Map<string, Set<InstallationKey>>\n}): ReadonlyArray<string> => {\n for (const eventName of options.previousEventNames) {\n const current = options.installationsByEventName.get(eventName)\n if (!current) continue\n current.delete(options.installationKey)\n if (current.size === 0) {\n options.installationsByEventName.delete(eventName)\n }\n }\n\n const nextEventNames = Array.from(options.nextTriggerIndex.keys())\n for (const eventName of nextEventNames) {\n const current = options.installationsByEventName.get(eventName)\n if (current) {\n current.add(options.installationKey)\n } else {\n options.installationsByEventName.set(eventName, new Set([options.installationKey]))\n }\n }\n\n return nextEventNames\n}\n\nexport const make = (options?: {\n readonly maxEventHistory?: number\n}): Effect.Effect<ProcessRuntime, never, Scope.Scope> =>\n Effect.gen(function* () {\n const runtimeScope = yield* Effect.scope\n const requestedMaxEventHistory =\n typeof options?.maxEventHistory === 'number' &&\n Number.isFinite(options.maxEventHistory) &&\n options.maxEventHistory >= 0\n ? Math.floor(options.maxEventHistory)\n : 500\n const maxEventHistory = Math.min(requestedMaxEventHistory, PROCESS_EVENT_HISTORY_MAX_CAPACITY)\n\n const installations = new Map<InstallationKey, InstallationState>()\n const installationsByPlatformEvent = new Map<string, Set<InstallationKey>>()\n const instances = new Map<ProcessInstanceId, InstanceState>()\n\n const eventHistoryCapacity = maxEventHistory > 0 ? maxEventHistory : 0\n const eventHistoryRing: ProcessEvent[] = []\n let eventHistoryStart = 0\n let eventHistorySize = 0\n const eventsHub = yield* PubSub.sliding<ProcessEvent>(Math.max(1, Math.min(2048, maxEventHistory)))\n\n const appendEventHistory = (event: ProcessEvent): void => {\n if (eventHistoryCapacity <= 0) {\n eventHistorySize = 0\n eventHistoryStart = 0\n return\n }\n\n if (eventHistorySize < eventHistoryCapacity) {\n const writeIndex = (eventHistoryStart + eventHistorySize) % eventHistoryCapacity\n if (writeIndex === eventHistoryRing.length) {\n eventHistoryRing.push(event)\n } else {\n eventHistoryRing[writeIndex] = event\n }\n eventHistorySize += 1\n return\n }\n\n eventHistoryRing[eventHistoryStart] = event\n eventHistoryStart = (eventHistoryStart + 1) % eventHistoryCapacity\n }\n\n const snapshotEventHistory = (): ReadonlyArray<ProcessEvent> => {\n if (eventHistoryCapacity <= 0 || eventHistorySize === 0) {\n return []\n }\n\n const snapshot = new Array<ProcessEvent>(eventHistorySize)\n for (let index = 0; index < eventHistorySize; index += 1) {\n const ringIndex = (eventHistoryStart + index) % eventHistoryCapacity\n snapshot[index] = eventHistoryRing[ringIndex] as ProcessEvent\n }\n return snapshot\n }\n\n const recordDebugEvent = (event: ProcessEvent): Effect.Effect<void> =>\n Effect.gen(function* () {\n const diagnosticsLevel = yield* Effect.service(Debug.currentDiagnosticsLevel).pipe(Effect.orDie)\n\n // diagnostics=off: avoid entering Debug sinks (near-zero cost); error cases are exposed via diagnostic events.\n if (diagnosticsLevel === 'off') {\n return\n }\n\n const processId = event.identity.identity.processId\n const processInstanceId = Identity.processInstanceIdFromIdentity(event.identity)\n const moduleId = deriveDebugModuleId(processId)\n const { txnSeq, txnId } = deriveTxnAnchor(event)\n\n yield* Debug.record({\n type: event.type,\n moduleId,\n instanceId: processInstanceId,\n identity: event.identity,\n severity: event.severity,\n eventSeq: event.eventSeq,\n timestampMs: event.timestampMs,\n trigger: event.trigger,\n dispatch: event.dispatch,\n error: event.error,\n budgetEnvelope: (event as any).budgetEnvelope,\n degrade: (event as any).degrade,\n txnSeq,\n txnId,\n } as any)\n })\n\n const publishEvent = (event: ProcessEvent): Effect.Effect<void> =>\n Effect.gen(function* () {\n appendEventHistory(event)\n yield* PubSub.publish(eventsHub, event)\n yield* recordDebugEvent(event)\n })\n\n const emit = (event: ProcessEvent): Effect.Effect<void> =>\n Effect.gen(function* () {\n const budgetRef = yield* Effect.service(currentProcessEventBudget).pipe(Effect.orDie)\n if (budgetRef) {\n const decision = yield* Ref.modify(budgetRef, (state) => {\n const [nextDecision, nextState] = ProcessEvents.applyProcessRunEventBudget(state, event)\n return [nextDecision, nextState] as const\n })\n\n if (decision._tag === 'emit' || decision._tag === 'emitSummary') {\n yield* publishEvent(decision.event)\n }\n return\n }\n\n const enforced = ProcessEvents.enforceProcessEventMaxBytes(event)\n yield* publishEvent(enforced.event)\n })\n\n const emitErrorDiagnostic = (\n scope: ProcessScope,\n processId: string,\n code: string,\n message: string,\n hint?: string,\n ): Effect.Effect<void> => {\n if (!isDevEnv()) {\n return Effect.void\n }\n const moduleId = scope.type === 'moduleInstance' ? scope.moduleId : undefined\n const instanceId = scope.type === 'moduleInstance' ? scope.instanceId : undefined\n return Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n code,\n severity: 'error',\n message,\n hint,\n actionTag: processId,\n kind: 'process_runtime',\n })\n }\n\n const resolveMissingDependencies = (installation: InstallationState): ReadonlyArray<string> => {\n const requires = installation.startPlan.dependencyModuleIds\n if (requires.length === 0) return []\n\n const missing: string[] = []\n for (const dep of requires) {\n if (typeof dep !== 'string' || dep.length === 0) continue\n\n const tag = moduleRuntimeTagFromModuleId(dep)\n const found = ServiceMap.getOption(installation.env, tag)\n if (Option.isNone(found)) {\n missing.push(dep)\n }\n }\n return missing\n }\n\n const buildModuleRuntimeRegistry = (\n installation: InstallationState,\n env: ServiceMap.ServiceMap<any>,\n ): ReadonlyMap<string, unknown> => {\n const registry = new Map<string, unknown>()\n for (const moduleId of installation.startPlan.dependencyModuleIds) {\n if (typeof moduleId !== 'string' || moduleId.length === 0 || registry.has(moduleId)) continue\n const tag = moduleRuntimeTagFromModuleId(moduleId)\n const found = ServiceMap.getOption(env, tag)\n if (Option.isSome(found)) {\n registry.set(moduleId, found.value)\n }\n }\n return registry\n }\n\n const stopInstance = (\n instance: InstanceState,\n reason: ProcessInstanceStatus['stoppedReason'],\n ): Effect.Effect<void> =>\n Effect.gen(function* () {\n if (\n instance.status.status === 'stopped' ||\n instance.status.status === 'failed' ||\n instance.status.status === 'stopping'\n ) {\n return\n }\n\n const fiber = instance.fiber\n instance.status = {\n ...instance.status,\n status: 'stopping',\n stoppedReason: reason,\n }\n\n if (fiber) {\n yield* Fiber.interrupt(fiber)\n }\n\n yield* Queue.shutdown(instance.platformTriggersQueue)\n\n instance.status = {\n ...instance.status,\n status: 'stopped',\n stoppedReason: reason,\n }\n instance.fiber = undefined\n\n const evt: ProcessEvent = {\n type: 'process:stop',\n identity: instance.identity,\n severity: 'info',\n eventSeq: instance.nextEventSeq++,\n timestampMs: Date.now(),\n }\n yield* emit(evt)\n\n const installation = installations.get(instance.installationKey)\n if (installation?.pendingStart) {\n installation.pendingStart = undefined\n yield* startInstallation(instance.installationKey)\n }\n })\n\n const startInstallation: (installationKey: InstallationKey) => Effect.Effect<void, never, never> = (installationKey) =>\n Effect.gen(function* () {\n const installation = installations.get(installationKey)\n if (!installation) return\n installation.pendingStart = undefined\n\n const noop = yield* shouldNoopDueToSyncTxn(installation.identity.scope, 'process_start_in_transaction')\n if (noop) return\n\n // Do not start again if an active instance already exists.\n const currentId = installation.currentInstanceId\n if (currentId) {\n const current = instances.get(currentId)\n if (current && (current.status.status === 'running' || current.status.status === 'starting')) {\n return\n }\n }\n\n const runSeq = installation.nextRunSeq++\n const identity: ProcessInstanceIdentity = {\n identity: installation.identity,\n runSeq,\n }\n const processInstanceId = Identity.processInstanceIdFromIdentity(identity)\n\n const platformTriggersQueue = yield* Queue.sliding<ProcessTrigger>(64)\n\n const instanceState: InstanceState = {\n installationKey,\n processInstanceId,\n identity,\n processId: installation.identity.processId,\n scope: installation.identity.scope,\n forkScope: installation.forkScope,\n platformTriggersQueue,\n status: {\n identity,\n status: 'starting',\n },\n nextEventSeq: 1,\n nextTriggerSeq: 1,\n }\n\n instances.set(processInstanceId, instanceState)\n installation.currentInstanceId = processInstanceId\n\n // When forkScope is disposed (e.g. uiSubtree unmount), ensure the instance transitions to stopped and emits a stop event.\n // - Do not rely on unstable \"whether interruption reaches catchAllCause\" behavior.\n // - Do not double-register on runtimeScope; the runtime finalizer already stops all instances.\n if (installation.forkScope !== runtimeScope) {\n yield* Scope.addFinalizer(\n installation.forkScope as Scope.Closeable,\n Effect.suspend(() => {\n const status = instanceState.status.status\n if (status === 'stopped' || status === 'failed' || status === 'stopping') {\n return Effect.void\n }\n return stopInstance(instanceState, 'scopeDisposed')\n }).pipe(Effect.catchCause(() => Effect.void)),\n )\n }\n\n // start event: indicates the instance has entered the start flow (fiber has been forked).\n yield* emit({\n type: 'process:start',\n identity,\n severity: 'info',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n })\n\n const missing = resolveMissingDependencies(installation)\n if (missing.length > 0) {\n const hint = isDevEnv()\n ? [\n 'Strict scope dependency resolution: missing required modules in the current scope.',\n `missing: ${missing.join(', ')}`,\n '',\n 'fix:',\n '- Provide the missing module implementation(s) in the same scope via imports.',\n ` Example: RootModule.implement({ imports: [${missing[0]}.implement(...).impl], processes: [...] })`,\n '- Do not rely on cross-scope fallbacks / guessing instances.',\n ].join('\\n')\n : undefined\n\n const error: SerializableErrorSummary = {\n message: `Missing dependencies in scope: ${missing.join(', ')}`,\n code: 'process::missing_dependency',\n hint,\n }\n\n instanceState.status = {\n ...instanceState.status,\n status: 'failed',\n stoppedReason: 'failed',\n lastError: error,\n }\n\n yield* emit({\n type: 'process:error',\n identity,\n severity: 'error',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n error,\n })\n\n yield* emitErrorDiagnostic(\n installation.identity.scope,\n installation.identity.processId,\n 'process::missing_dependency',\n error.message,\n hint,\n )\n return\n }\n\n const shouldRecordChainEvents = installation.definition.diagnosticsLevel !== 'off'\n\n const baseEnv = installation.env\n const moduleRuntimeRegistry = buildModuleRuntimeRegistry(installation, baseEnv)\n\n const makeWrappedEnv = (): ServiceMap.ServiceMap<any> => {\n if (!shouldRecordChainEvents) {\n return baseEnv\n }\n\n const requires = installation.startPlan.dispatchTracingModuleIds\n if (requires.length === 0) {\n return baseEnv\n }\n\n let nextEnv = baseEnv\n\n for (const moduleId of requires) {\n if (typeof moduleId !== 'string' || moduleId.length === 0) continue\n const tag = moduleRuntimeTagFromModuleId(moduleId)\n const found = ServiceMap.getOption(baseEnv, tag)\n if (Option.isNone(found)) continue\n const runtime = found.value as any\n\n const recordDispatch = (action: unknown) =>\n Effect.gen(function* () {\n const trigger = yield* Effect.service(currentProcessTrigger).pipe(Effect.orDie)\n if (!trigger) return\n\n const actionId = actionIdFromUnknown(action) ?? 'unknown'\n const dispatchModuleId = typeof runtime.moduleId === 'string' ? runtime.moduleId : moduleId\n const dispatchInstanceId = typeof runtime.instanceId === 'string' ? runtime.instanceId : 'unknown'\n\n yield* emit(\n makeDispatchEvent(trigger, {\n moduleId: dispatchModuleId,\n instanceId: dispatchInstanceId,\n actionId,\n }),\n )\n })\n\n const wrapped = {\n ...runtime,\n dispatch: (action: unknown) => runtime.dispatch(action).pipe(Effect.tap(() => recordDispatch(action))),\n dispatchLowPriority: (action: unknown) =>\n runtime.dispatchLowPriority(action).pipe(Effect.tap(() => recordDispatch(action))),\n dispatchBatch: (actions: ReadonlyArray<unknown>) =>\n runtime\n .dispatchBatch(actions)\n .pipe(Effect.tap(() => Effect.forEach(actions, recordDispatch, { discard: true }))),\n }\n\n nextEnv = ServiceMap.add(nextEnv, tag, wrapped)\n }\n\n return nextEnv\n }\n\n const wrappedEnv = makeWrappedEnv()\n const providedProcess = Effect.provide(installation.process, wrappedEnv)\n\n const nextProcessEventMeta = () => ({\n identity,\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n })\n\n const makeDispatchEvent = (\n trigger: ProcessTrigger,\n dispatch: ProcessDispatchPayload,\n ): ProcessEvent => ({\n type: 'process:dispatch',\n trigger,\n dispatch,\n severity: 'info',\n ...nextProcessEventMeta(),\n })\n\n const makeTriggerEvent = (\n trigger: ProcessTrigger,\n severity: ProcessEvent['severity'],\n error?: SerializableErrorSummary,\n ): ProcessEvent => ({\n type: 'process:trigger',\n trigger,\n severity,\n ...(error ? { error } : null),\n ...nextProcessEventMeta(),\n })\n\n const makeTriggerStream = makeNonPlatformTriggerStreamFactory({\n moduleRuntimeRegistry,\n shouldRecordChainEvents,\n actionIdFromUnknown,\n resolveRuntimeStateSchemaAst,\n withModuleHint,\n emitSelectorWarning: (trigger, warning) => emit(makeTriggerEvent(trigger, 'warning', warning)),\n })\n\n const makeRun = (trigger: ProcessTrigger, fatal: Deferred.Deferred<Cause.Cause<any>>): Effect.Effect<void> =>\n Effect.provideService(providedProcess.pipe(\n Effect.catchCause((cause) => {\n if (Cause.hasInterruptsOnly(cause)) {\n return Effect.void\n }\n return Deferred.succeed(fatal, cause).pipe(\n Effect.asVoid,\n Effect.catch(() => Effect.void),\n )\n }),\n ), currentProcessTrigger, trigger)\n\n const emitTriggerEvent = (trigger: ProcessTrigger, severity: ProcessEvent['severity']): Effect.Effect<void> => {\n if (!shouldRecordChainEvents) {\n return Effect.void\n }\n\n return emit(makeTriggerEvent(trigger, severity))\n }\n const triggerChainKernel = makeProcessTriggerChainKernel({\n shouldRecordChainEvents,\n nextTriggerSeq: () => instanceState.nextTriggerSeq++,\n makeBudgetState: (trigger) =>\n ProcessEvents.makeProcessRunEventBudgetState({\n runId: ProcessEvents.makeProcessRunBudgetRunId(identity, trigger),\n }),\n emitTriggerEvent,\n runWithoutChainBudget: makeRun,\n })\n\n const policy = installation.definition.concurrency\n const bootTrigger = installation.startPlan.bootTrigger\n\n const streamReady = yield* Deferred.make<void>()\n const markStreamReady: Effect.Effect<void> = Deferred.succeed(streamReady, undefined).pipe(Effect.asVoid)\n\n const instanceProgram = Effect.gen(function* () {\n const fatal = yield* Deferred.make<Cause.Cause<any>>()\n\n const platformEventStream: Stream.Stream<ProcessTrigger> = Stream.fromQueue(\n instanceState.platformTriggersQueue,\n )\n\n const nonPlatformTriggers = installation.startPlan.nonPlatformTriggers\n\n const streams = yield* Effect.forEach(nonPlatformTriggers, makeTriggerStream)\n\n const triggerStream = Stream.mergeAll([platformEventStream, ...streams], {\n concurrency: 'unbounded',\n })\n\n const reportQueueOverflow = (\n info: ProcessConcurrency.ProcessTriggerQueueOverflowInfo,\n ): Effect.Effect<void> => {\n const err = new Error('Process trigger queue overflow (serial maxQueue guard).')\n ;(err as any).code = 'process::serial_queue_overflow'\n ;(err as any).hint = [\n `mode=${info.mode}`,\n `queue: current=${info.currentLength} peak=${info.peak}`,\n `maxQueue: configured=${info.limit.configured} guard=${info.limit.guard}`,\n `policy: ${JSON.stringify(info.policy)}`,\n '',\n 'fix:',\n '- Configure concurrency.maxQueue (serial) to a finite value, or switch to mode=latest/drop to avoid unbounded backlog.',\n ].join('\\n')\n return Deferred.succeed(fatal, Cause.fail(err)).pipe(\n Effect.asVoid,\n Effect.catch(() => Effect.void),\n )\n }\n\n const runnerFiber = yield* Effect.forkScoped(\n ProcessConcurrency.runProcessTriggerStream({\n stream: triggerStream,\n policy,\n assignTriggerSeq: triggerChainKernel.assignTriggerSeq,\n run: (trigger) => triggerChainKernel.run(trigger, fatal),\n onDrop: triggerChainKernel.onDrop,\n onQueueOverflow: reportQueueOverflow,\n }),\n )\n\n // Ensure the trigger stream fiber has started pulling, otherwise moduleAction/moduleStateChange events\n // may be published before any subscriber exists (PubSub streams drop events without subscribers).\n //\n // We rely on the fiber reaching \"Suspended\" (typically blocked on a queue take) as a proxy that the\n // subscription has been established.\n for (let i = 0; i < 64; i++) {\n const exitOpt = yield* Fiber.await(runnerFiber).pipe(Effect.timeoutOption(0))\n if (Option.isSome(exitOpt)) {\n break\n }\n yield* Effect.yieldNow\n }\n yield* markStreamReady\n\n if (bootTrigger) {\n yield* Queue.offer(instanceState.platformTriggersQueue, bootTrigger)\n }\n\n const cause = yield* Deferred.await(fatal)\n yield* Fiber.interrupt(runnerFiber)\n return yield* Effect.failCause(cause)\n })\n\n const processFiberEffect = Effect.provideService(\n Effect.scoped(instanceProgram).pipe(\n Effect.ensuring(markStreamReady),\n Effect.catchCause((cause) =>\n Effect.gen(function* () {\n if (Cause.hasInterruptsOnly(cause)) {\n if (instanceState.status.status === 'stopping') {\n return\n }\n\n instanceState.status = {\n ...instanceState.status,\n status: 'stopped',\n stoppedReason: 'scopeDisposed',\n }\n instanceState.fiber = undefined\n\n yield* Effect.uninterruptible(\n emit({\n type: 'process:stop',\n identity,\n severity: 'info',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n }),\n )\n\n const pendingInstallation = installations.get(installationKey)\n if (pendingInstallation?.pendingStart) {\n pendingInstallation.pendingStart = undefined\n yield* startInstallation(installationKey)\n }\n return\n }\n\n const primary = Option.getOrElse(Cause.findErrorOption(cause), () => {\n const defects = cause.reasons.filter(Cause.isDieReason).map((reason) => reason.defect)\n return defects[0] ?? cause\n })\n const summary = toSerializableErrorSummary(primary)\n const error: SerializableErrorSummary = summary.errorSummary as any\n\n instanceState.status = {\n ...instanceState.status,\n status: 'failed',\n stoppedReason: 'failed',\n lastError: error,\n }\n\n yield* emit({\n type: 'process:error',\n identity,\n severity: 'error',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n error,\n })\n\n const decision = Supervision.onFailure(\n installation.definition.errorPolicy,\n installation.supervision,\n Date.now(),\n )\n installation.supervision = decision.nextState\n\n if (decision.decision === 'restart') {\n yield* emit({\n type: 'process:restart',\n identity,\n severity: 'warning',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n error,\n })\n yield* startInstallation(installationKey)\n } else {\n yield* emitErrorDiagnostic(\n installation.identity.scope,\n installation.identity.processId,\n 'process::failed_stop',\n 'Process failed and stopped (failStop / restart limit reached).',\n `processId=${installation.identity.processId} scopeKey=${installation.scopeKey} failures=${decision.withinWindowFailures} maxRestarts=${decision.maxRestarts}`,\n )\n }\n }),\n ),\n ),\n TaskRunner.inSyncTransactionFiber,\n false,\n )\n\n const fiber = yield* Effect.forkIn(processFiberEffect, installation.forkScope)\n\n instanceState.fiber = fiber as Fiber.Fiber<unknown, unknown>\n instanceState.status = {\n ...instanceState.status,\n status: 'running',\n }\n\n // Hard guarantee: block until trigger subscriptions are acquired (or the instance fiber failed early).\n yield* Deferred.await(streamReady)\n })\n\n const install = <E, R>(\n process: Effect.Effect<void, E, R>,\n options: {\n readonly scope: ProcessScope\n readonly enabled?: boolean\n readonly installedAt?: string\n readonly mode?: ProcessInstallMode\n },\n ): Effect.Effect<ProcessInstallation | undefined, never, R> =>\n Effect.gen(function* () {\n const meta = Meta.getMeta(process)\n if (!meta) {\n return undefined\n }\n\n const env = yield* Effect.services<R>()\n const forkScopeOpt = yield* Effect.serviceOption(Scope.Scope)\n const forkScope = Option.isSome(forkScopeOpt) ? forkScopeOpt.value : runtimeScope\n\n const scopeKey = Identity.scopeKeyFromScope(options.scope)\n const identity = {\n processId: meta.definition.processId,\n scope: options.scope,\n } as const\n\n const installationKey = Identity.installationKeyFromIdentity(identity)\n const derived = Effect.suspend(() => process)\n Meta.attachMeta(derived, {\n ...meta,\n installationScope: options.scope,\n })\n\n const nextPlatformEventTriggerIndex = buildPlatformEventTriggerIndex(meta.definition)\n const nextStartPlan = compileProcessTriggerStartPlan(meta.definition)\n const existing = installations.get(installationKey)\n if (existing) {\n const updated: InstallationState = {\n ...existing,\n definition: meta.definition,\n env: env as ServiceMap.ServiceMap<any>,\n forkScope,\n process: derived as unknown as Effect.Effect<void, any, unknown>,\n kind: meta.kind ?? 'process',\n platformEventTriggerIndex: nextPlatformEventTriggerIndex,\n platformEventNames: syncPlatformEventInstallations({\n installationKey,\n previousEventNames: existing.platformEventNames,\n nextTriggerIndex: nextPlatformEventTriggerIndex,\n installationsByEventName: installationsByPlatformEvent,\n }),\n startPlan: nextStartPlan,\n enabled: options.enabled ?? existing.enabled,\n installedAt: options.installedAt ?? existing.installedAt,\n }\n installations.set(installationKey, updated)\n\n if (!updated.enabled) {\n updated.pendingStart = undefined\n return {\n identity,\n enabled: updated.enabled,\n installedAt: updated.installedAt,\n } satisfies ProcessInstallation\n }\n\n const currentId = updated.currentInstanceId\n const current = currentId ? instances.get(currentId) : undefined\n const status = current?.status.status\n\n if (status === 'running' || status === 'starting') {\n const mode: ProcessInstallMode = options.mode ?? 'switch'\n if (mode === 'switch' && current && current.forkScope !== forkScope) {\n updated.pendingStart = { forkScope }\n yield* Scope.addFinalizer(\n forkScope,\n Effect.sync(() => {\n const installation = installations.get(installationKey)\n if (!installation) return\n if (installation.pendingStart?.forkScope === forkScope) {\n installation.pendingStart = undefined\n }\n }),\n )\n } else {\n updated.pendingStart = undefined\n }\n return {\n identity,\n enabled: updated.enabled,\n installedAt: updated.installedAt,\n } satisfies ProcessInstallation\n }\n\n if (status === 'stopping') {\n const mode: ProcessInstallMode = options.mode ?? 'switch'\n if (mode === 'switch') {\n updated.pendingStart = { forkScope }\n yield* Scope.addFinalizer(\n forkScope,\n Effect.sync(() => {\n const installation = installations.get(installationKey)\n if (!installation) return\n if (installation.pendingStart?.forkScope === forkScope) {\n installation.pendingStart = undefined\n }\n }),\n )\n } else {\n updated.pendingStart = undefined\n }\n return {\n identity,\n enabled: updated.enabled,\n installedAt: updated.installedAt,\n } satisfies ProcessInstallation\n }\n\n updated.pendingStart = undefined\n yield* startInstallation(installationKey)\n return {\n identity,\n enabled: updated.enabled,\n installedAt: updated.installedAt,\n } satisfies ProcessInstallation\n }\n\n const nextPlatformEventNames = syncPlatformEventInstallations({\n installationKey,\n previousEventNames: [],\n nextTriggerIndex: nextPlatformEventTriggerIndex,\n installationsByEventName: installationsByPlatformEvent,\n })\n\n const installation: InstallationState = {\n identity,\n scopeKey,\n definition: meta.definition,\n env: env as ServiceMap.ServiceMap<any>,\n forkScope,\n process: derived as unknown as Effect.Effect<void, any, unknown>,\n kind: meta.kind ?? 'process',\n platformEventTriggerIndex: nextPlatformEventTriggerIndex,\n platformEventNames: nextPlatformEventNames,\n startPlan: nextStartPlan,\n enabled: options.enabled ?? true,\n installedAt: options.installedAt,\n nextRunSeq: 1,\n supervision: Supervision.initialState(),\n pendingStart: undefined,\n }\n\n installations.set(installationKey, installation)\n\n if (installation.enabled) {\n yield* startInstallation(installationKey)\n }\n\n return {\n identity,\n enabled: installation.enabled,\n installedAt: installation.installedAt,\n } satisfies ProcessInstallation\n })\n\n const listInstallations: ProcessRuntime['listInstallations'] = (filter) =>\n Effect.sync(() => {\n const scopeType = filter?.scopeType\n const scopeKey = filter?.scopeKey\n const out: ProcessInstallation[] = []\n for (const installation of installations.values()) {\n if (scopeType && installation.identity.scope.type !== scopeType) continue\n if (scopeKey && installation.scopeKey !== scopeKey) continue\n out.push({\n identity: installation.identity,\n enabled: installation.enabled,\n installedAt: installation.installedAt,\n })\n }\n return out\n })\n\n const getInstanceStatus: ProcessRuntime['getInstanceStatus'] = (processInstanceId) =>\n Effect.sync(() => instances.get(processInstanceId)?.status)\n\n const controlInstance: ProcessRuntime['controlInstance'] = (processInstanceId, request) =>\n Effect.suspend(() => {\n const instance = instances.get(processInstanceId)\n if (!instance) {\n return Effect.void\n }\n\n return shouldNoopDueToSyncTxn(instance.scope, 'process_control_in_transaction').pipe(\n Effect.flatMap((noop) => {\n if (noop) {\n return Effect.void\n }\n\n if (request.action === 'stop') {\n return stopInstance(instance, 'manualStop')\n }\n\n if (request.action === 'restart') {\n return stopInstance(instance, 'manualStop').pipe(\n Effect.flatMap(() => {\n const installation = installations.get(instance.installationKey)\n if (!installation) {\n return Effect.void\n }\n installation.currentInstanceId = undefined\n return startInstallation(instance.installationKey)\n }),\n )\n }\n\n // start: only applies to stopped instances; reuses current runSeq without incrementing.\n if (request.action === 'start') {\n if (instance.status.status === 'running' || instance.status.status === 'starting') {\n return Effect.void\n }\n\n const installation = installations.get(instance.installationKey)\n if (!installation) {\n return Effect.void\n }\n installation.currentInstanceId = undefined\n return startInstallation(instance.installationKey)\n }\n\n return Effect.void\n }),\n )\n })\n\n const deliverPlatformEvent: ProcessRuntime['deliverPlatformEvent'] = (event) =>\n Effect.gen(function* () {\n const noop = yield* TaskRunner.shouldNoopInSyncTransactionFiber({\n code: 'process::invalid_usage',\n severity: 'error',\n message:\n 'ProcessRuntime platform events are not allowed inside a synchronous StateTransaction body (it may deadlock the txnQueue).',\n hint: 'Deliver platformEvent outside the transaction window.',\n kind: 'process_platform_event_in_transaction',\n })\n if (noop) return\n\n const eventName = event.eventName\n const installationKeys = installationsByPlatformEvent.get(eventName)\n if (!installationKeys || installationKeys.size === 0) {\n return\n }\n\n yield* Effect.forEach(\n installationKeys,\n (installationKey) =>\n Effect.suspend(() => {\n const installation = installations.get(installationKey)\n if (!installation) {\n return Effect.void\n }\n\n const currentInstanceId = installation.currentInstanceId\n if (!currentInstanceId) {\n return Effect.void\n }\n\n const instance = instances.get(currentInstanceId)\n if (!instance) {\n return Effect.void\n }\n\n if (instance.status.status !== 'starting' && instance.status.status !== 'running') {\n return Effect.void\n }\n\n const specs = installation.platformEventTriggerIndex.get(eventName)\n if (!specs || specs.length === 0) {\n return Effect.void\n }\n\n return Effect.forEach(\n specs,\n (spec) =>\n Queue.offer(instance.platformTriggersQueue, {\n kind: 'platformEvent',\n name: spec.name,\n platformEvent: spec.platformEvent,\n } satisfies ProcessTrigger),\n { discard: true },\n )\n }),\n { discard: true },\n )\n })\n\n const eventsStream: ProcessRuntime['events'] = Stream.fromPubSub(eventsHub)\n\n const getEventsSnapshot: ProcessRuntime['getEventsSnapshot'] = () => Effect.sync(snapshotEventHistory)\n\n yield* Effect.addFinalizer(() =>\n Effect.gen(function* () {\n for (const installation of installations.values()) {\n installation.pendingStart = undefined\n }\n for (const instance of instances.values()) {\n if (instance.fiber) {\n yield* stopInstance(instance, 'scopeDisposed')\n }\n }\n }).pipe(\n Effect.catchCause((cause) =>\n Effect.sync(() => {\n // Finalizers must not throw; best-effort logging only.\n if (isDevEnv()) {\n // eslint-disable-next-line no-console\n console.warn('[ProcessRuntime] finalizer failed', Cause.pretty(cause))\n }\n })),\n ),\n )\n\n return {\n install,\n listInstallations,\n getInstanceStatus,\n controlInstance,\n deliverPlatformEvent,\n events: eventsStream,\n getEventsSnapshot,\n } satisfies ProcessRuntime\n })\n\nexport const layer = (options?: { readonly maxEventHistory?: number }): Layer.Layer<ProcessRuntimeTag, never, never> =>\n Layer.effect(ProcessRuntimeTag, make(options))\n","import type { ProcessIdentity, ProcessInstanceIdentity, ProcessScope } from './protocol.js'\n\nexport type ProcessScopeKey = string\n\nexport const scopeKeyFromScope = (scope: ProcessScope): ProcessScopeKey => {\n switch (scope.type) {\n case 'app':\n return `app:${scope.appId}`\n case 'moduleInstance':\n return `moduleInstance:${scope.moduleId}::${scope.instanceId}`\n case 'uiSubtree':\n return `uiSubtree:${scope.subtreeId}`\n }\n}\n\nexport const installationKeyFromIdentity = (identity: ProcessIdentity): string =>\n `${identity.processId}@@${scopeKeyFromScope(identity.scope)}`\n\nexport const processInstanceIdFromIdentity = (identity: ProcessInstanceIdentity): string => {\n const scopeKey = scopeKeyFromScope(identity.identity.scope)\n return `process:${identity.identity.processId}::${scopeKey}::r${identity.runSeq}`\n}\n","import { Effect, Fiber, Option, Ref, Scope, Stream } from 'effect'\nimport * as LatestFiberSlot from '../LatestFiberSlot.js'\nimport type { TaskRunnerMode } from '../TaskRunner.js'\nimport type { ProcessConcurrencyPolicy, ProcessTrigger } from './protocol.js'\n\nexport const DEFAULT_SERIAL_QUEUE_GUARD_LIMIT = 4096\nexport const DEFAULT_PARALLEL_LIMIT = 16\nconst QUEUE_COMPACTION_MIN_CONSUMED = 64\n\nexport const toTaskRunnerMode = (policy: ProcessConcurrencyPolicy): TaskRunnerMode => {\n switch (policy.mode) {\n case 'latest':\n return 'latest'\n case 'serial':\n return 'task'\n case 'drop':\n return 'exhaust'\n case 'parallel':\n return 'parallel'\n }\n}\n\nexport type ResolvedQueueLimit = {\n /** User-configured limit; treated as unlimited when omitted (still bounded by the guard). */\n readonly configured: number | 'unbounded'\n /** Runtime-enforced guard limit (prevents unbounded memory growth). */\n readonly guard: number\n}\n\nexport const resolveQueueLimit = (\n maxQueue: unknown,\n options?: {\n readonly defaultGuard?: number\n },\n): ResolvedQueueLimit => {\n const defaultGuard = options?.defaultGuard ?? DEFAULT_SERIAL_QUEUE_GUARD_LIMIT\n\n const configured =\n typeof maxQueue === 'number' && Number.isFinite(maxQueue) && maxQueue >= 0 ? Math.floor(maxQueue) : 'unbounded'\n\n return {\n configured,\n guard: configured === 'unbounded' ? defaultGuard : configured,\n }\n}\n\nexport type ProcessTriggerQueueOverflowInfo = {\n readonly mode: 'serial' | 'parallel'\n readonly currentLength: number\n readonly peak: number\n readonly limit: ResolvedQueueLimit\n readonly policy: ProcessConcurrencyPolicy\n}\n\ntype TriggerQueueState = {\n queue: ProcessTrigger[]\n queueStart: number\n peak: number\n}\n\nconst queueLength = (state: TriggerQueueState): number => state.queue.length - state.queueStart\n\nconst compactQueueIfNeeded = (state: TriggerQueueState): void => {\n if (state.queueStart === 0) return\n\n if (state.queueStart >= state.queue.length) {\n state.queue = []\n state.queueStart = 0\n return\n }\n\n // Keep dequeue O(1) on the hot path and compact only occasionally.\n if (state.queueStart >= QUEUE_COMPACTION_MIN_CONSUMED && state.queueStart * 2 >= state.queue.length) {\n state.queue = state.queue.slice(state.queueStart)\n state.queueStart = 0\n }\n}\n\nconst enqueueTrigger = (state: TriggerQueueState, trigger: ProcessTrigger): number => {\n state.queue.push(trigger)\n const size = queueLength(state)\n if (size > state.peak) {\n state.peak = size\n }\n return size\n}\n\nconst dequeueTrigger = (state: TriggerQueueState): ProcessTrigger | undefined => {\n if (state.queueStart >= state.queue.length) {\n state.queue = []\n state.queueStart = 0\n return undefined\n }\n const next = state.queue[state.queueStart]\n state.queueStart += 1\n compactQueueIfNeeded(state)\n return next\n}\n\nexport const runProcessTriggerStream = (args: {\n readonly stream: Stream.Stream<ProcessTrigger>\n readonly policy: ProcessConcurrencyPolicy\n readonly assignTriggerSeq: (trigger: ProcessTrigger) => ProcessTrigger\n /** run a trigger to completion (the caller decides what a \\\"run\\\" means). */\n readonly run: (trigger: ProcessTrigger) => Effect.Effect<void, never, Scope.Scope>\n /** invoked when a trigger is dropped (only for mode=drop). */\n readonly onDrop: (trigger: ProcessTrigger) => Effect.Effect<void>\n /** invoked when internal queue guard is exceeded (fail-stop by default). */\n readonly onQueueOverflow: (info: ProcessTriggerQueueOverflowInfo) => Effect.Effect<void>\n readonly defaultParallelLimit?: number\n readonly defaultQueueGuard?: number\n}): Effect.Effect<void, never, Scope.Scope> =>\n Effect.gen(function* () {\n const policy = args.policy\n const defaultQueueGuard = args.defaultQueueGuard ?? DEFAULT_SERIAL_QUEUE_GUARD_LIMIT\n\n if (policy.mode === 'latest') {\n const stateRef = yield* LatestFiberSlot.make()\n\n const onTrigger = (trigger0: ProcessTrigger): Effect.Effect<void, never, Scope.Scope> =>\n Effect.gen(function* () {\n const trigger = args.assignTriggerSeq(trigger0)\n\n const [prevFiber, prevRunningId, runId] = yield* LatestFiberSlot.beginRun(stateRef)\n\n if (prevFiber && prevRunningId !== 0) {\n yield* Fiber.interrupt(prevFiber)\n }\n\n const fiber = yield* args\n .run(trigger)\n .pipe(Effect.ensuring(LatestFiberSlot.clearIfCurrent(stateRef, runId)), Effect.forkScoped)\n\n yield* LatestFiberSlot.setFiberIfCurrent(stateRef, runId, fiber)\n })\n\n return yield* Stream.runForEach(args.stream, onTrigger)\n }\n\n const busyRef = yield* Ref.make(false)\n const serialStateRef = yield* Ref.make({\n running: false,\n queue: [] as ProcessTrigger[],\n queueStart: 0,\n peak: 0,\n })\n const parallelStateRef = yield* Ref.make({\n active: 0,\n queue: [] as ProcessTrigger[],\n queueStart: 0,\n peak: 0,\n })\n\n const serialQueueLimit = resolveQueueLimit(policy.maxQueue, { defaultGuard: defaultQueueGuard })\n const parallelQueueLimit = resolveQueueLimit(undefined, { defaultGuard: defaultQueueGuard })\n const parallelLimit =\n typeof policy.maxParallel === 'number' && Number.isFinite(policy.maxParallel) && policy.maxParallel >= 1\n ? Math.floor(policy.maxParallel)\n : (args.defaultParallelLimit ?? DEFAULT_PARALLEL_LIMIT)\n\n const drainSerial = (): Effect.Effect<void, never, Scope.Scope> =>\n Effect.suspend(() =>\n Ref.modify(serialStateRef, (state) => {\n if (state.running || queueLength(state) === 0) {\n return [Option.none(), state] as const\n }\n const next = dequeueTrigger(state)\n if (next === undefined) {\n return [Option.none(), state] as const\n }\n state.running = true\n return [Option.some(next), state] as const\n }).pipe(\n Effect.flatMap((next) =>\n Option.match(next, {\n onNone: () => Effect.void,\n onSome: (trigger) =>\n Effect.forkScoped(\n args\n .run(trigger)\n .pipe(\n Effect.ensuring(\n Ref.update(serialStateRef, (s) => {\n s.running = false\n return s\n }),\n ),\n Effect.flatMap(() => drainSerial()),\n ),\n ).pipe(Effect.asVoid),\n }),\n ),\n ),\n )\n\n const drainParallel = (): Effect.Effect<void, never, Scope.Scope> =>\n Effect.suspend(() =>\n Ref.modify(parallelStateRef, (state) => {\n if (state.active >= parallelLimit || queueLength(state) === 0) {\n return [Option.none(), state] as const\n }\n const next = dequeueTrigger(state)\n if (next === undefined) {\n return [Option.none(), state] as const\n }\n state.active += 1\n return [Option.some(next), state] as const\n }).pipe(\n Effect.flatMap((next) =>\n Option.match(next, {\n onNone: () => Effect.void,\n onSome: (trigger) =>\n Effect.forkScoped(\n args.run(trigger).pipe(\n Effect.ensuring(\n Ref.update(parallelStateRef, (s) => {\n s.active = Math.max(0, s.active - 1)\n return s\n }),\n ),\n Effect.flatMap(() => drainParallel()),\n ),\n ).pipe(Effect.asVoid, Effect.flatMap(() => drainParallel())),\n }),\n ),\n ),\n )\n\n const onTrigger = (trigger0: ProcessTrigger): Effect.Effect<void, never, Scope.Scope> =>\n Effect.gen(function* () {\n const trigger = args.assignTriggerSeq(trigger0)\n\n if (policy.mode === 'drop') {\n const acquired = yield* Ref.modify(busyRef, (busy) =>\n busy ? ([false, busy] as const) : ([true, true] as const),\n )\n if (!acquired) {\n yield* args.onDrop(trigger)\n return\n }\n\n yield* Effect.forkScoped(args.run(trigger).pipe(Effect.ensuring(Ref.set(busyRef, false))))\n return\n }\n\n if (policy.mode === 'parallel') {\n const [nextSize, peak] = yield* Ref.modify(parallelStateRef, (state) => {\n const size = enqueueTrigger(state, trigger)\n return [[size, state.peak] as const, state] as const\n })\n\n if (nextSize > parallelQueueLimit.guard) {\n yield* args.onQueueOverflow({\n mode: 'parallel',\n currentLength: nextSize,\n peak,\n limit: parallelQueueLimit,\n policy,\n })\n return\n }\n\n yield* drainParallel()\n return\n }\n\n // serial\n const [nextSize, peak] = yield* Ref.modify(serialStateRef, (state) => {\n const size = enqueueTrigger(state, trigger)\n return [[size, state.peak] as const, state] as const\n })\n\n if (nextSize > serialQueueLimit.guard) {\n yield* args.onQueueOverflow({\n mode: 'serial',\n currentLength: nextSize,\n peak,\n limit: serialQueueLimit,\n policy,\n })\n return\n }\n\n yield* drainSerial()\n })\n\n return yield* Stream.runForEach(args.stream, onTrigger)\n })\n","import type { ProcessEvent } from './protocol.js'\nimport {\n makeRunBudgetEnvelopeV1,\n makeRunDegradeMarkerV1,\n type RunDegradeReasonV1,\n} from '../diagnosticsBudget.js'\n\nexport const PROCESS_EVENT_MAX_BYTES = 4 * 1024\nexport const PROCESS_EVENT_MAX_EVENTS_PER_RUN = 50\nexport const PROCESS_EVENT_RESERVED_EVENTS_FOR_SUMMARY = 1\n\nexport type ProcessRunEventBudgetState = {\n readonly runId: string\n readonly maxEvents: number\n readonly maxBytes: number\n readonly emitted: number\n readonly dropped: number\n readonly downgraded: number\n readonly summaryEmitted: boolean\n}\n\nconst PROCESS_RUN_BUDGET_RUN_ID_UNKNOWN = 'process:run:unknown'\n\nconst scopeKeyFromProcessEventIdentity = (eventIdentity: ProcessEvent['identity']['identity']['scope']): string => {\n switch (eventIdentity.type) {\n case 'app':\n return `app:${eventIdentity.appId}`\n case 'moduleInstance':\n return `module:${eventIdentity.moduleId}:${eventIdentity.instanceId}`\n case 'uiSubtree':\n return `subtree:${eventIdentity.subtreeId}`\n }\n}\n\nexport const makeProcessRunBudgetRunId = (\n identity: ProcessEvent['identity'],\n trigger?: ProcessEvent['trigger'],\n): string => {\n const processId = identity.identity.processId\n const scopeKey = scopeKeyFromProcessEventIdentity(identity.identity.scope)\n const runSeq = identity.runSeq\n const triggerSeq =\n trigger && typeof trigger.triggerSeq === 'number' && Number.isFinite(trigger.triggerSeq) && trigger.triggerSeq >= 1\n ? Math.floor(trigger.triggerSeq)\n : undefined\n return triggerSeq != null\n ? `${processId}@${scopeKey}::r${runSeq}::g${triggerSeq}`\n : `${processId}@${scopeKey}::r${runSeq}`\n}\n\nexport const makeProcessRunEventBudgetState = (options?: {\n readonly runId?: string\n readonly maxEvents?: number\n readonly maxBytes?: number\n}): ProcessRunEventBudgetState => ({\n runId:\n typeof options?.runId === 'string' && options.runId.length > 0 ? options.runId : PROCESS_RUN_BUDGET_RUN_ID_UNKNOWN,\n maxEvents:\n typeof options?.maxEvents === 'number' && Number.isFinite(options.maxEvents) && options.maxEvents >= 0\n ? Math.floor(options.maxEvents)\n : PROCESS_EVENT_MAX_EVENTS_PER_RUN,\n maxBytes:\n typeof options?.maxBytes === 'number' && Number.isFinite(options.maxBytes) && options.maxBytes >= 0\n ? Math.floor(options.maxBytes)\n : PROCESS_EVENT_MAX_BYTES,\n emitted: 0,\n dropped: 0,\n downgraded: 0,\n summaryEmitted: false,\n})\n\nexport type ProcessRunEventBudgetDecision =\n | {\n readonly _tag: 'emit'\n readonly event: ProcessEvent\n }\n | {\n readonly _tag: 'emitSummary'\n readonly event: ProcessEvent\n }\n | {\n readonly _tag: 'drop'\n }\n\nconst attachProcessRunBudgetEnvelope = (\n event: ProcessEvent,\n state: ProcessRunEventBudgetState,\n degradeReason?: RunDegradeReasonV1,\n): ProcessEvent => ({\n ...event,\n budgetEnvelope: makeRunBudgetEnvelopeV1({\n domain: 'process',\n runId: state.runId,\n limits: {\n maxEvents: state.maxEvents,\n maxBytes: state.maxBytes,\n },\n usage: {\n emitted: state.emitted,\n dropped: state.dropped,\n downgraded: state.downgraded,\n },\n }),\n degrade: makeRunDegradeMarkerV1(Boolean(degradeReason), degradeReason),\n})\n\nconst finalizeBudgetedProcessEvent = (args: {\n readonly event: ProcessEvent\n readonly state: ProcessRunEventBudgetState\n readonly maxBytes: number\n readonly degradeReason?: RunDegradeReasonV1\n}): { readonly event: ProcessEvent; readonly state: ProcessRunEventBudgetState } => {\n const withEnvelope = attachProcessRunBudgetEnvelope(args.event, args.state, args.degradeReason)\n if (estimateEventBytes(withEnvelope) <= args.maxBytes) {\n return { event: withEnvelope, state: args.state }\n }\n\n // Envelope itself may push the event over the byte budget.\n // In this case we degrade to a slimmer event (keep degrade marker, drop envelope).\n let nextState: ProcessRunEventBudgetState = {\n ...args.state,\n downgraded: args.state.downgraded + 1,\n }\n\n const compact: ProcessEvent = {\n ...args.event,\n degrade: makeRunDegradeMarkerV1(true, args.degradeReason ?? 'payload_oversized'),\n }\n\n const enforcedCompact = enforceProcessEventMaxBytes(compact, { maxBytes: args.maxBytes })\n if (enforcedCompact.downgraded) {\n nextState = {\n ...nextState,\n downgraded: nextState.downgraded + 1,\n }\n }\n\n return {\n event: enforcedCompact.event,\n state: nextState,\n }\n}\n\nconst makeBudgetSummaryEvent = (args: {\n readonly sourceEvent: ProcessEvent\n readonly maxEvents: number\n readonly maxBytes: number\n readonly emitted: number\n readonly dropped: number\n readonly downgraded: number\n}): ProcessEvent => ({\n type: 'process:trigger',\n identity: args.sourceEvent.identity,\n trigger: args.sourceEvent.trigger,\n severity: 'warning',\n eventSeq: args.sourceEvent.eventSeq,\n timestampMs: args.sourceEvent.timestampMs,\n error: {\n message: 'Process run event budget exceeded; further trigger/dispatch events are suppressed.',\n code: 'process::event_budget_exceeded',\n hint: `maxEvents=${args.maxEvents} maxBytes=${args.maxBytes} emitted=${args.emitted} dropped=${args.dropped} downgraded=${args.downgraded}`,\n },\n})\n\nexport const applyProcessRunEventBudget = (\n state: ProcessRunEventBudgetState,\n event: ProcessEvent,\n): readonly [ProcessRunEventBudgetDecision, ProcessRunEventBudgetState] => {\n const maxEvents = Math.max(0, state.maxEvents)\n const maxBytes = Math.max(0, state.maxBytes)\n\n if (state.summaryEmitted) {\n return [\n { _tag: 'drop' },\n {\n ...state,\n dropped: state.dropped + 1,\n },\n ]\n }\n\n const reserve = PROCESS_EVENT_RESERVED_EVENTS_FOR_SUMMARY\n const allowedRegular = Math.max(0, maxEvents - reserve)\n\n if (state.emitted < allowedRegular) {\n const enforced = enforceProcessEventMaxBytes(event, { maxBytes })\n const baseState: ProcessRunEventBudgetState = {\n ...state,\n emitted: state.emitted + 1,\n downgraded: state.downgraded + (enforced.downgraded ? 1 : 0),\n }\n const finalized = finalizeBudgetedProcessEvent({\n event: enforced.event,\n state: baseState,\n maxBytes,\n degradeReason: enforced.downgraded ? 'payload_oversized' : undefined,\n })\n return [\n { _tag: 'emit', event: finalized.event },\n finalized.state,\n ]\n }\n\n const dropped = state.dropped + 1\n const summary = makeBudgetSummaryEvent({\n sourceEvent: event,\n maxEvents,\n maxBytes,\n emitted: state.emitted,\n dropped,\n downgraded: state.downgraded,\n })\n const enforcedSummary = enforceProcessEventMaxBytes(summary, { maxBytes })\n const baseState: ProcessRunEventBudgetState = {\n ...state,\n emitted: Math.min(maxEvents, state.emitted + 1),\n dropped,\n downgraded: state.downgraded + (enforcedSummary.downgraded ? 1 : 0),\n summaryEmitted: true,\n }\n const finalized = finalizeBudgetedProcessEvent({\n event: enforcedSummary.event,\n state: baseState,\n maxBytes,\n degradeReason: 'budget_exceeded',\n })\n\n return [\n { _tag: 'emitSummary', event: finalized.event },\n finalized.state,\n ]\n}\n\nexport const estimateEventBytes = (event: ProcessEvent): number => {\n const json = JSON.stringify(event)\n return typeof Buffer !== 'undefined' ? Buffer.byteLength(json, 'utf8') : new TextEncoder().encode(json).length\n}\n\nconst truncateChars = (value: string, maxLen: number): string =>\n value.length <= maxLen ? value : value.slice(0, maxLen)\n\nconst normalizeErrorSummary = (error: NonNullable<ProcessEvent['error']>): NonNullable<ProcessEvent['error']> => {\n const message = typeof error.message === 'string' && error.message.length > 0 ? error.message : 'Error'\n\n const hint = typeof error.hint === 'string' && error.hint.length > 0 ? truncateChars(error.hint, 1024) : undefined\n\n return {\n name: typeof error.name === 'string' && error.name.length > 0 ? error.name : undefined,\n message: truncateChars(message, 256),\n code: typeof error.code === 'string' && error.code.length > 0 ? error.code : undefined,\n hint,\n }\n}\n\nexport const enforceProcessEventMaxBytes = (\n event: ProcessEvent,\n options?: {\n readonly maxBytes?: number\n },\n): { readonly event: ProcessEvent; readonly downgraded: boolean } => {\n const maxBytes = options?.maxBytes ?? PROCESS_EVENT_MAX_BYTES\n\n let downgraded = false\n let next: ProcessEvent = event\n\n if (event.error) {\n const normalized = normalizeErrorSummary(event.error)\n if (\n normalized.message !== event.error.message ||\n normalized.hint !== event.error.hint ||\n normalized.code !== event.error.code ||\n normalized.name !== event.error.name\n ) {\n downgraded = true\n next = { ...event, error: normalized }\n }\n }\n\n if (estimateEventBytes(next) <= maxBytes) {\n return { event: next, downgraded }\n }\n\n // Further trimming is applied to error.hint only (common trigger: multi-line hints).\n if (!next.error?.hint) {\n // Nothing left to trim; best-effort return.\n return { event: next, downgraded: true }\n }\n\n const hint = next.error.hint\n const steps = [512, 256, 128, 64, 32, 0]\n\n for (const maxLen of steps) {\n const trimmed = maxLen === 0 ? undefined : truncateChars(hint, maxLen)\n const candidate: ProcessEvent = {\n ...next,\n error: {\n ...next.error,\n hint: trimmed,\n },\n }\n if (estimateEventBytes(candidate) <= maxBytes) {\n return { event: candidate, downgraded: true }\n }\n }\n\n // Fallback: remove hint and shorten message (process:error must still have a message).\n const fallback: ProcessEvent = next.error\n ? ({\n ...next,\n error: {\n ...next.error,\n message: truncateChars(next.error.message, 96),\n hint: undefined,\n },\n } satisfies ProcessEvent)\n : next\n\n return { event: fallback, downgraded: true }\n}\n","import * as SchemaAST from 'effect/SchemaAST'\n\nexport type DotPathSegment = string | number\n\ntype DotPathParseResult =\n | { readonly ok: true; readonly segments: ReadonlyArray<DotPathSegment> }\n | { readonly ok: false; readonly error: Error }\n\nexport type DotPathSelectorResult =\n | {\n readonly ok: true\n readonly selector: (state: unknown) => unknown\n readonly segments: ReadonlyArray<DotPathSegment>\n }\n | { readonly ok: false; readonly error: Error }\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null\n\nexport const resolveSchemaAst = (schema: unknown): SchemaAST.AST | undefined => {\n if (!isRecord(schema)) return undefined\n const ast = (schema as any).ast as SchemaAST.AST | undefined\n if (!ast) return undefined\n if (typeof ast !== 'object' && typeof ast !== 'function') return undefined\n return ast\n}\n\nconst makeDotPathError = (path: string, message: string, hint?: string): Error => {\n const err = new Error(message)\n ;(err as any).code = 'process::invalid_dot_path'\n ;(err as any).hint =\n hint ??\n [\n \"Expected dot-path syntax: segments separated by '.', numeric segments represent array indices.\",\n `path: ${path}`,\n '',\n 'examples:',\n '- count',\n '- user.name',\n '- items.0.id',\n ].join('\\n')\n return err\n}\n\nconst makeSchemaMismatchError = (path: string): Error =>\n makeDotPathError(\n path,\n 'Invalid dot-path: path does not match the state schema.',\n [\n 'The module state schema does not contain the requested dot-path.',\n `path: ${path}`,\n '',\n 'fix:',\n '- Ensure the path exists in the state schema.',\n '- Use numeric segments for array indices (e.g. items.0.id).',\n ].join('\\n'),\n )\n\nconst parseDotPath = (path: string): DotPathParseResult => {\n if (typeof path !== 'string' || path.length === 0) {\n return { ok: false, error: makeDotPathError(String(path), 'dot-path must be a non-empty string') }\n }\n\n const raw = path.split('.')\n if (raw.length === 0) {\n return { ok: false, error: makeDotPathError(path, 'dot-path must contain at least one segment') }\n }\n\n const segments: DotPathSegment[] = []\n for (let i = 0; i < raw.length; i++) {\n const seg = raw[i]!\n if (seg.length === 0) {\n return {\n ok: false,\n error: makeDotPathError(\n path,\n `Invalid dot-path: empty segment at index ${i}.`,\n [\n \"Expected dot-path syntax: segments separated by '.', numeric segments represent array indices.\",\n `path: ${path}`,\n '',\n 'examples:',\n '- count',\n '- user.name',\n '- items.0.id',\n '',\n 'fix:',\n '- Remove consecutive dots or trailing dots.',\n ].join('\\n'),\n ),\n }\n }\n\n if (/^[0-9]+$/.test(seg)) {\n const n = Number(seg)\n if (!Number.isFinite(n) || n < 0) {\n return {\n ok: false,\n error: makeDotPathError(path, `Invalid array index segment \"${seg}\" at index ${i}.`),\n }\n }\n segments.push(Math.floor(n))\n continue\n }\n\n segments.push(seg)\n }\n\n return { ok: true, segments }\n}\n\nconst resolveAstForPath = (\n ast: SchemaAST.AST,\n segments: ReadonlyArray<DotPathSegment>,\n seen: Set<SchemaAST.AST>,\n): SchemaAST.AST | undefined => {\n let current = SchemaAST.toType(ast)\n\n while (SchemaAST.isSuspend(current)) {\n if (seen.has(current)) return undefined\n seen.add(current)\n current = SchemaAST.toType(current.thunk())\n }\n\n if (segments.length === 0) return current\n\n if (SchemaAST.isUnion(current)) {\n for (const node of current.types) {\n const resolved = resolveAstForPath(node, segments, seen)\n if (resolved) return resolved\n }\n return undefined\n }\n\n if (SchemaAST.isArrays(current)) {\n const [head, ...tail] = segments\n if (typeof head !== 'number') return undefined\n const element =\n head < current.elements.length ? current.elements[head] : current.rest.length > 0 ? current.rest[0] : undefined\n return element ? resolveAstForPath(element, tail, seen) : undefined\n }\n\n if (SchemaAST.isObjects(current)) {\n const [head, ...tail] = segments\n if (head === undefined) return undefined\n\n if (typeof head === 'string') {\n for (const ps of current.propertySignatures) {\n if (String(ps.name) !== head) continue\n return resolveAstForPath(ps.type, tail, seen)\n }\n }\n\n for (const sig of current.indexSignatures) {\n const param = SchemaAST.toType(sig.parameter as unknown as SchemaAST.AST)\n const tag = (param as any)?._tag\n const acceptsString = tag === 'String' || tag === 'TemplateLiteral'\n const acceptsNumber = tag === 'Number'\n if (typeof head === 'string' && acceptsString) {\n return resolveAstForPath(sig.type, tail, seen)\n }\n if (typeof head === 'number' && acceptsNumber) {\n return resolveAstForPath(sig.type, tail, seen)\n }\n }\n }\n\n const tag = (current as any)?._tag\n if (tag === 'AnyKeyword' || tag === 'UnknownKeyword' || tag === 'ObjectKeyword' || tag === 'Declaration') {\n return current\n }\n\n return undefined\n}\n\nconst selectBySegments =\n (segments: ReadonlyArray<DotPathSegment>) =>\n (state: unknown): unknown => {\n let current: unknown = state\n for (const seg of segments) {\n if (current == null) return undefined\n if (typeof seg === 'number') {\n if (Array.isArray(current)) {\n current = current[seg]\n continue\n }\n if (isRecord(current)) {\n current = current[String(seg)]\n continue\n }\n return undefined\n }\n if (isRecord(current)) {\n current = current[seg]\n continue\n }\n return undefined\n }\n return current\n }\n\nexport const makeSchemaSelector = (path: string, schemaAst?: SchemaAST.AST): DotPathSelectorResult => {\n const parsed = parseDotPath(path)\n if (!parsed.ok) return { ok: false, error: parsed.error }\n\n if (schemaAst) {\n const resolved = resolveAstForPath(schemaAst, parsed.segments, new Set())\n if (!resolved) {\n return { ok: false, error: makeSchemaMismatchError(path) }\n }\n }\n\n return {\n ok: true,\n selector: selectBySegments(parsed.segments),\n segments: parsed.segments,\n }\n}\n","import type { ProcessDefinition, ProcessTrigger } from './protocol.js'\nimport type { NonPlatformTriggerSpec } from './triggerStreams.js'\n\nexport const PROCESS_RUNTIME_BOOT_EVENT = 'runtime:boot' as const\n\nexport type ProcessTriggerStartPlan = {\n readonly nonPlatformTriggers: ReadonlyArray<NonPlatformTriggerSpec>\n readonly bootTrigger?: Extract<ProcessTrigger, { readonly kind: 'platformEvent' }>\n readonly dependencyModuleIds: ReadonlyArray<string>\n readonly dispatchTracingModuleIds: ReadonlyArray<string>\n}\n\nconst appendUniqueModuleId = (ids: string[], seen: Set<string>, moduleId: string | undefined): void => {\n if (typeof moduleId !== 'string' || moduleId.length === 0 || seen.has(moduleId)) {\n return\n }\n seen.add(moduleId)\n ids.push(moduleId)\n}\n\nexport const compileProcessTriggerStartPlan = (definition: ProcessDefinition): ProcessTriggerStartPlan => {\n const nonPlatformTriggers: NonPlatformTriggerSpec[] = []\n\n let bootTrigger: ProcessTriggerStartPlan['bootTrigger'] = undefined\n\n const implicitModuleIds: string[] = []\n const implicitSeen = new Set<string>()\n\n for (const trigger of definition.triggers) {\n switch (trigger.kind) {\n case 'platformEvent': {\n if (!bootTrigger && trigger.platformEvent === PROCESS_RUNTIME_BOOT_EVENT) {\n bootTrigger = {\n kind: 'platformEvent',\n name: trigger.name,\n platformEvent: PROCESS_RUNTIME_BOOT_EVENT,\n }\n }\n break\n }\n case 'timer': {\n nonPlatformTriggers.push(trigger)\n break\n }\n case 'moduleAction': {\n nonPlatformTriggers.push(trigger)\n appendUniqueModuleId(implicitModuleIds, implicitSeen, trigger.moduleId)\n break\n }\n case 'moduleStateChange': {\n nonPlatformTriggers.push(trigger)\n appendUniqueModuleId(implicitModuleIds, implicitSeen, trigger.moduleId)\n break\n }\n default: {\n // Keep malformed trigger kinds in the non-platform stream path so runtime preserves\n // existing process::invalid_trigger_kind error semantics.\n nonPlatformTriggers.push(trigger as NonPlatformTriggerSpec)\n break\n }\n }\n }\n\n const dispatchTracingModuleIds: string[] = []\n const dispatchSeen = new Set<string>()\n for (const moduleId of definition.requires ?? []) {\n appendUniqueModuleId(dispatchTracingModuleIds, dispatchSeen, moduleId)\n }\n\n const dependencyModuleIds = dispatchTracingModuleIds.slice()\n const dependencySeen = new Set(dependencyModuleIds)\n for (const moduleId of implicitModuleIds) {\n appendUniqueModuleId(dependencyModuleIds, dependencySeen, moduleId)\n }\n\n return {\n nonPlatformTriggers,\n bootTrigger,\n dependencyModuleIds,\n dispatchTracingModuleIds,\n }\n}\n","import { Duration, Effect, Option, Ref, Stream } from 'effect'\nimport { isDevEnv } from '../env.js'\nimport * as ReadQuery from '../ReadQuery.js'\nimport { makeSchemaSelector } from './selectorSchema.js'\nimport {\n buildSelectorWarningHint,\n evaluateSelectorWarning,\n initialSelectorDiagnosticsState,\n makeSelectorDiagnosticsConfig,\n makeSelectorSamplingTracker,\n} from './selectorDiagnostics.js'\nimport type { ProcessTrigger, ProcessTriggerSpec, SerializableErrorSummary } from './protocol.js'\n\nexport type NonPlatformTriggerSpec = Exclude<ProcessTriggerSpec, { readonly kind: 'platformEvent' }>\ntype TimerTriggerSpec = Extract<NonPlatformTriggerSpec, { readonly kind: 'timer' }>\ntype ModuleActionTriggerSpec = Extract<NonPlatformTriggerSpec, { readonly kind: 'moduleAction' }>\ntype ModuleStateChangeTriggerSpec = Extract<NonPlatformTriggerSpec, { readonly kind: 'moduleStateChange' }>\ntype SchemaAstLike = Parameters<typeof makeSchemaSelector>[1]\ntype CachedSchemaAstEntry = { readonly ast: SchemaAstLike }\n\ntype TriggerStreamFactoryOptions = {\n readonly moduleRuntimeRegistry: ReadonlyMap<string, unknown>\n readonly shouldRecordChainEvents: boolean\n readonly actionIdFromUnknown: (action: unknown) => string | undefined\n readonly resolveRuntimeStateSchemaAst: (runtime: unknown) => SchemaAstLike\n readonly withModuleHint: (error: Error, moduleId: string) => Error\n readonly emitSelectorWarning: (trigger: ProcessTrigger, warning: SerializableErrorSummary) => Effect.Effect<void>\n}\n\nconst makeInvalidTriggerKindError = (spec: never): Error =>\n Object.assign(\n new Error(`[ProcessRuntime] unreachable non-platform trigger kind: ${String((spec as any)?.kind ?? 'unknown')}`),\n { code: 'process::invalid_trigger_kind' },\n )\n\nconst makeInvalidTimerIdError = (timerId: string): Error => {\n const err = new Error(`[ProcessRuntime] invalid timerId (expected DurationInput): ${timerId}`)\n ;(err as any).code = 'process::invalid_timer_id'\n ;(err as any).hint =\n \"timerId must be a valid DurationInput string, e.g. '10 millis', '1 seconds', '5 minutes'.\"\n return err\n}\n\nconst makeMissingActionStreamError = (moduleId: string): Error => {\n const err = new Error('ModuleRuntime does not provide actions$ (required for moduleAction trigger).')\n ;(err as any).code = 'process::missing_action_stream'\n ;(err as any).hint = `moduleId=${moduleId}`\n return err\n}\n\nconst makeMissingActionMetaStreamError = (moduleId: string): Error => {\n const err = new Error('ModuleRuntime does not provide actionsWithMeta$ (required for moduleAction trigger).')\n ;(err as any).code = 'process::missing_action_meta_stream'\n ;(err as any).hint = `moduleId=${moduleId}`\n return err\n}\n\nconst makeMissingChangesStreamError = (moduleId: string): Error => {\n const err = new Error('ModuleRuntime does not provide changesWithMeta (required for moduleStateChange trigger).')\n ;(err as any).code = 'process::missing_changes_stream'\n ;(err as any).hint = `moduleId=${moduleId}`\n return err\n}\n\nconst nowMs = (): number => {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now()\n }\n return Date.now()\n}\n\nconst isWeakMapKey = (value: unknown): value is object =>\n (typeof value === 'object' && value !== null) || typeof value === 'function'\n\nconst makeModuleStateChangeReadQuery = (args: {\n readonly moduleId: string\n readonly path: string\n readonly selector: (state: unknown) => unknown\n}): ReadQuery.ReadQuery<unknown, unknown> =>\n ReadQuery.make({\n selectorId: `process:moduleStateChange:${args.moduleId}:${args.path}`,\n debugKey: `process.moduleStateChange:${args.moduleId}.${args.path}`,\n reads: [args.path],\n select: args.selector,\n equalsKind: 'objectIs',\n })\n\nexport const makeNonPlatformTriggerStreamFactory = (options: TriggerStreamFactoryOptions) => {\n const moduleRuntimeCache = new Map<string, any>()\n const runtimeSchemaAstCache = new WeakMap<object, CachedSchemaAstEntry>()\n\n const resolveModuleRuntime = (moduleId: string): Effect.Effect<any, Error> =>\n Effect.gen(function* () {\n if (moduleRuntimeCache.has(moduleId)) {\n return moduleRuntimeCache.get(moduleId)\n }\n\n const runtime = options.moduleRuntimeRegistry.get(moduleId)\n if (runtime === undefined) {\n return yield* Effect.fail(new Error(`Missing module runtime in scope: ${moduleId}`))\n }\n\n moduleRuntimeCache.set(moduleId, runtime as any)\n return runtime\n })\n\n const resolveRuntimeStateSchemaAst = (runtime: unknown): SchemaAstLike => {\n if (!isWeakMapKey(runtime)) {\n return options.resolveRuntimeStateSchemaAst(runtime)\n }\n\n const cached = runtimeSchemaAstCache.get(runtime)\n if (cached) {\n return cached.ast\n }\n\n const ast = options.resolveRuntimeStateSchemaAst(runtime)\n runtimeSchemaAstCache.set(runtime, { ast })\n return ast\n }\n\n const makeTimerTriggerStream = (spec: TimerTriggerSpec): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n const interval = Duration.fromInput(spec.timerId as Duration.Input)\n if (!interval) {\n return yield* Effect.fail(makeInvalidTimerIdError(spec.timerId))\n }\n\n return Stream.tick(interval).pipe(\n Stream.map(\n () =>\n ({\n kind: 'timer',\n name: spec.name,\n timerId: spec.timerId,\n }) satisfies ProcessTrigger,\n ),\n )\n })\n\n const makeModuleActionTriggerStream = (\n spec: ModuleActionTriggerSpec,\n ): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n const runtime = yield* resolveModuleRuntime(spec.moduleId)\n const buildModuleActionTrigger = (txnSeq: number): ProcessTrigger => ({\n kind: 'moduleAction',\n name: spec.name,\n moduleId: spec.moduleId,\n instanceId: runtime.instanceId as string,\n actionId: spec.actionId,\n txnSeq,\n })\n\n if (!options.shouldRecordChainEvents) {\n const stream = runtime.actions$ as Stream.Stream<any> | undefined\n if (!stream) {\n return yield* Effect.fail(makeMissingActionStreamError(spec.moduleId))\n }\n\n return stream.pipe(\n Stream.filter((action: any) => options.actionIdFromUnknown(action) === spec.actionId),\n Stream.map(() => buildModuleActionTrigger(1)),\n )\n }\n\n const stream = runtime.actionsWithMeta$ as Stream.Stream<any> | undefined\n if (!stream) {\n return yield* Effect.fail(makeMissingActionMetaStreamError(spec.moduleId))\n }\n\n return stream.pipe(\n Stream.filter((evt: any) => options.actionIdFromUnknown(evt.value) === spec.actionId),\n Stream.map((evt: any) => {\n const txnSeq = evt?.meta?.txnSeq\n return buildModuleActionTrigger(typeof txnSeq === 'number' ? txnSeq : 1)\n }),\n )\n })\n\n const makeModuleStateChangeTriggerStream = (\n spec: ModuleStateChangeTriggerSpec,\n ): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n const runtime = yield* resolveModuleRuntime(spec.moduleId)\n const schemaAst = resolveRuntimeStateSchemaAst(runtime)\n const selectorResult = makeSchemaSelector(spec.path, schemaAst)\n if (!selectorResult.ok) {\n return yield* Effect.fail(options.withModuleHint(selectorResult.error, spec.moduleId))\n }\n\n const selectorBase = selectorResult.selector\n const buildModuleStateChangeTrigger = (txnSeq: unknown): ProcessTrigger => ({\n kind: 'moduleStateChange',\n name: spec.name,\n moduleId: spec.moduleId,\n instanceId: runtime.instanceId as string,\n path: spec.path,\n txnSeq: typeof txnSeq === 'number' ? txnSeq : 1,\n })\n\n const buildModuleStateChangeBaseStream = (\n selector: (state: unknown) => unknown,\n ): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n const readQuery = makeModuleStateChangeReadQuery({\n moduleId: spec.moduleId,\n path: spec.path,\n selector,\n })\n const changesReadQueryWithMeta = runtime.changesReadQueryWithMeta as\n | ((input: ReadQuery.ReadQueryInput<unknown, unknown>) => Stream.Stream<any>)\n | undefined\n\n if (typeof changesReadQueryWithMeta === 'function') {\n return changesReadQueryWithMeta(readQuery).pipe(\n Stream.map((evt: any) => buildModuleStateChangeTrigger(evt?.meta?.txnSeq)),\n )\n }\n\n const changesWithMeta = runtime.changesWithMeta as ((selector: (state: unknown) => unknown) => Stream.Stream<any>) | undefined\n if (typeof changesWithMeta !== 'function') {\n return yield* Effect.fail(makeMissingChangesStreamError(spec.moduleId))\n }\n\n let hasPrevValue = false\n let prevValue: unknown\n\n return changesWithMeta(selector).pipe(\n Stream.filter((evt: any) => {\n if (hasPrevValue && Object.is(prevValue, evt.value)) {\n return false\n }\n hasPrevValue = true\n prevValue = evt.value\n return true\n }),\n Stream.map((evt: any) => buildModuleStateChangeTrigger(evt?.meta?.txnSeq)),\n )\n })\n\n if (!options.shouldRecordChainEvents) {\n return yield* buildModuleStateChangeBaseStream(selectorBase)\n }\n\n const selectorDiagnosticsConfig = makeSelectorDiagnosticsConfig(isDevEnv())\n const selectorDiagnosticsRef = yield* Ref.make(initialSelectorDiagnosticsState(Date.now()))\n const selectorSampling = makeSelectorSamplingTracker(selectorDiagnosticsConfig)\n\n const selector = (state: unknown): unknown => {\n if (!selectorSampling.onSelectorCall()) {\n return selectorBase(state)\n }\n\n const t0 = nowMs()\n const value = selectorBase(state)\n const dt = nowMs() - t0\n\n selectorSampling.recordSample(dt)\n return value\n }\n\n const maybeWarnSelector = (trigger: ProcessTrigger): Effect.Effect<void> => {\n return Effect.gen(function* () {\n const now = Date.now()\n const sampling = selectorSampling.snapshot()\n\n const decision = yield* Ref.modify(selectorDiagnosticsRef, (state) =>\n evaluateSelectorWarning(state, now, {\n config: selectorDiagnosticsConfig,\n sampling: {\n sampled: sampling.sampled,\n maxSampleMs: sampling.maxSampleMs,\n },\n }),\n )\n\n if (!decision.shouldWarn) {\n return\n }\n\n const code = decision.tooFrequent ? 'process::selector_high_frequency' : 'process::selector_slow'\n const hint = buildSelectorWarningHint({\n moduleId: spec.moduleId,\n path: spec.path,\n decision,\n config: selectorDiagnosticsConfig,\n sampling,\n })\n selectorSampling.resetSampling()\n\n yield* options.emitSelectorWarning(trigger, {\n message: 'moduleStateChange selector diagnostics warning',\n code,\n hint,\n })\n })\n }\n\n const baseStream = yield* buildModuleStateChangeBaseStream(selector)\n\n return baseStream.pipe(Stream.tap(maybeWarnSelector))\n })\n\n return (spec: NonPlatformTriggerSpec): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n switch (spec.kind) {\n case 'timer':\n return yield* makeTimerTriggerStream(spec)\n case 'moduleAction':\n return yield* makeModuleActionTriggerStream(spec)\n case 'moduleStateChange':\n return yield* makeModuleStateChangeTriggerStream(spec)\n default:\n return yield* Effect.fail(makeInvalidTriggerKindError(spec))\n }\n })\n}\n","export type SelectorDiagnosticsState = {\n readonly windowStartedMs: number\n readonly triggersInWindow: number\n readonly lastWarningAtMs: number\n}\n\nexport type SelectorWarningDecision = {\n readonly shouldWarn: boolean\n readonly tooFrequent: boolean\n readonly tooSlow: boolean\n readonly triggersInWindow: number\n}\n\nexport type SelectorDiagnosticsSampling = {\n readonly calls: number\n readonly sampled: number\n readonly slowSamples: number\n readonly maxSampleMs: number\n}\n\nexport type SelectorDiagnosticsConfig = {\n readonly sampleEveryMask: number\n readonly slowSampleThresholdMs: number\n readonly triggerWindowMs: number\n readonly triggerWarningThreshold: number\n readonly warningCooldownMs: number\n}\n\ntype SelectorSamplingTrackerConfig = Pick<SelectorDiagnosticsConfig, 'sampleEveryMask' | 'slowSampleThresholdMs'>\n\ntype SelectorWarningEvaluationOptions = {\n readonly config: SelectorDiagnosticsConfig\n readonly sampling: Pick<SelectorDiagnosticsSampling, 'sampled' | 'maxSampleMs'>\n}\n\ntype SelectorWarningHintOptions = {\n readonly moduleId: string\n readonly path: string\n readonly decision: SelectorWarningDecision\n readonly config: SelectorDiagnosticsConfig\n readonly sampling: SelectorDiagnosticsSampling\n}\n\nexport type SelectorSamplingTracker = {\n readonly onSelectorCall: () => boolean\n readonly recordSample: (sampleMs: number) => void\n readonly resetSampling: () => void\n readonly snapshot: () => SelectorDiagnosticsSampling\n}\n\nexport const makeSelectorDiagnosticsConfig = (isDevEnv: boolean): SelectorDiagnosticsConfig => ({\n sampleEveryMask: 0x7f, // sample every 128 calls\n slowSampleThresholdMs: 4,\n triggerWindowMs: 1000,\n triggerWarningThreshold: isDevEnv ? 20 : 200,\n warningCooldownMs: 30_000,\n})\n\nexport const initialSelectorDiagnosticsState = (now: number): SelectorDiagnosticsState => ({\n windowStartedMs: now,\n triggersInWindow: 0,\n lastWarningAtMs: 0,\n})\n\nexport const makeSelectorSamplingTracker = (config: SelectorSamplingTrackerConfig): SelectorSamplingTracker => {\n let calls = 0\n let sampled = 0\n let slowSamples = 0\n let maxSampleMs = 0\n\n return {\n onSelectorCall: () => {\n calls += 1\n return (calls & config.sampleEveryMask) === 0\n },\n recordSample: (sampleMs) => {\n sampled += 1\n if (sampleMs >= config.slowSampleThresholdMs) {\n slowSamples += 1\n }\n if (sampleMs > maxSampleMs) {\n maxSampleMs = sampleMs\n }\n },\n resetSampling: () => {\n sampled = 0\n slowSamples = 0\n maxSampleMs = 0\n },\n snapshot: () => ({\n calls,\n sampled,\n slowSamples,\n maxSampleMs,\n }),\n }\n}\n\nexport const evaluateSelectorWarning = (\n state: SelectorDiagnosticsState,\n now: number,\n options: SelectorWarningEvaluationOptions,\n): readonly [SelectorWarningDecision, SelectorDiagnosticsState] => {\n const { config, sampling } = options\n const windowExpired = now - state.windowStartedMs >= config.triggerWindowMs\n const windowStartedMs = windowExpired ? now : state.windowStartedMs\n const triggersInWindow = windowExpired ? 1 : state.triggersInWindow + 1\n\n const shouldCooldown = now - state.lastWarningAtMs < config.warningCooldownMs\n const tooFrequent = triggersInWindow >= config.triggerWarningThreshold\n const tooSlow = sampling.maxSampleMs >= config.slowSampleThresholdMs && sampling.sampled > 0\n const shouldWarn = !shouldCooldown && (tooFrequent || tooSlow)\n\n const next: SelectorDiagnosticsState = shouldWarn\n ? {\n windowStartedMs: now,\n triggersInWindow: 0,\n lastWarningAtMs: now,\n }\n : {\n ...state,\n windowStartedMs,\n triggersInWindow,\n }\n\n return [\n {\n shouldWarn,\n tooFrequent,\n tooSlow,\n triggersInWindow,\n },\n next,\n ] as const\n}\n\nexport const buildSelectorWarningHint = (options: SelectorWarningHintOptions): string => {\n const { moduleId, path, decision, config, sampling } = options\n return [\n `moduleId=${moduleId}`,\n `path=${path}`,\n `windowMs=${config.triggerWindowMs}`,\n `triggersInWindow=${decision.triggersInWindow}`,\n `threshold=${config.triggerWarningThreshold}`,\n `cooldownMs=${config.warningCooldownMs}`,\n '',\n 'selector sampling:',\n `calls=${sampling.calls}`,\n `sampled=${sampling.sampled}`,\n `slowSamples(>=${config.slowSampleThresholdMs}ms)=${sampling.slowSamples}`,\n `maxSampleMs=${sampling.maxSampleMs.toFixed(2)}`,\n '',\n 'notes:',\n '- Ensure the selected value is stable (prefer primitive/tuple; avoid returning fresh objects).',\n '- Narrow the path to reduce change frequency; avoid selecting large objects.',\n ].join('\\n')\n}\n","import type { ProcessErrorPolicy } from './protocol.js'\n\nexport type SupervisionDecision = 'stop' | 'restart'\n\nexport type SupervisionState = {\n readonly failureTimes: ReadonlyArray<number>\n}\n\nexport const initialState = (): SupervisionState => ({ failureTimes: [] })\n\nexport type FailureDecision = {\n readonly decision: SupervisionDecision\n readonly nextState: SupervisionState\n readonly withinWindowFailures: number\n readonly maxRestarts: number\n readonly windowMs?: number\n}\n\nexport const onFailure = (policy: ProcessErrorPolicy, state: SupervisionState, nowMs: number): FailureDecision => {\n if (policy.mode === 'failStop') {\n return {\n decision: 'stop',\n nextState: state,\n withinWindowFailures: state.failureTimes.length,\n maxRestarts: 0,\n windowMs: policy.windowMs,\n }\n }\n\n const maxRestartsRaw = policy.maxRestarts\n const maxRestarts =\n typeof maxRestartsRaw === 'number' && Number.isFinite(maxRestartsRaw) && maxRestartsRaw >= 0\n ? Math.floor(maxRestartsRaw)\n : 0\n\n if (maxRestarts <= 0) {\n return {\n decision: 'stop',\n nextState: state,\n withinWindowFailures: state.failureTimes.length,\n maxRestarts,\n windowMs: policy.windowMs,\n }\n }\n\n const windowMsRaw = policy.windowMs\n const windowMs =\n typeof windowMsRaw === 'number' && Number.isFinite(windowMsRaw) && windowMsRaw > 0\n ? Math.floor(windowMsRaw)\n : undefined\n\n const failureTimesRaw = [...state.failureTimes, nowMs]\n const failureTimes = windowMs ? failureTimesRaw.filter((t) => t >= nowMs - windowMs) : failureTimesRaw\n\n // Keep at most maxRestarts+1 timestamps to avoid unbounded growth.\n const cap = maxRestarts + 1\n const capped = failureTimes.length > cap ? failureTimes.slice(failureTimes.length - cap) : failureTimes\n\n const withinWindowFailures = capped.length\n const decision: SupervisionDecision = withinWindowFailures <= maxRestarts ? 'restart' : 'stop'\n\n return {\n decision,\n nextState: { failureTimes: capped },\n withinWindowFailures,\n maxRestarts,\n windowMs,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,IAAM,eAAe,uBAAO,IAAI,2BAA2B;AAMlE,IAAM,eAAe,CAAC,QAAgB,KAAa,UAAyB;AAC1E,SAAO,eAAe,QAAQ,KAAK;AAAA,IACjC;AAAA,IACA,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACZ,CAAC;AACH;AAEO,IAAM,UAAU,CAAC,WACrB,OAAyB,YAAY;AAEjC,IAAM,gBAAgB,CAAC,WAC5B,QAAQ,MAAM,GAAG;AAEZ,IAAM,aAAa,CAAO,QAAmC,SAA2C;AAC7G,eAAa,QAAe,cAAc,IAAI;AAC9C,SAAO;AACT;;;ACtCA,SAAS,QAAQ,OAAO,kBAAkB;;;ACanC,IAAM,wBAAwB,CAAC,SAIN;AAC9B,QAAM,kBACJ,KAAK,yBAAyB,OAAO,IAChC;AAAA,IACC,kBAAkB,OAAO;AAAA,MACvB,MAAM,KAAK,KAAK,yBAAyB,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAE;AAAA,IACrG;AAAA,EACF,IACA;AAEN,QAAM,iBACJ,KAAK,2BAA2B,QAAQ,KAAK,2BAA2B,OACnE;AAAA,IACC,GAAI,KAAK,2BAA2B,OAAO,EAAE,yBAAyB,KAAK,wBAAwB,IAAI,CAAC;AAAA,IACxG,GAAI,KAAK,2BAA2B,OAAO,EAAE,UAAU,KAAK,wBAAwB,IAAI,CAAC;AAAA,EAC3F,IACA;AAEN,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,0BAA0B,CAAC,eAAgE;AACtG,QAAM,UACJ,WAAW,mBAAmB,QAAQ,WAAW,kBAAkB,OAC9D;AAAA,IACC,GAAI,WAAW,mBAAmB,OAAO,EAAE,UAAU,WAAW,gBAAgB,IAAI,CAAC;AAAA,IACrF,GAAI,WAAW,kBAAkB,OAAO,EAAE,SAAS,WAAW,eAAe,IAAI,CAAC;AAAA,EACpF,IACA;AAEN,SAAO,EAAE,QAAQ;AACnB;AAEO,IAAM,0BAA0B,CAAC,SAKtC,KAAK,KAAK,OAAO;AAAA,EACf,WAAW,KAAK;AAAA,EAChB,SAAS,KAAK,QAAQ;AACxB,CAAC;;;ADrCH,IAAM,2BAAN,cAAuC,WAAW,QAGhD,EAAE,iCAAiC,EAAE;AAAC;AAEjC,IAAM,uBAAuB;AAE7B,IAAM,yBAAyB,CACpC,cAEA,MAAM,QAAQ,sBAAsB,SAAS;AAE/C,IAAM,WAAW,CAAC,UAChB,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAE9D,IAAM,wBAAwB,CAAC,YAA2C;AAC/E,QAAM,OAAO,iBAAiB,OAAO;AAErC,QAAM,2BAA2B,oBAAI,IAAuB;AAC5D,MAAI;AACJ,MAAI;AAEJ,QAAM,eAAe;AAAA,IACnB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,iBAAiB;AAAA,EACnB;AAEA,QAAM,YAAuB;AAAA,IAC3B,QAAQ,CAAC,UACP,OAAO,IAAI,aAAa;AACtB,YAAM,QAAQ,OAAO,OAAO,QAAQ,uBAAuB;AAC3D,YAAM,gBAAiB,MAAc;AACrC,YAAM,aAAa,OAAO,kBAAkB,YAAY,cAAc,SAAS,IAAI,gBAAgB;AACnG,YAAM,WAAW,UAAU,QAAQ,SAAY,QAAQ,MAAM,QAAQ,YAAY,UAAU;AAC3F,YAAM,MAAM,uBAAuB,OAAO;AAAA,QACxC,kBAAkB;AAAA,QAClB;AAAA,QACA,kBAAkB,CAAC,EAAE,MAAM,MAAM;AAC/B,uBAAa,WAAW,MAAM;AAC9B,uBAAa,aAAa,MAAM;AAAA,QAClC;AAAA,MACF,CAAC;AACD,UAAI,CAAC,IAAK;AAEV,YAAM,YAAY,iBAAiB,GAAG;AACtC,mBAAa,WAAW,UAAU,MAAM;AACxC,mBAAa,aAAa,UAAU,MAAM;AAC1C,mBAAa,mBAAmB,UAAU,MAAM;AAEhD,WAAK,OAAO,eAAe,UAAU,OAAO;AAAA,QAC1C,WAAW,IAAI;AAAA,MACjB,CAAC;AAAA,IACH,CAAC;AAAA,EACL;AAEA,QAAM,2BAA2B,CAAC,aAA4B;AAC5D,QAAI,CAAC,SAAS,QAAQ,EAAG;AACzB,UAAM,SAAS,SAAS;AACxB,QAAI,OAAO,WAAW,YAAY,OAAO,WAAW,EAAG;AACvD,UAAM,YAAY,iBAAiB,QAAQ;AAC3C,iBAAa,WAAW,UAAU,MAAM;AACxC,iBAAa,aAAa,UAAU,MAAM;AAC1C,iBAAa,mBAAmB,UAAU,MAAM;AAChD,6BAAyB,IAAI,QAAQ,UAAU,KAAK;AAAA,EACtD;AAEA,QAAM,6BAA6B,CAAC,QAAuB;AACzD,UAAM,YAAY,iBAAiB,GAAG;AACtC,iBAAa,WAAW,UAAU,MAAM;AACxC,iBAAa,aAAa,UAAU,MAAM;AAC1C,iBAAa,mBAAmB,UAAU,MAAM;AAChD,8BAA0B,UAAU;AAAA,EACtC;AAEA,QAAM,6BAA6B,CAAC,aAA4B;AAC9D,UAAM,YAAY,iBAAiB,QAAQ;AAC3C,iBAAa,WAAW,UAAU,MAAM;AACxC,iBAAa,aAAa,UAAU,MAAM;AAC1C,iBAAa,mBAAmB,UAAU,MAAM;AAChD,8BAA0B,UAAU;AAAA,EACtC;AAEA,QAAM,wBAAwB,CAAC,YAA+D;AAC5F,UAAM,aAAa,sBAAsB;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,UAAM,UAAU,wBAAwB,UAAU;AAElD,WAAO,wBAAwB;AAAA,MAC7B;AAAA,MACA,WAAW,SAAS;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,QAAQ,MAAY;AACxB,SAAK,MAAM;AACX,6BAAyB,MAAM;AAC/B,8BAA0B;AAC1B,8BAA0B;AAC1B,iBAAa,UAAU;AACvB,iBAAa,YAAY;AACzB,iBAAa,kBAAkB;AAAA,EACjC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AE7IA,SAAS,OAAO,UAAU,UAAAA,SAAQ,SAAAC,QAAO,SAAAC,QAAO,UAAAC,SAAQ,QAAQ,OAAO,OAAAC,MAAK,cAAAC,aAAY,SAAAC,QAAO,UAAAC,eAAc;;;ACItG,IAAM,oBAAoB,CAAC,UAAyC;AACzE,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AACH,aAAO,OAAO,MAAM,KAAK;AAAA,IAC3B,KAAK;AACH,aAAO,kBAAkB,MAAM,QAAQ,KAAK,MAAM,UAAU;AAAA,IAC9D,KAAK;AACH,aAAO,aAAa,MAAM,SAAS;AAAA,EACvC;AACF;AAEO,IAAM,8BAA8B,CAAC,aAC1C,GAAG,SAAS,SAAS,KAAK,kBAAkB,SAAS,KAAK,CAAC;AAEtD,IAAM,gCAAgC,CAAC,aAA8C;AAC1F,QAAM,WAAW,kBAAkB,SAAS,SAAS,KAAK;AAC1D,SAAO,WAAW,SAAS,SAAS,SAAS,KAAK,QAAQ,MAAM,SAAS,MAAM;AACjF;;;ACrBA,SAAS,UAAAC,SAAQ,OAAO,QAAQ,KAAY,cAAc;AAKnD,IAAM,mCAAmC;AACzC,IAAM,yBAAyB;AACtC,IAAM,gCAAgC;AAsB/B,IAAM,oBAAoB,CAC/B,UACA,YAGuB;AACvB,QAAM,eAAe,SAAS,gBAAgB;AAE9C,QAAM,aACJ,OAAO,aAAa,YAAY,OAAO,SAAS,QAAQ,KAAK,YAAY,IAAI,KAAK,MAAM,QAAQ,IAAI;AAEtG,SAAO;AAAA,IACL;AAAA,IACA,OAAO,eAAe,cAAc,eAAe;AAAA,EACrD;AACF;AAgBA,IAAM,cAAc,CAAC,UAAqC,MAAM,MAAM,SAAS,MAAM;AAErF,IAAM,uBAAuB,CAAC,UAAmC;AAC/D,MAAI,MAAM,eAAe,EAAG;AAE5B,MAAI,MAAM,cAAc,MAAM,MAAM,QAAQ;AAC1C,UAAM,QAAQ,CAAC;AACf,UAAM,aAAa;AACnB;AAAA,EACF;AAGA,MAAI,MAAM,cAAc,iCAAiC,MAAM,aAAa,KAAK,MAAM,MAAM,QAAQ;AACnG,UAAM,QAAQ,MAAM,MAAM,MAAM,MAAM,UAAU;AAChD,UAAM,aAAa;AAAA,EACrB;AACF;AAEA,IAAM,iBAAiB,CAAC,OAA0B,YAAoC;AACpF,QAAM,MAAM,KAAK,OAAO;AACxB,QAAM,OAAO,YAAY,KAAK;AAC9B,MAAI,OAAO,MAAM,MAAM;AACrB,UAAM,OAAO;AAAA,EACf;AACA,SAAO;AACT;AAEA,IAAM,iBAAiB,CAAC,UAAyD;AAC/E,MAAI,MAAM,cAAc,MAAM,MAAM,QAAQ;AAC1C,UAAM,QAAQ,CAAC;AACf,UAAM,aAAa;AACnB,WAAO;AAAA,EACT;AACA,QAAM,OAAO,MAAM,MAAM,MAAM,UAAU;AACzC,QAAM,cAAc;AACpB,uBAAqB,KAAK;AAC1B,SAAO;AACT;AAEO,IAAM,0BAA0B,CAAC,SAatCC,QAAO,IAAI,aAAa;AACtB,QAAM,SAAS,KAAK;AACpB,QAAM,oBAAoB,KAAK,qBAAqB;AAEpD,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,WAAW,OAAuB,KAAK;AAE7C,UAAMC,aAAY,CAAC,aACjBD,QAAO,IAAI,aAAa;AACtB,YAAM,UAAU,KAAK,iBAAiB,QAAQ;AAE9C,YAAM,CAAC,WAAW,eAAe,KAAK,IAAI,OAAuB,SAAS,QAAQ;AAElF,UAAI,aAAa,kBAAkB,GAAG;AACpC,eAAO,MAAM,UAAU,SAAS;AAAA,MAClC;AAEA,YAAM,QAAQ,OAAO,KAClB,IAAI,OAAO,EACX,KAAKA,QAAO,SAAyB,eAAe,UAAU,KAAK,CAAC,GAAGA,QAAO,UAAU;AAE3F,aAAuB,kBAAkB,UAAU,OAAO,KAAK;AAAA,IACjE,CAAC;AAEH,WAAO,OAAO,OAAO,WAAW,KAAK,QAAQC,UAAS;AAAA,EACxD;AAEA,QAAM,UAAU,OAAO,IAAI,KAAK,KAAK;AACrC,QAAM,iBAAiB,OAAO,IAAI,KAAK;AAAA,IACrC,SAAS;AAAA,IACT,OAAO,CAAC;AAAA,IACR,YAAY;AAAA,IACZ,MAAM;AAAA,EACR,CAAC;AACD,QAAM,mBAAmB,OAAO,IAAI,KAAK;AAAA,IACvC,QAAQ;AAAA,IACR,OAAO,CAAC;AAAA,IACR,YAAY;AAAA,IACZ,MAAM;AAAA,EACR,CAAC;AAED,QAAM,mBAAmB,kBAAkB,OAAO,UAAU,EAAE,cAAc,kBAAkB,CAAC;AAC/F,QAAM,qBAAqB,kBAAkB,QAAW,EAAE,cAAc,kBAAkB,CAAC;AAC3F,QAAM,gBACJ,OAAO,OAAO,gBAAgB,YAAY,OAAO,SAAS,OAAO,WAAW,KAAK,OAAO,eAAe,IACnG,KAAK,MAAM,OAAO,WAAW,IAC5B,KAAK,wBAAwB;AAEpC,QAAM,cAAc,MAClBD,QAAO;AAAA,IAAQ,MACb,IAAI,OAAO,gBAAgB,CAAC,UAAU;AACpC,UAAI,MAAM,WAAW,YAAY,KAAK,MAAM,GAAG;AAC7C,eAAO,CAAC,OAAO,KAAK,GAAG,KAAK;AAAA,MAC9B;AACA,YAAM,OAAO,eAAe,KAAK;AACjC,UAAI,SAAS,QAAW;AACtB,eAAO,CAAC,OAAO,KAAK,GAAG,KAAK;AAAA,MAC9B;AACA,YAAM,UAAU;AAChB,aAAO,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK;AAAA,IAClC,CAAC,EAAE;AAAA,MACDA,QAAO;AAAA,QAAQ,CAAC,SACd,OAAO,MAAM,MAAM;AAAA,UACjB,QAAQ,MAAMA,QAAO;AAAA,UACrB,QAAQ,CAAC,YACPA,QAAO;AAAA,YACL,KACG,IAAI,OAAO,EACX;AAAA,cACCA,QAAO;AAAA,gBACL,IAAI,OAAO,gBAAgB,CAAC,MAAM;AAChC,oBAAE,UAAU;AACZ,yBAAO;AAAA,gBACT,CAAC;AAAA,cACH;AAAA,cACAA,QAAO,QAAQ,MAAM,YAAY,CAAC;AAAA,YACpC;AAAA,UACJ,EAAE,KAAKA,QAAO,MAAM;AAAA,QACxB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEF,QAAM,gBAAgB,MACpBA,QAAO;AAAA,IAAQ,MACb,IAAI,OAAO,kBAAkB,CAAC,UAAU;AACtC,UAAI,MAAM,UAAU,iBAAiB,YAAY,KAAK,MAAM,GAAG;AAC7D,eAAO,CAAC,OAAO,KAAK,GAAG,KAAK;AAAA,MAC9B;AACA,YAAM,OAAO,eAAe,KAAK;AACjC,UAAI,SAAS,QAAW;AACtB,eAAO,CAAC,OAAO,KAAK,GAAG,KAAK;AAAA,MAC9B;AACA,YAAM,UAAU;AAChB,aAAO,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK;AAAA,IAClC,CAAC,EAAE;AAAA,MACDA,QAAO;AAAA,QAAQ,CAAC,SACd,OAAO,MAAM,MAAM;AAAA,UACjB,QAAQ,MAAMA,QAAO;AAAA,UACrB,QAAQ,CAAC,YACPA,QAAO;AAAA,YACL,KAAK,IAAI,OAAO,EAAE;AAAA,cAChBA,QAAO;AAAA,gBACL,IAAI,OAAO,kBAAkB,CAAC,MAAM;AAClC,oBAAE,SAAS,KAAK,IAAI,GAAG,EAAE,SAAS,CAAC;AACnC,yBAAO;AAAA,gBACT,CAAC;AAAA,cACH;AAAA,cACAA,QAAO,QAAQ,MAAM,cAAc,CAAC;AAAA,YACtC;AAAA,UACF,EAAE,KAAKA,QAAO,QAAQA,QAAO,QAAQ,MAAM,cAAc,CAAC,CAAC;AAAA,QAC/D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEF,QAAM,YAAY,CAAC,aACjBA,QAAO,IAAI,aAAa;AACtB,UAAM,UAAU,KAAK,iBAAiB,QAAQ;AAE9C,QAAI,OAAO,SAAS,QAAQ;AAC1B,YAAM,WAAW,OAAO,IAAI;AAAA,QAAO;AAAA,QAAS,CAAC,SAC3C,OAAQ,CAAC,OAAO,IAAI,IAAe,CAAC,MAAM,IAAI;AAAA,MAChD;AACA,UAAI,CAAC,UAAU;AACb,eAAO,KAAK,OAAO,OAAO;AAC1B;AAAA,MACF;AAEA,aAAOA,QAAO,WAAW,KAAK,IAAI,OAAO,EAAE,KAAKA,QAAO,SAAS,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC,CAAC;AACzF;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,YAAY;AAC9B,YAAM,CAACE,WAAUC,KAAI,IAAI,OAAO,IAAI,OAAO,kBAAkB,CAAC,UAAU;AACtE,cAAM,OAAO,eAAe,OAAO,OAAO;AAC1C,eAAO,CAAC,CAAC,MAAM,MAAM,IAAI,GAAY,KAAK;AAAA,MAC5C,CAAC;AAED,UAAID,YAAW,mBAAmB,OAAO;AACvC,eAAO,KAAK,gBAAgB;AAAA,UAC1B,MAAM;AAAA,UACN,eAAeA;AAAA,UACf,MAAAC;AAAA,UACA,OAAO;AAAA,UACP;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAEA,aAAO,cAAc;AACrB;AAAA,IACF;AAGA,UAAM,CAAC,UAAU,IAAI,IAAI,OAAO,IAAI,OAAO,gBAAgB,CAAC,UAAU;AACpE,YAAM,OAAO,eAAe,OAAO,OAAO;AAC1C,aAAO,CAAC,CAAC,MAAM,MAAM,IAAI,GAAY,KAAK;AAAA,IAC5C,CAAC;AAED,QAAI,WAAW,iBAAiB,OAAO;AACrC,aAAO,KAAK,gBAAgB;AAAA,QAC1B,MAAM;AAAA,QACN,eAAe;AAAA,QACf;AAAA,QACA,OAAO;AAAA,QACP;AAAA,MACF,CAAC;AACD;AAAA,IACF;AAEA,WAAO,YAAY;AAAA,EACrB,CAAC;AAEH,SAAO,OAAO,OAAO,WAAW,KAAK,QAAQ,SAAS;AACxD,CAAC;;;ACxRI,IAAM,0BAA0B,IAAI;AACpC,IAAM,mCAAmC;AACzC,IAAM,4CAA4C;AAYzD,IAAM,oCAAoC;AAE1C,IAAM,mCAAmC,CAAC,kBAAyE;AACjH,UAAQ,cAAc,MAAM;AAAA,IAC1B,KAAK;AACH,aAAO,OAAO,cAAc,KAAK;AAAA,IACnC,KAAK;AACH,aAAO,UAAU,cAAc,QAAQ,IAAI,cAAc,UAAU;AAAA,IACrE,KAAK;AACH,aAAO,WAAW,cAAc,SAAS;AAAA,EAC7C;AACF;AAEO,IAAM,4BAA4B,CACvC,UACA,YACW;AACX,QAAM,YAAY,SAAS,SAAS;AACpC,QAAM,WAAW,iCAAiC,SAAS,SAAS,KAAK;AACzE,QAAM,SAAS,SAAS;AACxB,QAAM,aACJ,WAAW,OAAO,QAAQ,eAAe,YAAY,OAAO,SAAS,QAAQ,UAAU,KAAK,QAAQ,cAAc,IAC9G,KAAK,MAAM,QAAQ,UAAU,IAC7B;AACN,SAAO,cAAc,OACjB,GAAG,SAAS,IAAI,QAAQ,MAAM,MAAM,MAAM,UAAU,KACpD,GAAG,SAAS,IAAI,QAAQ,MAAM,MAAM;AAC1C;AAEO,IAAM,iCAAiC,CAAC,aAIZ;AAAA,EACjC,OACE,OAAO,SAAS,UAAU,YAAY,QAAQ,MAAM,SAAS,IAAI,QAAQ,QAAQ;AAAA,EACnF,WACE,OAAO,SAAS,cAAc,YAAY,OAAO,SAAS,QAAQ,SAAS,KAAK,QAAQ,aAAa,IACjG,KAAK,MAAM,QAAQ,SAAS,IAC5B;AAAA,EACN,UACE,OAAO,SAAS,aAAa,YAAY,OAAO,SAAS,QAAQ,QAAQ,KAAK,QAAQ,YAAY,IAC9F,KAAK,MAAM,QAAQ,QAAQ,IAC3B;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,gBAAgB;AAClB;AAeA,IAAM,iCAAiC,CACrC,OACA,OACA,mBACkB;AAAA,EAClB,GAAG;AAAA,EACH,gBAAgB,wBAAwB;AAAA,IACtC,QAAQ;AAAA,IACR,OAAO,MAAM;AAAA,IACb,QAAQ;AAAA,MACN,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,MACL,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,YAAY,MAAM;AAAA,IACpB;AAAA,EACF,CAAC;AAAA,EACD,SAAS,uBAAuB,QAAQ,aAAa,GAAG,aAAa;AACvE;AAEA,IAAM,+BAA+B,CAAC,SAK8C;AAClF,QAAM,eAAe,+BAA+B,KAAK,OAAO,KAAK,OAAO,KAAK,aAAa;AAC9F,MAAI,mBAAmB,YAAY,KAAK,KAAK,UAAU;AACrD,WAAO,EAAE,OAAO,cAAc,OAAO,KAAK,MAAM;AAAA,EAClD;AAIA,MAAI,YAAwC;AAAA,IAC1C,GAAG,KAAK;AAAA,IACR,YAAY,KAAK,MAAM,aAAa;AAAA,EACtC;AAEA,QAAM,UAAwB;AAAA,IAC5B,GAAG,KAAK;AAAA,IACR,SAAS,uBAAuB,MAAM,KAAK,iBAAiB,mBAAmB;AAAA,EACjF;AAEA,QAAM,kBAAkB,4BAA4B,SAAS,EAAE,UAAU,KAAK,SAAS,CAAC;AACxF,MAAI,gBAAgB,YAAY;AAC9B,gBAAY;AAAA,MACV,GAAG;AAAA,MACH,YAAY,UAAU,aAAa;AAAA,IACrC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,gBAAgB;AAAA,IACvB,OAAO;AAAA,EACT;AACF;AAEA,IAAM,yBAAyB,CAAC,UAOX;AAAA,EACnB,MAAM;AAAA,EACN,UAAU,KAAK,YAAY;AAAA,EAC3B,SAAS,KAAK,YAAY;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU,KAAK,YAAY;AAAA,EAC3B,aAAa,KAAK,YAAY;AAAA,EAC9B,OAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM,aAAa,KAAK,SAAS,aAAa,KAAK,QAAQ,YAAY,KAAK,OAAO,YAAY,KAAK,OAAO,eAAe,KAAK,UAAU;AAAA,EAC3I;AACF;AAEO,IAAM,6BAA6B,CACxC,OACA,UACyE;AACzE,QAAM,YAAY,KAAK,IAAI,GAAG,MAAM,SAAS;AAC7C,QAAM,WAAW,KAAK,IAAI,GAAG,MAAM,QAAQ;AAE3C,MAAI,MAAM,gBAAgB;AACxB,WAAO;AAAA,MACL,EAAE,MAAM,OAAO;AAAA,MACf;AAAA,QACE,GAAG;AAAA,QACH,SAAS,MAAM,UAAU;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU;AAChB,QAAM,iBAAiB,KAAK,IAAI,GAAG,YAAY,OAAO;AAEtD,MAAI,MAAM,UAAU,gBAAgB;AAClC,UAAM,WAAW,4BAA4B,OAAO,EAAE,SAAS,CAAC;AAChE,UAAMC,aAAwC;AAAA,MAC5C,GAAG;AAAA,MACH,SAAS,MAAM,UAAU;AAAA,MACzB,YAAY,MAAM,cAAc,SAAS,aAAa,IAAI;AAAA,IAC5D;AACA,UAAMC,aAAY,6BAA6B;AAAA,MAC7C,OAAO,SAAS;AAAA,MAChB,OAAOD;AAAA,MACP;AAAA,MACA,eAAe,SAAS,aAAa,sBAAsB;AAAA,IAC7D,CAAC;AACD,WAAO;AAAA,MACL,EAAE,MAAM,QAAQ,OAAOC,WAAU,MAAM;AAAA,MACvCA,WAAU;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,UAAU;AAChC,QAAM,UAAU,uBAAuB;AAAA,IACrC,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,SAAS,MAAM;AAAA,IACf;AAAA,IACA,YAAY,MAAM;AAAA,EACpB,CAAC;AACD,QAAM,kBAAkB,4BAA4B,SAAS,EAAE,SAAS,CAAC;AACzE,QAAM,YAAwC;AAAA,IAC5C,GAAG;AAAA,IACH,SAAS,KAAK,IAAI,WAAW,MAAM,UAAU,CAAC;AAAA,IAC9C;AAAA,IACA,YAAY,MAAM,cAAc,gBAAgB,aAAa,IAAI;AAAA,IACjE,gBAAgB;AAAA,EAClB;AACA,QAAM,YAAY,6BAA6B;AAAA,IAC7C,OAAO,gBAAgB;AAAA,IACvB,OAAO;AAAA,IACP;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AAED,SAAO;AAAA,IACL,EAAE,MAAM,eAAe,OAAO,UAAU,MAAM;AAAA,IAC9C,UAAU;AAAA,EACZ;AACF;AAEO,IAAM,qBAAqB,CAAC,UAAgC;AACjE,QAAM,OAAO,KAAK,UAAU,KAAK;AACjC,SAAO,OAAO,WAAW,cAAc,OAAO,WAAW,MAAM,MAAM,IAAI,IAAI,YAAY,EAAE,OAAO,IAAI,EAAE;AAC1G;AAEA,IAAM,gBAAgB,CAAC,OAAe,WACpC,MAAM,UAAU,SAAS,QAAQ,MAAM,MAAM,GAAG,MAAM;AAExD,IAAM,wBAAwB,CAAC,UAAkF;AAC/G,QAAM,UAAU,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,SAAS,IAAI,MAAM,UAAU;AAEhG,QAAM,OAAO,OAAO,MAAM,SAAS,YAAY,MAAM,KAAK,SAAS,IAAI,cAAc,MAAM,MAAM,IAAI,IAAI;AAEzG,SAAO;AAAA,IACL,MAAM,OAAO,MAAM,SAAS,YAAY,MAAM,KAAK,SAAS,IAAI,MAAM,OAAO;AAAA,IAC7E,SAAS,cAAc,SAAS,GAAG;AAAA,IACnC,MAAM,OAAO,MAAM,SAAS,YAAY,MAAM,KAAK,SAAS,IAAI,MAAM,OAAO;AAAA,IAC7E;AAAA,EACF;AACF;AAEO,IAAM,8BAA8B,CACzC,OACA,YAGmE;AACnE,QAAM,WAAW,SAAS,YAAY;AAEtC,MAAI,aAAa;AACjB,MAAI,OAAqB;AAEzB,MAAI,MAAM,OAAO;AACf,UAAM,aAAa,sBAAsB,MAAM,KAAK;AACpD,QACE,WAAW,YAAY,MAAM,MAAM,WACnC,WAAW,SAAS,MAAM,MAAM,QAChC,WAAW,SAAS,MAAM,MAAM,QAChC,WAAW,SAAS,MAAM,MAAM,MAChC;AACA,mBAAa;AACb,aAAO,EAAE,GAAG,OAAO,OAAO,WAAW;AAAA,IACvC;AAAA,EACF;AAEA,MAAI,mBAAmB,IAAI,KAAK,UAAU;AACxC,WAAO,EAAE,OAAO,MAAM,WAAW;AAAA,EACnC;AAGA,MAAI,CAAC,KAAK,OAAO,MAAM;AAErB,WAAO,EAAE,OAAO,MAAM,YAAY,KAAK;AAAA,EACzC;AAEA,QAAM,OAAO,KAAK,MAAM;AACxB,QAAM,QAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC;AAEvC,aAAW,UAAU,OAAO;AAC1B,UAAM,UAAU,WAAW,IAAI,SAAY,cAAc,MAAM,MAAM;AACrE,UAAM,YAA0B;AAAA,MAC9B,GAAG;AAAA,MACH,OAAO;AAAA,QACL,GAAG,KAAK;AAAA,QACR,MAAM;AAAA,MACR;AAAA,IACF;AACA,QAAI,mBAAmB,SAAS,KAAK,UAAU;AAC7C,aAAO,EAAE,OAAO,WAAW,YAAY,KAAK;AAAA,IAC9C;AAAA,EACF;AAGA,QAAM,WAAyB,KAAK,QAC/B;AAAA,IACC,GAAG;AAAA,IACH,OAAO;AAAA,MACL,GAAG,KAAK;AAAA,MACR,SAAS,cAAc,KAAK,MAAM,SAAS,EAAE;AAAA,MAC7C,MAAM;AAAA,IACR;AAAA,EACF,IACA;AAEJ,SAAO,EAAE,OAAO,UAAU,YAAY,KAAK;AAC7C;;;AC9TA,YAAY,eAAe;AAgB3B,IAAMC,YAAW,CAAC,UAAqD,OAAO,UAAU,YAAY,UAAU;AAEvG,IAAM,mBAAmB,CAAC,WAA+C;AAC9E,MAAI,CAACA,UAAS,MAAM,EAAG,QAAO;AAC9B,QAAM,MAAO,OAAe;AAC5B,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,WAAY,QAAO;AACjE,SAAO;AACT;AAEA,IAAM,mBAAmB,CAAC,MAAc,SAAiB,SAAyB;AAChF,QAAM,MAAM,IAAI,MAAM,OAAO;AAC5B,EAAC,IAAY,OAAO;AACpB,EAAC,IAAY,OACZ,QACA;AAAA,IACE;AAAA,IACA,SAAS,IAAI;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb,SAAO;AACT;AAEA,IAAM,0BAA0B,CAAC,SAC/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,IACE;AAAA,IACA,SAAS,IAAI;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEF,IAAM,eAAe,CAAC,SAAqC;AACzD,MAAI,OAAO,SAAS,YAAY,KAAK,WAAW,GAAG;AACjD,WAAO,EAAE,IAAI,OAAO,OAAO,iBAAiB,OAAO,IAAI,GAAG,qCAAqC,EAAE;AAAA,EACnG;AAEA,QAAM,MAAM,KAAK,MAAM,GAAG;AAC1B,MAAI,IAAI,WAAW,GAAG;AACpB,WAAO,EAAE,IAAI,OAAO,OAAO,iBAAiB,MAAM,4CAA4C,EAAE;AAAA,EAClG;AAEA,QAAM,WAA6B,CAAC;AACpC,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,MAAM,IAAI,CAAC;AACjB,QAAI,IAAI,WAAW,GAAG;AACpB,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO;AAAA,UACL;AAAA,UACA,4CAA4C,CAAC;AAAA,UAC7C;AAAA,YACE;AAAA,YACA,SAAS,IAAI;AAAA,YACb;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,EAAE,KAAK,IAAI;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,KAAK,GAAG,GAAG;AACxB,YAAM,IAAI,OAAO,GAAG;AACpB,UAAI,CAAC,OAAO,SAAS,CAAC,KAAK,IAAI,GAAG;AAChC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,OAAO,iBAAiB,MAAM,gCAAgC,GAAG,cAAc,CAAC,GAAG;AAAA,QACrF;AAAA,MACF;AACA,eAAS,KAAK,KAAK,MAAM,CAAC,CAAC;AAC3B;AAAA,IACF;AAEA,aAAS,KAAK,GAAG;AAAA,EACnB;AAEA,SAAO,EAAE,IAAI,MAAM,SAAS;AAC9B;AAEA,IAAM,oBAAoB,CACxB,KACA,UACA,SAC8B;AAC9B,MAAI,UAAoB,iBAAO,GAAG;AAElC,SAAiB,oBAAU,OAAO,GAAG;AACnC,QAAI,KAAK,IAAI,OAAO,EAAG,QAAO;AAC9B,SAAK,IAAI,OAAO;AAChB,cAAoB,iBAAO,QAAQ,MAAM,CAAC;AAAA,EAC5C;AAEA,MAAI,SAAS,WAAW,EAAG,QAAO;AAElC,MAAc,kBAAQ,OAAO,GAAG;AAC9B,eAAW,QAAQ,QAAQ,OAAO;AAChC,YAAM,WAAW,kBAAkB,MAAM,UAAU,IAAI;AACvD,UAAI,SAAU,QAAO;AAAA,IACvB;AACA,WAAO;AAAA,EACT;AAEA,MAAc,mBAAS,OAAO,GAAG;AAC/B,UAAM,CAAC,MAAM,GAAG,IAAI,IAAI;AACxB,QAAI,OAAO,SAAS,SAAU,QAAO;AACrC,UAAM,UACJ,OAAO,QAAQ,SAAS,SAAS,QAAQ,SAAS,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,CAAC,IAAI;AACxG,WAAO,UAAU,kBAAkB,SAAS,MAAM,IAAI,IAAI;AAAA,EAC5D;AAEA,MAAc,oBAAU,OAAO,GAAG;AAChC,UAAM,CAAC,MAAM,GAAG,IAAI,IAAI;AACxB,QAAI,SAAS,OAAW,QAAO;AAE/B,QAAI,OAAO,SAAS,UAAU;AAC5B,iBAAW,MAAM,QAAQ,oBAAoB;AAC3C,YAAI,OAAO,GAAG,IAAI,MAAM,KAAM;AAC9B,eAAO,kBAAkB,GAAG,MAAM,MAAM,IAAI;AAAA,MAC9C;AAAA,IACF;AAEA,eAAW,OAAO,QAAQ,iBAAiB;AACzC,YAAM,QAAkB,iBAAO,IAAI,SAAqC;AACxE,YAAMC,OAAO,OAAe;AAC5B,YAAM,gBAAgBA,SAAQ,YAAYA,SAAQ;AAClD,YAAM,gBAAgBA,SAAQ;AAC9B,UAAI,OAAO,SAAS,YAAY,eAAe;AAC7C,eAAO,kBAAkB,IAAI,MAAM,MAAM,IAAI;AAAA,MAC/C;AACA,UAAI,OAAO,SAAS,YAAY,eAAe;AAC7C,eAAO,kBAAkB,IAAI,MAAM,MAAM,IAAI;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,MAAO,SAAiB;AAC9B,MAAI,QAAQ,gBAAgB,QAAQ,oBAAoB,QAAQ,mBAAmB,QAAQ,eAAe;AACxG,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,IAAM,mBACJ,CAAC,aACD,CAAC,UAA4B;AAC3B,MAAI,UAAmB;AACvB,aAAW,OAAO,UAAU;AAC1B,QAAI,WAAW,KAAM,QAAO;AAC5B,QAAI,OAAO,QAAQ,UAAU;AAC3B,UAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,kBAAU,QAAQ,GAAG;AACrB;AAAA,MACF;AACA,UAAID,UAAS,OAAO,GAAG;AACrB,kBAAU,QAAQ,OAAO,GAAG,CAAC;AAC7B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,QAAIA,UAAS,OAAO,GAAG;AACrB,gBAAU,QAAQ,GAAG;AACrB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEK,IAAM,qBAAqB,CAAC,MAAc,cAAqD;AACpG,QAAM,SAAS,aAAa,IAAI;AAChC,MAAI,CAAC,OAAO,GAAI,QAAO,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM;AAExD,MAAI,WAAW;AACb,UAAM,WAAW,kBAAkB,WAAW,OAAO,UAAU,oBAAI,IAAI,CAAC;AACxE,QAAI,CAAC,UAAU;AACb,aAAO,EAAE,IAAI,OAAO,OAAO,wBAAwB,IAAI,EAAE;AAAA,IAC3D;AAAA,EACF;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,UAAU,iBAAiB,OAAO,QAAQ;AAAA,IAC1C,UAAU,OAAO;AAAA,EACnB;AACF;;;ACrNO,IAAM,6BAA6B;AAS1C,IAAM,uBAAuB,CAAC,KAAe,MAAmB,aAAuC;AACrG,MAAI,OAAO,aAAa,YAAY,SAAS,WAAW,KAAK,KAAK,IAAI,QAAQ,GAAG;AAC/E;AAAA,EACF;AACA,OAAK,IAAI,QAAQ;AACjB,MAAI,KAAK,QAAQ;AACnB;AAEO,IAAM,iCAAiC,CAAC,eAA2D;AACxG,QAAM,sBAAgD,CAAC;AAEvD,MAAI,cAAsD;AAE1D,QAAM,oBAA8B,CAAC;AACrC,QAAM,eAAe,oBAAI,IAAY;AAErC,aAAW,WAAW,WAAW,UAAU;AACzC,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK,iBAAiB;AACpB,YAAI,CAAC,eAAe,QAAQ,kBAAkB,4BAA4B;AACxE,wBAAc;AAAA,YACZ,MAAM;AAAA,YACN,MAAM,QAAQ;AAAA,YACd,eAAe;AAAA,UACjB;AAAA,QACF;AACA;AAAA,MACF;AAAA,MACA,KAAK,SAAS;AACZ,4BAAoB,KAAK,OAAO;AAChC;AAAA,MACF;AAAA,MACA,KAAK,gBAAgB;AACnB,4BAAoB,KAAK,OAAO;AAChC,6BAAqB,mBAAmB,cAAc,QAAQ,QAAQ;AACtE;AAAA,MACF;AAAA,MACA,KAAK,qBAAqB;AACxB,4BAAoB,KAAK,OAAO;AAChC,6BAAqB,mBAAmB,cAAc,QAAQ,QAAQ;AACtE;AAAA,MACF;AAAA,MACA,SAAS;AAGP,4BAAoB,KAAK,OAAiC;AAC1D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,2BAAqC,CAAC;AAC5C,QAAM,eAAe,oBAAI,IAAY;AACrC,aAAW,YAAY,WAAW,YAAY,CAAC,GAAG;AAChD,yBAAqB,0BAA0B,cAAc,QAAQ;AAAA,EACvE;AAEA,QAAM,sBAAsB,yBAAyB,MAAM;AAC3D,QAAM,iBAAiB,IAAI,IAAI,mBAAmB;AAClD,aAAW,YAAY,mBAAmB;AACxC,yBAAqB,qBAAqB,gBAAgB,QAAQ;AAAA,EACpE;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACjFA,SAAS,UAAU,UAAAE,SAAgB,OAAAC,MAAK,UAAAC,eAAc;;;ACkD/C,IAAM,gCAAgC,CAACC,eAAkD;AAAA,EAC9F,iBAAiB;AAAA;AAAA,EACjB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,yBAAyBA,YAAW,KAAK;AAAA,EACzC,mBAAmB;AACrB;AAEO,IAAM,kCAAkC,CAAC,SAA2C;AAAA,EACzF,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,iBAAiB;AACnB;AAEO,IAAM,8BAA8B,CAAC,WAAmE;AAC7G,MAAI,QAAQ;AACZ,MAAI,UAAU;AACd,MAAI,cAAc;AAClB,MAAI,cAAc;AAElB,SAAO;AAAA,IACL,gBAAgB,MAAM;AACpB,eAAS;AACT,cAAQ,QAAQ,OAAO,qBAAqB;AAAA,IAC9C;AAAA,IACA,cAAc,CAAC,aAAa;AAC1B,iBAAW;AACX,UAAI,YAAY,OAAO,uBAAuB;AAC5C,uBAAe;AAAA,MACjB;AACA,UAAI,WAAW,aAAa;AAC1B,sBAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,eAAe,MAAM;AACnB,gBAAU;AACV,oBAAc;AACd,oBAAc;AAAA,IAChB;AAAA,IACA,UAAU,OAAO;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,0BAA0B,CACrC,OACA,KACA,YACiE;AACjE,QAAM,EAAE,QAAQ,SAAS,IAAI;AAC7B,QAAM,gBAAgB,MAAM,MAAM,mBAAmB,OAAO;AAC5D,QAAM,kBAAkB,gBAAgB,MAAM,MAAM;AACpD,QAAM,mBAAmB,gBAAgB,IAAI,MAAM,mBAAmB;AAEtE,QAAM,iBAAiB,MAAM,MAAM,kBAAkB,OAAO;AAC5D,QAAM,cAAc,oBAAoB,OAAO;AAC/C,QAAM,UAAU,SAAS,eAAe,OAAO,yBAAyB,SAAS,UAAU;AAC3F,QAAM,aAAa,CAAC,mBAAmB,eAAe;AAEtD,QAAM,OAAiC,aACnC;AAAA,IACE,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,EACnB,IACA;AAAA,IACE,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF;AAEJ,SAAO;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,2BAA2B,CAAC,YAAgD;AACvF,QAAM,EAAE,UAAU,MAAM,UAAU,QAAQ,SAAS,IAAI;AACvD,SAAO;AAAA,IACL,YAAY,QAAQ;AAAA,IACpB,QAAQ,IAAI;AAAA,IACZ,YAAY,OAAO,eAAe;AAAA,IAClC,oBAAoB,SAAS,gBAAgB;AAAA,IAC7C,aAAa,OAAO,uBAAuB;AAAA,IAC3C,cAAc,OAAO,iBAAiB;AAAA,IACtC;AAAA,IACA;AAAA,IACA,SAAS,SAAS,KAAK;AAAA,IACvB,WAAW,SAAS,OAAO;AAAA,IAC3B,iBAAiB,OAAO,qBAAqB,OAAO,SAAS,WAAW;AAAA,IACxE,eAAe,SAAS,YAAY,QAAQ,CAAC,CAAC;AAAA,IAC9C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;;;AD/HA,IAAM,8BAA8B,CAAC,SACnC,OAAO;AAAA,EACL,IAAI,MAAM,2DAA2D,OAAQ,MAAc,QAAQ,SAAS,CAAC,EAAE;AAAA,EAC/G,EAAE,MAAM,gCAAgC;AAC1C;AAEF,IAAM,0BAA0B,CAAC,YAA2B;AAC1D,QAAM,MAAM,IAAI,MAAM,8DAA8D,OAAO,EAAE;AAC5F,EAAC,IAAY,OAAO;AACpB,EAAC,IAAY,OACZ;AACF,SAAO;AACT;AAEA,IAAM,+BAA+B,CAAC,aAA4B;AAChE,QAAM,MAAM,IAAI,MAAM,8EAA8E;AACnG,EAAC,IAAY,OAAO;AACpB,EAAC,IAAY,OAAO,YAAY,QAAQ;AACzC,SAAO;AACT;AAEA,IAAM,mCAAmC,CAAC,aAA4B;AACpE,QAAM,MAAM,IAAI,MAAM,sFAAsF;AAC3G,EAAC,IAAY,OAAO;AACpB,EAAC,IAAY,OAAO,YAAY,QAAQ;AACzC,SAAO;AACT;AAEA,IAAM,gCAAgC,CAAC,aAA4B;AACjE,QAAM,MAAM,IAAI,MAAM,0FAA0F;AAC/G,EAAC,IAAY,OAAO;AACpB,EAAC,IAAY,OAAO,YAAY,QAAQ;AACzC,SAAO;AACT;AAEA,IAAM,QAAQ,MAAc;AAC1B,MAAI,OAAO,gBAAgB,eAAe,OAAO,YAAY,QAAQ,YAAY;AAC/E,WAAO,YAAY,IAAI;AAAA,EACzB;AACA,SAAO,KAAK,IAAI;AAClB;AAEA,IAAM,eAAe,CAAC,UACnB,OAAO,UAAU,YAAY,UAAU,QAAS,OAAO,UAAU;AAEpE,IAAM,iCAAiC,CAAC,SAK5BC,MAAK;AAAA,EACb,YAAY,6BAA6B,KAAK,QAAQ,IAAI,KAAK,IAAI;AAAA,EACnE,UAAU,6BAA6B,KAAK,QAAQ,IAAI,KAAK,IAAI;AAAA,EACjE,OAAO,CAAC,KAAK,IAAI;AAAA,EACjB,QAAQ,KAAK;AAAA,EACb,YAAY;AACd,CAAC;AAEI,IAAM,sCAAsC,CAAC,YAAyC;AAC3F,QAAM,qBAAqB,oBAAI,IAAiB;AAChD,QAAM,wBAAwB,oBAAI,QAAsC;AAExE,QAAM,uBAAuB,CAAC,aAC5BC,QAAO,IAAI,aAAa;AACtB,QAAI,mBAAmB,IAAI,QAAQ,GAAG;AACpC,aAAO,mBAAmB,IAAI,QAAQ;AAAA,IACxC;AAEA,UAAM,UAAU,QAAQ,sBAAsB,IAAI,QAAQ;AAC1D,QAAI,YAAY,QAAW;AACzB,aAAO,OAAOA,QAAO,KAAK,IAAI,MAAM,oCAAoC,QAAQ,EAAE,CAAC;AAAA,IACrF;AAEA,uBAAmB,IAAI,UAAU,OAAc;AAC/C,WAAO;AAAA,EACT,CAAC;AAEH,QAAMC,gCAA+B,CAAC,YAAoC;AACxE,QAAI,CAAC,aAAa,OAAO,GAAG;AAC1B,aAAO,QAAQ,6BAA6B,OAAO;AAAA,IACrD;AAEA,UAAM,SAAS,sBAAsB,IAAI,OAAO;AAChD,QAAI,QAAQ;AACV,aAAO,OAAO;AAAA,IAChB;AAEA,UAAM,MAAM,QAAQ,6BAA6B,OAAO;AACxD,0BAAsB,IAAI,SAAS,EAAE,IAAI,CAAC;AAC1C,WAAO;AAAA,EACT;AAEA,QAAM,yBAAyB,CAAC,SAC9BD,QAAO,IAAI,aAAa;AACtB,UAAM,WAAW,SAAS,UAAU,KAAK,OAAyB;AAClE,QAAI,CAAC,UAAU;AACb,aAAO,OAAOA,QAAO,KAAK,wBAAwB,KAAK,OAAO,CAAC;AAAA,IACjE;AAEA,WAAOE,QAAO,KAAK,QAAQ,EAAE;AAAA,MAC3BA,QAAO;AAAA,QACL,OACG;AAAA,UACC,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,QAChB;AAAA,MACJ;AAAA,IACF;AAAA,EACF,CAAC;AAEH,QAAM,gCAAgC,CACpC,SAEAF,QAAO,IAAI,aAAa;AACtB,UAAM,UAAU,OAAO,qBAAqB,KAAK,QAAQ;AACzD,UAAM,2BAA2B,CAAC,YAAoC;AAAA,MACpE,MAAM;AAAA,MACN,MAAM,KAAK;AAAA,MACX,UAAU,KAAK;AAAA,MACf,YAAY,QAAQ;AAAA,MACpB,UAAU,KAAK;AAAA,MACf;AAAA,IACF;AAEA,QAAI,CAAC,QAAQ,yBAAyB;AACpC,YAAMG,UAAS,QAAQ;AACvB,UAAI,CAACA,SAAQ;AACX,eAAO,OAAOH,QAAO,KAAK,6BAA6B,KAAK,QAAQ,CAAC;AAAA,MACvE;AAEA,aAAOG,QAAO;AAAA,QACZD,QAAO,OAAO,CAAC,WAAgB,QAAQ,oBAAoB,MAAM,MAAM,KAAK,QAAQ;AAAA,QACpFA,QAAO,IAAI,MAAM,yBAAyB,CAAC,CAAC;AAAA,MAC9C;AAAA,IACF;AAEA,UAAM,SAAS,QAAQ;AACvB,QAAI,CAAC,QAAQ;AACX,aAAO,OAAOF,QAAO,KAAK,iCAAiC,KAAK,QAAQ,CAAC;AAAA,IAC3E;AAEA,WAAO,OAAO;AAAA,MACZE,QAAO,OAAO,CAAC,QAAa,QAAQ,oBAAoB,IAAI,KAAK,MAAM,KAAK,QAAQ;AAAA,MACpFA,QAAO,IAAI,CAAC,QAAa;AACvB,cAAM,SAAS,KAAK,MAAM;AAC1B,eAAO,yBAAyB,OAAO,WAAW,WAAW,SAAS,CAAC;AAAA,MACzE,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAEH,QAAM,qCAAqC,CACzC,SAEAF,QAAO,IAAI,aAAa;AACtB,UAAM,UAAU,OAAO,qBAAqB,KAAK,QAAQ;AACzD,UAAM,YAAYC,8BAA6B,OAAO;AACtD,UAAM,iBAAiB,mBAAmB,KAAK,MAAM,SAAS;AAC9D,QAAI,CAAC,eAAe,IAAI;AACtB,aAAO,OAAOD,QAAO,KAAK,QAAQ,eAAe,eAAe,OAAO,KAAK,QAAQ,CAAC;AAAA,IACvF;AAEA,UAAM,eAAe,eAAe;AACpC,UAAM,gCAAgC,CAAC,YAAqC;AAAA,MAC1E,MAAM;AAAA,MACN,MAAM,KAAK;AAAA,MACX,UAAU,KAAK;AAAA,MACf,YAAY,QAAQ;AAAA,MACpB,MAAM,KAAK;AAAA,MACX,QAAQ,OAAO,WAAW,WAAW,SAAS;AAAA,IAChD;AAEA,UAAM,mCAAmC,CACvCI,cAEAJ,QAAO,IAAI,aAAa;AACtB,YAAM,YAAY,+BAA+B;AAAA,QAC/C,UAAU,KAAK;AAAA,QACf,MAAM,KAAK;AAAA,QACX,UAAAI;AAAA,MACF,CAAC;AACD,YAAM,2BAA2B,QAAQ;AAIzC,UAAI,OAAO,6BAA6B,YAAY;AAClD,eAAO,yBAAyB,SAAS,EAAE;AAAA,UACzCF,QAAO,IAAI,CAAC,QAAa,8BAA8B,KAAK,MAAM,MAAM,CAAC;AAAA,QAC3E;AAAA,MACF;AAEA,YAAM,kBAAkB,QAAQ;AAChC,UAAI,OAAO,oBAAoB,YAAY;AACzC,eAAO,OAAOF,QAAO,KAAK,8BAA8B,KAAK,QAAQ,CAAC;AAAA,MACxE;AAEA,UAAI,eAAe;AACnB,UAAI;AAEJ,aAAO,gBAAgBI,SAAQ,EAAE;AAAA,QAC/BF,QAAO,OAAO,CAAC,QAAa;AAC1B,cAAI,gBAAgB,OAAO,GAAG,WAAW,IAAI,KAAK,GAAG;AACnD,mBAAO;AAAA,UACT;AACA,yBAAe;AACf,sBAAY,IAAI;AAChB,iBAAO;AAAA,QACT,CAAC;AAAA,QACDA,QAAO,IAAI,CAAC,QAAa,8BAA8B,KAAK,MAAM,MAAM,CAAC;AAAA,MAC3E;AAAA,IACF,CAAC;AAEH,QAAI,CAAC,QAAQ,yBAAyB;AACpC,aAAO,OAAO,iCAAiC,YAAY;AAAA,IAC7D;AAEA,UAAM,4BAA4B,8BAA8B,SAAS,CAAC;AAC1E,UAAM,yBAAyB,OAAOG,KAAI,KAAK,gCAAgC,KAAK,IAAI,CAAC,CAAC;AAC1F,UAAM,mBAAmB,4BAA4B,yBAAyB;AAE9E,UAAM,WAAW,CAAC,UAA4B;AAC5C,UAAI,CAAC,iBAAiB,eAAe,GAAG;AACtC,eAAO,aAAa,KAAK;AAAA,MAC3B;AAEA,YAAM,KAAK,MAAM;AACjB,YAAM,QAAQ,aAAa,KAAK;AAChC,YAAM,KAAK,MAAM,IAAI;AAErB,uBAAiB,aAAa,EAAE;AAChC,aAAO;AAAA,IACT;AAEA,UAAM,oBAAoB,CAAC,YAAiD;AAC1E,aAAOL,QAAO,IAAI,aAAa;AAC7B,cAAM,MAAM,KAAK,IAAI;AACrB,cAAM,WAAW,iBAAiB,SAAS;AAE3C,cAAM,WAAW,OAAOK,KAAI;AAAA,UAAO;AAAA,UAAwB,CAAC,UAC1D,wBAAwB,OAAO,KAAK;AAAA,YAClC,QAAQ;AAAA,YACR,UAAU;AAAA,cACR,SAAS,SAAS;AAAA,cAClB,aAAa,SAAS;AAAA,YACxB;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,CAAC,SAAS,YAAY;AACxB;AAAA,QACF;AAEA,cAAM,OAAO,SAAS,cAAc,qCAAqC;AACzE,cAAM,OAAO,yBAAyB;AAAA,UACpC,UAAU,KAAK;AAAA,UACf,MAAM,KAAK;AAAA,UACX;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,QACF,CAAC;AACD,yBAAiB,cAAc;AAE/B,eAAO,QAAQ,oBAAoB,SAAS;AAAA,UAC1C,SAAS;AAAA,UACT;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,UAAM,aAAa,OAAO,iCAAiC,QAAQ;AAEnE,WAAO,WAAW,KAAKH,QAAO,IAAI,iBAAiB,CAAC;AAAA,EACtD,CAAC;AAEH,SAAO,CAAC,SACNF,QAAO,IAAI,aAAa;AACtB,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,eAAO,OAAO,uBAAuB,IAAI;AAAA,MAC3C,KAAK;AACH,eAAO,OAAO,8BAA8B,IAAI;AAAA,MAClD,KAAK;AACH,eAAO,OAAO,mCAAmC,IAAI;AAAA,MACvD;AACE,eAAO,OAAOA,QAAO,KAAK,4BAA4B,IAAI,CAAC;AAAA,IAC/D;AAAA,EACF,CAAC;AACL;;;AErTO,IAAM,eAAe,OAAyB,EAAE,cAAc,CAAC,EAAE;AAUjE,IAAM,YAAY,CAAC,QAA4B,OAAyBM,WAAmC;AAChH,MAAI,OAAO,SAAS,YAAY;AAC9B,WAAO;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,MACX,sBAAsB,MAAM,aAAa;AAAA,MACzC,aAAa;AAAA,MACb,UAAU,OAAO;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,iBAAiB,OAAO;AAC9B,QAAM,cACJ,OAAO,mBAAmB,YAAY,OAAO,SAAS,cAAc,KAAK,kBAAkB,IACvF,KAAK,MAAM,cAAc,IACzB;AAEN,MAAI,eAAe,GAAG;AACpB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,MACX,sBAAsB,MAAM,aAAa;AAAA,MACzC;AAAA,MACA,UAAU,OAAO;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,cAAc,OAAO;AAC3B,QAAM,WACJ,OAAO,gBAAgB,YAAY,OAAO,SAAS,WAAW,KAAK,cAAc,IAC7E,KAAK,MAAM,WAAW,IACtB;AAEN,QAAM,kBAAkB,CAAC,GAAG,MAAM,cAAcA,MAAK;AACrD,QAAM,eAAe,WAAW,gBAAgB,OAAO,CAAC,MAAM,KAAKA,SAAQ,QAAQ,IAAI;AAGvF,QAAM,MAAM,cAAc;AAC1B,QAAM,SAAS,aAAa,SAAS,MAAM,aAAa,MAAM,aAAa,SAAS,GAAG,IAAI;AAE3F,QAAM,uBAAuB,OAAO;AACpC,QAAM,WAAgC,wBAAwB,cAAc,YAAY;AAExF,SAAO;AAAA,IACL;AAAA,IACA,WAAW,EAAE,cAAc,OAAO;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ARyBO,IAAM,oBAAN,cAAgCC,YAAW,QAA2C,EAAE,8BAA8B,EAAE;AAAC;AAEhI,IAAM,wBAAwBA,YAAW,UAAsC,+CAA+C;AAAA,EAC5H,cAAc,MAAM;AACtB,CAAC;AACD,IAAM,4BAA4BA,YAAW;AAAA,EAC3C;AAAA,EACA;AAAA,IACE,cAAc,MAAM;AAAA,EACtB;AACF;AAEA,IAAM,qCAAqC;AAE3C,IAAM,sBAAsB,CAAC,cAA8B,WAAW,SAAS;AAI/E,IAAM,kBAAkB,CAAC,UAA+E;AACtG,QAAM,UAAe,MAAM;AAC3B,MAAI,CAAC,QAAS,QAAO,CAAC;AACtB,OACG,QAAQ,SAAS,kBAAkB,QAAQ,SAAS,wBACrD,OAAO,QAAQ,eAAe,YAC9B,OAAO,QAAQ,WAAW,YAC1B,OAAO,SAAS,QAAQ,MAAM,KAC9B,QAAQ,UAAU,GAClB;AACA,UAAM,SAAS,KAAK,MAAM,QAAQ,MAAM;AACxC,WAAO;AAAA,MACL;AAAA,MACA,OAAO,GAAG,QAAQ,UAAU,MAAM,MAAM;AAAA,IAC1C;AAAA,EACF;AACA,SAAO,CAAC;AACV;AAQA,IAAM,gCAAgC,CAAC,SASN;AAC/B,QAAM,mBAAmB,CAAC,YAA4C;AACpE,QAAI,CAAC,KAAK,yBAAyB;AACjC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,YAAY,KAAK,eAAe;AAAA,IAClC;AAAA,EACF;AAEA,QAAM,MAAM,CAAC,SAAyB,UAAoE;AACxG,QAAI,CAAC,KAAK,yBAAyB;AACjC,aAAO,KAAK,sBAAsB,SAAS,KAAK;AAAA,IAClD;AAEA,WAAOC,QAAO,IAAI,aAAa;AAC7B,YAAM,YAAY,OAAOC,KAAI,KAAK,KAAK,gBAAgB,OAAO,CAAC;AAC/D,aAAO,OAAOD,QAAO,eAAe,KAAK,iBAAiB,SAAS,MAAM,EAAE,KAAKA,QAAO,QAAQ,MAAM,KAAK,sBAAsB,SAAS,KAAK,CAAC,CAAC,GAAG,2BAA2B,SAAS;AAAA,IACzL,CAAC;AAAA,EACH;AAEA,QAAM,SAAS,CAAC,YAAiD,KAAK,iBAAiB,SAAS,SAAS;AAEzG,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAM,yBAAyB,CAAC,OAAqB,SAAuD;AAC1G,QAAM,WAAW,MAAM,SAAS,mBAAmB,MAAM,WAAW;AACpE,QAAM,aAAa,MAAM,SAAS,mBAAmB,MAAM,aAAa;AACxE,SAAOA,QAAO;AAAA,IACD,iCAAiC;AAAA,MAC1C;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SACE;AAAA,MACF,MACE;AAAA,MAEF;AAAA,IACF,CAAC;AAAA,IACU;AAAA,IACX;AAAA,EACF;AACF;AAEA,IAAM,+BAA+B,CAAC,YAA0D;AAC9F,MAAI;AACF,UAAM,YAAY,oBAAoB,OAAc;AACpD,WAAO,iBAAiB,UAAU,WAAW;AAAA,EAC/C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,iBAAiB,CAAC,OAAc,aAA4B;AAChE,QAAM,OAAQ,MAAc;AAC5B,MAAI,OAAO,SAAS,YAAY,KAAK,SAAS,GAAG;AAC/C,QAAI,CAAC,KAAK,SAAS,WAAW,GAAG;AAC/B;AAAC,MAAC,MAAc,OAAO,YAAY,QAAQ;AAAA,EAAK,IAAI;AAAA,IACtD;AACA,WAAO;AAAA,EACT;AACA;AAAC,EAAC,MAAc,OAAO,YAAY,QAAQ;AAC3C,SAAO;AACT;AAEA,IAAM,sBAAsB,CAAC,WAAwC;AACnE,MAAI,CAAC,UAAU,OAAO,WAAW,SAAU,QAAO;AAClD,QAAM,YAAY;AAClB,MAAI,OAAO,UAAU,SAAS,YAAY,UAAU,KAAK,SAAS,EAAG,QAAO,UAAU;AACtF,MAAI,OAAO,UAAU,SAAS,YAAY,UAAU,KAAK,SAAS,EAAG,QAAO,UAAU;AACtF,SAAO;AACT;AAEA,IAAM,iCAAiC,CACrC,eACiE;AACjE,QAAM,QAAQ,oBAAI,IAAwC;AAC1D,aAAW,WAAW,WAAW,UAAU;AACzC,QAAI,QAAQ,SAAS,gBAAiB;AACtC,UAAM,UAAU,MAAM,IAAI,QAAQ,aAAa;AAC/C,QAAI,SAAS;AACX,cAAQ,KAAK,OAAO;AAAA,IACtB,OAAO;AACL,YAAM,IAAI,QAAQ,eAAe,CAAC,OAAO,CAAC;AAAA,IAC5C;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,iCAAiC,CAAC,YAKX;AAC3B,aAAW,aAAa,QAAQ,oBAAoB;AAClD,UAAM,UAAU,QAAQ,yBAAyB,IAAI,SAAS;AAC9D,QAAI,CAAC,QAAS;AACd,YAAQ,OAAO,QAAQ,eAAe;AACtC,QAAI,QAAQ,SAAS,GAAG;AACtB,cAAQ,yBAAyB,OAAO,SAAS;AAAA,IACnD;AAAA,EACF;AAEA,QAAM,iBAAiB,MAAM,KAAK,QAAQ,iBAAiB,KAAK,CAAC;AACjE,aAAW,aAAa,gBAAgB;AACtC,UAAM,UAAU,QAAQ,yBAAyB,IAAI,SAAS;AAC9D,QAAI,SAAS;AACX,cAAQ,IAAI,QAAQ,eAAe;AAAA,IACrC,OAAO;AACL,cAAQ,yBAAyB,IAAI,WAAW,oBAAI,IAAI,CAAC,QAAQ,eAAe,CAAC,CAAC;AAAA,IACpF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAME,QAAO,CAAC,YAGnBF,QAAO,IAAI,aAAa;AACtB,QAAM,eAAe,OAAOA,QAAO;AACnC,QAAM,2BACJ,OAAO,SAAS,oBAAoB,YACpC,OAAO,SAAS,QAAQ,eAAe,KACvC,QAAQ,mBAAmB,IACvB,KAAK,MAAM,QAAQ,eAAe,IAClC;AACN,QAAM,kBAAkB,KAAK,IAAI,0BAA0B,kCAAkC;AAE7F,QAAM,gBAAgB,oBAAI,IAAwC;AAClE,QAAM,+BAA+B,oBAAI,IAAkC;AAC3E,QAAM,YAAY,oBAAI,IAAsC;AAE5D,QAAM,uBAAuB,kBAAkB,IAAI,kBAAkB;AACrE,QAAM,mBAAmC,CAAC;AAC1C,MAAI,oBAAoB;AACxB,MAAI,mBAAmB;AACvB,QAAM,YAAY,OAAO,OAAO,QAAsB,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,eAAe,CAAC,CAAC;AAElG,QAAM,qBAAqB,CAAC,UAA8B;AACxD,QAAI,wBAAwB,GAAG;AAC7B,yBAAmB;AACnB,0BAAoB;AACpB;AAAA,IACF;AAEA,QAAI,mBAAmB,sBAAsB;AAC3C,YAAM,cAAc,oBAAoB,oBAAoB;AAC5D,UAAI,eAAe,iBAAiB,QAAQ;AAC1C,yBAAiB,KAAK,KAAK;AAAA,MAC7B,OAAO;AACL,yBAAiB,UAAU,IAAI;AAAA,MACjC;AACA,0BAAoB;AACpB;AAAA,IACF;AAEA,qBAAiB,iBAAiB,IAAI;AACtC,yBAAqB,oBAAoB,KAAK;AAAA,EAChD;AAEA,QAAM,uBAAuB,MAAmC;AAC9D,QAAI,wBAAwB,KAAK,qBAAqB,GAAG;AACvD,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,WAAW,IAAI,MAAoB,gBAAgB;AACzD,aAAS,QAAQ,GAAG,QAAQ,kBAAkB,SAAS,GAAG;AACxD,YAAM,aAAa,oBAAoB,SAAS;AAChD,eAAS,KAAK,IAAI,iBAAiB,SAAS;AAAA,IAC9C;AACA,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,CAAC,UACxBA,QAAO,IAAI,aAAa;AACtB,UAAM,mBAAmB,OAAOA,QAAO,QAAc,uBAAuB,EAAE,KAAKA,QAAO,KAAK;AAG/F,QAAI,qBAAqB,OAAO;AAC9B;AAAA,IACF;AAEA,UAAM,YAAY,MAAM,SAAS,SAAS;AAC1C,UAAM,oBAA6B,8BAA8B,MAAM,QAAQ;AAC/E,UAAM,WAAW,oBAAoB,SAAS;AAC9C,UAAM,EAAE,QAAQ,MAAM,IAAI,gBAAgB,KAAK;AAE/C,WAAa,OAAO;AAAA,MAClB,MAAM,MAAM;AAAA,MACZ;AAAA,MACA,YAAY;AAAA,MACZ,UAAU,MAAM;AAAA,MAChB,UAAU,MAAM;AAAA,MAChB,UAAU,MAAM;AAAA,MAChB,aAAa,MAAM;AAAA,MACnB,SAAS,MAAM;AAAA,MACf,UAAU,MAAM;AAAA,MAChB,OAAO,MAAM;AAAA,MACb,gBAAiB,MAAc;AAAA,MAC/B,SAAU,MAAc;AAAA,MACxB;AAAA,MACA;AAAA,IACF,CAAQ;AAAA,EACV,CAAC;AAEH,QAAM,eAAe,CAAC,UACpBA,QAAO,IAAI,aAAa;AACtB,uBAAmB,KAAK;AACxB,WAAO,OAAO,QAAQ,WAAW,KAAK;AACtC,WAAO,iBAAiB,KAAK;AAAA,EAC/B,CAAC;AAEH,QAAM,OAAO,CAAC,UACZA,QAAO,IAAI,aAAa;AACtB,UAAM,YAAY,OAAOA,QAAO,QAAQ,yBAAyB,EAAE,KAAKA,QAAO,KAAK;AACpF,QAAI,WAAW;AACb,YAAM,WAAW,OAAOC,KAAI,OAAO,WAAW,CAAC,UAAU;AACvD,cAAM,CAAC,cAAc,SAAS,IAAkB,2BAA2B,OAAO,KAAK;AACvF,eAAO,CAAC,cAAc,SAAS;AAAA,MACjC,CAAC;AAED,UAAI,SAAS,SAAS,UAAU,SAAS,SAAS,eAAe;AAC/D,eAAO,aAAa,SAAS,KAAK;AAAA,MACpC;AACA;AAAA,IACF;AAEA,UAAM,WAAyB,4BAA4B,KAAK;AAChE,WAAO,aAAa,SAAS,KAAK;AAAA,EACpC,CAAC;AAEH,QAAM,sBAAsB,CAC1B,OACA,WACA,MACA,SACA,SACwB;AACxB,QAAI,CAAC,SAAS,GAAG;AACf,aAAOD,QAAO;AAAA,IAChB;AACA,UAAM,WAAW,MAAM,SAAS,mBAAmB,MAAM,WAAW;AACpE,UAAM,aAAa,MAAM,SAAS,mBAAmB,MAAM,aAAa;AACxE,WAAa,OAAO;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,QAAM,6BAA6B,CAAC,iBAA2D;AAC7F,UAAM,WAAW,aAAa,UAAU;AACxC,QAAI,SAAS,WAAW,EAAG,QAAO,CAAC;AAEnC,UAAM,UAAoB,CAAC;AAC3B,eAAW,OAAO,UAAU;AAC1B,UAAI,OAAO,QAAQ,YAAY,IAAI,WAAW,EAAG;AAEjD,YAAM,MAAM,6BAA6B,GAAG;AAC5C,YAAM,QAAQG,YAAW,UAAU,aAAa,KAAK,GAAG;AACxD,UAAIC,QAAO,OAAO,KAAK,GAAG;AACxB,gBAAQ,KAAK,GAAG;AAAA,MAClB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,6BAA6B,CACjC,cACJ,QACqC;AACjC,UAAM,WAAW,oBAAI,IAAqB;AAC1C,eAAW,YAAY,aAAa,UAAU,qBAAqB;AACjE,UAAI,OAAO,aAAa,YAAY,SAAS,WAAW,KAAK,SAAS,IAAI,QAAQ,EAAG;AACrF,YAAM,MAAM,6BAA6B,QAAQ;AACjD,YAAM,QAAQD,YAAW,UAAU,KAAK,GAAG;AAC3C,UAAIC,QAAO,OAAO,KAAK,GAAG;AACxB,iBAAS,IAAI,UAAU,MAAM,KAAK;AAAA,MACpC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,CACnB,UACA,WAEAJ,QAAO,IAAI,aAAa;AACtB,QACE,SAAS,OAAO,WAAW,aAC3B,SAAS,OAAO,WAAW,YAC3B,SAAS,OAAO,WAAW,YAC3B;AACA;AAAA,IACF;AAEA,UAAM,QAAQ,SAAS;AACvB,aAAS,SAAS;AAAA,MAChB,GAAG,SAAS;AAAA,MACZ,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAEA,QAAI,OAAO;AACT,aAAOK,OAAM,UAAU,KAAK;AAAA,IAC9B;AAEA,WAAO,MAAM,SAAS,SAAS,qBAAqB;AAEpD,aAAS,SAAS;AAAA,MAChB,GAAG,SAAS;AAAA,MACZ,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AACA,aAAS,QAAQ;AAEjB,UAAM,MAAoB;AAAA,MACxB,MAAM;AAAA,MACN,UAAU,SAAS;AAAA,MACnB,UAAU;AAAA,MACV,UAAU,SAAS;AAAA,MACnB,aAAa,KAAK,IAAI;AAAA,IACxB;AACA,WAAO,KAAK,GAAG;AAEf,UAAM,eAAe,cAAc,IAAI,SAAS,eAAe;AAC/D,QAAI,cAAc,cAAc;AAC9B,mBAAa,eAAe;AAC5B,aAAO,kBAAkB,SAAS,eAAe;AAAA,IACnD;AAAA,EACF,CAAC;AAEH,QAAM,oBAA6F,CAAC,oBAClGL,QAAO,IAAI,aAAa;AACtB,UAAM,eAAe,cAAc,IAAI,eAAe;AACtD,QAAI,CAAC,aAAc;AACnB,iBAAa,eAAe;AAE5B,UAAM,OAAO,OAAO,uBAAuB,aAAa,SAAS,OAAO,8BAA8B;AACtG,QAAI,KAAM;AAGV,UAAM,YAAY,aAAa;AAC/B,QAAI,WAAW;AACb,YAAM,UAAU,UAAU,IAAI,SAAS;AACvC,UAAI,YAAY,QAAQ,OAAO,WAAW,aAAa,QAAQ,OAAO,WAAW,aAAa;AAC5F;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,aAAa;AAC5B,UAAM,WAAoC;AAAA,MACxC,UAAU,aAAa;AAAA,MACvB;AAAA,IACF;AACA,UAAM,oBAA6B,8BAA8B,QAAQ;AAEzE,UAAM,wBAAwB,OAAO,MAAM,QAAwB,EAAE;AAErE,UAAM,gBAA+B;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,aAAa,SAAS;AAAA,MACjC,OAAO,aAAa,SAAS;AAAA,MAC7B,WAAW,aAAa;AAAA,MACxB;AAAA,MACA,QAAQ;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,MACA,cAAc;AAAA,MACd,gBAAgB;AAAA,IAClB;AAEA,cAAU,IAAI,mBAAmB,aAAa;AAC9C,iBAAa,oBAAoB;AAKjC,QAAI,aAAa,cAAc,cAAc;AAC3C,aAAOM,OAAM;AAAA,QACX,aAAa;AAAA,QACbN,QAAO,QAAQ,MAAM;AACnB,gBAAM,SAAS,cAAc,OAAO;AACpC,cAAI,WAAW,aAAa,WAAW,YAAY,WAAW,YAAY;AACxE,mBAAOA,QAAO;AAAA,UAChB;AACA,iBAAO,aAAa,eAAe,eAAe;AAAA,QACpD,CAAC,EAAE,KAAKA,QAAO,WAAW,MAAMA,QAAO,IAAI,CAAC;AAAA,MAC9C;AAAA,IACF;AAGA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN;AAAA,MACA,UAAU;AAAA,MACV,UAAU,cAAc;AAAA,MACxB,aAAa,KAAK,IAAI;AAAA,IACxB,CAAC;AAED,UAAM,UAAU,2BAA2B,YAAY;AACvD,QAAI,QAAQ,SAAS,GAAG;AACtB,YAAM,OAAO,SAAS,IAClB;AAAA,QACE;AAAA,QACA,YAAY,QAAQ,KAAK,IAAI,CAAC;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,QACA,+CAA+C,QAAQ,CAAC,CAAC;AAAA,QACzD;AAAA,MACF,EAAE,KAAK,IAAI,IACX;AAEJ,YAAM,QAAkC;AAAA,QACtC,SAAS,kCAAkC,QAAQ,KAAK,IAAI,CAAC;AAAA,QAC7D,MAAM;AAAA,QACN;AAAA,MACF;AAEA,oBAAc,SAAS;AAAA,QACrB,GAAG,cAAc;AAAA,QACjB,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,WAAW;AAAA,MACb;AAEA,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc;AAAA,QACxB,aAAa,KAAK,IAAI;AAAA,QACtB;AAAA,MACF,CAAC;AAED,aAAO;AAAA,QACL,aAAa,SAAS;AAAA,QACtB,aAAa,SAAS;AAAA,QACtB;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACF;AACA;AAAA,IACF;AAEA,UAAM,0BAA0B,aAAa,WAAW,qBAAqB;AAE7E,UAAM,UAAU,aAAa;AAC7B,UAAM,wBAAwB,2BAA2B,cAAc,OAAO;AAE9E,UAAM,iBAAiB,MAAkC;AACvD,UAAI,CAAC,yBAAyB;AAC5B,eAAO;AAAA,MACT;AAEA,YAAM,WAAW,aAAa,UAAU;AACxC,UAAI,SAAS,WAAW,GAAG;AACzB,eAAO;AAAA,MACT;AAEE,UAAI,UAAU;AAEd,iBAAW,YAAY,UAAU;AAC/B,YAAI,OAAO,aAAa,YAAY,SAAS,WAAW,EAAG;AAC7D,cAAM,MAAM,6BAA6B,QAAQ;AACjD,cAAM,QAAQG,YAAW,UAAU,SAAS,GAAG;AAC/C,YAAIC,QAAO,OAAO,KAAK,EAAG;AAC1B,cAAM,UAAU,MAAM;AAEtB,cAAM,iBAAiB,CAAC,WACtBJ,QAAO,IAAI,aAAa;AACtB,gBAAM,UAAU,OAAOA,QAAO,QAAQ,qBAAqB,EAAE,KAAKA,QAAO,KAAK;AAC9E,cAAI,CAAC,QAAS;AAEd,gBAAM,WAAW,oBAAoB,MAAM,KAAK;AAChD,gBAAM,mBAAmB,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW;AACnF,gBAAM,qBAAqB,OAAO,QAAQ,eAAe,WAAW,QAAQ,aAAa;AAEzF,iBAAO;AAAA,YACL,kBAAkB,SAAS;AAAA,cACzB,UAAU;AAAA,cACV,YAAY;AAAA,cACZ;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAEH,cAAM,UAAU;AAAA,UACd,GAAG;AAAA,UACH,UAAU,CAAC,WAAoB,QAAQ,SAAS,MAAM,EAAE,KAAKA,QAAO,IAAI,MAAM,eAAe,MAAM,CAAC,CAAC;AAAA,UACrG,qBAAqB,CAAC,WACpB,QAAQ,oBAAoB,MAAM,EAAE,KAAKA,QAAO,IAAI,MAAM,eAAe,MAAM,CAAC,CAAC;AAAA,UACnF,eAAe,CAAC,YACd,QACG,cAAc,OAAO,EACrB,KAAKA,QAAO,IAAI,MAAMA,QAAO,QAAQ,SAAS,gBAAgB,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC;AAAA,QACxF;AAEA,kBAAUG,YAAW,IAAI,SAAS,KAAK,OAAO;AAAA,MAChD;AAEA,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,eAAe;AAClC,UAAM,kBAAkBH,QAAO,QAAQ,aAAa,SAAS,UAAU;AAEvE,UAAM,uBAAuB,OAAO;AAAA,MAClC;AAAA,MACA,UAAU,cAAc;AAAA,MACxB,aAAa,KAAK,IAAI;AAAA,IACxB;AAEA,UAAM,oBAAoB,CACxB,SACA,cACkB;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,GAAG,qBAAqB;AAAA,IAC1B;AAEA,UAAM,mBAAmB,CACvB,SACA,UACA,WACkB;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,GAAI,QAAQ,EAAE,MAAM,IAAI;AAAA,MACxB,GAAG,qBAAqB;AAAA,IAC1B;AAEA,UAAM,oBAAoB,oCAAoC;AAAA,MAC5D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,qBAAqB,CAAC,SAAS,YAAY,KAAK,iBAAiB,SAAS,WAAW,OAAO,CAAC;AAAA,IAC/F,CAAC;AAED,UAAM,UAAU,CAAC,SAAyB,UACxCA,QAAO,eAAe,gBAAgB;AAAA,MACpCA,QAAO,WAAW,CAAC,UAAU;AAC3B,YAAI,MAAM,kBAAkB,KAAK,GAAG;AAClC,iBAAOA,QAAO;AAAA,QAChB;AACA,eAAO,SAAS,QAAQ,OAAO,KAAK,EAAE;AAAA,UACpCA,QAAO;AAAA,UACPA,QAAO,MAAM,MAAMA,QAAO,IAAI;AAAA,QAChC;AAAA,MACF,CAAC;AAAA,IACH,GAAG,uBAAuB,OAAO;AAEnC,UAAM,mBAAmB,CAAC,SAAyB,aAA4D;AAC7G,UAAI,CAAC,yBAAyB;AAC5B,eAAOA,QAAO;AAAA,MAChB;AAEA,aAAO,KAAK,iBAAiB,SAAS,QAAQ,CAAC;AAAA,IACjD;AACA,UAAM,qBAAqB,8BAA8B;AAAA,MACvD;AAAA,MACA,gBAAgB,MAAM,cAAc;AAAA,MACpC,iBAAiB,CAAC,YACF,+BAA+B;AAAA,QAC3C,OAAqB,0BAA0B,UAAU,OAAO;AAAA,MAClE,CAAC;AAAA,MACH;AAAA,MACA,uBAAuB;AAAA,IACzB,CAAC;AAED,UAAM,SAAS,aAAa,WAAW;AACvC,UAAM,cAAc,aAAa,UAAU;AAE3C,UAAM,cAAc,OAAO,SAAS,KAAW;AAC/C,UAAM,kBAAuC,SAAS,QAAQ,aAAa,MAAS,EAAE,KAAKA,QAAO,MAAM;AAExG,UAAM,kBAAkBA,QAAO,IAAI,aAAa;AAC9C,YAAM,QAAQ,OAAO,SAAS,KAAuB;AAErD,YAAM,sBAAqDO,QAAO;AAAA,QAChE,cAAc;AAAA,MAChB;AAEA,YAAM,sBAAsB,aAAa,UAAU;AAEnD,YAAM,UAAU,OAAOP,QAAO,QAAQ,qBAAqB,iBAAiB;AAE5E,YAAM,gBAAgBO,QAAO,SAAS,CAAC,qBAAqB,GAAG,OAAO,GAAG;AAAA,QACvE,aAAa;AAAA,MACf,CAAC;AAED,YAAM,sBAAsB,CAC1B,SACwB;AACxB,cAAM,MAAM,IAAI,MAAM,yDAAyD;AAC9E,QAAC,IAAY,OAAO;AACpB,QAAC,IAAY,OAAO;AAAA,UACnB,QAAQ,KAAK,IAAI;AAAA,UACjB,kBAAkB,KAAK,aAAa,SAAS,KAAK,IAAI;AAAA,UACtD,wBAAwB,KAAK,MAAM,UAAU,UAAU,KAAK,MAAM,KAAK;AAAA,UACvE,WAAW,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,UACtC;AAAA,UACA;AAAA,UACA;AAAA,QACF,EAAE,KAAK,IAAI;AACX,eAAO,SAAS,QAAQ,OAAO,MAAM,KAAK,GAAG,CAAC,EAAE;AAAA,UAC9CP,QAAO;AAAA,UACPA,QAAO,MAAM,MAAMA,QAAO,IAAI;AAAA,QAChC;AAAA,MACF;AAEA,YAAM,cAAc,OAAOA,QAAO;AAAA,QACb,wBAAwB;AAAA,UACzC,QAAQ;AAAA,UACR;AAAA,UACA,kBAAkB,mBAAmB;AAAA,UACrC,KAAK,CAAC,YAAY,mBAAmB,IAAI,SAAS,KAAK;AAAA,UACvD,QAAQ,mBAAmB;AAAA,UAC3B,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH;AAOA,eAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,cAAM,UAAU,OAAOK,OAAM,MAAM,WAAW,EAAE,KAAKL,QAAO,cAAc,CAAC,CAAC;AAC5E,YAAII,QAAO,OAAO,OAAO,GAAG;AAC1B;AAAA,QACF;AACA,eAAOJ,QAAO;AAAA,MAChB;AACA,aAAO;AAEP,UAAI,aAAa;AACf,eAAO,MAAM,MAAM,cAAc,uBAAuB,WAAW;AAAA,MACrE;AAEA,YAAM,QAAQ,OAAO,SAAS,MAAM,KAAK;AACzC,aAAOK,OAAM,UAAU,WAAW;AAClC,aAAO,OAAOL,QAAO,UAAU,KAAK;AAAA,IACtC,CAAC;AAED,UAAM,qBAAqBA,QAAO;AAAA,MAChCA,QAAO,OAAO,eAAe,EAAE;AAAA,QAC7BA,QAAO,SAAS,eAAe;AAAA,QAC/BA,QAAO;AAAA,UAAW,CAAC,UACjBA,QAAO,IAAI,aAAa;AACtB,gBAAI,MAAM,kBAAkB,KAAK,GAAG;AAClC,kBAAI,cAAc,OAAO,WAAW,YAAY;AAC9C;AAAA,cACF;AAEA,4BAAc,SAAS;AAAA,gBACrB,GAAG,cAAc;AAAA,gBACjB,QAAQ;AAAA,gBACR,eAAe;AAAA,cACjB;AACA,4BAAc,QAAQ;AAEtB,qBAAOA,QAAO;AAAA,gBACZ,KAAK;AAAA,kBACH,MAAM;AAAA,kBACN;AAAA,kBACA,UAAU;AAAA,kBACV,UAAU,cAAc;AAAA,kBACxB,aAAa,KAAK,IAAI;AAAA,gBACxB,CAAC;AAAA,cACH;AAEA,oBAAM,sBAAsB,cAAc,IAAI,eAAe;AAC7D,kBAAI,qBAAqB,cAAc;AACrC,oCAAoB,eAAe;AACnC,uBAAO,kBAAkB,eAAe;AAAA,cAC1C;AACA;AAAA,YACF;AAEA,kBAAM,UAAUI,QAAO,UAAU,MAAM,gBAAgB,KAAK,GAAG,MAAM;AACnE,oBAAM,UAAU,MAAM,QAAQ,OAAO,MAAM,WAAW,EAAE,IAAI,CAAC,WAAW,OAAO,MAAM;AACrF,qBAAO,QAAQ,CAAC,KAAK;AAAA,YACvB,CAAC;AACD,kBAAM,UAAU,2BAA2B,OAAO;AAClD,kBAAM,QAAkC,QAAQ;AAEhD,0BAAc,SAAS;AAAA,cACrB,GAAG,cAAc;AAAA,cACjB,QAAQ;AAAA,cACR,eAAe;AAAA,cACf,WAAW;AAAA,YACb;AAEA,mBAAO,KAAK;AAAA,cACV,MAAM;AAAA,cACN;AAAA,cACA,UAAU;AAAA,cACV,UAAU,cAAc;AAAA,cACxB,aAAa,KAAK,IAAI;AAAA,cACtB;AAAA,YACF,CAAC;AAED,kBAAM,WAAuB;AAAA,cAC3B,aAAa,WAAW;AAAA,cACxB,aAAa;AAAA,cACb,KAAK,IAAI;AAAA,YACX;AACA,yBAAa,cAAc,SAAS;AAEpC,gBAAI,SAAS,aAAa,WAAW;AACnC,qBAAO,KAAK;AAAA,gBACV,MAAM;AAAA,gBACN;AAAA,gBACA,UAAU;AAAA,gBACV,UAAU,cAAc;AAAA,gBACxB,aAAa,KAAK,IAAI;AAAA,gBACtB;AAAA,cACF,CAAC;AACD,qBAAO,kBAAkB,eAAe;AAAA,YAC1C,OAAO;AACL,qBAAO;AAAA,gBACL,aAAa,SAAS;AAAA,gBACtB,aAAa,SAAS;AAAA,gBACtB;AAAA,gBACA;AAAA,gBACA,aAAa,aAAa,SAAS,SAAS,aAAa,aAAa,QAAQ,aAAa,SAAS,oBAAoB,gBAAgB,SAAS,WAAW;AAAA,cAC9J;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACW;AAAA,MACX;AAAA,IACF;AAEA,UAAM,QAAQ,OAAOJ,QAAO,OAAO,oBAAoB,aAAa,SAAS;AAE7E,kBAAc,QAAQ;AACtB,kBAAc,SAAS;AAAA,MACrB,GAAG,cAAc;AAAA,MACjB,QAAQ;AAAA,IACV;AAGA,WAAO,SAAS,MAAM,WAAW;AAAA,EACnC,CAAC;AAEH,QAAM,UAAU,CACd,SACAQ,aAOAR,QAAO,IAAI,aAAa;AACtB,UAAM,OAAY,QAAQ,OAAO;AACjC,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,UAAM,MAAM,OAAOA,QAAO,SAAY;AACtC,UAAM,eAAe,OAAOA,QAAO,cAAcM,OAAM,KAAK;AAC5D,UAAM,YAAYF,QAAO,OAAO,YAAY,IAAI,aAAa,QAAQ;AAErE,UAAM,WAAoB,kBAAkBI,SAAQ,KAAK;AACzD,UAAM,WAAW;AAAA,MACf,WAAW,KAAK,WAAW;AAAA,MAC3B,OAAOA,SAAQ;AAAA,IACjB;AAEA,UAAM,kBAA2B,4BAA4B,QAAQ;AACrE,UAAM,UAAUR,QAAO,QAAQ,MAAM,OAAO;AAC5C,IAAK,WAAW,SAAS;AAAA,MACvB,GAAG;AAAA,MACH,mBAAmBQ,SAAQ;AAAA,IAC7B,CAAC;AAED,UAAM,gCAAgC,+BAA+B,KAAK,UAAU;AACpF,UAAM,gBAAgB,+BAA+B,KAAK,UAAU;AACpE,UAAM,WAAW,cAAc,IAAI,eAAe;AAClD,QAAI,UAAU;AACZ,YAAM,UAA6B;AAAA,QACjC,GAAG;AAAA,QACH,YAAY,KAAK;AAAA,QACjB;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,MAAM,KAAK,QAAQ;AAAA,QACnB,2BAA2B;AAAA,QAC3B,oBAAoB,+BAA+B;AAAA,UACjD;AAAA,UACA,oBAAoB,SAAS;AAAA,UAC7B,kBAAkB;AAAA,UAClB,0BAA0B;AAAA,QAC5B,CAAC;AAAA,QACD,WAAW;AAAA,QACX,SAASA,SAAQ,WAAW,SAAS;AAAA,QACrC,aAAaA,SAAQ,eAAe,SAAS;AAAA,MAC/C;AACA,oBAAc,IAAI,iBAAiB,OAAO;AAE1C,UAAI,CAAC,QAAQ,SAAS;AACpB,gBAAQ,eAAe;AACvB,eAAO;AAAA,UACL;AAAA,UACA,SAAS,QAAQ;AAAA,UACjB,aAAa,QAAQ;AAAA,QACvB;AAAA,MACF;AAEA,YAAM,YAAY,QAAQ;AAC1B,YAAM,UAAU,YAAY,UAAU,IAAI,SAAS,IAAI;AACvD,YAAM,SAAS,SAAS,OAAO;AAE/B,UAAI,WAAW,aAAa,WAAW,YAAY;AACjD,cAAM,OAA2BA,SAAQ,QAAQ;AACjD,YAAI,SAAS,YAAY,WAAW,QAAQ,cAAc,WAAW;AACnE,kBAAQ,eAAe,EAAE,UAAU;AACnC,iBAAOF,OAAM;AAAA,YACX;AAAA,YACAN,QAAO,KAAK,MAAM;AAChB,oBAAMS,gBAAe,cAAc,IAAI,eAAe;AACtD,kBAAI,CAACA,cAAc;AACnB,kBAAIA,cAAa,cAAc,cAAc,WAAW;AACtD,gBAAAA,cAAa,eAAe;AAAA,cAC9B;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,OAAO;AACL,kBAAQ,eAAe;AAAA,QACzB;AACA,eAAO;AAAA,UACL;AAAA,UACA,SAAS,QAAQ;AAAA,UACjB,aAAa,QAAQ;AAAA,QACvB;AAAA,MACF;AAEA,UAAI,WAAW,YAAY;AACzB,cAAM,OAA2BD,SAAQ,QAAQ;AACjD,YAAI,SAAS,UAAU;AACrB,kBAAQ,eAAe,EAAE,UAAU;AACnC,iBAAOF,OAAM;AAAA,YACX;AAAA,YACAN,QAAO,KAAK,MAAM;AAChB,oBAAMS,gBAAe,cAAc,IAAI,eAAe;AACtD,kBAAI,CAACA,cAAc;AACnB,kBAAIA,cAAa,cAAc,cAAc,WAAW;AACtD,gBAAAA,cAAa,eAAe;AAAA,cAC9B;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,OAAO;AACL,kBAAQ,eAAe;AAAA,QACzB;AACA,eAAO;AAAA,UACL;AAAA,UACA,SAAS,QAAQ;AAAA,UACjB,aAAa,QAAQ;AAAA,QACvB;AAAA,MACF;AAEA,cAAQ,eAAe;AACvB,aAAO,kBAAkB,eAAe;AACxC,aAAO;AAAA,QACL;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,aAAa,QAAQ;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,yBAAyB,+BAA+B;AAAA,MAC5D;AAAA,MACA,oBAAoB,CAAC;AAAA,MACrB,kBAAkB;AAAA,MAClB,0BAA0B;AAAA,IAC5B,CAAC;AAED,UAAM,eAAkC;AAAA,MACtC;AAAA,MACA;AAAA,MACA,YAAY,KAAK;AAAA,MACjB;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,MAAM,KAAK,QAAQ;AAAA,MACnB,2BAA2B;AAAA,MAC3B,oBAAoB;AAAA,MACpB,WAAW;AAAA,MACX,SAASD,SAAQ,WAAW;AAAA,MAC5B,aAAaA,SAAQ;AAAA,MACrB,YAAY;AAAA,MACZ,aAAyB,aAAa;AAAA,MACtC,cAAc;AAAA,IAChB;AAEA,kBAAc,IAAI,iBAAiB,YAAY;AAE/C,QAAI,aAAa,SAAS;AACxB,aAAO,kBAAkB,eAAe;AAAA,IAC1C;AAEA,WAAO;AAAA,MACL;AAAA,MACA,SAAS,aAAa;AAAA,MACtB,aAAa,aAAa;AAAA,IAC5B;AAAA,EACF,CAAC;AAEH,QAAM,oBAAyD,CAAC,WAC9DR,QAAO,KAAK,MAAM;AAChB,UAAM,YAAY,QAAQ;AAC1B,UAAM,WAAW,QAAQ;AACzB,UAAM,MAA6B,CAAC;AACpC,eAAW,gBAAgB,cAAc,OAAO,GAAG;AACjD,UAAI,aAAa,aAAa,SAAS,MAAM,SAAS,UAAW;AACjE,UAAI,YAAY,aAAa,aAAa,SAAU;AACpD,UAAI,KAAK;AAAA,QACP,UAAU,aAAa;AAAA,QACvB,SAAS,aAAa;AAAA,QACtB,aAAa,aAAa;AAAA,MAC5B,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT,CAAC;AAEH,QAAM,oBAAyD,CAAC,sBAC9DA,QAAO,KAAK,MAAM,UAAU,IAAI,iBAAiB,GAAG,MAAM;AAE5D,QAAM,kBAAqD,CAAC,mBAAmB,YAC7EA,QAAO,QAAQ,MAAM;AACnB,UAAM,WAAW,UAAU,IAAI,iBAAiB;AAChD,QAAI,CAAC,UAAU;AACb,aAAOA,QAAO;AAAA,IAChB;AAEA,WAAO,uBAAuB,SAAS,OAAO,gCAAgC,EAAE;AAAA,MAC9EA,QAAO,QAAQ,CAAC,SAAS;AACvB,YAAI,MAAM;AACR,iBAAOA,QAAO;AAAA,QAChB;AAEA,YAAI,QAAQ,WAAW,QAAQ;AAC7B,iBAAO,aAAa,UAAU,YAAY;AAAA,QAC5C;AAEA,YAAI,QAAQ,WAAW,WAAW;AAChC,iBAAO,aAAa,UAAU,YAAY,EAAE;AAAA,YAC1CA,QAAO,QAAQ,MAAM;AACnB,oBAAM,eAAe,cAAc,IAAI,SAAS,eAAe;AAC/D,kBAAI,CAAC,cAAc;AACjB,uBAAOA,QAAO;AAAA,cAChB;AACA,2BAAa,oBAAoB;AACjC,qBAAO,kBAAkB,SAAS,eAAe;AAAA,YACnD,CAAC;AAAA,UACH;AAAA,QACF;AAGA,YAAI,QAAQ,WAAW,SAAS;AAC9B,cAAI,SAAS,OAAO,WAAW,aAAa,SAAS,OAAO,WAAW,YAAY;AACjF,mBAAOA,QAAO;AAAA,UAChB;AAEA,gBAAM,eAAe,cAAc,IAAI,SAAS,eAAe;AAC/D,cAAI,CAAC,cAAc;AACjB,mBAAOA,QAAO;AAAA,UAChB;AACA,uBAAa,oBAAoB;AACjC,iBAAO,kBAAkB,SAAS,eAAe;AAAA,QACnD;AAEA,eAAOA,QAAO;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAEH,QAAM,uBAA+D,CAAC,UACpEA,QAAO,IAAI,aAAa;AACtB,UAAM,OAAO,OAAkB,iCAAiC;AAAA,MAC9D,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SACE;AAAA,MACF,MAAM;AAAA,MACN,MAAM;AAAA,IACR,CAAC;AACD,QAAI,KAAM;AAEV,UAAM,YAAY,MAAM;AACxB,UAAM,mBAAmB,6BAA6B,IAAI,SAAS;AACnE,QAAI,CAAC,oBAAoB,iBAAiB,SAAS,GAAG;AACpD;AAAA,IACF;AAEA,WAAOA,QAAO;AAAA,MACZ;AAAA,MACA,CAAC,oBACCA,QAAO,QAAQ,MAAM;AACnB,cAAM,eAAe,cAAc,IAAI,eAAe;AACtD,YAAI,CAAC,cAAc;AACjB,iBAAOA,QAAO;AAAA,QAChB;AAEA,cAAM,oBAAoB,aAAa;AACvC,YAAI,CAAC,mBAAmB;AACtB,iBAAOA,QAAO;AAAA,QAChB;AAEA,cAAM,WAAW,UAAU,IAAI,iBAAiB;AAChD,YAAI,CAAC,UAAU;AACb,iBAAOA,QAAO;AAAA,QAChB;AAEA,YAAI,SAAS,OAAO,WAAW,cAAc,SAAS,OAAO,WAAW,WAAW;AACjF,iBAAOA,QAAO;AAAA,QAChB;AAEA,cAAM,QAAQ,aAAa,0BAA0B,IAAI,SAAS;AAClE,YAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,iBAAOA,QAAO;AAAA,QAChB;AAEA,eAAOA,QAAO;AAAA,UACZ;AAAA,UACA,CAAC,SACC,MAAM,MAAM,SAAS,uBAAuB;AAAA,YAC1C,MAAM;AAAA,YACN,MAAM,KAAK;AAAA,YACX,eAAe,KAAK;AAAA,UACtB,CAA0B;AAAA,UAC5B,EAAE,SAAS,KAAK;AAAA,QAClB;AAAA,MACF,CAAC;AAAA,MACH,EAAE,SAAS,KAAK;AAAA,IAClB;AAAA,EACF,CAAC;AAEH,QAAM,eAAyCO,QAAO,WAAW,SAAS;AAE1E,QAAM,oBAAyD,MAAMP,QAAO,KAAK,oBAAoB;AAErG,SAAOA,QAAO;AAAA,IAAa,MACzBA,QAAO,IAAI,aAAa;AACtB,iBAAW,gBAAgB,cAAc,OAAO,GAAG;AACjD,qBAAa,eAAe;AAAA,MAC9B;AACA,iBAAW,YAAY,UAAU,OAAO,GAAG;AACzC,YAAI,SAAS,OAAO;AAClB,iBAAO,aAAa,UAAU,eAAe;AAAA,QAC/C;AAAA,MACF;AAAA,IACF,CAAC,EAAE;AAAA,MACDA,QAAO,WAAW,CAAC,UACjBA,QAAO,KAAK,MAAM;AAEhB,YAAI,SAAS,GAAG;AAEd,kBAAQ,KAAK,qCAAqC,MAAM,OAAO,KAAK,CAAC;AAAA,QACvE;AAAA,MACF,CAAC,CAAC;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,EACF;AACF,CAAC;AAEI,IAAM,QAAQ,CAAC,YACpBU,OAAM,OAAO,mBAAmBR,MAAK,OAAO,CAAC;","names":["Effect","Fiber","Layer","Option","Ref","ServiceMap","Scope","Stream","Effect","Effect","onTrigger","nextSize","peak","baseState","finalized","isRecord","tag","Effect","Ref","Stream","isDevEnv","make","Effect","resolveRuntimeStateSchemaAst","Stream","stream","selector","Ref","nowMs","ServiceMap","Effect","Ref","make","ServiceMap","Option","Fiber","Scope","Stream","options","installation","Layer"]}
@@ -0,0 +1,228 @@
1
+ // src/internal/runtime/core/HostScheduler.ts
2
+ var noopCancel = () => {
3
+ };
4
+ var safeNowMs = () => {
5
+ const perf = globalThis.performance;
6
+ if (perf && typeof perf.now === "function") {
7
+ try {
8
+ const v = perf.now();
9
+ if (typeof v === "number" && Number.isFinite(v)) return v;
10
+ } catch {
11
+ }
12
+ }
13
+ return Date.now();
14
+ };
15
+ var safeQueueMicrotask = (cb) => {
16
+ const qm = globalThis.queueMicrotask;
17
+ if (typeof qm === "function") {
18
+ try {
19
+ qm(cb);
20
+ return;
21
+ } catch {
22
+ }
23
+ }
24
+ try {
25
+ Promise.resolve().then(cb);
26
+ } catch {
27
+ setTimeout(cb, 0);
28
+ }
29
+ };
30
+ var safeSetTimeout = (ms, cb) => {
31
+ const id = setTimeout(cb, ms);
32
+ return () => {
33
+ try {
34
+ clearTimeout(id);
35
+ } catch {
36
+ }
37
+ };
38
+ };
39
+ var makeMessageChannelMacrotask = () => {
40
+ const MC = globalThis.MessageChannel;
41
+ if (typeof MC !== "function") return void 0;
42
+ let channel;
43
+ try {
44
+ channel = new MC();
45
+ } catch {
46
+ return void 0;
47
+ }
48
+ const queue = [];
49
+ let scheduled = false;
50
+ const flush = () => {
51
+ scheduled = false;
52
+ const tasks = queue.splice(0, queue.length);
53
+ for (const t of tasks) {
54
+ if (t.canceled) continue;
55
+ try {
56
+ t.cb();
57
+ } catch {
58
+ }
59
+ }
60
+ };
61
+ try {
62
+ channel.port1.onmessage = flush;
63
+ } catch {
64
+ return void 0;
65
+ }
66
+ const schedule = (cb) => {
67
+ const task = { canceled: false, cb };
68
+ queue.push(task);
69
+ if (!scheduled) {
70
+ scheduled = true;
71
+ try {
72
+ channel.port2.postMessage(void 0);
73
+ } catch {
74
+ scheduled = false;
75
+ return safeSetTimeout(0, cb);
76
+ }
77
+ }
78
+ return () => {
79
+ task.canceled = true;
80
+ };
81
+ };
82
+ return schedule;
83
+ };
84
+ var makeSetImmediateMacrotask = () => {
85
+ const si = globalThis.setImmediate;
86
+ const ci = globalThis.clearImmediate;
87
+ if (typeof si !== "function") return void 0;
88
+ return (cb) => {
89
+ let id;
90
+ try {
91
+ id = si(cb);
92
+ } catch {
93
+ return safeSetTimeout(0, cb);
94
+ }
95
+ return () => {
96
+ if (typeof ci !== "function") return;
97
+ try {
98
+ ci(id);
99
+ } catch {
100
+ }
101
+ };
102
+ };
103
+ };
104
+ var makeRaf = () => {
105
+ const raf = globalThis.requestAnimationFrame;
106
+ const cancel = globalThis.cancelAnimationFrame;
107
+ if (typeof raf !== "function") return void 0;
108
+ return (cb) => {
109
+ let id;
110
+ try {
111
+ id = raf(cb);
112
+ } catch {
113
+ return noopCancel;
114
+ }
115
+ return () => {
116
+ if (typeof cancel !== "function") return;
117
+ try {
118
+ cancel(id);
119
+ } catch {
120
+ }
121
+ };
122
+ };
123
+ };
124
+ var makeDefaultHostScheduler = () => {
125
+ const macrotask = makeSetImmediateMacrotask() ?? makeMessageChannelMacrotask() ?? ((cb) => safeSetTimeout(0, cb));
126
+ const raf = makeRaf();
127
+ return {
128
+ nowMs: safeNowMs,
129
+ scheduleMicrotask: safeQueueMicrotask,
130
+ scheduleMacrotask: macrotask,
131
+ scheduleAnimationFrame: (cb) => raf?.(cb) ?? macrotask(cb),
132
+ scheduleTimeout: safeSetTimeout
133
+ };
134
+ };
135
+ var globalHostScheduler;
136
+ var getGlobalHostScheduler = () => {
137
+ globalHostScheduler ?? (globalHostScheduler = makeDefaultHostScheduler());
138
+ return globalHostScheduler;
139
+ };
140
+ var __unsafeSetGlobalHostSchedulerForTests = (next) => {
141
+ globalHostScheduler = next;
142
+ };
143
+ var makeDeterministicHostScheduler = () => {
144
+ const microtasks = [];
145
+ const macrotasks = [];
146
+ const flushMicrotasks = (options) => {
147
+ const max = options?.max ?? 1e4;
148
+ let ran = 0;
149
+ while (microtasks.length > 0 && ran < max) {
150
+ const cb = microtasks.shift();
151
+ ran += 1;
152
+ try {
153
+ cb();
154
+ } catch {
155
+ }
156
+ }
157
+ return ran;
158
+ };
159
+ const flushOneMacrotask = () => {
160
+ const t = macrotasks.shift();
161
+ if (!t) return false;
162
+ if (t.canceled) return true;
163
+ try {
164
+ t.cb();
165
+ } catch {
166
+ }
167
+ return true;
168
+ };
169
+ const flushAll = (options) => {
170
+ const maxTurns = options?.maxTurns ?? 1e4;
171
+ let turns = 0;
172
+ let ran = 0;
173
+ while (turns < maxTurns) {
174
+ const before = microtasks.length + macrotasks.length;
175
+ ran += flushMicrotasks();
176
+ if (microtasks.length > 0) {
177
+ turns += 1;
178
+ continue;
179
+ }
180
+ if (flushOneMacrotask()) {
181
+ turns += 1;
182
+ continue;
183
+ }
184
+ const after = microtasks.length + macrotasks.length;
185
+ if (after === 0 || after === before) break;
186
+ turns += 1;
187
+ }
188
+ return { turns, ran };
189
+ };
190
+ return {
191
+ nowMs: safeNowMs,
192
+ scheduleMicrotask: (cb) => {
193
+ microtasks.push(cb);
194
+ },
195
+ scheduleMacrotask: (cb) => {
196
+ const task = { canceled: false, cb };
197
+ macrotasks.push(task);
198
+ return () => {
199
+ task.canceled = true;
200
+ };
201
+ },
202
+ scheduleAnimationFrame: (cb) => {
203
+ const task = { canceled: false, cb };
204
+ macrotasks.push(task);
205
+ return () => {
206
+ task.canceled = true;
207
+ };
208
+ },
209
+ scheduleTimeout: (_ms, cb) => {
210
+ const task = { canceled: false, cb };
211
+ macrotasks.push(task);
212
+ return () => {
213
+ task.canceled = true;
214
+ };
215
+ },
216
+ flushMicrotasks,
217
+ flushOneMacrotask,
218
+ flushAll,
219
+ getQueueSize: () => ({ microtasks: microtasks.length, macrotasks: macrotasks.length })
220
+ };
221
+ };
222
+
223
+ export {
224
+ getGlobalHostScheduler,
225
+ __unsafeSetGlobalHostSchedulerForTests,
226
+ makeDeterministicHostScheduler
227
+ };
228
+ //# sourceMappingURL=chunk-MYKNINNN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/runtime/core/HostScheduler.ts"],"sourcesContent":["export type Cancel = () => void\n\nexport type HostScheduler = {\n readonly nowMs: () => number\n readonly scheduleMicrotask: (cb: () => void) => void\n readonly scheduleMacrotask: (cb: () => void) => Cancel\n readonly scheduleAnimationFrame: (cb: () => void) => Cancel\n readonly scheduleTimeout: (ms: number, cb: () => void) => Cancel\n}\n\nconst noopCancel: Cancel = () => {}\n\nconst safeNowMs = (): number => {\n const perf = (globalThis as any).performance as { now?: () => number } | undefined\n if (perf && typeof perf.now === 'function') {\n try {\n const v = perf.now()\n if (typeof v === 'number' && Number.isFinite(v)) return v\n } catch {\n // fallthrough\n }\n }\n\n return Date.now()\n}\n\nconst safeQueueMicrotask = (cb: () => void): void => {\n const qm = (globalThis as any).queueMicrotask as ((run: () => void) => void) | undefined\n if (typeof qm === 'function') {\n try {\n qm(cb)\n return\n } catch {\n // fallthrough\n }\n }\n\n // Promise job fallback (still a microtask boundary).\n try {\n Promise.resolve().then(cb)\n } catch {\n // last resort\n setTimeout(cb, 0)\n }\n}\n\nconst safeSetTimeout = (ms: number, cb: () => void): Cancel => {\n const id = setTimeout(cb, ms)\n return () => {\n try {\n clearTimeout(id)\n } catch {\n // best-effort\n }\n }\n}\n\nconst makeMessageChannelMacrotask = (): ((cb: () => void) => Cancel) | undefined => {\n const MC = (globalThis as any).MessageChannel as { new (): MessageChannel } | undefined\n if (typeof MC !== 'function') return undefined\n\n let channel: MessageChannel\n try {\n channel = new MC()\n } catch {\n return undefined\n }\n\n type Task = { canceled: boolean; cb: () => void }\n const queue: Array<Task> = []\n let scheduled = false\n\n const flush = (): void => {\n scheduled = false\n const tasks = queue.splice(0, queue.length)\n for (const t of tasks) {\n if (t.canceled) continue\n try {\n t.cb()\n } catch {\n // best-effort\n }\n }\n }\n\n try {\n channel.port1.onmessage = flush\n } catch {\n return undefined\n }\n\n const schedule = (cb: () => void): Cancel => {\n const task: Task = { canceled: false, cb }\n queue.push(task)\n if (!scheduled) {\n scheduled = true\n try {\n channel.port2.postMessage(undefined)\n } catch {\n scheduled = false\n // fallback to timeout if postMessage fails\n return safeSetTimeout(0, cb)\n }\n }\n return () => {\n task.canceled = true\n }\n }\n\n return schedule\n}\n\nconst makeSetImmediateMacrotask = (): ((cb: () => void) => Cancel) | undefined => {\n const si = (globalThis as any).setImmediate as ((run: () => void) => any) | undefined\n const ci = (globalThis as any).clearImmediate as ((id: any) => void) | undefined\n if (typeof si !== 'function') return undefined\n\n return (cb) => {\n let id: any\n try {\n id = si(cb)\n } catch {\n return safeSetTimeout(0, cb)\n }\n\n return () => {\n if (typeof ci !== 'function') return\n try {\n ci(id)\n } catch {\n // best-effort\n }\n }\n }\n}\n\nconst makeRaf = (): ((cb: () => void) => Cancel) | undefined => {\n const raf = (globalThis as any).requestAnimationFrame as ((run: () => void) => number) | undefined\n const cancel = (globalThis as any).cancelAnimationFrame as ((id: number) => void) | undefined\n if (typeof raf !== 'function') return undefined\n\n return (cb) => {\n let id: number\n try {\n id = raf(cb)\n } catch {\n return noopCancel\n }\n\n return () => {\n if (typeof cancel !== 'function') return\n try {\n cancel(id)\n } catch {\n // best-effort\n }\n }\n }\n}\n\nexport const makeDefaultHostScheduler = (): HostScheduler => {\n const macrotask =\n makeSetImmediateMacrotask() ??\n makeMessageChannelMacrotask() ??\n ((cb: () => void) => safeSetTimeout(0, cb))\n\n const raf = makeRaf()\n\n return {\n nowMs: safeNowMs,\n scheduleMicrotask: safeQueueMicrotask,\n scheduleMacrotask: macrotask,\n scheduleAnimationFrame: (cb) => raf?.(cb) ?? macrotask(cb),\n scheduleTimeout: safeSetTimeout,\n }\n}\n\nlet globalHostScheduler: HostScheduler | undefined\n\nexport const getGlobalHostScheduler = (): HostScheduler => {\n globalHostScheduler ??= makeDefaultHostScheduler()\n return globalHostScheduler\n}\n\nexport const __unsafeSetGlobalHostSchedulerForTests = (next: HostScheduler | undefined): void => {\n globalHostScheduler = next\n}\n\nexport type DeterministicHostScheduler = HostScheduler & {\n readonly flushMicrotasks: (options?: { readonly max?: number }) => number\n readonly flushOneMacrotask: () => boolean\n readonly flushAll: (options?: { readonly maxTurns?: number }) => { readonly turns: number; readonly ran: number }\n readonly getQueueSize: () => { readonly microtasks: number; readonly macrotasks: number }\n}\n\nexport const makeDeterministicHostScheduler = (): DeterministicHostScheduler => {\n const microtasks: Array<() => void> = []\n const macrotasks: Array<{ canceled: boolean; cb: () => void }> = []\n\n const flushMicrotasks = (options?: { readonly max?: number }): number => {\n const max = options?.max ?? 10_000\n let ran = 0\n while (microtasks.length > 0 && ran < max) {\n const cb = microtasks.shift()!\n ran += 1\n try {\n cb()\n } catch {\n // best-effort\n }\n }\n return ran\n }\n\n const flushOneMacrotask = (): boolean => {\n const t = macrotasks.shift()\n if (!t) return false\n if (t.canceled) return true\n try {\n t.cb()\n } catch {\n // best-effort\n }\n return true\n }\n\n const flushAll = (options?: { readonly maxTurns?: number }): { turns: number; ran: number } => {\n const maxTurns = options?.maxTurns ?? 10_000\n let turns = 0\n let ran = 0\n\n while (turns < maxTurns) {\n const before = microtasks.length + macrotasks.length\n ran += flushMicrotasks()\n if (microtasks.length > 0) {\n turns += 1\n continue\n }\n if (flushOneMacrotask()) {\n turns += 1\n continue\n }\n const after = microtasks.length + macrotasks.length\n if (after === 0 || after === before) break\n turns += 1\n }\n\n return { turns, ran }\n }\n\n return {\n nowMs: safeNowMs,\n scheduleMicrotask: (cb) => {\n microtasks.push(cb)\n },\n scheduleMacrotask: (cb) => {\n const task = { canceled: false, cb }\n macrotasks.push(task)\n return () => {\n task.canceled = true\n }\n },\n scheduleAnimationFrame: (cb) => {\n const task = { canceled: false, cb }\n macrotasks.push(task)\n return () => {\n task.canceled = true\n }\n },\n scheduleTimeout: (_ms, cb) => {\n const task = { canceled: false, cb }\n macrotasks.push(task)\n return () => {\n task.canceled = true\n }\n },\n flushMicrotasks,\n flushOneMacrotask,\n flushAll,\n getQueueSize: () => ({ microtasks: microtasks.length, macrotasks: macrotasks.length }),\n }\n}\n"],"mappings":"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","names":[]}