@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.
- package/LICENSE +201 -0
- package/dist/{Action-mqVvtEHt.d.ts → Action-DYl88bwj.d.ts} +1 -1
- package/dist/{Action-BkRHy2vg.d.cts → Action-DkxsI_DK.d.cts} +1 -1
- package/dist/Action.cjs.map +1 -1
- package/dist/Action.d.cts +1 -1
- package/dist/Action.d.ts +1 -1
- package/dist/Action.js +2 -2
- package/dist/{Actions-AsQ07yTP.d.cts → Actions-Dicm7jdc.d.cts} +2 -2
- package/dist/{Actions-AsQ07yTP.d.ts → Actions-Dicm7jdc.d.ts} +2 -2
- package/dist/Actions.cjs.map +1 -1
- package/dist/Actions.d.cts +1 -1
- package/dist/Actions.d.ts +1 -1
- package/dist/Actions.js +1 -1
- package/dist/{Bound-BN1DQ_lM.d.ts → Bound-1OJLzVIS.d.ts} +2 -2
- package/dist/{Bound-BPIfH9SS.d.cts → Bound-BMLrtQ1V.d.cts} +2 -2
- package/dist/Bound.cjs +1737 -399
- package/dist/Bound.cjs.map +1 -1
- package/dist/Bound.d.cts +5 -5
- package/dist/Bound.d.ts +5 -5
- package/dist/Bound.js +19 -17
- package/dist/{Debug-B5q5Bkzx.d.ts → Debug-DKrWP5H1.d.ts} +40 -22
- package/dist/{Debug-Bq8Sqjcr.d.cts → Debug-hIT44XsY.d.cts} +40 -22
- package/dist/Debug.cjs +1348 -318
- package/dist/Debug.cjs.map +1 -1
- package/dist/Debug.d.cts +12 -11
- package/dist/Debug.d.ts +12 -11
- package/dist/Debug.js +20 -11
- package/dist/EffectOp.cjs +15 -6
- package/dist/EffectOp.cjs.map +1 -1
- package/dist/EffectOp.js +3 -3
- package/dist/Env.cjs +772 -6
- package/dist/Env.cjs.map +1 -1
- package/dist/Env.js +5 -2
- package/dist/ExternalStore-DqJKKRJ4.d.ts +61 -0
- package/dist/ExternalStore-JC-gAgEI.d.cts +61 -0
- package/dist/ExternalStore.cjs +774 -0
- package/dist/ExternalStore.cjs.map +1 -0
- package/dist/ExternalStore.d.cts +8 -0
- package/dist/ExternalStore.d.ts +8 -0
- package/dist/ExternalStore.js +19 -0
- package/dist/ExternalStore.js.map +1 -0
- package/dist/{Flow-BhpjE22E.d.ts → Flow-CZmXRDqp.d.cts} +13 -4
- package/dist/{Flow-1fZT8MpX.d.cts → Flow-DIVDxz7R.d.ts} +13 -4
- package/dist/Flow.cjs +765 -148
- package/dist/Flow.cjs.map +1 -1
- package/dist/Flow.d.cts +6 -6
- package/dist/Flow.d.ts +6 -6
- package/dist/Flow.js +9 -8
- package/dist/{Handle-D_cLW1Z3.d.ts → Handle-Bo6cAFut.d.ts} +1 -1
- package/dist/{Handle-D8D1zPb_.d.cts → Handle-CfDvSqN7.d.cts} +1 -1
- package/dist/Handle.d.cts +5 -5
- package/dist/Handle.d.ts +5 -5
- package/dist/{Kernel-8kC-jOda.d.cts → Kernel-CuXBF9S_.d.cts} +16 -7
- package/dist/{Kernel-CnGE1Fyk.d.ts → Kernel-D9guNwRL.d.ts} +16 -7
- package/dist/Kernel.cjs +814 -26
- package/dist/Kernel.cjs.map +1 -1
- package/dist/Kernel.d.cts +13 -12
- package/dist/Kernel.d.ts +13 -12
- package/dist/Kernel.js +7 -4
- package/dist/{Link-Db7975nU.d.ts → Link-CUM0yUCH.d.ts} +10 -3
- package/dist/{Link-fX8x1eCK.d.cts → Link-NAfR6uGD.d.cts} +10 -3
- package/dist/Link.cjs +1294 -121
- package/dist/Link.cjs.map +1 -1
- package/dist/Link.d.cts +5 -5
- package/dist/Link.d.ts +5 -5
- package/dist/Link.js +37 -29
- package/dist/{Logic-DRh4sDZj.d.cts → Logic-09VQpIj3.d.cts} +7 -4
- package/dist/{Logic-BRjEMr-W.d.ts → Logic-DKg7ghGy.d.ts} +7 -4
- package/dist/Logic.cjs +2 -1
- package/dist/Logic.cjs.map +1 -1
- package/dist/Logic.d.cts +5 -5
- package/dist/Logic.d.ts +5 -5
- package/dist/Logic.js +1 -1
- package/dist/{MatchBuilder-CJk5oCkR.d.cts → MatchBuilder-CsW5jgrL.d.ts} +1 -1
- package/dist/{MatchBuilder-0QOc-nlU.d.ts → MatchBuilder-Dksk07F4.d.cts} +1 -1
- package/dist/MatchBuilder.cjs +2 -2
- package/dist/MatchBuilder.cjs.map +1 -1
- package/dist/MatchBuilder.d.cts +6 -6
- package/dist/MatchBuilder.d.ts +6 -6
- package/dist/MatchBuilder.js +2 -2
- package/dist/Middleware-D8tUDLv_.d.cts +100 -0
- package/dist/Middleware-DS7CbTTN.d.ts +100 -0
- package/dist/Middleware.cjs +678 -58
- package/dist/Middleware.cjs.map +1 -1
- package/dist/Middleware.d.cts +2 -86
- package/dist/Middleware.d.ts +2 -86
- package/dist/Middleware.js +15 -12
- package/dist/{Module-DnzluX2J.d.ts → Module-B_Cntyms.d.ts} +54 -25
- package/dist/{Module-B_0xRDMR.d.cts → Module-CmNOVXzf.d.cts} +54 -25
- package/dist/Module.cjs +9331 -3317
- package/dist/Module.cjs.map +1 -1
- package/dist/Module.d.cts +7 -6
- package/dist/Module.d.ts +7 -6
- package/dist/Module.js +39 -31
- package/dist/ModuleTag-CGho_InD.d.ts +113 -0
- package/dist/ModuleTag-CITb8L_G.d.cts +113 -0
- package/dist/ModuleTag.cjs +7248 -2847
- package/dist/ModuleTag.cjs.map +1 -1
- package/dist/ModuleTag.d.cts +6 -6
- package/dist/ModuleTag.d.ts +6 -6
- package/dist/ModuleTag.js +35 -29
- package/dist/Observability-Bdhnx2Dv.d.ts +385 -0
- package/dist/Observability-DXGAFBIT.d.cts +385 -0
- package/dist/Observability.cjs +5093 -1556
- package/dist/Observability.cjs.map +1 -1
- package/dist/Observability.d.cts +6 -7
- package/dist/Observability.d.ts +6 -7
- package/dist/Observability.js +28 -23
- package/dist/{Platform-CHX8o-U4.d.ts → Platform-B4s8tg6C.d.cts} +4 -5
- package/dist/{Platform-C49Pv956.d.cts → Platform-BV_0MW7g.d.cts} +5 -2
- package/dist/{Platform-C49Pv956.d.ts → Platform-BV_0MW7g.d.ts} +5 -2
- package/dist/{Platform-CVlv0xLQ.d.cts → Platform-W0Mefy_e.d.ts} +4 -5
- package/dist/Platform.cjs +2 -1
- package/dist/Platform.cjs.map +1 -1
- package/dist/Platform.d.cts +2 -3
- package/dist/Platform.d.ts +2 -3
- package/dist/Platform.js +2 -2
- package/dist/{Process-CM9xbMdP.d.ts → Process-CO8G7HO9.d.cts} +30 -5
- package/dist/{Process-mL8fHDSB.d.cts → Process-Cyf6VNDR.d.ts} +30 -5
- package/dist/Process.cjs +1288 -120
- package/dist/Process.cjs.map +1 -1
- package/dist/Process.d.cts +6 -6
- package/dist/Process.d.ts +6 -6
- package/dist/Process.js +34 -26
- package/dist/ReadQuery-C_or5nLC.d.ts +128 -0
- package/dist/ReadQuery-DXLzCE0E.d.cts +614 -0
- package/dist/ReadQuery-DXLzCE0E.d.ts +614 -0
- package/dist/ReadQuery-Yve1lmUo.d.cts +128 -0
- package/dist/ReadQuery.cjs +290 -5
- package/dist/ReadQuery.cjs.map +1 -1
- package/dist/ReadQuery.d.cts +3 -2
- package/dist/ReadQuery.d.ts +3 -2
- package/dist/ReadQuery.js +23 -5
- package/dist/{Reflection-CQnKwPXj.d.ts → Reflection-B2Xi1e4Q.d.ts} +89 -7
- package/dist/{Reflection-Kabo1mlU.d.cts → Reflection-DNB4V4_e.d.cts} +89 -7
- package/dist/Reflection.cjs +3227 -1617
- package/dist/Reflection.cjs.map +1 -1
- package/dist/Reflection.d.cts +17 -15
- package/dist/Reflection.d.ts +17 -15
- package/dist/Reflection.js +33 -25
- package/dist/{Resource-Dy1xD_DG.d.cts → Resource-pKvQQ4x5.d.cts} +3 -3
- package/dist/{Resource-Dy1xD_DG.d.ts → Resource-pKvQQ4x5.d.ts} +3 -3
- package/dist/Resource.cjs +781 -15
- package/dist/Resource.cjs.map +1 -1
- package/dist/Resource.d.cts +1 -1
- package/dist/Resource.d.ts +1 -1
- package/dist/Resource.js +6 -3
- package/dist/{Root-7ADUMk4t.d.cts → Root-CCVuFHB6.d.cts} +3 -3
- package/dist/{Root-7ADUMk4t.d.ts → Root-CCVuFHB6.d.ts} +3 -3
- package/dist/Root.cjs +786 -20
- package/dist/Root.cjs.map +1 -1
- package/dist/Root.d.cts +2 -2
- package/dist/Root.d.ts +2 -2
- package/dist/Root.js +7 -3
- package/dist/{Runtime-CtyzZG4i.d.ts → Runtime-CRmvwK4I.d.ts} +70 -14
- package/dist/{Runtime-B-aL-f29.d.cts → Runtime-C_wJM9mN.d.cts} +70 -14
- package/dist/Runtime.cjs +4942 -1601
- package/dist/Runtime.cjs.map +1 -1
- package/dist/Runtime.d.cts +17 -15
- package/dist/Runtime.d.ts +17 -15
- package/dist/Runtime.js +44 -32
- package/dist/{ScopeRegistry-D1owDNSm.d.cts → ScopeRegistry-BhYzqWri.d.cts} +6 -6
- package/dist/{ScopeRegistry-D1owDNSm.d.ts → ScopeRegistry-BhYzqWri.d.ts} +6 -6
- package/dist/ScopeRegistry.cjs +776 -10
- package/dist/ScopeRegistry.cjs.map +1 -1
- package/dist/ScopeRegistry.d.cts +1 -1
- package/dist/ScopeRegistry.d.ts +1 -1
- package/dist/ScopeRegistry.js +6 -3
- package/dist/{State-CU50R26M.d.cts → State-rNFsFPTl.d.cts} +2 -2
- package/dist/{State-CU50R26M.d.ts → State-rNFsFPTl.d.ts} +2 -2
- package/dist/State.cjs.map +1 -1
- package/dist/State.d.cts +1 -1
- package/dist/State.d.ts +1 -1
- package/dist/State.js +1 -1
- package/dist/{StateTrait-BGsZghTz.d.ts → StateTrait-CijdwNb6.d.ts} +25 -8
- package/dist/{StateTrait-OWhbj12c.d.cts → StateTrait-Dltto6PU.d.cts} +25 -8
- package/dist/StateTrait.cjs +1890 -528
- package/dist/StateTrait.cjs.map +1 -1
- package/dist/StateTrait.d.cts +9 -7
- package/dist/StateTrait.d.ts +9 -7
- package/dist/StateTrait.js +18 -14
- package/dist/{TraitLifecycle-CwV5WPFX.d.cts → TraitLifecycle-BKzDqzLu.d.cts} +2 -2
- package/dist/{TraitLifecycle-LdIWmKlg.d.ts → TraitLifecycle-Cvo94uDB.d.ts} +2 -2
- package/dist/TraitLifecycle.cjs +630 -67
- package/dist/TraitLifecycle.cjs.map +1 -1
- package/dist/TraitLifecycle.d.cts +6 -6
- package/dist/TraitLifecycle.d.ts +6 -6
- package/dist/TraitLifecycle.js +8 -7
- package/dist/Workflow-C_OWr4dV.d.ts +415 -0
- package/dist/Workflow-DmydkHO8.d.cts +415 -0
- package/dist/Workflow.cjs +3150 -0
- package/dist/Workflow.cjs.map +1 -0
- package/dist/Workflow.d.cts +7 -0
- package/dist/Workflow.d.ts +7 -0
- package/dist/Workflow.js +58 -0
- package/dist/Workflow.js.map +1 -0
- package/dist/{action-DiMDD_0v.d.cts → action-BQxjPFEw.d.cts} +5 -5
- package/dist/{action-DiMDD_0v.d.ts → action-BQxjPFEw.d.ts} +5 -5
- package/dist/chunk-2XRLXDWR.js +276 -0
- package/dist/chunk-2XRLXDWR.js.map +1 -0
- package/dist/chunk-3L6QGFMM.js +701 -0
- package/dist/chunk-3L6QGFMM.js.map +1 -0
- package/dist/{chunk-GMPEOUP2.js → chunk-4MZ7BT3R.js} +2 -2
- package/dist/chunk-4MZ7BT3R.js.map +1 -0
- package/dist/{chunk-3IYZ5IGG.js → chunk-5WKUGEBY.js} +2 -2
- package/dist/{chunk-3RMKLXHX.js → chunk-63ZQ5RIN.js} +2 -2
- package/dist/{chunk-M3WTHJHJ.js → chunk-67DIEA53.js} +385 -148
- package/dist/chunk-67DIEA53.js.map +1 -0
- package/dist/{chunk-YS3AZQ2G.js → chunk-6HFAW2MH.js} +1 -1
- package/dist/chunk-6HFAW2MH.js.map +1 -0
- package/dist/{chunk-EY4NZKDR.js → chunk-6Y2TKCNY.js} +2 -2
- package/dist/{chunk-76WT3HOR.js → chunk-6YZOXFPQ.js} +25 -24
- package/dist/chunk-6YZOXFPQ.js.map +1 -0
- package/dist/{chunk-G5ZBFPNU.js → chunk-A2RQOJC7.js} +2 -2
- package/dist/{chunk-AUIR5O6W.js → chunk-AFSB6NKM.js} +13 -19
- package/dist/chunk-AFSB6NKM.js.map +1 -0
- package/dist/{chunk-JCXGZRMU.js → chunk-AO4JEOKD.js} +22 -23
- package/dist/chunk-AO4JEOKD.js.map +1 -0
- package/dist/{chunk-TAAPQVZN.js → chunk-AYELIQXR.js} +2 -2
- package/dist/{chunk-QMM6O4CD.js → chunk-BLHZW7DG.js} +15 -3
- package/dist/{chunk-QMM6O4CD.js.map → chunk-BLHZW7DG.js.map} +1 -1
- package/dist/{chunk-TQOBJYDP.js → chunk-CD4N74YC.js} +1 -1
- package/dist/chunk-CD4N74YC.js.map +1 -0
- package/dist/{chunk-ANLBCBDC.js → chunk-CGE2HBTH.js} +11 -11
- package/dist/chunk-CGE2HBTH.js.map +1 -0
- package/dist/{chunk-OFADUJWJ.js → chunk-CYYSQMLO.js} +5 -5
- package/dist/chunk-CYYSQMLO.js.map +1 -0
- package/dist/{chunk-66ALHVEX.js → chunk-EB46EYI7.js} +3 -3
- package/dist/{chunk-NZJKFF45.js → chunk-EKCDHWRK.js} +4 -4
- package/dist/chunk-EKCDHWRK.js.map +1 -0
- package/dist/{chunk-BABLDP24.js → chunk-EPQFNJU3.js} +152 -7
- package/dist/chunk-EPQFNJU3.js.map +1 -0
- package/dist/{chunk-OGWBVHB3.js → chunk-ESR6HGOY.js} +73 -14
- package/dist/chunk-ESR6HGOY.js.map +1 -0
- package/dist/{chunk-NBD3KUOZ.js → chunk-F6RP62H3.js} +150 -98
- package/dist/chunk-F6RP62H3.js.map +1 -0
- package/dist/chunk-FBYW3QDI.js +252 -0
- package/dist/chunk-FBYW3QDI.js.map +1 -0
- package/dist/{chunk-IPF7E66P.js → chunk-FYAODKVP.js} +2 -2
- package/dist/chunk-GNEN7NKO.js +908 -0
- package/dist/chunk-GNEN7NKO.js.map +1 -0
- package/dist/chunk-GWSM4KLB.js +763 -0
- package/dist/chunk-GWSM4KLB.js.map +1 -0
- package/dist/{chunk-4SO6JMZL.js → chunk-HDMXCUZL.js} +1 -1
- package/dist/chunk-HDMXCUZL.js.map +1 -0
- package/dist/{chunk-ZFY7U2FR.js → chunk-HJM5Y5NU.js} +43 -3
- package/dist/chunk-HJM5Y5NU.js.map +1 -0
- package/dist/{chunk-ZGDVUPTM.js → chunk-IOZ3VKPK.js} +129 -68
- package/dist/chunk-IOZ3VKPK.js.map +1 -0
- package/dist/{chunk-PYOE4VSI.js → chunk-IVXSVHO4.js} +303 -247
- package/dist/chunk-IVXSVHO4.js.map +1 -0
- package/dist/chunk-J3CWXIPV.js +242 -0
- package/dist/chunk-J3CWXIPV.js.map +1 -0
- package/dist/chunk-K6JQW266.js +42 -0
- package/dist/chunk-K6JQW266.js.map +1 -0
- package/dist/chunk-KMZYQF6Q.js +202 -0
- package/dist/chunk-KMZYQF6Q.js.map +1 -0
- package/dist/{chunk-JWOYLO27.js → chunk-LPPZDFTD.js} +22 -12
- package/dist/chunk-LPPZDFTD.js.map +1 -0
- package/dist/{chunk-PAYXCY6A.js → chunk-MYB2B5WX.js} +997 -576
- package/dist/chunk-MYB2B5WX.js.map +1 -0
- package/dist/chunk-MYKNINNN.js +228 -0
- package/dist/chunk-MYKNINNN.js.map +1 -0
- package/dist/chunk-NSQIRMVF.js +27 -0
- package/dist/{chunk-QCHIQWAJ.js.map → chunk-NSQIRMVF.js.map} +1 -1
- package/dist/chunk-NUDBM4MM.js +30 -0
- package/dist/chunk-NUDBM4MM.js.map +1 -0
- package/dist/chunk-NZMWWDAY.js +23 -0
- package/dist/chunk-NZMWWDAY.js.map +1 -0
- package/dist/{chunk-RNFE3ML2.js → chunk-OCUV2Y25.js} +4 -3
- package/dist/chunk-OCUV2Y25.js.map +1 -0
- package/dist/chunk-P4ZJOQA7.js +271 -0
- package/dist/chunk-P4ZJOQA7.js.map +1 -0
- package/dist/chunk-P6C5EZ3D.js +342 -0
- package/dist/chunk-P6C5EZ3D.js.map +1 -0
- package/dist/{chunk-CW6T36TN.js → chunk-PBD7BJUN.js} +62 -4
- package/dist/chunk-PBD7BJUN.js.map +1 -0
- package/dist/chunk-PBIUCQY3.js +696 -0
- package/dist/chunk-PBIUCQY3.js.map +1 -0
- package/dist/chunk-PD6YECQH.js +845 -0
- package/dist/chunk-PD6YECQH.js.map +1 -0
- package/dist/{chunk-M7IYCTJV.js → chunk-R4LFQGP3.js} +2 -2
- package/dist/chunk-RHJIGDUE.js +21 -0
- package/dist/chunk-RHJIGDUE.js.map +1 -0
- package/dist/{chunk-KP7MUZNX.js → chunk-RLXO27MW.js} +30 -8
- package/dist/chunk-RLXO27MW.js.map +1 -0
- package/dist/{chunk-DFNM3WX2.js → chunk-S44BEV4B.js} +168 -45
- package/dist/chunk-S44BEV4B.js.map +1 -0
- package/dist/chunk-S4S5N4BJ.js +1461 -0
- package/dist/chunk-S4S5N4BJ.js.map +1 -0
- package/dist/{chunk-BZ2SHDN2.js → chunk-SGTRAXXX.js} +3 -3
- package/dist/chunk-SGTRAXXX.js.map +1 -0
- package/dist/{chunk-M2RGJPXX.js → chunk-SJAE5PB5.js} +3 -3
- package/dist/{chunk-JGIWG6SR.js → chunk-SNPNHU3H.js} +3937 -1776
- package/dist/chunk-SNPNHU3H.js.map +1 -0
- package/dist/{chunk-IHVBV5C2.js → chunk-SOOBFXRR.js} +94 -71
- package/dist/chunk-SOOBFXRR.js.map +1 -0
- package/dist/{chunk-ZDTRWK5F.js → chunk-TAHFWKS6.js} +2 -2
- package/dist/chunk-UEFFTVPY.js +9 -0
- package/dist/chunk-UEFFTVPY.js.map +1 -0
- package/dist/{chunk-24VULZ7A.js → chunk-UR5BXLBP.js} +3 -3
- package/dist/chunk-UR5BXLBP.js.map +1 -0
- package/dist/{chunk-DMBALCE2.js → chunk-V2SBGVDO.js} +471 -186
- package/dist/chunk-V2SBGVDO.js.map +1 -0
- package/dist/chunk-VJLWD47W.js +23 -0
- package/dist/chunk-VJLWD47W.js.map +1 -0
- package/dist/{chunk-4CQAV7YB.js → chunk-W647DX5Z.js} +2 -2
- package/dist/{chunk-THATMZXD.js → chunk-WFIIU3YZ.js} +2 -2
- package/dist/{chunk-THATMZXD.js.map → chunk-WFIIU3YZ.js.map} +1 -1
- package/dist/chunk-YZDJMAKL.js +82 -0
- package/dist/chunk-YZDJMAKL.js.map +1 -0
- package/dist/{chunk-3TMODYZV.js → chunk-Z5XH6VHY.js} +5 -5
- package/dist/chunk-Z5XH6VHY.js.map +1 -0
- package/dist/{chunk-BE3HW4FY.js → chunk-ZBBMZMA6.js} +377 -170
- package/dist/chunk-ZBBMZMA6.js.map +1 -0
- package/dist/index.cjs +21224 -11714
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +195 -49
- package/dist/index.d.ts +195 -49
- package/dist/index.js +150 -74
- package/dist/index.js.map +1 -1
- package/dist/{ir-BMP7yxJJ.d.cts → ir-BSosEwc8.d.cts} +1 -1
- package/dist/{ir-DUOz6H-5.d.ts → ir-D-uqwL_4.d.ts} +1 -1
- package/dist/{module-B8CBqIZ_.d.cts → module-Ds4tarcI.d.cts} +230 -140
- package/dist/{module-k7m3txak.d.ts → module-Zd1Gn-Nj.d.ts} +230 -140
- package/package.json +20 -4
- package/dist/ModuleTag-C8FHY_sY.d.ts +0 -93
- package/dist/ModuleTag-EGbgBMpZ.d.cts +0 -93
- package/dist/Observability-COqEvp2C.d.cts +0 -713
- package/dist/Observability-cY4kLn0S.d.ts +0 -713
- package/dist/ReadQuery-BlMwhe-F.d.ts +0 -30
- package/dist/ReadQuery-CL5XlXts.d.cts +0 -30
- package/dist/ReadQuery-SinbStGF.d.cts +0 -38
- package/dist/ReadQuery-SinbStGF.d.ts +0 -38
- package/dist/chunk-24VULZ7A.js.map +0 -1
- package/dist/chunk-3QMIVH35.js +0 -43
- package/dist/chunk-3QMIVH35.js.map +0 -1
- package/dist/chunk-3TMODYZV.js.map +0 -1
- package/dist/chunk-4SO6JMZL.js.map +0 -1
- package/dist/chunk-76WT3HOR.js.map +0 -1
- package/dist/chunk-ANLBCBDC.js.map +0 -1
- package/dist/chunk-AUIR5O6W.js.map +0 -1
- package/dist/chunk-BABLDP24.js.map +0 -1
- package/dist/chunk-BE3HW4FY.js.map +0 -1
- package/dist/chunk-BZ2SHDN2.js.map +0 -1
- package/dist/chunk-CW6T36TN.js.map +0 -1
- package/dist/chunk-DFNM3WX2.js.map +0 -1
- package/dist/chunk-DMBALCE2.js.map +0 -1
- package/dist/chunk-EGK3KN7B.js +0 -406
- package/dist/chunk-EGK3KN7B.js.map +0 -1
- package/dist/chunk-GMPEOUP2.js.map +0 -1
- package/dist/chunk-IHVBV5C2.js.map +0 -1
- package/dist/chunk-JCXGZRMU.js.map +0 -1
- package/dist/chunk-JGIWG6SR.js.map +0 -1
- package/dist/chunk-JWOYLO27.js.map +0 -1
- package/dist/chunk-KIXAU3GM.js +0 -137
- package/dist/chunk-KIXAU3GM.js.map +0 -1
- package/dist/chunk-KL5ACTCT.js +0 -8
- package/dist/chunk-KL5ACTCT.js.map +0 -1
- package/dist/chunk-KP7MUZNX.js.map +0 -1
- package/dist/chunk-M3BFQ7HK.js +0 -13
- package/dist/chunk-M3BFQ7HK.js.map +0 -1
- package/dist/chunk-M3WTHJHJ.js.map +0 -1
- package/dist/chunk-NBD3KUOZ.js.map +0 -1
- package/dist/chunk-NQZ2OSGR.js +0 -151
- package/dist/chunk-NQZ2OSGR.js.map +0 -1
- package/dist/chunk-NZJKFF45.js.map +0 -1
- package/dist/chunk-OFADUJWJ.js.map +0 -1
- package/dist/chunk-OGWBVHB3.js.map +0 -1
- package/dist/chunk-PAYXCY6A.js.map +0 -1
- package/dist/chunk-PYOE4VSI.js.map +0 -1
- package/dist/chunk-QCHIQWAJ.js +0 -21
- package/dist/chunk-RNFE3ML2.js.map +0 -1
- package/dist/chunk-TKZ7MEIA.js +0 -27
- package/dist/chunk-TKZ7MEIA.js.map +0 -1
- package/dist/chunk-TQOBJYDP.js.map +0 -1
- package/dist/chunk-VZB726PE.js +0 -93
- package/dist/chunk-VZB726PE.js.map +0 -1
- package/dist/chunk-W3TEWHLO.js +0 -568
- package/dist/chunk-W3TEWHLO.js.map +0 -1
- package/dist/chunk-YS3AZQ2G.js.map +0 -1
- package/dist/chunk-ZFLHVFUC.js +0 -192
- package/dist/chunk-ZFLHVFUC.js.map +0 -1
- package/dist/chunk-ZFY7U2FR.js.map +0 -1
- package/dist/chunk-ZGDVUPTM.js.map +0 -1
- package/dist/protocol-g_1897M2.d.cts +0 -127
- package/dist/protocol-g_1897M2.d.ts +0 -127
- /package/dist/{chunk-3IYZ5IGG.js.map → chunk-5WKUGEBY.js.map} +0 -0
- /package/dist/{chunk-3RMKLXHX.js.map → chunk-63ZQ5RIN.js.map} +0 -0
- /package/dist/{chunk-EY4NZKDR.js.map → chunk-6Y2TKCNY.js.map} +0 -0
- /package/dist/{chunk-G5ZBFPNU.js.map → chunk-A2RQOJC7.js.map} +0 -0
- /package/dist/{chunk-TAAPQVZN.js.map → chunk-AYELIQXR.js.map} +0 -0
- /package/dist/{chunk-66ALHVEX.js.map → chunk-EB46EYI7.js.map} +0 -0
- /package/dist/{chunk-IPF7E66P.js.map → chunk-FYAODKVP.js.map} +0 -0
- /package/dist/{chunk-M7IYCTJV.js.map → chunk-R4LFQGP3.js.map} +0 -0
- /package/dist/{chunk-M2RGJPXX.js.map → chunk-SJAE5PB5.js.map} +0 -0
- /package/dist/{chunk-ZDTRWK5F.js.map → chunk-TAHFWKS6.js.map} +0 -0
- /package/dist/{chunk-4CQAV7YB.js.map → chunk-W647DX5Z.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/state-trait/build.ts","../src/internal/state-trait/meta.ts","../src/internal/state-trait/model.ts","../src/internal/state-trait/source.ts","../src/internal/state-trait/deps-trace.ts"],"sourcesContent":["import type { Schema } from 'effect'\nimport * as SchemaAST from 'effect/SchemaAST'\nimport {\n type StateTraitProgram,\n type StateTraitSpec,\n type StateTraitEntry,\n type StateTraitGraph,\n type StateTraitGraphEdge,\n type StateTraitGraphNode,\n type StateTraitField,\n type StateTraitFieldTrait,\n type StateTraitPlan,\n type StateTraitPlanStep,\n type StateTraitResource,\n type StateTraitSchemaPathRef,\n collectNodeMeta,\n normalizeSpec,\n} from './model.js'\nimport * as Meta from './meta.js'\nimport {\n compareFieldPath,\n getFieldPathId,\n makeFieldPathIdRegistry,\n normalizeFieldPath,\n type FieldPath,\n type FieldPathId,\n} from '../field-path.js'\nimport { fnv1a32, stableStringify } from '../digest.js'\nimport type { ConvergeStaticIrRegistry } from './converge-ir.js'\n\nconst nowPerf = (): number =>\n typeof globalThis.performance !== 'undefined' && typeof globalThis.performance.now === 'function'\n ? globalThis.performance.now()\n : Date.now()\n\ntype ConvergeWriter = Extract<StateTraitEntry<any, string>, { readonly kind: 'computed' | 'link' }>\n\nconst getConvergeWriterDeps = (entry: ConvergeWriter): ReadonlyArray<string> => {\n if (entry.kind === 'computed') {\n return ((entry.meta as any)?.deps ?? []) as ReadonlyArray<string>\n }\n return [entry.meta.from as string]\n}\n\nconst computeConvergeTopoOrder = (\n writers: ReadonlyArray<ConvergeWriter>,\n): { readonly order: ReadonlyArray<string>; readonly configError?: ConvergeStaticIrRegistry['configError'] } => {\n const writerByPath = new Map<string, ConvergeWriter>()\n for (const entry of writers) {\n const existing = writerByPath.get(entry.fieldPath)\n if (existing) {\n return {\n order: [],\n configError: {\n code: 'MULTIPLE_WRITERS',\n message: `[StateTrait.converge] Multiple writers for field \"${entry.fieldPath}\" (${existing.kind} + ${entry.kind}).`,\n fields: [entry.fieldPath],\n },\n }\n }\n writerByPath.set(entry.fieldPath, entry)\n }\n\n const nodes = new Set<string>()\n for (const entry of writers) {\n nodes.add(entry.fieldPath)\n }\n\n const indegree = new Map<string, number>()\n const forward = new Map<string, Array<string>>()\n\n for (const node of nodes) {\n indegree.set(node, 0)\n forward.set(node, [])\n }\n\n for (const entry of writers) {\n const to = entry.fieldPath\n const deps = getConvergeWriterDeps(entry)\n for (const dep of deps) {\n if (!nodes.has(dep)) continue\n forward.get(dep)!.push(to)\n indegree.set(to, (indegree.get(to) ?? 0) + 1)\n }\n }\n\n const queue: Array<string> = []\n for (const [node, deg] of indegree.entries()) {\n if (deg === 0) queue.push(node)\n }\n\n const order: Array<string> = []\n while (queue.length) {\n const n = queue.shift()!\n order.push(n)\n const outs = forward.get(n)!\n for (const to of outs) {\n const next = (indegree.get(to) ?? 0) - 1\n indegree.set(to, next)\n if (next === 0) queue.push(to)\n }\n }\n\n if (order.length !== nodes.size) {\n const remaining = Array.from(nodes).filter((n) => !order.includes(n))\n return {\n order: [],\n configError: {\n code: 'CYCLE_DETECTED',\n message: `[StateTrait.converge] Cycle detected in computed/link graph: ${remaining.join(', ')}`,\n fields: remaining,\n },\n }\n }\n\n return { order }\n}\n\nconst collectSchemaFieldPaths = (schema: Schema.Schema<any, any>): ReadonlyArray<FieldPath> => {\n const byKey = new Map<string, FieldPath>()\n\n const add = (path: FieldPath): void => {\n const normalized = normalizeFieldPath(path)\n if (!normalized) return\n byKey.set(JSON.stringify(normalized), normalized)\n }\n\n const visit = (ast: SchemaAST.AST, prefix: ReadonlyArray<string>, seen: Set<SchemaAST.AST>): void => {\n let current: SchemaAST.AST = ast\n\n // Unwrap Suspend/Refinement (recursive schema / branded schema).\n while (true) {\n if (SchemaAST.isSuspend(current)) {\n if (seen.has(current)) return\n seen.add(current)\n current = current.f()\n continue\n }\n if (SchemaAST.isRefinement(current)) {\n current = current.from\n continue\n }\n break\n }\n\n if (SchemaAST.isTransformation(current)) {\n visit(current.to, prefix, seen)\n visit(current.from, prefix, seen)\n return\n }\n\n if (SchemaAST.isUnion(current)) {\n for (const t of current.types) {\n visit(t, prefix, seen)\n }\n return\n }\n\n // Array / Tuple: indices do not enter the FieldPathId space; recurse into element types to support `items[0].name -> items.name`.\n if (SchemaAST.isTupleType(current)) {\n for (const e of current.elements) {\n visit(e.type, prefix, seen)\n }\n for (const r of current.rest) {\n visit(r.type, prefix, seen)\n }\n return\n }\n\n if (SchemaAST.isTypeLiteral(current)) {\n for (const ps of current.propertySignatures) {\n const seg = String(ps.name)\n if (!seg) continue\n const next = [...prefix, seg]\n add(next)\n visit(ps.type, next, seen)\n }\n // Index signature (Record<string, T>) can't be enumerated statically: avoid generating misaligned dynamic key paths.\n return\n }\n\n // Any / Unknown / Object / Declaration (open types): cannot enumerate nested paths; stop conservatively.\n }\n\n visit(schema.ast as unknown as SchemaAST.AST, [], new Set())\n return Array.from(byKey.values()).sort(compareFieldPath)\n}\n\nconst buildConvergeIr = (\n stateSchema: Schema.Schema<any, any>,\n entries: ReadonlyArray<StateTraitEntry<any, string>>,\n): ConvergeStaticIrRegistry => {\n const startedAt = nowPerf()\n const generation = 0\n\n const writers = entries.filter((e): e is ConvergeWriter => e.kind === 'computed' || e.kind === 'link')\n\n const writersKey = writers\n .map((entry) => `${entry.kind}:${entry.fieldPath}`)\n .sort()\n .join('|')\n\n const depsKey = writers\n .map((entry) => {\n const deps = getConvergeWriterDeps(entry).slice().sort().join(',')\n const scheduling = (entry.meta as any)?.scheduling === 'deferred' ? 'd' : 'i'\n return `${entry.kind}:${entry.fieldPath}@${scheduling}=>${deps}`\n })\n .sort()\n .join('|')\n\n const writerByPath = new Map<string, ConvergeWriter>()\n for (const entry of writers) {\n writerByPath.set(entry.fieldPath, entry)\n }\n\n const topo = writers.length > 0 ? computeConvergeTopoOrder(writers) : { order: [] as ReadonlyArray<string> }\n const stepsById: Array<ConvergeWriter> = topo.configError ? [] : topo.order.map((path) => writerByPath.get(path)!)\n\n const fieldPathTable = new Map<string, FieldPath>()\n const addPath = (path: FieldPath): void => {\n for (let i = 1; i <= path.length; i++) {\n const prefix = path.slice(0, i)\n const key = JSON.stringify(prefix)\n if (!fieldPathTable.has(key)) fieldPathTable.set(key, prefix)\n }\n }\n\n // 065: FieldPathId semantics must cover all enumerable field paths of stateSchema; otherwise reducer patchPaths can't map and will fall back to dirtyAll.\n for (const schemaPath of collectSchemaFieldPaths(stateSchema)) {\n addPath(schemaPath)\n }\n\n for (const entry of writers) {\n const out = normalizeFieldPath(entry.fieldPath)\n if (out) addPath(out)\n for (const dep of getConvergeWriterDeps(entry)) {\n const depPath = normalizeFieldPath(dep)\n if (depPath) addPath(depPath)\n }\n }\n\n const fieldPaths = Array.from(fieldPathTable.values()).sort(compareFieldPath)\n const fieldPathIdRegistry = makeFieldPathIdRegistry(fieldPaths)\n const fieldPathsKey = fnv1a32(stableStringify(fieldPaths))\n\n const stepOutFieldPathIdByStepId: Array<FieldPathId> = []\n const stepDepsFieldPathIdsByStepId: Array<ReadonlyArray<FieldPathId>> = []\n const stepSchedulingByStepId: Array<'immediate' | 'deferred'> = []\n\n for (const entry of stepsById) {\n const out = normalizeFieldPath(entry.fieldPath)\n const outId = out != null ? getFieldPathId(fieldPathIdRegistry, out) : undefined\n if (outId == null) {\n throw new Error(`[StateTrait.build] Failed to map converge output fieldPath \"${entry.fieldPath}\" to FieldPathId.`)\n }\n\n const depIds: Array<FieldPathId> = []\n for (const dep of getConvergeWriterDeps(entry)) {\n const depPath = normalizeFieldPath(dep)\n if (!depPath) continue\n const depId = getFieldPathId(fieldPathIdRegistry, depPath)\n if (depId != null) depIds.push(depId)\n }\n\n stepOutFieldPathIdByStepId.push(outId)\n stepDepsFieldPathIdsByStepId.push(depIds)\n stepSchedulingByStepId.push((entry.meta as any)?.scheduling === 'deferred' ? 'deferred' : 'immediate')\n }\n\n const topoOrder = stepsById.map((_, i) => i)\n const buildDurationMs = Math.max(0, nowPerf() - startedAt)\n\n return {\n generation,\n writersKey,\n depsKey,\n fieldPathsKey,\n fieldPaths,\n fieldPathIdRegistry,\n ...(topo.configError ? { configError: topo.configError } : null),\n stepsById,\n stepOutFieldPathIdByStepId,\n stepDepsFieldPathIdsByStepId,\n stepSchedulingByStepId,\n topoOrder,\n buildDurationMs,\n }\n}\n\n/**\n * Builds a normalized FieldTrait from a StateTraitEntry.\n *\n * - Currently uses explicit deps for computed/source and link edges; deeper dependency analysis is intentionally not performed.\n * - If we evolve explicit dependency declarations further, extend here.\n */\nconst toFieldTrait = (entry: StateTraitEntry<any, string>): StateTraitFieldTrait => {\n const deps: Array<string> = []\n\n if (entry.kind === 'computed') {\n const meta = entry.meta as any\n const list = meta.deps as ReadonlyArray<string> | undefined\n if (list) deps.push(...list)\n } else if (entry.kind === 'source') {\n const meta = entry.meta as any\n const list = meta.deps as ReadonlyArray<string> | undefined\n if (list) deps.push(...list)\n } else if (entry.kind === 'link') {\n deps.push(entry.meta.from as string)\n } else if (entry.kind === 'check') {\n const meta = entry.meta as any\n const rules = (meta?.rules ?? {}) as Record<string, any>\n for (const name of Object.keys(rules)) {\n const rule = rules[name]\n if (rule && typeof rule === 'object') {\n const list = rule.deps as ReadonlyArray<string> | undefined\n if (list) deps.push(...list)\n }\n }\n }\n\n return {\n fieldId: entry.fieldPath,\n kind: entry.kind,\n // Keep meta identical to Entry.meta at runtime so install can reuse it directly.\n meta: entry.meta as any,\n deps,\n }\n}\n\n/**\n * Builds Field / Node / Edge / Resource sets from normalized entries.\n */\nconst buildGraph = (\n entries: ReadonlyArray<StateTraitEntry<any, string>>,\n nodeMetaByFieldPath: ReadonlyMap<string, Meta.TraitMeta>,\n): {\n readonly graph: StateTraitGraph\n readonly plan: StateTraitPlan\n} => {\n const fieldMap = new Map<string, StateTraitField>()\n const nodes: Array<StateTraitGraphNode> = []\n const edges: Array<StateTraitGraphEdge> = []\n const resourcesById = new Map<string, StateTraitResource>()\n const planSteps: Array<StateTraitPlanStep> = []\n\n const ensureField = (fieldPath: string): StateTraitField => {\n let field = fieldMap.get(fieldPath)\n if (!field) {\n field = {\n id: fieldPath,\n path: fieldPath,\n traits: [],\n }\n fieldMap.set(fieldPath, field)\n }\n return field\n }\n\n for (const entry of entries) {\n const fieldPath = entry.fieldPath\n const field = ensureField(fieldPath)\n const trait = toFieldTrait(entry)\n\n ;(field.traits as Array<StateTraitFieldTrait>).push(trait)\n\n // Build Graph edges and Plan steps by kind.\n if (entry.kind === 'computed') {\n const stepId = `computed:${fieldPath}`\n planSteps.push({\n id: stepId,\n kind: 'computed-update',\n targetFieldPath: fieldPath,\n // Note: the current version does not statically analyze computed dependencies; sourceFieldPaths remains empty.\n })\n // If deps is explicitly declared, add Graph edges (for diagnostics / reverse-closure computation).\n const deps = (entry.meta as any).deps as ReadonlyArray<string> | undefined\n if (deps) {\n for (const dep of deps) {\n ensureField(dep)\n edges.push({\n id: `computed:${dep}->${fieldPath}`,\n from: dep,\n to: fieldPath,\n kind: 'computed',\n })\n }\n }\n } else if (entry.kind === 'link') {\n const from = entry.meta.from as string\n ensureField(from)\n\n const edgeId = `link:${from}->${fieldPath}`\n edges.push({\n id: edgeId,\n from,\n to: fieldPath,\n kind: 'link',\n })\n\n planSteps.push({\n id: `link:${fieldPath}`,\n kind: 'link-propagate',\n targetFieldPath: fieldPath,\n sourceFieldPaths: [from],\n debugInfo: {\n graphEdgeId: edgeId,\n },\n })\n } else if (entry.kind === 'source') {\n const resourceId = entry.meta.resource\n const resourceMeta = Meta.sanitize((entry.meta as any).meta)\n\n const existing = resourcesById.get(resourceId)\n if (existing) {\n const ownerFields = [...existing.ownerFields, fieldPath]\n let meta = existing.meta\n let metaOrigin = existing.metaOrigin\n let metaConflicts = existing.metaConflicts\n\n if (resourceMeta) {\n const merged = Meta.mergeCanonical(\n { meta, origin: metaOrigin, conflicts: metaConflicts },\n { origin: fieldPath, meta: resourceMeta },\n )\n meta = merged.meta\n metaOrigin = merged.origin\n metaConflicts = merged.conflicts\n }\n\n resourcesById.set(resourceId, {\n ...existing,\n ownerFields,\n meta,\n metaOrigin,\n metaConflicts,\n })\n } else {\n resourcesById.set(resourceId, {\n resourceId,\n // Use a simple identifier string for now; may evolve into a structured form based on key rules.\n keySelector: `StateTrait.source@${fieldPath}`,\n ownerFields: [fieldPath],\n meta: resourceMeta,\n metaOrigin: resourceMeta ? fieldPath : undefined,\n })\n }\n\n planSteps.push({\n id: `source:${fieldPath}`,\n kind: 'source-refresh',\n targetFieldPath: fieldPath,\n resourceId,\n keySelectorId: `StateTrait.source@${fieldPath}`,\n })\n\n const deps = (entry.meta as any).deps as ReadonlyArray<string> | undefined\n if (deps) {\n for (const dep of deps) {\n ensureField(dep)\n edges.push({\n id: `source-dep:${dep}->${fieldPath}`,\n from: dep,\n to: fieldPath,\n kind: 'source-dep',\n })\n }\n }\n } else if (entry.kind === 'check') {\n planSteps.push({\n id: `check:${fieldPath}`,\n kind: 'check-validate',\n targetFieldPath: fieldPath,\n })\n\n // If the rule explicitly declares deps, add Graph edges (for ReverseClosure scoped validate).\n if (trait.deps.length > 0) {\n for (const dep of trait.deps) {\n ensureField(dep)\n edges.push({\n id: `check-dep:${dep}->${fieldPath}`,\n from: dep,\n to: fieldPath,\n kind: 'check-dep',\n })\n }\n }\n }\n }\n\n for (const field of fieldMap.values()) {\n nodes.push({\n id: field.id,\n field,\n traits: field.traits,\n meta: nodeMetaByFieldPath.get(field.id),\n })\n }\n\n const graph: StateTraitGraph = {\n _tag: 'StateTraitGraph',\n nodes,\n edges,\n resources: Array.from(resourcesById.values()),\n }\n\n const plan: StateTraitPlan = {\n _tag: 'StateTraitPlan',\n steps: planSteps,\n }\n\n return { graph, plan }\n}\n\n/**\n * Performs a simple cycle detection for link edges.\n *\n * - Only considers edges with kind = 'link'; computed/source do not participate in the first version.\n * - On cycle detection, throws an error with path context to avoid infinite updates at runtime.\n */\nconst assertNoLinkCycles = (edges: ReadonlyArray<StateTraitGraphEdge>): void => {\n const adjacency = new Map<string, string[]>()\n\n for (const edge of edges) {\n if (edge.kind !== 'link') continue\n const list = adjacency.get(edge.from) ?? []\n list.push(edge.to)\n adjacency.set(edge.from, list)\n }\n\n const visited = new Set<string>()\n const stack = new Set<string>()\n\n const dfs = (node: string): void => {\n if (stack.has(node)) {\n throw new Error(\n `[StateTrait.build] link cycle detected at field \"${node}\". ` +\n 'Please check link traits for circular dependencies.',\n )\n }\n if (visited.has(node)) return\n visited.add(node)\n stack.add(node)\n\n const nexts = adjacency.get(node)\n if (nexts) {\n for (const to of nexts) {\n dfs(to)\n }\n }\n\n stack.delete(node)\n }\n\n for (const node of adjacency.keys()) {\n if (!visited.has(node)) {\n dfs(node)\n }\n }\n}\n\nconst collectSchemaPaths = (\n entries: ReadonlyArray<StateTraitEntry<any, string>>,\n): ReadonlyArray<StateTraitSchemaPathRef> => {\n const byKey = new Map<string, StateTraitSchemaPathRef>()\n\n const add = (ref: StateTraitSchemaPathRef): void => {\n if (!ref.path) return\n const k = `${ref.kind}|${ref.entryKind}|${ref.entryFieldPath}|${ref.ruleName ?? ''}|${ref.path}`\n byKey.set(k, ref)\n }\n\n const getCheckWritebackPath = (entry: Extract<StateTraitEntry<any, string>, { readonly kind: 'check' }>): string => {\n const wb = (entry.meta as any)?.writeback\n const p = wb && typeof wb === 'object' ? (wb as any).path : undefined\n const writebackPath = typeof p === 'string' && p.startsWith('errors.') ? p : undefined\n\n if (writebackPath) return writebackPath\n\n const fieldPath = entry.fieldPath\n if (fieldPath.endsWith('[]')) {\n return `errors.${fieldPath.slice(0, -2)}`\n }\n return `errors.${fieldPath}`\n }\n\n for (const entry of entries) {\n add({\n kind: 'fieldPath',\n entryKind: entry.kind,\n entryFieldPath: entry.fieldPath,\n path: entry.fieldPath,\n })\n\n if (entry.kind === 'computed' || entry.kind === 'source') {\n const deps = ((entry.meta as any)?.deps ?? []) as ReadonlyArray<string>\n for (const dep of deps) {\n add({\n kind: 'dep',\n entryKind: entry.kind,\n entryFieldPath: entry.fieldPath,\n path: dep,\n })\n }\n }\n\n if (entry.kind === 'link') {\n add({\n kind: 'link_from',\n entryKind: 'link',\n entryFieldPath: entry.fieldPath,\n path: entry.meta.from as string,\n })\n }\n\n if (entry.kind === 'check') {\n add({\n kind: 'check_writeback',\n entryKind: 'check',\n entryFieldPath: entry.fieldPath,\n path: getCheckWritebackPath(entry),\n })\n\n const rules = ((entry.meta as any)?.rules ?? {}) as Record<string, any>\n for (const name of Object.keys(rules)) {\n const rule = rules[name]\n if (!rule || typeof rule !== 'object') continue\n const deps = (rule.deps ?? []) as ReadonlyArray<string>\n for (const dep of deps) {\n add({\n kind: 'dep',\n entryKind: 'check',\n entryFieldPath: entry.fieldPath,\n ruleName: name,\n path: dep,\n })\n }\n }\n }\n }\n\n return Array.from(byKey.entries())\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map(([, v]) => v)\n}\n\n/**\n * Builds a StateTraitProgram from the given stateSchema and trait spec.\n *\n * - Pure function: does not depend on external Env / global state.\n * - Current implementation focuses on:\n * - Normalizing Spec into entries.\n * - Building a lightweight Graph / Plan from entries.\n * - Running basic cycle detection for link edges.\n *\n * If we later need finer-grained dependency analysis (e.g. static analysis for computed/key),\n * evolve it inside this module without changing the public API surface.\n */\nexport const build = <S extends object>(\n stateSchema: Schema.Schema<S, any>,\n spec: StateTraitSpec<S>,\n): StateTraitProgram<S> => {\n const entries = normalizeSpec(spec) as ReadonlyArray<StateTraitEntry<S, string>>\n const nodeMetaByFieldPath = collectNodeMeta(spec)\n\n // Phase 4 (US2): require explicit deps (Graph/diagnostics/replay treat deps as the single dependency source of truth).\n for (const entry of entries) {\n if (entry.kind === 'computed') {\n const deps = (entry.meta as any).deps as ReadonlyArray<string> | undefined\n if (deps === undefined) {\n throw new Error(\n `[StateTrait.build] Missing explicit deps for computed \"${entry.fieldPath}\". ` +\n 'Please use StateTrait.computed({ deps: [...], get: ... }).',\n )\n }\n }\n if (entry.kind === 'source') {\n const deps = (entry.meta as any).deps as ReadonlyArray<string> | undefined\n if (deps === undefined) {\n throw new Error(\n `[StateTrait.build] Missing explicit deps for source \"${entry.fieldPath}\". ` +\n 'Please provide meta.deps for StateTrait.source({ deps: [...], ... }).',\n )\n }\n }\n if (entry.kind === 'check') {\n const rules = ((entry.meta as any)?.rules ?? {}) as Record<string, any>\n for (const name of Object.keys(rules)) {\n const rule = rules[name]\n if (typeof rule === 'function' || !rule || typeof rule !== 'object') {\n throw new Error(\n `[StateTrait.build] Missing explicit deps for check \"${entry.fieldPath}\" rule \"${name}\". ` +\n 'Please use { deps: [...], validate: ... } form.',\n )\n }\n if ((rule as any).deps === undefined) {\n throw new Error(\n `[StateTrait.build] Missing explicit deps for check \"${entry.fieldPath}\" rule \"${name}\". ` +\n 'Please provide deps: [...].',\n )\n }\n }\n }\n }\n\n const { graph, plan } = buildGraph(entries, nodeMetaByFieldPath)\n\n // Run a cycle check for link edges to avoid obvious configuration errors.\n assertNoLinkCycles(graph.edges)\n\n return {\n stateSchema,\n spec,\n entries: entries as ReadonlyArray<StateTraitEntry<any, string>>,\n graph,\n plan,\n convergeIr: buildConvergeIr(stateSchema as any, entries as ReadonlyArray<StateTraitEntry<any, string>>),\n schemaPaths: collectSchemaPaths(entries as ReadonlyArray<StateTraitEntry<any, string>>),\n }\n}\n","export type TraitMeta = Readonly<{\n readonly label?: string\n readonly description?: string\n readonly tags?: ReadonlyArray<string>\n readonly group?: string\n readonly docsUrl?: string\n readonly cacheGroup?: string\n /**\n * Extension annotations: only accepts `x-*` keys (anchors for capabilities like Phantom Source / Drift Detection).\n *\n * Constraints:\n * - Must be serializable (JSON values).\n * - Must be slim (keep only a few key hints; don't stuff large objects).\n */\n readonly annotations?: Readonly<Record<string, JsonValue>>\n /**\n * Semantic hint: when the same entity (e.g. the same resourceId) has multiple inconsistent meta declarations,\n * the one with canonical=true becomes the \"display canonical\", and others are recorded as conflicts.\n */\n readonly canonical?: boolean\n}>\n\nexport type TraitMetaConflict = Readonly<{\n readonly origin: string\n readonly meta: TraitMeta\n}>\n\nexport type JsonPrimitive = string | number | boolean | null\nexport type JsonValue = JsonPrimitive | ReadonlyArray<JsonValue> | { readonly [key: string]: JsonValue }\n\nconst uniqSortedStrings = (input: ReadonlyArray<string>): ReadonlyArray<string> => {\n const set = new Set<string>()\n for (const item of input) {\n const v = item.trim()\n if (!v) continue\n set.add(v)\n }\n return Array.from(set).sort((a, b) => a.localeCompare(b))\n}\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst sanitizeJsonValue = (input: unknown, depth: number): JsonValue | undefined => {\n if (input === null) return null\n\n if (typeof input === 'string') return input\n if (typeof input === 'boolean') return input\n if (typeof input === 'number') {\n return Number.isFinite(input) ? input : undefined\n }\n\n if (depth >= 6) return undefined\n\n if (Array.isArray(input)) {\n const out: Array<JsonValue> = []\n for (const item of input) {\n const v = sanitizeJsonValue(item, depth + 1)\n if (v !== undefined) out.push(v)\n }\n return out\n }\n\n if (isPlainRecord(input)) {\n const keys = Object.keys(input).sort()\n const out: Record<string, JsonValue> = {}\n for (const key of keys) {\n const v = sanitizeJsonValue(input[key], depth + 1)\n if (v !== undefined) out[key] = v\n }\n return out\n }\n\n return undefined\n}\n\nexport const sanitize = (input: unknown): TraitMeta | undefined => {\n if (input === null || input === undefined) return undefined\n if (typeof input !== 'object' || Array.isArray(input)) return undefined\n\n const record = input as Record<string, unknown>\n const out: Record<string, unknown> = {}\n\n const pickString = (key: keyof TraitMeta): void => {\n const value = record[key as string]\n if (typeof value !== 'string') return\n const trimmed = value.trim()\n if (!trimmed) return\n out[key] = trimmed\n }\n\n pickString('label')\n pickString('description')\n pickString('group')\n pickString('docsUrl')\n pickString('cacheGroup')\n\n const canonical = record.canonical\n if (typeof canonical === 'boolean') {\n out.canonical = canonical\n }\n\n const tagsRaw = record.tags\n if (typeof tagsRaw === 'string') {\n const tags = uniqSortedStrings([tagsRaw])\n if (tags.length > 0) out.tags = tags\n } else if (Array.isArray(tagsRaw)) {\n const tags = uniqSortedStrings(tagsRaw.filter((x): x is string => typeof x === 'string'))\n if (tags.length > 0) out.tags = tags\n }\n\n const annotations: Record<string, JsonValue> = {}\n\n // legacy: allow passing `x-*` keys at the top-level (untyped input), then normalize into `annotations`.\n const annotationKeys = Object.keys(record)\n .filter((k) => k.startsWith('x-'))\n .sort((a, b) => a.localeCompare(b))\n for (const key of annotationKeys) {\n const v = sanitizeJsonValue(record[key], 0)\n if (v !== undefined) annotations[key] = v\n }\n\n // preferred: typed `annotations` field (only accepts `x-*` keys).\n const annotationsRaw = record.annotations\n if (isPlainRecord(annotationsRaw)) {\n const keys = Object.keys(annotationsRaw)\n .filter((k) => k.startsWith('x-'))\n .sort((a, b) => a.localeCompare(b))\n for (const key of keys) {\n const v = sanitizeJsonValue(annotationsRaw[key], 0)\n if (v !== undefined) annotations[key] = v\n }\n }\n\n if (Object.keys(annotations).length > 0) out.annotations = annotations\n\n return Object.keys(out).length > 0 ? (out as TraitMeta) : undefined\n}\n\nconst stableStringify = (meta: TraitMeta): string => {\n const out: Record<string, unknown> = {}\n const keys = Object.keys(meta).sort()\n for (const k of keys) {\n out[k] = (meta as any)[k]\n }\n return JSON.stringify(out)\n}\n\nexport const equals = (a: TraitMeta | undefined, b: TraitMeta | undefined): boolean => {\n if (a === b) return true\n if (!a || !b) return false\n return stableStringify(a) === stableStringify(b)\n}\n\nexport type CanonicalMergeInput = Readonly<{\n readonly meta?: TraitMeta\n readonly origin?: string\n readonly conflicts?: ReadonlyArray<TraitMetaConflict>\n}>\n\nexport type CanonicalMergeResult = Readonly<{\n readonly meta?: TraitMeta\n readonly origin?: string\n readonly conflicts?: ReadonlyArray<TraitMetaConflict>\n}>\n\nexport const mergeCanonical = (\n current: CanonicalMergeInput,\n incoming: Readonly<{ readonly origin: string; readonly meta: TraitMeta }>,\n): CanonicalMergeResult => {\n const existing = current.meta\n if (!existing) {\n return {\n meta: incoming.meta,\n origin: incoming.origin,\n conflicts: current.conflicts,\n }\n }\n\n if (equals(existing, incoming.meta)) {\n return current\n }\n\n const conflicts: Array<TraitMetaConflict> = [...((current.conflicts ?? []) as ReadonlyArray<TraitMetaConflict>)]\n\n const push = (conflict: TraitMetaConflict): void => {\n const exists = conflicts.some((c) => c.origin === conflict.origin && equals(c.meta, conflict.meta))\n if (!exists) conflicts.push(conflict)\n }\n\n const existingCanonical = existing.canonical === true\n const incomingCanonical = incoming.meta.canonical === true\n\n if (!existingCanonical && incomingCanonical) {\n push({\n origin: current.origin ?? 'unknown',\n meta: existing,\n })\n return {\n meta: incoming.meta,\n origin: incoming.origin,\n conflicts,\n }\n }\n\n push({\n origin: incoming.origin,\n meta: incoming.meta,\n })\n\n return {\n meta: existing,\n origin: current.origin ?? incoming.origin,\n conflicts,\n }\n}\n","import type { Schema } from 'effect'\nimport type { StateAtPath, StateFieldPath } from './field-path.js'\nimport type { DirtyAllReason } from '../field-path.js'\nimport * as Meta from './meta.js'\nimport type { ConvergeStaticIrRegistry } from './converge-ir.js'\nimport type { ConvergeExecIr } from './converge-exec-ir.js'\n\n// StateTrait core model.\n// Keep the field semantics aligned with data-model.md / references/state-trait-core.md.\n\n/**\n * StateTraitSpec<S>:\n * - The standard shape for the `traits` slot in a Module blueprint.\n * - Keys are constrained by StateFieldPath<S>; values are declarations for the corresponding scope (Entry / Node / List).\n */\nexport type StateTraitSpec<S> = S extends object\n ? {\n [Path in StateFieldPath<S> | '$root']?: StateTraitSpecValue<S, Path>\n }\n : never\n\nexport type StateTraitKind = 'computed' | 'source' | 'link' | 'check'\n\n/**\n * TraitConvergeScheduling:\n * - Scheduling semantics for converge/dirty-check (043): decides whether a step must converge within each transaction window.\n * - Default `immediate` (keeps legacy behavior); `deferred` takes effect only with explicit declaration + time-slicing enabled.\n */\nexport type TraitConvergeScheduling = 'immediate' | 'deferred'\n\nexport interface ComputedMeta<S, P> {\n /**\n * Explicit dependency field paths (required):\n *\n * - deps is the single source of truth for dependencies: Graph/ReverseClosure/incremental scheduling/perf optimizations rely on deps only.\n * - In the DSL, `StateTrait.computed({ deps, get })` uses deps-as-args; it does not expose `(state) => ...`.\n * - During build, `get(...depsValues)` is lowered into `derive(state)` for runtime execution, but the dependency read-set remains deps-based.\n * - In dev-mode, if actual reads in `derive(state)` disagree with deps, a `deps_mismatch` diagnostic warning is emitted.\n *\n * - For root scope: deps are StateFieldPath<State>.\n * - For list.item scope: deps are StateFieldPath<Item> (relative paths; build will prefix them).\n */\n readonly deps: ReadonlyArray<StateFieldPath<S>>\n readonly derive: (state: Readonly<S>) => StateAtPath<S, P>\n /**\n * Optional: equality predicate (used to skip no-op writebacks).\n */\n readonly equals?: (prev: StateAtPath<S, P>, next: StateAtPath<S, P>) => boolean\n /**\n * Converge scheduling (043): defaults to immediate.\n */\n readonly scheduling?: TraitConvergeScheduling\n}\n\nexport interface SourceMeta<S, P> {\n readonly deps: ReadonlyArray<StateFieldPath<S>>\n /**\n * Logical resource identifier (e.g. \"user/profile\").\n *\n * - In the StateTrait.source DSL, `resource` is stored here during build.\n * - data-model.md calls it resourceId; we keep the DSL naming here to avoid confusion.\n */\n readonly resource: string\n /**\n * Rule for computing the key required to access the resource.\n *\n * - deps is the single source of truth for dependencies: Graph/ReverseClosure/incremental scheduling/perf optimizations rely on deps only.\n * - In the DSL, `StateTrait.source({ deps, key })` uses deps-as-args; it does not expose `(state) => ...`.\n * - During build, `key(...depsValues)` is lowered into `key(state)` for runtime execution, but the dependency read-set remains deps-based.\n *\n * - Returning undefined means the resource is inactive under the current state (should be recycled to idle).\n */\n readonly key: (state: Readonly<S>) => unknown\n readonly triggers?: ReadonlyArray<'onMount' | 'onKeyChange' | 'manual'>\n readonly debounceMs?: number\n readonly concurrency?: 'switch' | 'exhaust-trailing'\n /**\n * Serializable metadata for devtools/docs (whitelisted fields).\n */\n readonly meta?: Meta.TraitMeta\n /**\n * Reserved: build may populate the field path this trait is attached to, for easier debugging.\n */\n readonly _fieldPath?: P\n}\n\nexport interface LinkMeta<S> {\n /**\n * Source field path (also constrained by StateFieldPath<S>).\n */\n readonly from: StateFieldPath<S>\n /**\n * Converge scheduling (043): defaults to immediate.\n */\n readonly scheduling?: TraitConvergeScheduling\n}\n\nexport type CheckRule<Input = unknown, Ctx = unknown> = {\n readonly deps: ReadonlyArray<string>\n /**\n * validateOn:\n * - Affects only auto validation phases (onChange/onBlur); submit/manual always run.\n * - Empty array disables auto validation (only submit/manual run).\n */\n readonly validateOn?: ReadonlyArray<'onChange' | 'onBlur'>\n readonly validate: (input: Input, ctx: Ctx) => unknown\n readonly meta?: Meta.TraitMeta\n}\n\nexport interface CheckMeta<Input = unknown, Ctx = unknown> {\n /**\n * Named rule set (used for deterministic merge and diagnostics display).\n */\n readonly rules: Readonly<Record<string, CheckRule<Input, Ctx>>>\n /**\n * Error-tree writeback (Phase 2: structure only; concrete writeback semantics land in later phases).\n */\n readonly writeback?: {\n readonly kind: 'errors'\n readonly path?: string\n }\n}\n\n/**\n * StateTraitEntry<S, P>:\n * - A single Trait configuration attached to a field path P.\n * - kind and meta always come together and are used to dispatch behavior during build/install.\n */\nexport type StateTraitEntry<S = unknown, P extends string = StateFieldPath<S>> =\n | {\n readonly fieldPath: P\n readonly kind: 'computed'\n readonly meta: ComputedMeta<S, P>\n }\n | {\n readonly fieldPath: P\n readonly kind: 'source'\n readonly meta: SourceMeta<S, P>\n }\n | {\n readonly fieldPath: P\n readonly kind: 'link'\n readonly meta: LinkMeta<S>\n }\n | {\n readonly fieldPath: P\n readonly kind: 'check'\n readonly meta: CheckMeta<unknown, unknown>\n }\n\nexport interface StateTraitNode<Input = unknown, Ctx = unknown> {\n readonly _tag: 'StateTraitNode'\n readonly computed?: StateTraitEntry<Input, any> | Readonly<Record<string, StateTraitEntry<Input, any>>>\n readonly source?: StateTraitEntry<Input, any> | Readonly<Record<string, StateTraitEntry<Input, any>>>\n readonly link?: StateTraitEntry<Input, any> | Readonly<Record<string, StateTraitEntry<Input, any>>>\n readonly check?: Readonly<Record<string, CheckRule<Input, Ctx>>>\n readonly meta?: Meta.TraitMeta\n}\n\nexport interface StateTraitList<Item = unknown> {\n readonly _tag: 'StateTraitList'\n readonly item?: StateTraitNode<Item, any>\n readonly list?: StateTraitNode<ReadonlyArray<Item>, any>\n readonly identityHint?: {\n readonly trackBy?: string\n }\n}\n\nexport type StateTraitSpecValue<S, P extends string> =\n | StateTraitEntry<S, P>\n | StateTraitNode<any, any>\n | StateTraitList<any>\n\n/**\n * StateTraitField:\n * - Represents a field node in State (whether or not traits are attached).\n * - Normalized from StateTraitSpec during build.\n */\nexport interface StateTraitField {\n readonly id: string\n readonly path: string\n readonly displayName?: string\n readonly valueType?: string\n readonly traits: ReadonlyArray<StateTraitFieldTrait>\n}\n\n/**\n * StateTraitFieldTrait:\n * - A structured description of a field trait (computed / source / link).\n * - meta matches StateTraitEntry.meta; deps is the set of field paths this trait depends on.\n */\nexport interface StateTraitFieldTrait {\n readonly fieldId: string\n readonly kind: StateTraitKind\n readonly meta:\n | ComputedMeta<unknown, string>\n | SourceMeta<unknown, string>\n | LinkMeta<unknown>\n | CheckMeta<unknown, unknown>\n readonly deps: ReadonlyArray<string>\n}\n\n/**\n * StateTraitResource:\n * - Describes the logical resource metadata that a source trait depends on.\n * - Concrete ResourceSpec implementation lives in the Resource namespace; this keeps only trait-perspective dependency info.\n */\nexport interface StateTraitResource {\n readonly resourceId: string\n readonly keySelector: string\n readonly keyExample?: unknown\n readonly ownerFields: ReadonlyArray<string>\n readonly meta?: Meta.TraitMeta\n readonly metaOrigin?: string\n readonly metaConflicts?: ReadonlyArray<Meta.TraitMetaConflict>\n}\n\n/**\n * Graph Node / Edge:\n * - Nodes typically correspond to fields.\n * - Edges represent dependencies between fields, or between fields and resources.\n */\nexport interface StateTraitGraphNode {\n readonly id: string\n readonly field: StateTraitField\n readonly traits: ReadonlyArray<StateTraitFieldTrait>\n readonly meta?: Meta.TraitMeta\n}\n\nexport interface StateTraitGraphEdge {\n readonly id: string\n readonly from: string\n readonly to: string\n readonly kind: 'computed' | 'link' | 'source-dep' | 'check-dep'\n}\n\n/**\n * StateTraitGraph:\n * - Structural view of the StateTrait engine: a graph of nodes and dependency edges.\n * - Used by Devtools / Studio / Runtime for structural analysis and visualization.\n */\nexport interface StateTraitGraph {\n readonly _tag: 'StateTraitGraph'\n readonly nodes: ReadonlyArray<StateTraitGraphNode>\n readonly edges: ReadonlyArray<StateTraitGraphEdge>\n readonly resources: ReadonlyArray<StateTraitResource>\n readonly meta?: {\n readonly moduleId?: string\n readonly version?: string\n }\n}\n\n/**\n * StateTraitPlanStep:\n * - The smallest instruction unit used by StateTrait.install / Runtime execution.\n * - Derived from the graph; used at runtime to install watchers or trigger external calls.\n */\nexport interface StateTraitPlanStep {\n readonly id: string\n readonly kind: 'computed-update' | 'link-propagate' | 'source-refresh' | 'check-validate'\n readonly targetFieldPath?: string\n readonly sourceFieldPaths?: ReadonlyArray<string>\n readonly resourceId?: string\n readonly keySelectorId?: string\n readonly debugInfo?: {\n readonly graphNodeId?: string\n readonly graphEdgeId?: string\n }\n}\n\n/**\n * StateTraitPlan:\n * - Execution plan summarizing all trait behaviors for a module.\n * - install mounts behaviors onto Bound API / EffectOp pipelines according to the plan.\n */\nexport interface StateTraitPlan {\n readonly _tag: 'StateTraitPlan'\n readonly moduleId?: string\n readonly steps: ReadonlyArray<StateTraitPlanStep>\n readonly meta?: Record<string, unknown>\n}\n\nexport type StateTraitSchemaPathKind = 'fieldPath' | 'dep' | 'link_from' | 'check_writeback'\n\nexport interface StateTraitSchemaPathRef {\n readonly kind: StateTraitSchemaPathKind\n readonly entryKind: StateTraitKind\n readonly entryFieldPath: string\n readonly path: string\n readonly ruleName?: string\n}\n\n/**\n * StateTraitProgram<S>:\n * - Program output of the StateTrait engine; the unified entrypoint for Runtime / Devtools.\n * - stateSchema and spec preserve original inputs; graph/plan are internal IR.\n */\nexport interface StateTraitProgram<S> {\n readonly stateSchema: Schema.Schema<S, any>\n readonly spec: StateTraitSpec<S>\n /**\n * Program.entries:\n * - Minimal rule set normalized from spec (including node/list/$root) during build.\n * - Phase 2 focuses on a readable/diagnosable structure; later phases add execution and converge semantics.\n */\n readonly entries: ReadonlyArray<StateTraitEntry<any, string>>\n readonly graph: StateTraitGraph\n readonly plan: StateTraitPlan\n readonly convergeIr?: ConvergeStaticIrRegistry\n readonly convergeExecIr?: ConvergeExecIr\n /**\n * schemaPaths:\n * - Path references that must exist in stateSchema, collected from entries during build; dev-only diagnostics (e.g. schema_mismatch).\n * - When diagnostics=off, validation can be skipped entirely to keep near-zero cost.\n */\n readonly schemaPaths?: ReadonlyArray<StateTraitSchemaPathRef>\n}\n\n/**\n * Build a normalized entry list from StateTraitSpec.\n *\n * - Phase 2: supports structural expansion of node/list/$root and fills/prefixes fieldPath/deps when necessary.\n * - Later phases may extend validation here (e.g. detecting duplicates, override rules, etc.).\n */\nexport const normalizeSpec = <S>(spec: StateTraitSpec<S>): ReadonlyArray<StateTraitEntry<any, string>> => {\n const entries: Array<StateTraitEntry<any, string>> = []\n\n const isNode = (value: unknown): value is StateTraitNode<any, any> =>\n typeof value === 'object' && value !== null && (value as any)._tag === 'StateTraitNode'\n\n const isList = (value: unknown): value is StateTraitList<any> =>\n typeof value === 'object' && value !== null && (value as any)._tag === 'StateTraitList'\n\n const joinPath = (prefix: string, suffix: string): string => {\n if (!prefix) return suffix\n if (!suffix) return prefix\n return `${prefix}.${suffix}`\n }\n\n const prefixDeps = (deps: ReadonlyArray<string> | undefined, prefix: string): ReadonlyArray<string> => {\n if (!deps || deps.length === 0) return []\n return deps.map((d) => (prefix ? joinPath(prefix, d) : d))\n }\n\n const normalizeEntry = (\n entry: StateTraitEntry<any, string>,\n fieldPath: string,\n depPrefix: string,\n ): StateTraitEntry<any, string> => {\n if (entry.kind === 'computed') {\n const meta = entry.meta as any\n const rawDeps = meta.deps as ReadonlyArray<string> | undefined\n const deps = rawDeps !== undefined ? prefixDeps(rawDeps, depPrefix) : undefined\n return {\n ...(entry as any),\n fieldPath,\n meta: { ...meta, deps },\n }\n }\n if (entry.kind === 'source') {\n const meta = entry.meta as any\n const rawDeps = meta.deps as ReadonlyArray<string> | undefined\n const deps = rawDeps !== undefined ? prefixDeps(rawDeps, depPrefix) : undefined\n return {\n ...(entry as any),\n fieldPath,\n meta: { ...meta, deps, _fieldPath: fieldPath },\n }\n }\n if (entry.kind === 'link') {\n const meta = entry.meta as any\n const from = prefixDeps([meta.from as string], depPrefix)[0] ?? meta.from\n return {\n ...(entry as any),\n fieldPath,\n meta: { ...meta, from },\n }\n }\n // check: Phase 2 adjusts fieldPath only; deps are still collected from meta.rules during build.\n return {\n ...(entry as any),\n fieldPath,\n }\n }\n\n const expandNode = (\n scopeId: string,\n joinPrefix: string,\n node: StateTraitNode<any, any>,\n options?: {\n /**\n * Prefix for check deps: default semantics for list-scope checks (deps are relative to a row item rather than the list root).\n *\n * - item scope: depsPrefix = `${listPath}[]` (matches joinPrefix).\n * - list scope: fieldPath = `${listPath}`, but depsPrefix should be `${listPath}[]`.\n */\n readonly checkDepsPrefix?: string\n },\n ): void => {\n const addEntry = (relativeTarget: string, raw: StateTraitEntry<any, string>): void => {\n const rel = (raw as any).fieldPath ?? relativeTarget\n const fieldPath = joinPrefix ? joinPath(joinPrefix, String(rel)) : String(rel)\n entries.push(normalizeEntry(raw, fieldPath, joinPrefix))\n }\n\n const expandMaybeRecord = (\n value: StateTraitEntry<any, any> | Readonly<Record<string, StateTraitEntry<any, any>>> | undefined,\n ): void => {\n if (!value) return\n if (typeof (value as any).kind === 'string') {\n addEntry('', value as any)\n return\n }\n const record = value as Readonly<Record<string, StateTraitEntry<any, any>>>\n for (const key in record) {\n if (!Object.prototype.hasOwnProperty.call(record, key)) continue\n const entry = record[key]\n if (!entry) continue\n addEntry(key, entry as any)\n }\n }\n\n expandMaybeRecord(node.computed)\n expandMaybeRecord(node.source)\n expandMaybeRecord(node.link)\n\n if (node.check) {\n const rules: Record<string, CheckRule<any, any>> = {}\n const checkDepsPrefix = options?.checkDepsPrefix ?? (joinPrefix.endsWith('[]') ? joinPrefix : '')\n\n const prefixCheckDeps = (deps: ReadonlyArray<string> | undefined): ReadonlyArray<string> => {\n if (!deps || deps.length === 0) return []\n return deps.map((d) => (d === '' ? scopeId : checkDepsPrefix ? joinPath(checkDepsPrefix, d) : d))\n }\n for (const name of Object.keys(node.check)) {\n const rule = (node.check as any)[name] as CheckRule<any, any>\n if (typeof rule === 'function') {\n rules[name] = rule\n continue\n }\n if (rule && typeof rule === 'object') {\n const meta = Meta.sanitize((rule as any).meta)\n rules[name] = {\n ...rule,\n deps: prefixCheckDeps(rule.deps),\n meta,\n }\n continue\n }\n // Invalid input: ignore (later phases may promote this into a build-time config error).\n }\n\n entries.push({\n fieldPath: scopeId,\n kind: 'check',\n meta: {\n rules,\n writeback: { kind: 'errors' },\n },\n } as StateTraitEntry<any, any>)\n }\n }\n\n for (const key in spec) {\n if (!Object.prototype.hasOwnProperty.call(spec, key)) continue\n const raw = spec[key as keyof typeof spec] as StateTraitSpecValue<S, any> | undefined\n if (!raw) continue\n\n if (isList(raw)) {\n const listPath = key\n if (raw.item) {\n expandNode(`${listPath}[]`, `${listPath}[]`, raw.item)\n }\n if (raw.list) {\n expandNode(listPath, listPath, raw.list, {\n checkDepsPrefix: `${listPath}[]`,\n })\n }\n continue\n }\n\n if (isNode(raw)) {\n if (key === '$root') {\n expandNode('$root', '', raw)\n } else {\n expandNode(key, key, raw)\n }\n continue\n }\n\n const entry = raw as any as StateTraitEntry<any, string>\n const fieldPath = (entry as any).fieldPath ?? key\n entries.push(normalizeEntry(entry, String(fieldPath), ''))\n }\n\n return entries\n}\n\n/**\n * collectNodeMeta:\n * - Extract StateTraitNode.meta (whitelisted fields) from StateTraitSpec for devtools structural display.\n * - meta is for diagnostics/display only and does not participate in runtime semantics.\n */\nexport const collectNodeMeta = <S>(spec: StateTraitSpec<S>): ReadonlyMap<string, Meta.TraitMeta> => {\n const out = new Map<string, Meta.TraitMeta>()\n\n const isNode = (value: unknown): value is StateTraitNode<any, any> =>\n typeof value === 'object' && value !== null && (value as any)._tag === 'StateTraitNode'\n\n const isList = (value: unknown): value is StateTraitList<any> =>\n typeof value === 'object' && value !== null && (value as any)._tag === 'StateTraitList'\n\n const add = (scopeId: string, node: StateTraitNode<any, any>): void => {\n const meta = Meta.sanitize(node.meta)\n if (meta) out.set(scopeId, meta)\n }\n\n for (const key in spec) {\n if (!Object.prototype.hasOwnProperty.call(spec, key)) continue\n const raw = spec[key as keyof typeof spec] as StateTraitSpecValue<S, any> | undefined\n if (!raw) continue\n\n if (isList(raw)) {\n const listPath = key\n if (raw.item) add(`${listPath}[]`, raw.item)\n if (raw.list) add(listPath, raw.list)\n continue\n }\n\n if (isNode(raw)) {\n if (key === '$root') add('$root', raw)\n else add(key, raw)\n continue\n }\n }\n\n return out\n}\n\n// ---- Converge (013) evidence model ----\n\nexport type TraitConvergeRequestedMode = 'auto' | 'full' | 'dirty'\nexport type TraitConvergeExecutedMode = 'full' | 'dirty'\nexport type TraitConvergeOutcome = 'Converged' | 'Noop' | 'Degraded'\n\nexport type TraitConvergeConfigScope = 'provider' | 'runtime_module' | 'runtime_default' | 'builtin'\n\nexport type TraitConvergeReason =\n | 'cold_start'\n | 'cache_hit'\n | 'cache_miss'\n | 'budget_cutoff'\n | 'near_full'\n | 'unknown_write'\n | 'dirty_all'\n | 'generation_bumped'\n | 'low_hit_rate_protection'\n | 'module_override'\n | 'time_slicing_immediate'\n | 'time_slicing_deferred'\n\nexport interface TraitConvergeStepStats {\n readonly totalSteps: number\n readonly executedSteps: number\n readonly skippedSteps: number\n readonly changedSteps: number\n readonly affectedSteps?: number\n}\n\nexport interface TraitConvergeDirtySummary {\n readonly dirtyAll: boolean\n readonly reason?: DirtyAllReason\n readonly rootCount?: number\n readonly rootIds?: ReadonlyArray<number>\n readonly rootIdsTruncated?: boolean\n}\n\nexport interface TraitConvergePlanCacheEvidence {\n readonly capacity: number\n readonly size: number\n readonly hits: number\n readonly misses: number\n readonly evicts: number\n readonly hit: boolean\n readonly keySize?: number\n readonly missReason?: 'cold_start' | 'generation_bumped' | 'not_cached' | 'unknown'\n readonly disabled?: boolean\n readonly disableReason?: 'low_hit_rate' | 'generation_thrash' | 'manual_override' | 'unknown'\n}\n\nexport type TraitConvergeGenerationBumpReason =\n | 'writers_changed'\n | 'deps_changed'\n | 'logic_installed'\n | 'logic_uninstalled'\n | 'imports_changed'\n | 'unknown'\n\nexport interface TraitConvergeGenerationEvidence {\n readonly generation: number\n readonly generationBumpCount?: number\n readonly lastBumpReason?: TraitConvergeGenerationBumpReason\n}\n\nexport interface TraitConvergeStaticIrEvidence {\n readonly fieldPathCount: number\n readonly stepCount: number\n readonly buildDurationMs?: number\n}\n\nexport interface TraitConvergeHotspot {\n readonly kind?: string\n readonly stepId: number\n readonly outFieldPathId?: number\n readonly durationMs: number\n readonly changed: boolean\n}\n\nexport interface TraitConvergeTimeSlicingSummary {\n readonly scope: 'all' | 'immediate' | 'deferred'\n readonly immediateStepCount: number\n readonly deferredStepCount: number\n}\n\nexport interface TraitConvergeDiagnosticsSamplingSummary {\n /**\n * Deterministic sampling: use stable txnSeq as an anchor and sample every N transactions.\n * - sampled=true means this invocation captured per-step timings and produced hotspots.\n */\n readonly strategy: 'txnSeq_interval'\n readonly sampleEveryN: number\n readonly topK: number\n readonly sampled: boolean\n}\n\nexport interface TraitConvergeDecisionSummary {\n readonly requestedMode: TraitConvergeRequestedMode\n readonly executedMode: TraitConvergeExecutedMode\n readonly outcome: TraitConvergeOutcome\n readonly configScope: TraitConvergeConfigScope\n readonly staticIrDigest: string\n readonly executionBudgetMs: number\n readonly executionDurationMs: number\n readonly decisionBudgetMs?: number\n readonly decisionDurationMs?: number\n readonly reasons: ReadonlyArray<TraitConvergeReason>\n readonly stepStats: TraitConvergeStepStats\n readonly dirty?: TraitConvergeDirtySummary\n readonly cache?: TraitConvergePlanCacheEvidence\n readonly generation?: TraitConvergeGenerationEvidence\n readonly staticIr?: TraitConvergeStaticIrEvidence\n readonly timeSlicing?: TraitConvergeTimeSlicingSummary\n readonly thresholds?: { readonly floorRatio?: number }\n readonly diagnosticsSampling?: TraitConvergeDiagnosticsSamplingSummary\n readonly top3?: ReadonlyArray<TraitConvergeHotspot>\n}\n","import { Effect, Fiber, FiberRef, Option } from 'effect'\nimport { create } from 'mutative'\nimport * as EffectOp from '../effect-op.js'\nimport { Snapshot, internal as ResourceInternal, keyHash as hashKey } from '../resource.js'\nimport * as EffectOpCore from '../runtime/core/EffectOpCore.js'\nimport * as Debug from '../runtime/core/DebugSink.js'\nimport * as TaskRunner from '../runtime/core/TaskRunner.js'\nimport { isDevEnv, ReplayModeConfigTag } from '../runtime/core/env.js'\nimport * as ReplayLog from '../runtime/core/ReplayLog.js'\nimport type { PatchReason } from '../runtime/core/StateTransaction.js'\nimport type { FieldPath, FieldPathId } from '../field-path.js'\nimport { normalizeFieldPath } from '../field-path.js'\nimport type { BoundApi } from '../runtime/core/module.js'\nimport { getBoundInternals } from '../runtime/core/runtimeInternalsAccessor.js'\nimport { RunSessionTag } from '../observability/runSession.js'\nimport * as DepsTrace from './deps-trace.js'\nimport * as RowId from './rowid.js'\nimport type { StateTraitEntry, StateTraitPlanStep, StateTraitProgram } from './model.js'\n\nexport interface SourceSyncContext<S> {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly getDraft: () => S\n readonly setDraft: (next: S) => void\n readonly recordPatch: (\n path: string | FieldPath | FieldPathId | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ) => void\n}\n\nconst onceInRunSession = (key: string): Effect.Effect<boolean, never, any> =>\n Effect.serviceOption(RunSessionTag).pipe(\n Effect.map((maybe) => (Option.isSome(maybe) ? maybe.value.local.once(key) : true)),\n )\n\nconst formatList = (items: ReadonlyArray<string>, limit = 10): string => {\n if (items.length === 0) return ''\n if (items.length <= limit) return items.join(', ')\n return `${items.slice(0, limit).join(', ')}, …(+${items.length - limit})`\n}\n\nconst emitDepsMismatch = (params: {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly kind: 'computed' | 'source'\n readonly fieldPath: string\n readonly diff: DepsTrace.DepsDiff\n}): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const key = `${params.instanceId ?? 'unknown'}::${params.kind}::${params.fieldPath}`\n const shouldEmit = yield* onceInRunSession(`deps_mismatch:${key}`)\n if (!shouldEmit) return\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: params.moduleId,\n instanceId: params.instanceId,\n code: 'state_trait::deps_mismatch',\n severity: 'warning',\n message:\n `[deps] ${params.kind} \"${params.fieldPath}\" declared=[${formatList(params.diff.declared)}] ` +\n `reads=[${formatList(params.diff.reads)}] missing=[${formatList(params.diff.missing)}] ` +\n `unused=[${formatList(params.diff.unused)}]`,\n hint:\n 'deps is the single source of truth for dependencies: incremental scheduling / reverse closures / performance optimizations rely on deps only. ' +\n 'Keep deps consistent with actual reads; if you really depend on the whole object, declare a coarser-grained dep (e.g. \"profile\") to cover sub-field reads.',\n kind: `deps_mismatch:${params.kind}`,\n })\n })\n\nconst getMiddlewareStack = (): Effect.Effect<EffectOp.MiddlewareStack, never, any> =>\n Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag).pipe(\n Effect.map((maybe) => (Option.isSome(maybe) ? maybe.value.stack : [])),\n )\n\nconst recordTraitPatch = (\n bound: BoundApi<any, any>,\n path: string,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n): void => {\n const normalized = normalizeFieldPath(path) ?? []\n try {\n const internals = getBoundInternals(bound as any)\n internals.txn.recordStatePatch(normalized, reason, from, to, traitNodeId)\n } catch {\n // no-op for legacy/mocked bound\n }\n}\n\nconst recordReplayEvent = (bound: BoundApi<any, any>, event: ReplayLog.ReplayLogEvent): void => {\n try {\n const internals = getBoundInternals(bound as any)\n internals.txn.recordReplayEvent(event)\n } catch {\n // no-op for legacy/mocked bound\n }\n}\n\nconst getBoundScope = (bound: BoundApi<any, any>): { readonly moduleId?: string; readonly instanceId?: string } => {\n try {\n const internals = getBoundInternals(bound as any)\n return { moduleId: internals.moduleId, instanceId: internals.instanceId }\n } catch {\n return { moduleId: undefined, instanceId: undefined }\n }\n}\n\nconst setSnapshotInTxn = (\n bound: BoundApi<any, any>,\n fieldPath: string,\n next: unknown,\n reason: PatchReason,\n stepId: string,\n traitNodeId?: string,\n): Effect.Effect<boolean, never, any> =>\n Effect.gen(function* () {\n let wrote = false\n yield* bound.state.mutate((draft) => {\n const prev = RowId.getAtPath(draft, fieldPath)\n if (Object.is(prev, next)) return\n wrote = true\n RowId.setAtPathMutating(draft, fieldPath, next)\n recordTraitPatch(bound, fieldPath, reason, prev, next, traitNodeId)\n })\n return wrote\n })\n\nconst writebackIfCurrentKeyHash = (\n bound: BoundApi<any, any>,\n fieldPath: string,\n keyHash: string,\n next: unknown,\n reason: PatchReason,\n stepId: string,\n traitNodeId?: string,\n replayEvent?: ReplayLog.ReplayLogEvent,\n): Effect.Effect<boolean, never, any> =>\n Effect.gen(function* () {\n let wrote = false\n yield* bound.state.mutate((draft) => {\n const current = RowId.getAtPath(draft, fieldPath)\n const currentKeyHash = current && typeof current === 'object' ? (current as any).keyHash : undefined\n if (currentKeyHash !== keyHash) return\n\n const prev = current\n if (Object.is(prev, next)) return\n\n wrote = true\n RowId.setAtPathMutating(draft, fieldPath, next)\n if (replayEvent) {\n recordReplayEvent(bound, replayEvent)\n }\n recordTraitPatch(bound, fieldPath, reason, prev, next, traitNodeId)\n })\n return wrote\n })\n\n/**\n * syncIdleInTransaction:\n * - Synchronously evaluate all source.key(state) within the transaction window.\n * - If a key becomes empty (undefined), synchronously reset the field to an idle snapshot (avoid tearing).\n */\nexport const syncIdleInTransaction = <S extends object>(\n program: StateTraitProgram<S>,\n ctx: SourceSyncContext<S>,\n): Effect.Effect<void> =>\n Effect.sync(() => {\n const draft = ctx.getDraft() as any\n const updates: Array<{ readonly fieldPath: string; readonly prev: unknown }> = []\n\n for (const entry of program.entries) {\n if (entry.kind !== 'source') continue\n const fieldPath = entry.fieldPath\n const listItem = RowId.parseListItemFieldPath(fieldPath)\n\n if (listItem) {\n // list.item scope: evaluate key per row by index, and synchronously write back idle for inactive rows.\n const listValue = RowId.getAtPath(draft, listItem.listPath)\n const items: ReadonlyArray<unknown> = Array.isArray(listValue) ? listValue : []\n\n for (let index = 0; index < items.length; index++) {\n const item = items[index]\n\n let key: unknown\n try {\n key = (entry.meta as any).key(item)\n } catch {\n continue\n }\n\n if (key !== undefined) continue\n\n const concretePath = RowId.toListItemValuePath(listItem.listPath, index, listItem.itemPath)\n const prev = RowId.getAtPath(draft, concretePath)\n const prevStatus = prev && typeof prev === 'object' ? (prev as any).status : undefined\n if (prevStatus === 'idle') {\n const data = (prev as any)?.data\n const error = (prev as any)?.error\n if (data === undefined && error === undefined) {\n continue\n }\n }\n\n updates.push({ fieldPath: concretePath, prev })\n }\n\n continue\n }\n\n let key: unknown\n try {\n key = (entry.meta as any).key(draft)\n } catch {\n continue\n }\n\n if (key !== undefined) continue\n\n const prev = RowId.getAtPath(draft, fieldPath)\n const prevStatus = prev && typeof prev === 'object' ? (prev as any).status : undefined\n if (prevStatus === 'idle') {\n // Still ensure data/error are cleared.\n const data = (prev as any)?.data\n const error = (prev as any)?.error\n if (data === undefined && error === undefined) {\n continue\n }\n }\n\n updates.push({ fieldPath, prev })\n }\n\n if (updates.length === 0) return\n\n const reason: PatchReason = 'source-refresh'\n\n const nextDraft = create(draft, (next) => {\n for (const u of updates) {\n RowId.setAtPathMutating(next, u.fieldPath, Snapshot.idle())\n }\n })\n\n ctx.setDraft(nextDraft as S)\n\n for (const u of updates) {\n const normalized = normalizeFieldPath(u.fieldPath) ?? []\n ctx.recordPatch(normalized, reason, u.prev, Snapshot.idle(), `source:${u.fieldPath}:idle`)\n }\n })\n\n/**\n * installSourceRefresh:\n * - Register the refresh implementation for a single source field (ResourceSnapshot + keyHash gate + concurrency).\n */\nexport const installSourceRefresh = <S>(\n bound: BoundApi<any, any>,\n step: StateTraitPlanStep,\n entry: Extract<StateTraitEntry<S, string>, { readonly kind: 'source' }>,\n): Effect.Effect<void, never, any> => {\n if (!step.targetFieldPath) return Effect.void\n\n const fieldPath = step.targetFieldPath\n const resourceId = step.resourceId ?? entry.meta.resource\n const listItem = RowId.parseListItemFieldPath(fieldPath)\n\n let internals: ReturnType<typeof getBoundInternals> | undefined\n try {\n internals = getBoundInternals(bound as any)\n } catch {\n return Effect.void\n }\n\n const register = internals.traits.registerSourceRefresh\n\n const recordSnapshot = (\n replayMode: 'live' | 'replay',\n replayLog: ReplayLog.ReplayLogService | undefined,\n input:\n | ReplayLog.ReplayLogEvent\n | {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly fieldPath: string\n readonly keyHash?: string\n readonly concurrency?: string\n readonly phase: ReplayLog.ResourceSnapshotPhase\n readonly snapshot: unknown\n },\n ): Effect.Effect<void, never, any> => {\n if (!replayLog) return Effect.void\n if (replayMode !== 'live') return Effect.void\n const event: ReplayLog.ReplayLogEvent =\n input && typeof input === 'object' && (input as any)._tag === 'ResourceSnapshot'\n ? (input as ReplayLog.ReplayLogEvent)\n : {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: (input as any).fieldPath,\n keyHash: (input as any).keyHash,\n concurrency: (input as any).concurrency,\n phase: (input as any).phase,\n snapshot: (input as any).snapshot,\n timestamp: Date.now(),\n moduleId: (input as any).moduleId,\n instanceId: (input as any).instanceId,\n }\n return replayLog.record(event)\n }\n\n // list.item scope: in-flight gating by RowID (avoid writing to the wrong row under insert/remove/reorder).\n if (listItem) {\n const store = internals.traits.rowIdStore as RowId.RowIdStore | undefined\n if (!store) {\n return Effect.void\n }\n\n const listPath = listItem.listPath\n const itemPath = listItem.itemPath\n if (!itemPath) {\n // Never write the snapshot back to the whole item (it would overwrite business values).\n return Effect.void\n }\n\n const concurrency = (entry.meta as any).concurrency as 'switch' | 'exhaust-trailing' | undefined\n const mode = concurrency ?? 'switch'\n\n const inFlight = new Map<\n RowId.RowId,\n {\n readonly gen: number\n readonly fiber: Fiber.RuntimeFiber<void, never>\n readonly keyHash: string\n }\n >()\n const trailing = new Map<RowId.RowId, { readonly key: unknown; readonly keyHash: string }>()\n let gen = 0\n\n // When a row is removed: clear trailing/inFlight references to avoid wrong attribution or memory leaks.\n store.onRemoved(listPath, (rowId) => {\n trailing.delete(rowId)\n inFlight.delete(rowId)\n })\n\n const setSnapshotForRowInTxn = (\n rowId: RowId.RowId,\n next: unknown,\n reason: PatchReason,\n stepId: string,\n ): Effect.Effect<string | undefined, never, any> =>\n Effect.gen(function* () {\n let wrotePath: string | undefined\n yield* bound.state.mutate((draft) => {\n const index = store.getIndex(listPath, rowId)\n if (index === undefined) return\n const concretePath = RowId.toListItemValuePath(listPath, index, itemPath)\n const prev = RowId.getAtPath(draft, concretePath)\n if (Object.is(prev, next)) return\n wrotePath = concretePath\n RowId.setAtPathMutating(draft, concretePath, next)\n recordTraitPatch(bound, concretePath, reason, prev, next, step.debugInfo?.graphNodeId)\n })\n return wrotePath\n })\n\n const writebackIfCurrentKeyHashForRow = (\n rowId: RowId.RowId,\n keyHash: string,\n next: unknown,\n reason: PatchReason,\n stepId: string,\n phase?: ReplayLog.ResourceSnapshotPhase,\n ): Effect.Effect<string | undefined, never, any> =>\n Effect.gen(function* () {\n let wrotePath: string | undefined\n yield* bound.state.mutate((draft) => {\n const index = store.getIndex(listPath, rowId)\n if (index === undefined) return\n const concretePath = RowId.toListItemValuePath(listPath, index, itemPath)\n\n const current = RowId.getAtPath(draft, concretePath)\n const currentKeyHash = current && typeof current === 'object' ? (current as any).keyHash : undefined\n if (currentKeyHash !== keyHash) return\n\n const prev = current\n if (Object.is(prev, next)) return\n\n wrotePath = concretePath\n RowId.setAtPathMutating(draft, concretePath, next)\n if (phase) {\n const { moduleId, instanceId } = getBoundScope(bound)\n recordReplayEvent(bound, {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: concretePath,\n keyHash,\n concurrency: mode,\n phase,\n snapshot: next,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n })\n }\n recordTraitPatch(bound, concretePath, reason, prev, next, step.debugInfo?.graphNodeId)\n })\n return wrotePath\n })\n\n const startFetch = (\n rowId: RowId.RowId,\n key: unknown,\n keyHash: string,\n replayMode: 'live' | 'replay',\n replayLog: ReplayLog.ReplayLogService | undefined,\n ): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const { moduleId, instanceId } = getBoundScope(bound)\n\n const indexForLog = store.getIndex(listPath, rowId)\n const logFieldPath =\n indexForLog === undefined ? undefined : RowId.toListItemValuePath(listPath, indexForLog, itemPath)\n\n let loadingSnapshot: unknown = Snapshot.loading({ keyHash })\n if (replayMode === 'replay' && replayLog && logFieldPath) {\n const replayLoading = yield* replayLog.consumeNextResourceSnapshot({\n resourceId,\n fieldPath: logFieldPath,\n keyHash,\n phase: 'loading',\n })\n if (replayLoading) {\n loadingSnapshot = replayLoading.snapshot\n }\n }\n const wroteLoadingPath = yield* setSnapshotForRowInTxn(\n rowId,\n loadingSnapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:loading`,\n )\n if (wroteLoadingPath) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: wroteLoadingPath,\n keyHash,\n concurrency: mode,\n phase: 'loading',\n snapshot: loadingSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n\n const io = Effect.gen(function* () {\n if (replayMode === 'replay' && replayLog) {\n // Let loading commit become visible first, then replay the settled phase (preserve the async-resource timeline shape).\n yield* Effect.yieldNow()\n const consumePath = wroteLoadingPath ?? logFieldPath\n if (!consumePath) return yield* Effect.void\n\n const replayed = yield* replayLog.consumeNextResourceSnapshot({\n resourceId,\n fieldPath: consumePath,\n keyHash,\n })\n if (!replayed) return yield* Effect.void\n\n if (replayed.phase === 'success') {\n yield* writebackIfCurrentKeyHashForRow(\n rowId,\n keyHash,\n replayed.snapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:success`,\n 'success',\n )\n } else if (replayed.phase === 'error') {\n yield* writebackIfCurrentKeyHashForRow(\n rowId,\n keyHash,\n replayed.snapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:error`,\n 'error',\n )\n }\n\n return yield* Effect.void\n }\n\n const stack = yield* getMiddlewareStack()\n\n const registryOpt = yield* Effect.serviceOption(ResourceInternal.ResourceRegistryTag)\n const registry = Option.isSome(registryOpt) ? registryOpt.value : undefined\n const spec = registry?.specs.get(resourceId)\n\n if (!spec) {\n return yield* Effect.void\n }\n\n const loadEffect = (spec.load as any)(key) as Effect.Effect<any, any, any>\n\n const meta: any = {\n moduleId,\n instanceId,\n fieldPath,\n resourceId,\n key,\n keyHash,\n rowId,\n traitNodeId: step.debugInfo?.graphNodeId,\n stepId: step.id,\n }\n\n if (!(typeof meta.opSeq === 'number' && Number.isFinite(meta.opSeq))) {\n const sessionOpt = yield* Effect.serviceOption(RunSessionTag)\n if (Option.isSome(sessionOpt)) {\n const seqKey = instanceId ?? 'global'\n meta.opSeq = sessionOpt.value.local.nextSeq('opSeq', seqKey)\n }\n }\n\n const op = EffectOp.make<any, any, any>({\n kind: 'service',\n name: resourceId,\n effect: loadEffect,\n meta,\n })\n\n const exit = yield* Effect.exit(EffectOp.run(op, stack))\n\n if (exit._tag === 'Success') {\n const successSnapshot = Snapshot.success({ keyHash, data: exit.value })\n const wroteSuccessPath = yield* writebackIfCurrentKeyHashForRow(\n rowId,\n keyHash,\n successSnapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:success`,\n 'success',\n )\n if (wroteSuccessPath) {\n yield* recordSnapshot(replayMode, replayLog, {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: wroteSuccessPath,\n keyHash,\n concurrency: mode,\n phase: 'success',\n snapshot: successSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n })\n }\n } else {\n const errorSnapshot = Snapshot.error({ keyHash, error: exit.cause })\n const wroteErrorPath = yield* writebackIfCurrentKeyHashForRow(\n rowId,\n keyHash,\n errorSnapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:error`,\n 'error',\n )\n if (wroteErrorPath) {\n yield* recordSnapshot(replayMode, replayLog, {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: wroteErrorPath,\n keyHash,\n concurrency: mode,\n phase: 'error',\n snapshot: errorSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n })\n }\n }\n }).pipe(Effect.catchAllCause(() => Effect.void))\n\n // list.item: IO fibers must detach from the sync-transaction FiberRef; otherwise they'd be misclassified as \"in txn window\"\n // and block subsequent writeback entrypoints.\n const fiber = yield* Effect.forkScoped(Effect.locally(TaskRunner.inSyncTransactionFiber, false)(io))\n const myGen = (gen += 1)\n inFlight.set(rowId, { gen: myGen, fiber, keyHash })\n\n yield* Effect.forkScoped(\n Effect.locally(\n TaskRunner.inSyncTransactionFiber,\n false,\n )(\n Fiber.await(fiber).pipe(\n Effect.zipRight(\n Effect.sync(() => {\n const current = inFlight.get(rowId)\n if (current && current.gen === myGen) {\n inFlight.delete(rowId)\n }\n }),\n ),\n Effect.zipRight(\n mode === 'exhaust-trailing'\n ? Effect.gen(function* () {\n const next = trailing.get(rowId)\n trailing.delete(rowId)\n if (next) {\n yield* startFetch(rowId, next.key, next.keyHash, replayMode, replayLog)\n }\n })\n : Effect.void,\n ),\n Effect.catchAllCause(() => Effect.void),\n ),\n ),\n )\n })\n\n register(fieldPath, (state: any) =>\n Effect.gen(function* () {\n const { moduleId, instanceId } = getBoundScope(bound)\n const replayModeOpt = yield* Effect.serviceOption(ReplayModeConfigTag)\n const replayMode = Option.isSome(replayModeOpt) ? replayModeOpt.value.mode : 'live'\n const replayLogOpt = yield* Effect.serviceOption(ReplayLog.ReplayLog)\n const replayLog = Option.isSome(replayLogOpt) ? replayLogOpt.value : undefined\n const force = yield* FiberRef.get(TaskRunner.forceSourceRefresh)\n\n const listValue = RowId.getAtPath(state, listPath)\n const items: ReadonlyArray<unknown> = Array.isArray(listValue) ? listValue : []\n const ids = store.ensureList(listPath, items)\n\n // dev-mode: trace deps once for the first row (diagnostics only; does not affect execution semantics).\n const traceKey = `${instanceId ?? 'unknown'}::source::${fieldPath}`\n if (isDevEnv() && (yield* onceInRunSession(`deps_trace_settled:${traceKey}`))) {\n try {\n const sample = items[0]\n if (sample !== undefined) {\n const traced = DepsTrace.trace((s) => (entry.meta as any).key(s), sample as any)\n const prefixedReads = traced.reads.map((r) => (r ? `${listPath}[].${r}` : `${listPath}[]`))\n const diff = DepsTrace.diffDeps(((entry.meta as any).deps ?? []) as ReadonlyArray<string>, prefixedReads)\n if (diff) {\n yield* emitDepsMismatch({\n moduleId,\n instanceId,\n kind: 'source',\n fieldPath,\n diff,\n })\n }\n }\n } catch {\n // tracing failure should never break refresh flow\n }\n }\n\n for (let index = 0; index < items.length; index++) {\n const rowId = ids[index]\n if (!rowId) continue\n\n const concretePath = RowId.toListItemValuePath(listPath, index, itemPath)\n const prevSnapshot = RowId.getAtPath(state, concretePath) as any\n\n let key: unknown\n try {\n key = (entry.meta as any).key(items[index])\n } catch {\n key = undefined\n }\n\n const current = inFlight.get(rowId)\n\n if (key === undefined) {\n trailing.delete(rowId)\n inFlight.delete(rowId)\n\n // If it's already clean idle, avoid redundant writeback (prevents meaningless patches and UI jitter).\n if (\n prevSnapshot &&\n typeof prevSnapshot === 'object' &&\n prevSnapshot.status === 'idle' &&\n prevSnapshot.data === undefined &&\n prevSnapshot.error === undefined\n ) {\n continue\n }\n\n const idleSnapshot = Snapshot.idle()\n const wroteIdlePath = yield* setSnapshotForRowInTxn(\n rowId,\n idleSnapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:idle`,\n )\n if (wroteIdlePath) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: wroteIdlePath,\n keyHash: undefined,\n concurrency: mode,\n phase: 'idle',\n snapshot: idleSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n continue\n }\n\n const h = hashKey(key)\n\n // keyHash unchanged: avoid redundant refresh while keeping in-flight.\n if (!force && current && current.keyHash === h) {\n continue\n }\n\n // Not in-flight: if snapshot.keyHash already matches, treat it as already up-to-date (avoid full refresh and row jitter).\n const prevKeyHash =\n prevSnapshot && typeof prevSnapshot === 'object' ? (prevSnapshot as any).keyHash : undefined\n if (!force && !current && prevKeyHash === h) {\n continue\n }\n\n if (mode === 'exhaust-trailing' && current) {\n trailing.set(rowId, { key, keyHash: h })\n const loadingSnapshot = Snapshot.loading({ keyHash: h })\n const wroteLoadingPath = yield* setSnapshotForRowInTxn(\n rowId,\n loadingSnapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:loading`,\n )\n if (wroteLoadingPath) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: wroteLoadingPath,\n keyHash: h,\n concurrency: mode,\n phase: 'loading',\n snapshot: loadingSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n continue\n }\n\n if (mode === 'switch' && current) {\n // Do not rely on cancellation correctness: stale writebacks are dropped by the keyHash gate.\n trailing.delete(rowId)\n inFlight.delete(rowId)\n }\n\n yield* startFetch(rowId, key, h, replayMode, replayLog)\n }\n }),\n )\n\n return Effect.void\n }\n\n // in-flight state (per field)\n let inFlight:\n | {\n readonly gen: number\n readonly fiber: Fiber.RuntimeFiber<void, never>\n readonly keyHash: string\n }\n | undefined\n let gen = 0\n let trailing: { readonly key: unknown; readonly keyHash: string } | undefined\n\n const concurrency = (entry.meta as any).concurrency as 'switch' | 'exhaust-trailing' | undefined\n const mode = concurrency ?? 'switch'\n\n const startFetch = (\n key: unknown,\n keyHash: string,\n replayMode: 'live' | 'replay',\n replayLog: ReplayLog.ReplayLogService | undefined,\n ): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const { moduleId, instanceId } = getBoundScope(bound)\n\n // 1) pending: synchronously write a loading snapshot (within the current transaction window).\n let loadingSnapshot: unknown = Snapshot.loading({ keyHash })\n if (replayMode === 'replay' && replayLog) {\n const replayLoading = yield* replayLog.consumeNextResourceSnapshot({\n resourceId,\n fieldPath,\n keyHash,\n phase: 'loading',\n })\n if (replayLoading) {\n loadingSnapshot = replayLoading.snapshot\n }\n }\n const wroteLoading = yield* setSnapshotInTxn(\n bound,\n fieldPath,\n loadingSnapshot,\n 'source-refresh',\n `source:${fieldPath}:loading`,\n step.debugInfo?.graphNodeId,\n )\n if (wroteLoading) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash,\n concurrency: mode,\n phase: 'loading',\n snapshot: loadingSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n\n // 2) IO: run in a background fiber (avoid blocking the current transaction).\n const io = Effect.gen(function* () {\n if (replayMode === 'replay' && replayLog) {\n // Let loading commit become visible first, then replay the settled phase (preserve the async-resource timeline shape).\n yield* Effect.yieldNow()\n const replayed = yield* replayLog.consumeNextResourceSnapshot({\n resourceId,\n fieldPath,\n keyHash,\n })\n if (!replayed) return yield* Effect.void\n\n if (replayed.phase === 'success') {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash,\n concurrency: mode,\n phase: 'success',\n snapshot: replayed.snapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n yield* writebackIfCurrentKeyHash(\n bound,\n fieldPath,\n keyHash,\n replayed.snapshot,\n 'source-refresh',\n `source:${fieldPath}:success`,\n step.debugInfo?.graphNodeId,\n event,\n )\n } else if (replayed.phase === 'error') {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash,\n concurrency: mode,\n phase: 'error',\n snapshot: replayed.snapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n yield* writebackIfCurrentKeyHash(\n bound,\n fieldPath,\n keyHash,\n replayed.snapshot,\n 'source-refresh',\n `source:${fieldPath}:error`,\n step.debugInfo?.graphNodeId,\n event,\n )\n }\n\n return yield* Effect.void\n }\n\n const stack = yield* getMiddlewareStack()\n\n const registryOpt = yield* Effect.serviceOption(ResourceInternal.ResourceRegistryTag)\n const registry = Option.isSome(registryOpt) ? registryOpt.value : undefined\n const spec = registry?.specs.get(resourceId)\n\n if (!spec) {\n return yield* Effect.void\n }\n\n const loadEffect = (spec.load as any)(key) as Effect.Effect<any, any, any>\n\n const meta: any = {\n moduleId,\n instanceId,\n fieldPath,\n resourceId,\n key,\n keyHash,\n traitNodeId: step.debugInfo?.graphNodeId,\n stepId: step.id,\n }\n\n if (!(typeof meta.opSeq === 'number' && Number.isFinite(meta.opSeq))) {\n const sessionOpt = yield* Effect.serviceOption(RunSessionTag)\n if (Option.isSome(sessionOpt)) {\n const seqKey = instanceId ?? 'global'\n meta.opSeq = sessionOpt.value.local.nextSeq('opSeq', seqKey)\n }\n }\n\n const op = EffectOp.make<any, any, any>({\n kind: 'trait-source',\n name: resourceId,\n effect: loadEffect,\n meta,\n })\n\n const exit = yield* Effect.exit(EffectOp.run(op, stack))\n\n // 3) writeback: use a keyHash gate to prevent stale results from writing back onto a new key.\n if (exit._tag === 'Success') {\n const successSnapshot = Snapshot.success({ keyHash, data: exit.value })\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash,\n concurrency: mode,\n phase: 'success',\n snapshot: successSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n const wroteSuccess = yield* writebackIfCurrentKeyHash(\n bound,\n fieldPath,\n keyHash,\n successSnapshot,\n 'source-refresh',\n `source:${fieldPath}:success`,\n step.debugInfo?.graphNodeId,\n event,\n )\n if (wroteSuccess) {\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n } else {\n const errorSnapshot = Snapshot.error({ keyHash, error: exit.cause })\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash,\n concurrency: mode,\n phase: 'error',\n snapshot: errorSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n const wroteError = yield* writebackIfCurrentKeyHash(\n bound,\n fieldPath,\n keyHash,\n errorSnapshot,\n 'source-refresh',\n `source:${fieldPath}:error`,\n step.debugInfo?.graphNodeId,\n event,\n )\n if (wroteError) {\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n }\n }).pipe(Effect.catchAllCause(() => Effect.void))\n\n // Do not wait for IO completion: forkScoped into the runtime scope so unmount will interrupt automatically.\n const fiber = yield* Effect.forkScoped(Effect.locally(TaskRunner.inSyncTransactionFiber, false)(io))\n const myGen = (gen += 1)\n inFlight = { gen: myGen, fiber, keyHash }\n\n // After in-flight completes, clean up; in exhaust-trailing mode, run one trailing fetch if present.\n yield* Effect.forkScoped(\n Effect.locally(\n TaskRunner.inSyncTransactionFiber,\n false,\n )(\n Fiber.await(fiber).pipe(\n Effect.zipRight(\n Effect.sync(() => {\n if (inFlight && inFlight.gen === myGen) {\n inFlight = undefined\n }\n }),\n ),\n Effect.zipRight(\n mode === 'exhaust-trailing'\n ? Effect.gen(function* () {\n const next = trailing\n trailing = undefined\n if (next) {\n yield* startFetch(next.key, next.keyHash, replayMode, replayLog)\n }\n })\n : Effect.void,\n ),\n Effect.catchAllCause(() => Effect.void),\n ),\n ),\n )\n })\n\n register(fieldPath, (state: any) =>\n Effect.gen(function* () {\n const { moduleId, instanceId } = getBoundScope(bound)\n const replayModeOpt = yield* Effect.serviceOption(ReplayModeConfigTag)\n const replayMode = Option.isSome(replayModeOpt) ? replayModeOpt.value.mode : 'live'\n const replayLogOpt = yield* Effect.serviceOption(ReplayLog.ReplayLog)\n const replayLog = Option.isSome(replayLogOpt) ? replayLogOpt.value : undefined\n const force = yield* FiberRef.get(TaskRunner.forceSourceRefresh)\n\n let key: unknown\n try {\n key = (entry.meta as any).key(state)\n } catch {\n key = undefined\n }\n\n // dev-mode: detect mismatch between actual reads in keySelector and declared deps (diagnostics only; does not affect execution semantics).\n const traceKey = `${instanceId ?? 'unknown'}::source::${fieldPath}`\n if (isDevEnv() && (yield* onceInRunSession(`deps_trace_settled:${traceKey}`))) {\n try {\n const traced = DepsTrace.trace((s) => (entry.meta as any).key(s), state)\n const diff = DepsTrace.diffDeps(((entry.meta as any).deps ?? []) as ReadonlyArray<string>, traced.reads)\n if (diff) {\n yield* emitDepsMismatch({\n moduleId,\n instanceId,\n kind: 'source',\n fieldPath,\n diff,\n })\n }\n } catch {\n // tracing failure should never break refresh flow\n }\n }\n\n // Key becomes empty: synchronously clear to idle (and interrupt in-flight).\n if (key === undefined) {\n if (inFlight) {\n yield* Fiber.interruptFork(inFlight.fiber)\n inFlight = undefined\n }\n trailing = undefined\n\n const idleSnapshot = Snapshot.idle()\n const wroteIdle = yield* setSnapshotInTxn(\n bound,\n fieldPath,\n idleSnapshot,\n 'source-refresh',\n `source:${fieldPath}:idle`,\n step.debugInfo?.graphNodeId,\n )\n if (wroteIdle) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash: undefined,\n concurrency: mode,\n phase: 'idle',\n snapshot: idleSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n return\n }\n\n const h = hashKey(key)\n\n // Default semantics: when a non-idle snapshot already exists for the same keyHash, refresh should be a no-op when possible\n // (avoid duplicate IO/writeback). Explicit refresh/invalidate can bypass via force.\n if (!force) {\n if (inFlight && inFlight.keyHash === h) {\n return\n }\n\n const currentSnapshot = RowId.getAtPath(state, fieldPath) as any\n const currentKeyHash =\n currentSnapshot && typeof currentSnapshot === 'object' ? (currentSnapshot as any).keyHash : undefined\n const currentStatus =\n currentSnapshot && typeof currentSnapshot === 'object' ? (currentSnapshot as any).status : undefined\n if (currentStatus && currentStatus !== 'idle' && currentKeyHash === h) {\n return\n }\n }\n\n if (mode === 'exhaust-trailing' && inFlight) {\n // Busy: record trailing and update loading immediately; stale in-flight writebacks will be blocked by the keyHash gate.\n trailing = { key, keyHash: h }\n const loadingSnapshot = Snapshot.loading({ keyHash: h })\n const wroteLoading = yield* setSnapshotInTxn(\n bound,\n fieldPath,\n loadingSnapshot,\n 'source-refresh',\n `source:${fieldPath}:loading`,\n step.debugInfo?.graphNodeId,\n )\n if (wroteLoading) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash: h,\n concurrency: mode,\n phase: 'loading',\n snapshot: loadingSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n return\n }\n\n if (mode === 'switch' && inFlight) {\n yield* Fiber.interruptFork(inFlight.fiber)\n inFlight = undefined\n trailing = undefined\n }\n\n // start fetch (pending tx + fork IO)\n yield* startFetch(key, h, replayMode, replayLog)\n }),\n )\n\n return Effect.void\n}\n","export interface DepsTraceResult<T> {\n readonly value: T\n readonly reads: ReadonlyArray<string>\n}\n\nexport interface DepsDiff {\n readonly reads: ReadonlyArray<string>\n readonly declared: ReadonlyArray<string>\n readonly missing: ReadonlyArray<string>\n readonly unused: ReadonlyArray<string>\n}\n\nconst isTraceableObject = (value: unknown): value is object => {\n if (!value || typeof value !== 'object') return false\n if (Array.isArray(value)) return true\n if (value instanceof Date) return false\n if (value instanceof RegExp) return false\n if (value instanceof Error) return false\n if (value instanceof Map) return false\n if (value instanceof Set) return false\n if (value instanceof WeakMap) return false\n if (value instanceof WeakSet) return false\n return true\n}\n\nconst shouldIgnoreKey = (key: string): boolean => key === '__proto__' || key === 'prototype' || key === 'constructor'\n\nconst normalizeReads = (reads: ReadonlySet<string>): ReadonlyArray<string> => {\n const all = Array.from(reads).filter((p) => typeof p === 'string' && p.length > 0)\n all.sort()\n\n // Drop strict prefix paths (e.g. if both profile and profile.id are read, keep only the more specific profile.id).\n const isPrefix = (prefix: string, full: string): boolean => full !== prefix && full.startsWith(prefix + '.')\n\n const pruned: Array<string> = []\n for (const p of all) {\n let hasMoreSpecific = false\n for (const other of all) {\n if (isPrefix(p, other)) {\n hasMoreSpecific = true\n break\n }\n }\n if (!hasMoreSpecific) {\n pruned.push(p)\n }\n }\n\n pruned.sort()\n return pruned\n}\n\nconst covers = (declared: string, read: string): boolean => declared === read || read.startsWith(declared + '.')\n\nexport const diffDeps = (declared: ReadonlyArray<string>, reads: ReadonlyArray<string>): DepsDiff | undefined => {\n const declaredList = Array.from(new Set(declared)).filter((p) => typeof p === 'string' && p.length > 0)\n declaredList.sort()\n const readList = Array.from(new Set(reads)).filter((p) => typeof p === 'string' && p.length > 0)\n readList.sort()\n\n const missing = readList.filter((r) => declaredList.every((d) => !covers(d, r)))\n const unused = declaredList.filter((d) => readList.every((r) => !covers(d, r)))\n\n if (missing.length === 0 && unused.length === 0) return undefined\n\n return {\n reads: readList,\n declared: declaredList,\n missing,\n unused,\n }\n}\n\nexport const trace = <T>(fn: (state: any) => T, state: unknown): DepsTraceResult<T> => {\n if (!isTraceableObject(state)) {\n return { value: fn(state as any), reads: [] }\n }\n\n const reads = new Set<string>()\n\n // per-trace caches to preserve reference identity within the traced call.\n const proxyCache = new WeakMap<object, Map<string, any>>()\n const proxyToTarget = new WeakMap<object, object>()\n\n const wrap = (value: unknown, path: string): unknown => {\n if (!isTraceableObject(value)) return value\n return getProxy(value as any, path)\n }\n\n const unwrap = <V>(value: V): V => {\n if (value && (typeof value === 'object' || typeof value === 'function')) {\n const target = proxyToTarget.get(value as any)\n if (target) return target as any as V\n }\n return value\n }\n\n const getProxy = (target: object, basePath: string): any => {\n let byPath = proxyCache.get(target)\n if (!byPath) {\n byPath = new Map()\n proxyCache.set(target, byPath)\n }\n\n const cached = byPath.get(basePath)\n if (cached) return cached\n\n const record = (path: string) => {\n if (path) reads.add(path)\n }\n\n const proxy = new Proxy(target as any, {\n get: (t, prop, receiver) => {\n if (typeof prop === 'symbol') {\n return Reflect.get(t, prop, receiver)\n }\n const key = String(prop)\n if (shouldIgnoreKey(key)) {\n return Reflect.get(t, prop, receiver)\n }\n\n const nextPath = basePath ? `${basePath}.${key}` : key\n record(nextPath)\n\n const value = Reflect.get(t, prop, receiver) as unknown\n return wrap(value, nextPath)\n },\n has: (t, prop) => {\n if (typeof prop === 'symbol') return Reflect.has(t, prop)\n const key = String(prop)\n if (!shouldIgnoreKey(key)) {\n const nextPath = basePath ? `${basePath}.${key}` : key\n record(nextPath)\n }\n return Reflect.has(t, prop)\n },\n ownKeys: (t) => {\n if (basePath) record(basePath)\n return Reflect.ownKeys(t)\n },\n getOwnPropertyDescriptor: (t, prop) => {\n if (typeof prop === 'symbol') {\n return Reflect.getOwnPropertyDescriptor(t, prop)\n }\n const key = String(prop)\n if (!shouldIgnoreKey(key)) {\n const nextPath = basePath ? `${basePath}.${key}` : key\n record(nextPath)\n }\n return Reflect.getOwnPropertyDescriptor(t, prop)\n },\n set: () => {\n throw new Error(\n '[deps-trace] Attempted to mutate state during deps tracing (state is readonly in dev-mode diagnostics).',\n )\n },\n defineProperty: () => {\n throw new Error(\n '[deps-trace] Attempted to define property on state during deps tracing (state is readonly in dev-mode diagnostics).',\n )\n },\n deleteProperty: () => {\n throw new Error(\n '[deps-trace] Attempted to delete property on state during deps tracing (state is readonly in dev-mode diagnostics).',\n )\n },\n })\n\n byPath.set(basePath, proxy)\n proxyToTarget.set(proxy, target)\n return proxy\n }\n\n const root = getProxy(state as any, '')\n const value = unwrap(fn(root))\n\n return {\n value,\n reads: normalizeReads(reads),\n }\n}\n"],"mappings":"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","names":["record","stableStringify","record","value","record","keyHash","key","prev","prevStatus","concurrency","mode","inFlight","trailing","gen","startFetch"]}
|
package/dist/chunk-QCHIQWAJ.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
link
|
|
3
|
-
} from "./chunk-VZB726PE.js";
|
|
4
|
-
import {
|
|
5
|
-
__export
|
|
6
|
-
} from "./chunk-PZ5AY32C.js";
|
|
7
|
-
|
|
8
|
-
// src/Link.ts
|
|
9
|
-
var Link_exports = {};
|
|
10
|
-
__export(Link_exports, {
|
|
11
|
-
make: () => make
|
|
12
|
-
});
|
|
13
|
-
function make(config, logic) {
|
|
14
|
-
return link(config, logic);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export {
|
|
18
|
-
make,
|
|
19
|
-
Link_exports
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=chunk-QCHIQWAJ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Logic.ts"],"sourcesContent":["import { Context, Effect } from 'effect'\nimport type * as Logix from './internal/module.js'\nimport * as Internal from './internal/LogicMiddleware.js'\nimport * as PlatformInternal from './internal/platform/Platform.js'\n\nexport * from './internal/LogicMiddleware.js'\n\n// Logic: a long-running Effect program scoped to a module shape.\n\n/**\n * Core Tag for retrieving the current ModuleRuntime within a Logic scope.\n */\nexport const RuntimeTag: Context.Tag<any, Logix.ModuleRuntime<any, any>> = Context.GenericTag<\n any,\n Logix.ModuleRuntime<any, any>\n>('@logixjs/Runtime')\n\n// Public Platform alias (equivalent to internal/platform/Platform.Service).\nexport type Platform = PlatformInternal.Service\n\n// Logic Env / Of aliases: point to internal versions to avoid multiple definitions.\nexport type Env<Sh extends Logix.AnyModuleShape, R> = Internal.Env<Sh, R>\n\nexport type Of<Sh extends Logix.AnyModuleShape, R = never, A = void, E = never> = Internal.Of<Sh, R, A, E>\n\nexport function of<Sh extends Logix.AnyModuleShape, R = never, A = void, E = never>(\n eff: Effect.Effect<A, E, Env<Sh, R>>,\n): Of<Sh, R, A, E> {\n return eff as Of<Sh, R, A, E>\n}\n\n// DSL type aliases: reuse internal definitions directly.\nexport type Draft<T> = Internal.Draft<T>\nexport type IntentBuilder<Payload, Sh extends Logix.AnyModuleShape, R = never> = Internal.IntentBuilder<Payload, Sh, R>\nexport type FluentMatch<V> = Internal.FluentMatch<V>\nexport type FluentMatchTag<V extends { _tag: string }> = Internal.FluentMatchTag<V>\n\n// Remaining implementation details (IntentBuilder factories, etc.) are composed in internal/runtime.\n// Application code should use this module via Module.logic and Bound API, without depending on internal construction.\n"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAS,eAAuB;AAYzB,IAAM,aAA8D,QAAQ,WAGjF,kBAAkB;AAUb,SAAS,GACd,KACiB;AACjB,SAAO;AACT;","names":[]}
|
package/dist/chunk-TKZ7MEIA.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
compile,
|
|
3
|
-
isReadQuery,
|
|
4
|
-
make
|
|
5
|
-
} from "./chunk-CW6T36TN.js";
|
|
6
|
-
import {
|
|
7
|
-
__export
|
|
8
|
-
} from "./chunk-PZ5AY32C.js";
|
|
9
|
-
|
|
10
|
-
// src/ReadQuery.ts
|
|
11
|
-
var ReadQuery_exports = {};
|
|
12
|
-
__export(ReadQuery_exports, {
|
|
13
|
-
compile: () => compile2,
|
|
14
|
-
isReadQuery: () => isReadQuery2,
|
|
15
|
-
make: () => make2
|
|
16
|
-
});
|
|
17
|
-
var isReadQuery2 = isReadQuery;
|
|
18
|
-
var make2 = make;
|
|
19
|
-
var compile2 = compile;
|
|
20
|
-
|
|
21
|
-
export {
|
|
22
|
-
isReadQuery2 as isReadQuery,
|
|
23
|
-
make2 as make,
|
|
24
|
-
compile2 as compile,
|
|
25
|
-
ReadQuery_exports
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=chunk-TKZ7MEIA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ReadQuery.ts"],"sourcesContent":["import * as ReadQueryCore from './internal/runtime/core/ReadQuery.js'\n\nexport type ReadLane = ReadQueryCore.ReadLane\nexport type ReadProducer = ReadQueryCore.ReadProducer\nexport type EqualsKind = ReadQueryCore.EqualsKind\nexport type ReadsDigest = ReadQueryCore.ReadsDigest\n\nexport type ReadQueryStaticIr = ReadQueryCore.ReadQueryStaticIr\n\nexport type ReadQuery<S, V> = ReadQueryCore.ReadQuery<S, V>\nexport type ReadQueryCompiled<S, V> = ReadQueryCore.ReadQueryCompiled<S, V>\nexport type ReadQueryInput<S, V> = ReadQueryCore.ReadQueryInput<S, V>\n\nexport const isReadQuery = ReadQueryCore.isReadQuery\n\nexport const make = ReadQueryCore.make\n\nexport const compile = ReadQueryCore.compile\n"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA,iBAAAA;AAAA,EAAA,mBAAAC;AAAA,EAAA,YAAAC;AAAA;AAaO,IAAMC,eAA4B;AAElC,IAAMC,QAAqB;AAE3B,IAAMC,WAAwB;","names":["compile","isReadQuery","make","isReadQuery","make","compile"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/State.ts"],"sourcesContent":["import type { Context, Layer as EffectLayer } from 'effect'\n\n/**\n * State namespace (module-level):\n * - Provides State.Tag<S>: marks a state type in Env.\n * - Provides State.Layer<S>: builds a Layer that only carries State.Tag<S>.\n *\n * Type-level only; no additional runtime dependency.\n */\nexport type Tag<S> = Context.Tag<any, S>\nexport type Layer<S> = EffectLayer.Layer<Tag<S>, never, never>\n"],"mappings":";AAAA;","names":[]}
|
package/dist/chunk-VZB726PE.js
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Link
|
|
3
|
-
} from "./chunk-JCXGZRMU.js";
|
|
4
|
-
import {
|
|
5
|
-
attachMeta,
|
|
6
|
-
getDefinition,
|
|
7
|
-
getMeta
|
|
8
|
-
} from "./chunk-PAYXCY6A.js";
|
|
9
|
-
import {
|
|
10
|
-
__export
|
|
11
|
-
} from "./chunk-PZ5AY32C.js";
|
|
12
|
-
|
|
13
|
-
// src/Process.ts
|
|
14
|
-
var Process_exports = {};
|
|
15
|
-
__export(Process_exports, {
|
|
16
|
-
attachMeta: () => attachMeta2,
|
|
17
|
-
getDefinition: () => getDefinition2,
|
|
18
|
-
getMeta: () => getMeta2,
|
|
19
|
-
link: () => link,
|
|
20
|
-
make: () => make
|
|
21
|
-
});
|
|
22
|
-
var DEFAULT_TRIGGERS = [{ kind: "platformEvent", platformEvent: "runtime:boot" }];
|
|
23
|
-
var normalizeDefinition = (input) => {
|
|
24
|
-
const base = typeof input === "string" ? { processId: input } : input;
|
|
25
|
-
const processId = base.processId;
|
|
26
|
-
if (typeof processId !== "string" || processId.length === 0) {
|
|
27
|
-
throw new Error("[Process.make] processId must be a non-empty string");
|
|
28
|
-
}
|
|
29
|
-
const triggers = Array.isArray(base.triggers) && base.triggers.length > 0 ? base.triggers : DEFAULT_TRIGGERS;
|
|
30
|
-
const concurrency = base.concurrency ?? { mode: "latest" };
|
|
31
|
-
const errorPolicy = base.errorPolicy ?? { mode: "failStop" };
|
|
32
|
-
const diagnosticsLevel = base.diagnosticsLevel ?? "off";
|
|
33
|
-
return {
|
|
34
|
-
processId,
|
|
35
|
-
name: base.name,
|
|
36
|
-
description: base.description,
|
|
37
|
-
requires: base.requires,
|
|
38
|
-
triggers,
|
|
39
|
-
concurrency,
|
|
40
|
-
errorPolicy,
|
|
41
|
-
diagnosticsLevel
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
var make = (definition, effect) => attachMeta(effect, {
|
|
45
|
-
definition: normalizeDefinition(definition),
|
|
46
|
-
kind: "process"
|
|
47
|
-
});
|
|
48
|
-
var getDefinition2 = (effect) => getDefinition(effect);
|
|
49
|
-
var getMeta2 = (effect) => getMeta(effect);
|
|
50
|
-
var attachMeta2 = (effect, meta) => attachMeta(effect, meta);
|
|
51
|
-
var isModuleLike = (value) => Boolean(value) && typeof value === "object" && (value._kind === "ModuleDef" || value._kind === "Module") && "tag" in value;
|
|
52
|
-
var unwrapModuleTag = (module) => {
|
|
53
|
-
if (isModuleLike(module)) {
|
|
54
|
-
return module.tag;
|
|
55
|
-
}
|
|
56
|
-
return module;
|
|
57
|
-
};
|
|
58
|
-
function link(config, logic) {
|
|
59
|
-
const linkId = config.id ?? [...config.modules].map((m) => m.id).sort().join("~");
|
|
60
|
-
const modulesRecord = /* @__PURE__ */ Object.create(null);
|
|
61
|
-
const requires = /* @__PURE__ */ new Set();
|
|
62
|
-
for (const module of config.modules) {
|
|
63
|
-
const tag = unwrapModuleTag(module);
|
|
64
|
-
requires.add(String(tag.id));
|
|
65
|
-
modulesRecord[tag.id] = tag;
|
|
66
|
-
}
|
|
67
|
-
const effect = Link(
|
|
68
|
-
modulesRecord,
|
|
69
|
-
logic
|
|
70
|
-
);
|
|
71
|
-
const definition = {
|
|
72
|
-
processId: linkId,
|
|
73
|
-
requires: Array.from(requires),
|
|
74
|
-
triggers: [...DEFAULT_TRIGGERS, { kind: "platformEvent", platformEvent: `link:${linkId}` }],
|
|
75
|
-
concurrency: { mode: "latest" },
|
|
76
|
-
errorPolicy: { mode: "failStop" },
|
|
77
|
-
diagnosticsLevel: "off"
|
|
78
|
-
};
|
|
79
|
-
return attachMeta(effect, {
|
|
80
|
-
definition,
|
|
81
|
-
kind: "link"
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export {
|
|
86
|
-
make,
|
|
87
|
-
getDefinition2 as getDefinition,
|
|
88
|
-
getMeta2 as getMeta,
|
|
89
|
-
attachMeta2 as attachMeta,
|
|
90
|
-
link,
|
|
91
|
-
Process_exports
|
|
92
|
-
};
|
|
93
|
-
//# sourceMappingURL=chunk-VZB726PE.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Process.ts"],"sourcesContent":["import { Effect } from 'effect'\nimport * as ModuleFactory from './internal/runtime/ModuleFactory.js'\nimport type * as Protocol from './internal/runtime/core/process/protocol.js'\nimport * as Meta from './internal/runtime/core/process/meta.js'\nimport type { AnyModuleShape, ModuleHandle, ModuleLike, ModuleTag } from './internal/module.js'\n\nexport type DiagnosticsLevel = Protocol.DiagnosticsLevel\nexport type ProcessScope = Protocol.ProcessScope\nexport type ProcessIdentity = Protocol.ProcessIdentity\nexport type ProcessInstanceIdentity = Protocol.ProcessInstanceIdentity\nexport type ProcessTriggerSpec = Protocol.ProcessTriggerSpec\nexport type ProcessTrigger = Protocol.ProcessTrigger\nexport type ProcessConcurrencyPolicy = Protocol.ProcessConcurrencyPolicy\nexport type ProcessErrorPolicy = Protocol.ProcessErrorPolicy\nexport type ProcessDefinition = Protocol.ProcessDefinition\nexport type ProcessInstallation = Protocol.ProcessInstallation\nexport type SerializableErrorSummary = Protocol.SerializableErrorSummary\nexport type ProcessInstanceStatus = Protocol.ProcessInstanceStatus\nexport type ProcessEvent = Protocol.ProcessEvent\nexport type ProcessControlRequest = Protocol.ProcessControlRequest\nexport type ProcessPlatformEvent = Protocol.ProcessPlatformEvent\n\nexport type ProcessEffect<E = never, R = never> = Meta.ProcessEffect<E, R>\n\nexport type ProcessMakeDefinition =\n | string\n | {\n readonly processId: string\n readonly name?: string\n readonly description?: string\n readonly requires?: ReadonlyArray<string>\n readonly triggers?: ReadonlyArray<ProcessTriggerSpec>\n readonly concurrency?: ProcessConcurrencyPolicy\n readonly errorPolicy?: ProcessErrorPolicy\n readonly diagnosticsLevel?: DiagnosticsLevel\n }\n\nconst DEFAULT_TRIGGERS: ReadonlyArray<ProcessTriggerSpec> = [{ kind: 'platformEvent', platformEvent: 'runtime:boot' }]\n\nconst normalizeDefinition = (input: ProcessMakeDefinition): ProcessDefinition => {\n const base = typeof input === 'string' ? ({ processId: input } satisfies { readonly processId: string }) : input\n\n const processId = base.processId\n if (typeof processId !== 'string' || processId.length === 0) {\n throw new Error('[Process.make] processId must be a non-empty string')\n }\n\n const triggers = Array.isArray(base.triggers) && base.triggers.length > 0 ? base.triggers : DEFAULT_TRIGGERS\n\n const concurrency = base.concurrency ?? ({ mode: 'latest' } satisfies ProcessConcurrencyPolicy)\n const errorPolicy = base.errorPolicy ?? ({ mode: 'failStop' } satisfies ProcessErrorPolicy)\n const diagnosticsLevel = base.diagnosticsLevel ?? 'off'\n\n return {\n processId,\n name: base.name,\n description: base.description,\n requires: base.requires,\n triggers,\n concurrency,\n errorPolicy,\n diagnosticsLevel,\n }\n}\n\nexport const make = <E, R>(definition: ProcessMakeDefinition, effect: Effect.Effect<void, E, R>): ProcessEffect<E, R> =>\n Meta.attachMeta(effect, {\n definition: normalizeDefinition(definition),\n kind: 'process',\n })\n\nexport const getDefinition = (effect: Effect.Effect<void, any, any>): ProcessDefinition | undefined =>\n Meta.getDefinition(effect)\n\nexport const getMeta = (effect: Effect.Effect<void, any, any>): Meta.ProcessMeta | undefined => Meta.getMeta(effect)\n\nexport const attachMeta = <E, R>(effect: Effect.Effect<void, E, R>, meta: Meta.ProcessMeta): ProcessEffect<E, R> =>\n Meta.attachMeta(effect, meta)\n\ntype LinkModuleToken<Id extends string, Sh extends AnyModuleShape> = ModuleTag<Id, Sh> | ModuleLike<Id, Sh, object>\n\ntype LinkModuleIdOf<M> = M extends { readonly id: infer Id } ? Id : never\ntype LinkModuleShapeOf<M> =\n M extends ModuleLike<string, infer Sh, object> ? Sh : M extends ModuleTag<string, infer Sh> ? Sh : never\ntype LinkModuleTagOf<M> =\n M extends ModuleLike<string, infer Sh, object>\n ? ModuleTag<string, Sh>\n : M extends ModuleTag<string, AnyModuleShape>\n ? M\n : never\n\nconst isModuleLike = (value: unknown): value is ModuleLike<string, AnyModuleShape, object> =>\n Boolean(value) &&\n typeof value === 'object' &&\n ((value as { readonly _kind?: unknown })._kind === 'ModuleDef' ||\n (value as { readonly _kind?: unknown })._kind === 'Module') &&\n 'tag' in (value as object)\n\nconst unwrapModuleTag = <Id extends string, Sh extends AnyModuleShape>(\n module: LinkModuleToken<Id, Sh>,\n): ModuleTag<Id, Sh> => {\n if (isModuleLike(module)) {\n return module.tag\n }\n return module as ModuleTag<Id, Sh>\n}\n\nexport interface LinkConfig<Ms extends readonly LinkModuleToken<string, AnyModuleShape>[]> {\n readonly id?: string\n readonly modules: Ms\n}\n\nexport type LinkHandles<Ms extends readonly LinkModuleToken<string, AnyModuleShape>[]> = {\n [M in Ms[number] as LinkModuleIdOf<M>]: ModuleHandle<LinkModuleShapeOf<M>>\n}\n\ntype ModulesRecord<Ms extends readonly LinkModuleToken<string, AnyModuleShape>[]> = {\n [M in Ms[number] as LinkModuleIdOf<M>]: LinkModuleTagOf<M>\n}\n\nexport function link<Ms extends readonly LinkModuleToken<string, AnyModuleShape>[], E = never, R = never>(\n config: LinkConfig<Ms>,\n logic: ($: LinkHandles<Ms>) => Effect.Effect<void, E, R>,\n): ProcessEffect<E, R> {\n const linkId =\n config.id ??\n [...config.modules]\n .map((m) => m.id)\n .sort()\n .join('~')\n\n const modulesRecord = Object.create(null) as ModulesRecord<Ms>\n const requires = new Set<string>()\n\n for (const module of config.modules) {\n const tag = unwrapModuleTag(module)\n requires.add(String(tag.id))\n ;(modulesRecord as Record<string, ModuleTag<string, AnyModuleShape>>)[tag.id] = tag as unknown as ModuleTag<\n string,\n AnyModuleShape\n >\n }\n\n const effect = ModuleFactory.Link(\n modulesRecord as unknown as Record<string, ModuleTag<string, AnyModuleShape>>,\n logic as unknown as ($: Record<string, ModuleHandle<AnyModuleShape>>) => Effect.Effect<void, E, R>,\n )\n\n const definition: ProcessDefinition = {\n processId: linkId,\n requires: Array.from(requires),\n triggers: [...DEFAULT_TRIGGERS, { kind: 'platformEvent', platformEvent: `link:${linkId}` }],\n concurrency: { mode: 'latest' },\n errorPolicy: { mode: 'failStop' },\n diagnosticsLevel: 'off',\n }\n\n return Meta.attachMeta(effect, {\n definition,\n kind: 'link',\n }) as ProcessEffect<E, R>\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;AAAA,oBAAAA;AAAA,EAAA,qBAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA;AAAA;AAAA;AAqCA,IAAM,mBAAsD,CAAC,EAAE,MAAM,iBAAiB,eAAe,eAAe,CAAC;AAErH,IAAM,sBAAsB,CAAC,UAAoD;AAC/E,QAAM,OAAO,OAAO,UAAU,WAAY,EAAE,WAAW,MAAM,IAA8C;AAE3G,QAAM,YAAY,KAAK;AACvB,MAAI,OAAO,cAAc,YAAY,UAAU,WAAW,GAAG;AAC3D,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AAEA,QAAM,WAAW,MAAM,QAAQ,KAAK,QAAQ,KAAK,KAAK,SAAS,SAAS,IAAI,KAAK,WAAW;AAE5F,QAAM,cAAc,KAAK,eAAgB,EAAE,MAAM,SAAS;AAC1D,QAAM,cAAc,KAAK,eAAgB,EAAE,MAAM,WAAW;AAC5D,QAAM,mBAAmB,KAAK,oBAAoB;AAElD,SAAO;AAAA,IACL;AAAA,IACA,MAAM,KAAK;AAAA,IACX,aAAa,KAAK;AAAA,IAClB,UAAU,KAAK;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,OAAO,CAAO,YAAmC,WACvD,WAAW,QAAQ;AAAA,EACtB,YAAY,oBAAoB,UAAU;AAAA,EAC1C,MAAM;AACR,CAAC;AAEI,IAAMC,iBAAgB,CAAC,WACvB,cAAc,MAAM;AAEpB,IAAMC,WAAU,CAAC,WAA6E,QAAQ,MAAM;AAE5G,IAAMC,cAAa,CAAO,QAAmC,SAC7D,WAAW,QAAQ,IAAI;AAc9B,IAAM,eAAe,CAAC,UACpB,QAAQ,KAAK,KACb,OAAO,UAAU,aACf,MAAuC,UAAU,eAChD,MAAuC,UAAU,aACpD,SAAU;AAEZ,IAAM,kBAAkB,CACtB,WACsB;AACtB,MAAI,aAAa,MAAM,GAAG;AACxB,WAAO,OAAO;AAAA,EAChB;AACA,SAAO;AACT;AAeO,SAAS,KACd,QACA,OACqB;AACrB,QAAM,SACJ,OAAO,MACP,CAAC,GAAG,OAAO,OAAO,EACf,IAAI,CAAC,MAAM,EAAE,EAAE,EACf,KAAK,EACL,KAAK,GAAG;AAEb,QAAM,gBAAgB,uBAAO,OAAO,IAAI;AACxC,QAAM,WAAW,oBAAI,IAAY;AAEjC,aAAW,UAAU,OAAO,SAAS;AACnC,UAAM,MAAM,gBAAgB,MAAM;AAClC,aAAS,IAAI,OAAO,IAAI,EAAE,CAAC;AAC1B,IAAC,cAAoE,IAAI,EAAE,IAAI;AAAA,EAIlF;AAEA,QAAM,SAAuB;AAAA,IAC3B;AAAA,IACA;AAAA,EACF;AAEA,QAAM,aAAgC;AAAA,IACpC,WAAW;AAAA,IACX,UAAU,MAAM,KAAK,QAAQ;AAAA,IAC7B,UAAU,CAAC,GAAG,kBAAkB,EAAE,MAAM,iBAAiB,eAAe,QAAQ,MAAM,GAAG,CAAC;AAAA,IAC1F,aAAa,EAAE,MAAM,SAAS;AAAA,IAC9B,aAAa,EAAE,MAAM,WAAW;AAAA,IAChC,kBAAkB;AAAA,EACpB;AAEA,SAAY,WAAW,QAAQ;AAAA,IAC7B;AAAA,IACA,MAAM;AAAA,EACR,CAAC;AACH;","names":["attachMeta","getDefinition","getMeta","getDefinition","getMeta","attachMeta"]}
|