@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/runtime/core/DebugSink.record.ts","../src/internal/runtime/core/errorSummary.ts","../src/internal/runtime/core/ModeRunner.ts","../src/internal/runtime/core/LatestFiberSlot.ts"],"sourcesContent":["import { Cause, Effect, Layer, Logger, Option, ServiceMap } from 'effect'\nimport {\n projectJsonValue,\n type DowngradeReason as JsonDowngradeReason,\n type JsonValue,\n type JsonValueProjectionStats,\n} from '../../observability/jsonValue.js'\nimport type * as ReplayLog from './ReplayLog.js'\nimport {\n toSerializableErrorSummary,\n type DowngradeReason as ErrorDowngradeReason,\n type SerializableErrorSummary,\n} from './errorSummary.js'\nimport * as EffectOpCore from './EffectOpCore.js'\nimport type * as ProcessProtocol from './process/protocol.js'\n\nexport interface TriggerRef {\n readonly kind: string\n readonly name?: string\n readonly details?: unknown\n}\n\ntype TraceEventType = `trace:${string}`\ntype GenericTraceEventType = Exclude<\n TraceEventType,\n 'trace:trait:converge' | 'trace:trait:check' | 'trace:trait:validate'\n>\n\n/**\n * ReplayEventRef:\n * - Replay event structure referenced from Debug events.\n * - Based on ReplayLog.Event, enriched with txn/trigger association fields for Devtools aggregation and explanation.\n */\nexport type ReplayEventRef = ReplayLog.ReplayLogEvent & {\n readonly txnId?: string\n readonly trigger?: TriggerRef\n}\n\nexport type Event =\n | {\n readonly type: 'module:init'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'module:destroy'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'lifecycle:phase'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly phase: 'init' | 'run' | 'destroy' | 'platform'\n readonly name: string\n readonly payload?: unknown\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'action:dispatch'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly action: unknown\n readonly actionTag?: string\n readonly unknownAction?: boolean\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'state:update'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly state: unknown\n readonly txnSeq?: number\n readonly txnId?: string\n /**\n * Optional: Static IR digest aligned with FieldPathId/StepId (for consumer-side reverse-mapping & alignment).\n * - When missing or mismatched, consumers must not attempt to reverse-map rootIds -> rootPaths (avoid wrong UI).\n * - Allowed to be omitted on near-zero-cost diagnostics=off paths.\n */\n readonly staticIrDigest?: string\n /**\n * Optional: the affected scope aggregated by this commit (field-level dirty-set).\n * - Populated by Runtime at commit time;\n * - Must stay slim and serializable;\n * - Devtools can use it to explain \"why converge/validate ran / why it degraded to full\".\n */\n readonly dirtySet?: unknown\n /**\n * Optional: patch count aggregated by this commit (from StateTransaction).\n * - Populated by Runtime only on transaction paths.\n * - Devtools can use it as a lightweight transaction summary metric.\n */\n readonly patchCount?: number\n /**\n * Optional: whether patch records were truncated (bounded) under full instrumentation.\n */\n readonly patchesTruncated?: boolean\n /**\n * Optional: truncation reason code (stable enum).\n */\n readonly patchesTruncatedReason?: 'max_patches'\n /**\n * Optional: commit mode (normal/batched/low-priority, etc).\n * - Populated by Runtime;\n * - Default is chosen by the caller (typically \"normal\").\n */\n readonly commitMode?: string\n /**\n * Optional: external visibility priority (normal/low).\n * - Populated by Runtime.\n * - Mainly used by React external subscription scheduling (avoid unnecessary renders).\n */\n readonly priority?: string\n /**\n * Optional: transaction origin kind (origin.kind) that triggered this state commit:\n * - e.g. \"action\" / \"source-refresh\" / \"service-callback\" / \"devtools\".\n * - Populated by Runtime only on StateTransaction-based paths.\n * - Devtools can distinguish app transactions vs devtools time-travel operations.\n */\n readonly originKind?: string\n /**\n * Optional: transaction origin name (origin.name) that triggered this state commit:\n * - e.g. action dispatch / fieldPath / task:success/task:failure, etc.\n * - Populated by Runtime only on StateTransaction-based paths.\n */\n readonly originName?: string\n /**\n * Reserved: Trait converge summary (for Devtools window-level stats / TopN costs / degrade reasons, etc.).\n * - Phase 2: field slot only; structure is not fixed.\n * - Later phases will align with the Trait/Replay event model into an explainable structure.\n */\n readonly traitSummary?: unknown\n /**\n * Reserved: replay event associated with this transaction (re-emit source of truth from ReplayLog).\n * - Phase 2: field slot only.\n * - Later phases will align with ReplayLog.Event structure.\n */\n readonly replayEvent?: ReplayEventRef\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type:\n | 'process:start'\n | 'process:stop'\n | 'process:restart'\n | 'process:trigger'\n | 'process:dispatch'\n | 'process:error'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly identity: ProcessProtocol.ProcessInstanceIdentity\n readonly severity: 'info' | 'warning' | 'error'\n readonly eventSeq: number\n readonly timestampMs: number\n readonly trigger?: ProcessProtocol.ProcessTrigger\n readonly dispatch?: {\n readonly moduleId: string\n readonly instanceId: string\n readonly actionId: string\n }\n readonly error?: ProcessProtocol.SerializableErrorSummary\n readonly budgetEnvelope?: ProcessProtocol.ProcessEvent['budgetEnvelope']\n readonly degrade?: ProcessProtocol.ProcessEvent['degrade']\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'lifecycle:error'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly cause: unknown\n readonly phase?: 'init' | 'run' | 'destroy' | 'platform'\n readonly hook?: 'initRequired' | 'start' | 'destroy' | 'suspend' | 'resume' | 'reset' | 'unknown'\n readonly taskId?: string\n readonly opSeq?: number\n readonly origin?: string\n readonly txnSeq?: number\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'diagnostic'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly code: string\n readonly severity: 'error' | 'warning' | 'info'\n readonly message: string\n readonly hint?: string\n readonly actionTag?: string\n readonly kind?: string\n readonly txnSeq?: number\n readonly txnId?: string\n readonly opSeq?: number\n readonly trigger?: TriggerRef\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'warn:priority-inversion'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly tickSeq: number\n readonly reason: 'deferredBacklog' | 'subscribedNonUrgent'\n readonly selectorId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'warn:microtask-starvation'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly tickSeq: number\n readonly microtaskChainDepth?: number\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n /**\n * trace:* events:\n * - Extension hook for runtime tracing / Playground / Alignment Lab.\n * - Only the type prefix and moduleId are standardized; payload shape is defined by higher layers (e.g. spanId/attributes in data).\n */\n | {\n readonly type: 'trace:trait:converge'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly data: JsonValue\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'trace:trait:check'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly data: JsonValue\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'trace:trait:validate'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly data: JsonValue\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: GenericTraceEventType\n readonly moduleId?: string\n readonly instanceId?: string\n readonly data?: unknown\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n\nexport interface Sink {\n readonly record: (event: Event) => Effect.Effect<void>\n}\nexport const currentDebugSinks = ServiceMap.Reference<ReadonlyArray<Sink>>('@logixjs/core/Debug.currentDebugSinks', {\n defaultValue: () => [],\n})\nexport const currentRuntimeLabel = ServiceMap.Reference<string | undefined>('@logixjs/core/Debug.currentRuntimeLabel', {\n defaultValue: () => undefined,\n})\nexport const currentTxnId = ServiceMap.Reference<string | undefined>('@logixjs/core/Debug.currentTxnId', {\n defaultValue: () => undefined,\n})\nexport const currentOpSeq = ServiceMap.Reference<number | undefined>('@logixjs/core/Debug.currentOpSeq', {\n defaultValue: () => undefined,\n})\nexport type DiagnosticsLevel = 'off' | 'light' | 'sampled' | 'full'\nexport const currentDiagnosticsLevel = ServiceMap.Reference<DiagnosticsLevel>('@logixjs/core/Debug.currentDiagnosticsLevel', {\n defaultValue: () => 'off',\n})\n\nexport const diagnosticsLevel = (level: DiagnosticsLevel): Layer.Layer<any, never, never> =>\n Layer.succeed(currentDiagnosticsLevel, level) as Layer.Layer<any, never, never>\n\nexport type DiagnosticsMaterialization = 'eager' | 'lazy'\nexport const currentDiagnosticsMaterialization = ServiceMap.Reference<DiagnosticsMaterialization>(\n '@logixjs/core/Debug.currentDiagnosticsMaterialization',\n {\n defaultValue: () => 'eager',\n },\n)\n\nexport const diagnosticsMaterialization = (mode: DiagnosticsMaterialization): Layer.Layer<any, never, never> =>\n Layer.succeed(currentDiagnosticsMaterialization, mode) as Layer.Layer<any, never, never>\n\nexport type TraceMode = 'off' | 'on'\nexport const currentTraceMode = ServiceMap.Reference<TraceMode>('@logixjs/core/Debug.currentTraceMode', {\n defaultValue: () => 'on',\n})\n\nexport const traceMode = (mode: TraceMode): Layer.Layer<any, never, never> =>\n Layer.succeed(currentTraceMode, mode) as Layer.Layer<any, never, never>\n\nexport interface TraitConvergeDiagnosticsSamplingConfig {\n /**\n * Sample once every N txns (deterministic, based on stable txnSeq).\n * - 1: sample every txn (timing granularity similar to full, while keeping payload slim)\n */\n readonly sampleEveryN: number\n /**\n * Max number of TopK hotspots to output (recommended ≤ 3).\n */\n readonly topK: number\n}\n\nexport const currentTraitConvergeDiagnosticsSampling = ServiceMap.Reference<TraitConvergeDiagnosticsSamplingConfig>(\n '@logixjs/core/Debug.currentTraitConvergeDiagnosticsSampling',\n {\n defaultValue: () => ({\n sampleEveryN: 32,\n topK: 3,\n }),\n },\n)\n\nexport const traitConvergeDiagnosticsSampling = (\n config: TraitConvergeDiagnosticsSamplingConfig,\n): Layer.Layer<any, never, never> =>\n Layer.succeed(currentTraitConvergeDiagnosticsSampling, config) as Layer.Layer<any, never, never>\n\nexport const appendSinks = (sinks: ReadonlyArray<Sink>): Layer.Layer<any, never, never> =>\n Layer.effect(\n currentDebugSinks,\n Effect.gen(function* () {\n const current = yield* Effect.service(currentDebugSinks)\n return [...current, ...sinks]\n }),\n ) as Layer.Layer<any, never, never>\n\nexport type RuntimeDebugEventKind =\n | 'action'\n | 'state'\n | 'service'\n | 'process'\n | 'trait-computed'\n | 'trait-link'\n | 'trait-source'\n | 'lifecycle'\n | 'react-render'\n | 'devtools'\n | 'diagnostic'\n | (string & {})\n\nexport interface RuntimeDebugEventRef {\n readonly eventId: string\n readonly eventSeq: number\n readonly moduleId: string\n readonly instanceId: string\n readonly runtimeLabel?: string\n readonly txnSeq: number\n readonly txnId?: string\n /**\n * linkId:\n * - Current operation chain id (shared by boundary ops in the same chain).\n * - Created by Runtime at the boundary root and propagated via FiberRef across nested/cross-module chains.\n */\n readonly linkId?: string\n readonly timestamp: number\n readonly kind: RuntimeDebugEventKind\n readonly label: string\n readonly meta?: JsonValue\n readonly errorSummary?: SerializableErrorSummary\n readonly downgrade?: {\n readonly reason?: 'non_serializable' | 'oversized' | 'budget_exceeded' | 'unknown'\n }\n}\n\nexport type TxnLaneEvidenceReason =\n | 'disabled'\n | 'forced_off'\n | 'forced_sync'\n | 'queued_non_urgent'\n | 'preempted_by_urgent'\n | 'budget_yield'\n | 'coalesced'\n | 'canceled'\n | 'max_lag_forced'\n | 'starvation_protection'\n\nexport type TxnLaneNonUrgentYieldReason = 'none' | 'input_pending' | 'budget_exceeded' | 'forced_frame_yield'\n\nexport type TxnLaneEvidence = {\n readonly anchor: {\n readonly moduleId: string\n readonly instanceId: string\n readonly txnSeq: number\n readonly opSeq?: number\n }\n readonly lane: 'urgent' | 'nonUrgent'\n readonly kind: string\n readonly policy: {\n readonly enabled: boolean\n readonly overrideMode?: 'forced_off' | 'forced_sync'\n readonly configScope: 'provider' | 'runtime_module' | 'runtime_default' | 'builtin'\n readonly budgetMs: number\n readonly debounceMs: number\n readonly maxLagMs: number\n readonly allowCoalesce: boolean\n readonly yieldStrategy?: 'baseline' | 'inputPending'\n readonly queueMode?: 'fifo' | 'lanes'\n }\n readonly backlog: {\n readonly pendingCount: number\n readonly ageMs?: number\n readonly coalescedCount?: number\n readonly canceledCount?: number\n }\n readonly budget?: {\n readonly budgetMs?: number\n readonly sliceDurationMs?: number\n readonly yieldCount?: number\n readonly yielded?: boolean\n readonly yieldReason?: TxnLaneNonUrgentYieldReason\n }\n readonly starvation?: {\n readonly triggered?: boolean\n readonly reason?: string\n }\n readonly reasons: ReadonlyArray<TxnLaneEvidenceReason>\n}\n\nlet nextGlobalEventSeq = 0\n\nexport const clearRuntimeDebugEventSeq = (): void => {\n nextGlobalEventSeq = 0\n}\n\nconst nextEventSeq = (): number => {\n nextGlobalEventSeq += 1\n return nextGlobalEventSeq\n}\n\nconst makeEventId = (instanceId: string, eventSeq: number): string => `${instanceId}::e${eventSeq}`\n\ntype DowngradeReason = JsonDowngradeReason | ErrorDowngradeReason | 'budget_exceeded'\n\nconst mergeDowngrade = (\n current: DowngradeReason | undefined,\n next: DowngradeReason | undefined,\n): DowngradeReason | undefined => {\n if (!current) return next\n if (!next) return current\n if (current === 'non_serializable' || next === 'non_serializable') return 'non_serializable'\n if (current === 'oversized' || next === 'oversized') return 'oversized'\n if (current === 'budget_exceeded' || next === 'budget_exceeded') return 'budget_exceeded'\n return 'unknown'\n}\n\nconst stripDirtyRootPaths = (value: unknown): unknown => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n const { rootPaths, ...rest } = value as Record<string, unknown> & { readonly rootPaths?: unknown }\n return rest\n}\n\nconst stripTraitConvergeLegacyFields = (value: JsonValue): JsonValue => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n\n const anyValue = value as any\n const { dirtyRoots, ...rest } = anyValue\n const dirty = (rest as any).dirty\n if (!dirty || typeof dirty !== 'object' || Array.isArray(dirty)) {\n return rest as JsonValue\n }\n\n return {\n ...rest,\n dirty: stripDirtyRootPaths(dirty),\n } as JsonValue\n}\n\nconst stripTraitConvergeLight = (value: JsonValue): JsonValue => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n\n const anyValue = value as any\n const dirty = anyValue.dirty\n const dirtySlim =\n dirty && typeof dirty === 'object' && !Array.isArray(dirty)\n ? {\n dirtyAll: (dirty as any).dirtyAll,\n ...(typeof (dirty as any).reason === 'string' ? { reason: (dirty as any).reason } : null),\n ...(Array.isArray((dirty as any).rootIds) ? { rootIds: (dirty as any).rootIds } : null),\n ...(typeof (dirty as any).rootIdsTruncated === 'boolean'\n ? { rootIdsTruncated: (dirty as any).rootIdsTruncated }\n : null),\n }\n : undefined\n\n const { top3, dirtyRoots, ...rest } = anyValue\n return (dirtySlim ? { ...rest, dirty: dirtySlim } : rest) as JsonValue\n}\n\nconst stripTraitConvergeSampled = (value: JsonValue): JsonValue => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n\n const anyValue = value as any\n const dirty = anyValue.dirty\n const dirtySlim =\n dirty && typeof dirty === 'object' && !Array.isArray(dirty)\n ? {\n dirtyAll: (dirty as any).dirtyAll,\n ...(typeof (dirty as any).reason === 'string' ? { reason: (dirty as any).reason } : null),\n }\n : undefined\n\n const { dirtyRoots, ...rest } = anyValue\n return (dirtySlim ? { ...rest, dirty: dirtySlim } : rest) as JsonValue\n}\n\nconst stripTraitCheckLight = (value: JsonValue): JsonValue => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n\n const anyValue = value as any\n const degraded = anyValue.degraded\n const degradedSlim =\n degraded && typeof degraded === 'object' && !Array.isArray(degraded) ? { kind: (degraded as any).kind } : undefined\n const summary = anyValue.summary\n let summarySlim: Record<string, number> | undefined\n if (summary && typeof summary === 'object' && !Array.isArray(summary)) {\n const candidate: Record<string, number> = {}\n let hasSummaryField = false\n if (typeof (summary as any).scannedRows === 'number') {\n candidate.scannedRows = (summary as any).scannedRows\n hasSummaryField = true\n }\n if (typeof (summary as any).affectedRows === 'number') {\n candidate.affectedRows = (summary as any).affectedRows\n hasSummaryField = true\n }\n if (typeof (summary as any).changedRows === 'number') {\n candidate.changedRows = (summary as any).changedRows\n hasSummaryField = true\n }\n if (hasSummaryField) {\n summarySlim = candidate\n }\n }\n\n const slim: Record<string, unknown> = {}\n if (typeof anyValue.ruleId === 'string') slim.ruleId = anyValue.ruleId\n if (Array.isArray(anyValue.scopeFieldPath)) slim.scopeFieldPath = anyValue.scopeFieldPath\n if (typeof anyValue.mode === 'string') slim.mode = anyValue.mode\n if (anyValue.trigger && typeof anyValue.trigger === 'object' && !Array.isArray(anyValue.trigger)) {\n slim.trigger = anyValue.trigger\n }\n if (typeof anyValue.rowIdMode === 'string') slim.rowIdMode = anyValue.rowIdMode\n if (summarySlim) slim.summary = summarySlim\n if (degradedSlim) slim.degraded = degradedSlim\n\n return slim as JsonValue\n}\n\n// In browsers, to reduce duplicated noise caused by React StrictMode, etc.,\n// de-duplicate lifecycle:error and diagnostic events: print the same moduleId+payload only once.\nconst browserLifecycleSeen = new Set<string>()\nconst browserDiagnosticSeen = new Set<string>()\n\n// Align trace:react-render events with the most recent state:update txn (UI-only association).\nconst lastTxnByInstance = new Map<string, { readonly txnId: string; readonly txnSeq: number }>()\n\n// trace:react-render / trace:react-selector may enter the sink before state:update (reordering due to concurrency/scheduling).\n// To provide usable txn anchors in Devtools/UI, we allow a one-time backfill for refs missing txn fields.\nconst pendingTxnAlignmentByInstance = new Map<string, Array<RuntimeDebugEventRef>>()\n\nconst enqueuePendingTxnAlignment = (instanceId: string, ref: RuntimeDebugEventRef): void => {\n const list = pendingTxnAlignmentByInstance.get(instanceId)\n if (!list) {\n pendingTxnAlignmentByInstance.set(instanceId, [ref])\n return\n }\n list.push(ref)\n if (list.length > 64) {\n list.shift()\n }\n}\n\nconst backfillPendingTxnAlignment = (\n instanceId: string,\n txn: { readonly txnId: string; readonly txnSeq: number },\n): void => {\n const pending = pendingTxnAlignmentByInstance.get(instanceId)\n if (!pending || pending.length === 0) {\n pendingTxnAlignmentByInstance.delete(instanceId)\n return\n }\n\n for (const ref of pending) {\n const anyRef: any = ref as any\n if (anyRef.txnId == null) {\n anyRef.txnId = txn.txnId\n }\n if (typeof anyRef.txnSeq !== 'number' || anyRef.txnSeq <= 0) {\n anyRef.txnSeq = txn.txnSeq\n }\n }\n\n pendingTxnAlignmentByInstance.delete(instanceId)\n}\n\nconst lifecycleErrorLog = (event: Extract<Event, { readonly type: 'lifecycle:error' }>) => {\n const moduleId = event.moduleId ?? 'unknown'\n const causePretty = (() => {\n try {\n return Cause.pretty(event.cause as Cause.Cause<unknown>)\n } catch {\n try {\n return JSON.stringify(event.cause, null, 2)\n } catch {\n return String(event.cause)\n }\n }\n })()\n\n const message = `[Logix][module=${moduleId}] lifecycle:error\\n${causePretty}`\n\n return Effect.logError(message).pipe(\n Effect.annotateLogs({\n 'logix.moduleId': moduleId,\n 'logix.event': 'lifecycle:error',\n 'logix.cause': causePretty,\n }),\n )\n}\n\nconst diagnosticLog = (event: Extract<Event, { readonly type: 'diagnostic' }>) => {\n const moduleId = event.moduleId ?? 'unknown'\n const header = `[Logix][module=${moduleId}] diagnostic(${event.severity})`\n const detail = `code=${event.code} message=${event.message}${\n event.actionTag ? ` action=${event.actionTag}` : ''\n }${event.hint ? `\\nhint: ${event.hint}` : ''}`\n const msg = `${header}\\n${detail}`\n\n const base =\n event.severity === 'warning'\n ? Effect.logWarning(msg)\n : event.severity === 'info'\n ? Effect.logInfo(msg)\n : Effect.logError(msg)\n\n const annotations: Record<string, unknown> = {\n 'logix.moduleId': moduleId,\n 'logix.event': `diagnostic(${event.severity})`,\n 'logix.diagnostic.code': event.code,\n 'logix.diagnostic.message': event.message,\n }\n if (event.hint) {\n annotations['logix.diagnostic.hint'] = event.hint\n }\n if (event.actionTag) {\n annotations['logix.diagnostic.actionTag'] = event.actionTag\n }\n\n return base.pipe(Effect.annotateLogs(annotations))\n}\n\n/**\n * Default Layer composition based on FiberRef.currentDebugSinks:\n * - Uses Layer.locallyScoped to inject Debug sinks via FiberRef state.\n * - Avoids misusing FiberRef as a Context.Tag.\n */\nexport const noopLayer = Layer.succeed(currentDebugSinks, [])\n\n/**\n * errorOnlyLayer:\n * - Default DebugSink implementation that only cares about lifecycle:error events.\n * - Suitable as a \"minimum observability\" layer so fatal errors don't silently disappear.\n * - Other events (module:init/destroy, action:dispatch, state:update) are not recorded by default.\n */\nconst errorOnlySink: Sink = {\n record: (event: Event) =>\n event.type === 'lifecycle:error'\n ? lifecycleErrorLog(event)\n : event.type === 'diagnostic' && event.severity !== 'info'\n ? diagnosticLog(event)\n : Effect.void,\n}\n\nexport const errorOnlyLayer = Layer.succeed(currentDebugSinks, [errorOnlySink])\n\nexport const isErrorOnlyOnlySinks = (sinks: ReadonlyArray<Sink>): boolean => sinks.length === 1 && sinks[0] === errorOnlySink\n\n/**\n * consoleLayer:\n * - Full debug layer that logs all Debug events via Effect logs (logfmt / structured).\n * - Suitable as an observability layer for general environments (Node / tests).\n */\nconst consoleSink: Sink = {\n record: (event: Event) =>\n event.type === 'lifecycle:error'\n ? lifecycleErrorLog(event)\n : event.type === 'diagnostic'\n ? diagnosticLog(event)\n : Effect.logDebug({ debugEvent: event }),\n}\n\nexport const consoleLayer = Layer.succeed(currentDebugSinks, [consoleSink])\n\nconst isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'\n\n// Shared browser console rendering logic used by the default DebugSink and browserConsoleLayer.\nconst renderBrowserConsoleEvent = (event: Event): Effect.Effect<void> => {\n // trace:* events: shown as separate groups in browsers for Playground / DevTools observation.\n if (typeof (event as any).type === 'string' && (event as any).type.startsWith('trace:')) {\n const moduleId = (event as any).moduleId ?? 'unknown'\n const type = (event as any).type\n\n return Effect.sync(() => {\n // eslint-disable-next-line no-console\n console.groupCollapsed(\n '%c[Logix]%c trace %c' + moduleId + '%c ' + String(type),\n 'color:#6b7280;font-weight:bold', // tag\n 'color:#3b82f6', // label\n 'color:#9ca3af', // module id\n 'color:#6b7280', // type\n )\n // eslint-disable-next-line no-console\n console.log(event)\n // eslint-disable-next-line no-console\n console.groupEnd()\n })\n }\n\n if (event.type === 'lifecycle:error') {\n const moduleId = event.moduleId ?? 'unknown'\n const causePretty = (() => {\n try {\n return Cause.pretty(event.cause as Cause.Cause<unknown>)\n } catch {\n try {\n return JSON.stringify(event.cause, null, 2)\n } catch {\n return String(event.cause)\n }\n }\n })()\n\n const key = `${moduleId}|${causePretty}`\n if (browserLifecycleSeen.has(key)) {\n return Effect.void\n }\n browserLifecycleSeen.add(key)\n\n return Effect.sync(() => {\n // eslint-disable-next-line no-console\n console.groupCollapsed(\n '%c[Logix]%c lifecycle:error %c' + moduleId,\n 'color:#ef4444;font-weight:bold', // tag\n 'color:#ef4444', // label\n 'color:#9ca3af', // module id\n )\n // eslint-disable-next-line no-console\n console.error(causePretty)\n // eslint-disable-next-line no-console\n console.groupEnd()\n })\n }\n\n if (event.type === 'diagnostic') {\n const moduleId = event.moduleId ?? 'unknown'\n const detail = `code=${event.code} message=${event.message}${\n event.actionTag ? ` action=${event.actionTag}` : ''\n }${event.hint ? `\\nhint: ${event.hint}` : ''}`\n\n const color =\n event.severity === 'warning' ? 'color:#d97706' : event.severity === 'info' ? 'color:#3b82f6' : 'color:#ef4444'\n\n const label =\n event.severity === 'warning'\n ? 'diagnostic(warning)'\n : event.severity === 'info'\n ? 'diagnostic(info)'\n : 'diagnostic(error)'\n\n const key = `${moduleId}|${event.code}|${event.message}`\n if (browserDiagnosticSeen.has(key)) {\n return Effect.void\n }\n browserDiagnosticSeen.add(key)\n\n return Effect.sync(() => {\n // eslint-disable-next-line no-console\n console.groupCollapsed(\n '%c[Logix]%c ' + label + '%c module=' + moduleId,\n 'color:#6b7280;font-weight:bold',\n color,\n 'color:#9ca3af',\n )\n if (event.severity === 'warning') {\n // eslint-disable-next-line no-console\n console.warn(detail)\n } else if (event.severity === 'info') {\n // eslint-disable-next-line no-console\n console.info(detail)\n } else {\n // eslint-disable-next-line no-console\n console.error(detail)\n }\n // eslint-disable-next-line no-console\n console.groupEnd()\n })\n }\n\n // Other events are not printed to the browser console by default to avoid being too noisy during development.\n // For internal debug events, use a custom Debug sink or use consoleLayer in Node.\n return Effect.void\n}\n\n/**\n * Browser console debug layer:\n * - In browsers, uses console.groupCollapsed + colored labels to simulate pretty logger grouping.\n * - In non-browser environments, falls back to consoleLayer's Effect logging implementation.\n */\nconst browserConsoleSink: Sink = {\n record: (event: Event) => {\n if (!isBrowser) {\n // Non-browser: fall back to consoleLayer behavior (Effect.log*).\n return event.type === 'lifecycle:error'\n ? lifecycleErrorLog(event)\n : event.type === 'diagnostic'\n ? diagnosticLog(event)\n : Effect.logDebug({ debugEvent: event })\n }\n\n return renderBrowserConsoleEvent(event)\n },\n}\n\nexport const browserConsoleLayer = Layer.succeed(currentDebugSinks, [browserConsoleSink])\n\n/**\n * Browser diagnostic-only debug layer:\n * - In browsers, prints only lifecycle:error + diagnostic(warning/error) via console.groupCollapsed.\n * - Drops trace:* and other high-frequency events from the browser console (use DevtoolsHub instead).\n * - In non-browser environments, behaves like errorOnlySink (Effect.log*).\n */\nconst browserDiagnosticConsoleSink: Sink = {\n record: (event: Event) => {\n if (!isBrowser) {\n return event.type === 'lifecycle:error'\n ? lifecycleErrorLog(event)\n : event.type === 'diagnostic' && event.severity !== 'info'\n ? diagnosticLog(event)\n : Effect.void\n }\n\n return event.type === 'lifecycle:error' || (event.type === 'diagnostic' && event.severity !== 'info')\n ? renderBrowserConsoleEvent(event)\n : Effect.void\n },\n}\n\nexport const browserDiagnosticConsoleLayer = Layer.succeed(currentDebugSinks, [browserDiagnosticConsoleSink])\n\n/**\n * Browser-friendly Logger layer: replaces the default logger with Effect's pretty logger (browser mode).\n * - Avoids hand-written console styles; reuses Effect's colored/grouped formatting.\n * - Safely degrades to the default logger in server environments.\n */\nexport const browserPrettyLoggerLayer = Layer.effect(\n Logger.CurrentLoggers,\n Effect.gen(function* () {\n const current = yield* Effect.service(Logger.CurrentLoggers)\n return new Set(\n [...current].filter((logger) => logger !== Logger.defaultLogger).concat(Logger.consolePretty({ mode: 'browser', colors: true })),\n )\n }),\n)\n\n/**\n * defaultLayer:\n * - Public default layer; currently equivalent to errorOnlyLayer.\n * - Records lifecycle:error only, avoiding a large volume of action/state logs by default.\n */\nexport const defaultLayer = errorOnlyLayer\n\nexport const record = (event: Event) =>\n Effect.gen(function* () {\n const sinks = yield* Effect.service(currentDebugSinks)\n\n // Fast path: production default installs errorOnlyLayer (sinks=1).\n // Avoid paying diagnostics FiberRef + enrichment costs for high-frequency events that are always dropped by errorOnly.\n if (isErrorOnlyOnlySinks(sinks)) {\n if (event.type === 'lifecycle:error') {\n yield* lifecycleErrorLog(event)\n return\n }\n if (event.type === 'diagnostic' && event.severity !== 'info') {\n yield* diagnosticLog(event)\n }\n return\n }\n\n // Fast path: when no sinks are installed, only a small subset of events are ever surfaced.\n // Avoid paying per-event FiberRef + enrichment costs for high-frequency events like state:update.\n if (sinks.length === 0) {\n if (isBrowser) {\n if (event.type === 'lifecycle:error' || event.type === 'diagnostic') {\n yield* renderBrowserConsoleEvent(event)\n }\n return\n }\n\n if (event.type === 'lifecycle:error') {\n yield* lifecycleErrorLog(event)\n return\n }\n if (event.type === 'diagnostic') {\n yield* diagnosticLog(event)\n }\n return\n }\n\n // Trace events are performance-sensitive and should be explicitly enabled.\n // Keep the check scoped to trace:* only so non-trace events stay on the fast path.\n if (typeof event.type === 'string' && event.type.startsWith('trace:')) {\n const mode = yield* Effect.service(currentTraceMode)\n if (mode === 'off') return\n }\n\n const enriched = event as Event\n\n const diagnosticsLevel = yield* Effect.service(currentDiagnosticsLevel)\n\n // Enrich Debug.Event with basic fields (enabled only when diagnosticsLevel!=off):\n // - timestamp: for Devtools/Timeline/Overview time aggregation; avoids UI-side \"first observed time\" distortion.\n // - runtimeLabel: from FiberRef for grouping by runtime (injected only when not already provided by the event).\n let now: number | undefined\n const getNow = (): number => {\n if (now === undefined) now = Date.now()\n return now\n }\n\n // diagnostics=off: keep near-zero cost; do not add timestamp for high-frequency events (avoid extra Date.now()).\n // Low-frequency events (lifecycle:error/diagnostic) may still get timestamp for easier debugging.\n if (\n enriched.timestamp === undefined &&\n (diagnosticsLevel !== 'off' || enriched.type === 'lifecycle:error' || enriched.type === 'diagnostic')\n ) {\n ;(enriched as any).timestamp = getNow()\n }\n if (diagnosticsLevel !== 'off' && enriched.runtimeLabel === undefined) {\n const runtimeLabel = yield* Effect.service(currentRuntimeLabel)\n if (runtimeLabel) {\n ;(enriched as any).runtimeLabel = runtimeLabel\n }\n }\n\n if (enriched.type === 'diagnostic' && (enriched as any).txnId === undefined) {\n const txnId = yield* Effect.service(currentTxnId)\n if (txnId) {\n ;(enriched as any).txnId = txnId\n }\n }\n\n if (\n diagnosticsLevel !== 'off' &&\n (enriched as any).type === 'trace:effectop' &&\n (enriched as any).linkId === undefined\n ) {\n const maybeLinkId = yield* Effect.serviceOption(EffectOpCore.currentLinkId)\n if (Option.isSome(maybeLinkId) && maybeLinkId.value) {\n ;(enriched as any).linkId = maybeLinkId.value\n }\n }\n\n if (sinks.length === 1) {\n yield* sinks[0]!.record(enriched)\n return\n }\n\n yield* Effect.forEach(sinks as ReadonlyArray<Sink>, (sink) => sink.record(enriched), { discard: true })\n })\n\n/**\n * Normalizes internal Debug.Event into RuntimeDebugEventRef:\n * - Allows Devtools / Runtime to consume Debug events uniformly.\n * - Does not change DebugSink behavior; provides a structured view only.\n */\nexport const toRuntimeDebugEventRef = (\n event: Event,\n options?: {\n readonly diagnosticsLevel?: DiagnosticsLevel\n readonly materialization?: DiagnosticsMaterialization\n readonly eventSeq?: number\n readonly onMetaProjection?: (projection: {\n readonly stats: JsonValueProjectionStats\n readonly downgrade?: JsonDowngradeReason\n }) => void\n },\n): RuntimeDebugEventRef | undefined => {\n const diagnosticsLevel = options?.diagnosticsLevel ?? 'full'\n if (diagnosticsLevel === 'off') {\n return undefined\n }\n\n const isLightLike = diagnosticsLevel === 'light' || diagnosticsLevel === 'sampled'\n const materialization = options?.materialization ?? 'eager'\n const isLazyMaterialization = materialization === 'lazy'\n\n const timestamp =\n typeof event.timestamp === 'number' && Number.isFinite(event.timestamp) ? event.timestamp : Date.now()\n\n const moduleIdRaw = (event as any).moduleId\n const moduleId = typeof moduleIdRaw === 'string' && moduleIdRaw.length > 0 ? moduleIdRaw : 'unknown'\n\n const instanceIdRaw = (event as any).instanceId\n const instanceId = typeof instanceIdRaw === 'string' && instanceIdRaw.length > 0 ? instanceIdRaw : 'unknown'\n\n const runtimeLabelRaw = (event as any).runtimeLabel\n const runtimeLabel = typeof runtimeLabelRaw === 'string' && runtimeLabelRaw.length > 0 ? runtimeLabelRaw : undefined\n\n const txnSeqRaw = (event as any).txnSeq\n const txnSeq =\n typeof txnSeqRaw === 'number' && Number.isFinite(txnSeqRaw) && txnSeqRaw >= 0 ? Math.floor(txnSeqRaw) : 0\n\n const txnIdRaw = (event as any).txnId\n const txnId =\n typeof txnIdRaw === 'string' && txnIdRaw.length > 0\n ? txnIdRaw\n : txnSeq > 0\n ? `${instanceId}::t${txnSeq}`\n : undefined\n\n const linkId = (() => {\n const linkIdRaw = (event as any).linkId\n if (typeof linkIdRaw === 'string' && linkIdRaw.length > 0) return linkIdRaw\n\n // trace:*: allow fallback extraction from data.meta.linkId (avoid UI diving into deep meta).\n if (typeof (event as any).type !== 'string' || !(event as any).type.startsWith('trace:')) {\n return undefined\n }\n\n const data: any = (event as any).data\n const meta: any = data?.meta\n const linkIdFromMeta = meta?.linkId\n if (typeof linkIdFromMeta === 'string' && linkIdFromMeta.length > 0) return linkIdFromMeta\n\n return undefined\n })()\n\n const eventSeqRaw = options?.eventSeq\n const eventSeq =\n typeof eventSeqRaw === 'number' && Number.isFinite(eventSeqRaw) && eventSeqRaw > 0\n ? Math.floor(eventSeqRaw)\n : nextEventSeq()\n const eventId = makeEventId(instanceId, eventSeq)\n\n const base = {\n eventId,\n eventSeq,\n moduleId,\n instanceId,\n runtimeLabel,\n txnSeq,\n txnId,\n linkId,\n timestamp,\n } as const\n\n let downgrade: DowngradeReason | undefined\n\n const withDowngrade = (ref: Omit<RuntimeDebugEventRef, 'downgrade'>): RuntimeDebugEventRef => {\n if (!downgrade) return ref\n return { ...ref, downgrade: { reason: downgrade } }\n }\n\n switch (event.type) {\n case 'module:init':\n return withDowngrade({\n ...base,\n kind: 'lifecycle',\n label: 'module:init',\n })\n case 'module:destroy':\n return withDowngrade({\n ...base,\n kind: 'lifecycle',\n label: 'module:destroy',\n })\n case 'lifecycle:phase': {\n const e = event as Extract<Event, { readonly type: 'lifecycle:phase' }>\n const metaInput = isLightLike\n ? { type: 'lifecycle:phase', phase: e.phase, name: e.name }\n : { type: 'lifecycle:phase', phase: e.phase, name: e.name, payload: e.payload }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n return withDowngrade({\n ...base,\n kind: 'lifecycle',\n label: e.name,\n meta: metaProjection.value,\n })\n }\n case 'action:dispatch': {\n const action: any = (event as any).action\n const actionTagRaw = (event as any).actionTag\n const tag = typeof actionTagRaw === 'string' && actionTagRaw.length > 0 ? actionTagRaw : (action?._tag ?? action?.type)\n const label = String(tag ?? 'action:dispatch')\n const labelNormalized = label.length > 0 ? label : 'unknown'\n const unknownAction = (event as any).unknownAction === true ? true : undefined\n const metaInput = isLightLike\n ? { actionTag: labelNormalized, ...(unknownAction ? { unknownAction: true } : {}) }\n : { action, ...(unknownAction ? { unknownAction: true } : {}) }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n if (unknownAction) {\n downgrade = mergeDowngrade(downgrade, 'unknown')\n }\n return withDowngrade({\n ...base,\n kind: 'action',\n label: labelNormalized,\n meta: metaProjection.value,\n })\n }\n case 'state:update': {\n const e = event as Extract<Event, { readonly type: 'state:update' }>\n const dirtySetCanonical = stripDirtyRootPaths(e.dirtySet)\n const slimMetaInput: Record<string, unknown> = {}\n if (dirtySetCanonical !== undefined) slimMetaInput.dirtySet = dirtySetCanonical\n if (e.patchCount !== undefined) slimMetaInput.patchCount = e.patchCount\n if (e.patchesTruncated !== undefined) slimMetaInput.patchesTruncated = e.patchesTruncated\n if (e.patchesTruncatedReason !== undefined) slimMetaInput.patchesTruncatedReason = e.patchesTruncatedReason\n if (e.staticIrDigest !== undefined) slimMetaInput.staticIrDigest = e.staticIrDigest\n if (e.commitMode !== undefined) slimMetaInput.commitMode = e.commitMode\n if (e.priority !== undefined) slimMetaInput.priority = e.priority\n if (e.originKind !== undefined) slimMetaInput.originKind = e.originKind\n if (e.originName !== undefined) slimMetaInput.originName = e.originName\n\n const metaInput = isLightLike\n ? isLazyMaterialization\n ? slimMetaInput\n : { state: e.state, ...slimMetaInput }\n : isLazyMaterialization\n ? slimMetaInput\n : { state: e.state, ...slimMetaInput, traitSummary: e.traitSummary, replayEvent: e.replayEvent }\n\n const metaProjection = isLazyMaterialization\n ? {\n value: metaInput as unknown as JsonValue,\n stats: { dropped: 0, oversized: 0, nonSerializable: 0 } satisfies JsonValueProjectionStats,\n downgrade: undefined,\n }\n : projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n if (txnId) {\n lastTxnByInstance.set(instanceId, { txnId, txnSeq })\n backfillPendingTxnAlignment(instanceId, { txnId, txnSeq })\n }\n return withDowngrade({\n ...base,\n kind: 'state',\n label: 'state:update',\n meta: metaProjection.value,\n })\n }\n case 'process:start':\n case 'process:stop':\n case 'process:restart':\n case 'process:trigger':\n case 'process:dispatch':\n case 'process:error': {\n const e = event as Extract<\n Event,\n {\n readonly type:\n | 'process:start'\n | 'process:stop'\n | 'process:restart'\n | 'process:trigger'\n | 'process:dispatch'\n | 'process:error'\n }\n >\n\n const ts2 = typeof e.timestampMs === 'number' && Number.isFinite(e.timestampMs) ? e.timestampMs : timestamp\n\n const metaInput = {\n identity: e.identity,\n severity: e.severity,\n eventSeq: e.eventSeq,\n timestampMs: e.timestampMs,\n trigger: e.trigger,\n dispatch: e.dispatch,\n error: e.error,\n budgetEnvelope: (e as any).budgetEnvelope,\n degrade: (e as any).degrade,\n }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n const processDegradeReason = (() => {\n const marker = (e as any).degrade\n if (!marker || typeof marker !== 'object' || Array.isArray(marker)) return undefined\n if ((marker as any).degraded !== true) return undefined\n const reason = (marker as any).reason\n if (reason === 'budget_exceeded') return 'budget_exceeded' as const\n if (reason === 'payload_oversized') return 'oversized' as const\n if (reason === 'payload_non_serializable') return 'non_serializable' as const\n return 'unknown' as const\n })()\n downgrade = mergeDowngrade(downgrade, processDegradeReason)\n\n const errorSummary =\n e.type === 'process:error' || e.type === 'process:restart'\n ? (e.error as any as SerializableErrorSummary | undefined)\n : undefined\n\n return withDowngrade({\n ...base,\n timestamp: ts2,\n kind: 'process',\n label: e.type,\n meta: metaProjection.value,\n errorSummary,\n })\n }\n case 'lifecycle:error': {\n const e = event as Extract<Event, { readonly type: 'lifecycle:error' }>\n const summary = toSerializableErrorSummary(e.cause)\n downgrade = mergeDowngrade(downgrade, summary.downgrade)\n const metaInput = isLightLike\n ? { type: 'lifecycle:error', phase: e.phase, name: e.hook }\n : {\n type: 'lifecycle:error',\n phase: e.phase,\n name: e.hook,\n hook: e.hook,\n taskId: e.taskId,\n origin: e.origin,\n txnSeq: e.txnSeq,\n opSeq: e.opSeq,\n }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n return withDowngrade({\n ...base,\n kind: 'lifecycle',\n label: 'lifecycle:error',\n meta: metaProjection.value,\n errorSummary: summary.errorSummary,\n })\n }\n case 'diagnostic': {\n const e = event as Extract<Event, { readonly type: 'diagnostic' }>\n const metaInput = {\n code: e.code,\n severity: e.severity,\n message: e.message,\n hint: e.hint,\n actionTag: e.actionTag,\n kind: e.kind,\n opSeq: e.opSeq,\n trigger: e.trigger,\n }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n return withDowngrade({\n ...base,\n kind: 'diagnostic',\n label: e.code,\n meta: metaProjection.value,\n })\n }\n case 'warn:priority-inversion': {\n const e = event as Extract<Event, { readonly type: 'warn:priority-inversion' }>\n const metaInput = isLightLike\n ? {\n tickSeq: e.tickSeq,\n reason: e.reason,\n selectorId: e.selectorId,\n }\n : {\n tickSeq: e.tickSeq,\n reason: e.reason,\n selectorId: e.selectorId,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'diagnostic',\n label: e.type,\n meta: metaProjection.value,\n })\n }\n case 'warn:microtask-starvation': {\n const e = event as Extract<Event, { readonly type: 'warn:microtask-starvation' }>\n const metaInput = isLightLike\n ? {\n tickSeq: e.tickSeq,\n microtaskChainDepth: e.microtaskChainDepth,\n }\n : {\n tickSeq: e.tickSeq,\n microtaskChainDepth: e.microtaskChainDepth,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'diagnostic',\n label: e.type,\n meta: metaProjection.value,\n })\n }\n default: {\n if (typeof event.type !== 'string' || !event.type.startsWith('trace:')) {\n return undefined\n }\n\n // trace:devtools:ring-trim-policy: emit a stable slim payload for ring trim policy changes.\n if (event.type === 'trace:devtools:ring-trim-policy') {\n const data = (event as {\n readonly data?: {\n readonly mode?: unknown\n readonly threshold?: unknown\n readonly bufferSize?: unknown\n }\n }).data\n const metaInput = {\n mode: data?.mode,\n threshold: data?.threshold,\n bufferSize: data?.bufferSize,\n }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:tick: runtime tick evidence; keep Slim payload even in light tier.\n if (event.type === 'trace:tick') {\n const data: any = (event as any).data\n const metaInput = isLightLike\n ? {\n tickSeq: data?.tickSeq,\n phase: data?.phase,\n schedule: data?.schedule,\n triggerSummary: data?.triggerSummary,\n anchors: data?.anchors,\n budget: data?.budget,\n backlog: data?.backlog,\n result: data?.result,\n }\n : {\n data,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:txn-lane: slim evidence for Txn Lanes (lane/backlog/reasons), used for Devtools summary and offline export.\n if (event.type === 'trace:txn-lane') {\n const data: any = (event as any).data\n const evidence = data?.evidence ?? data\n\n const metaProjection = projectJsonValue(evidence)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n const label =\n typeof evidence?.kind === 'string' && evidence.kind.length > 0 ? String(evidence.kind) : 'txn-lane'\n\n return withDowngrade({\n ...base,\n kind: 'txn-lane',\n label,\n meta: metaProjection.value,\n })\n }\n\n if (event.type === 'trace:txn-phase') {\n const data: any = (event as any).data\n const metaInput = isLightLike\n ? {\n kind: data?.kind,\n originKind: data?.originKind,\n originName: data?.originName,\n commitMode: data?.commitMode,\n priority: data?.priority,\n txnPreludeMs: data?.txnPreludeMs,\n queue: data?.queue\n ? {\n lane: data.queue.lane,\n contextLookupMs: data.queue.contextLookupMs,\n resolvePolicyMs: data.queue.resolvePolicyMs,\n backpressureMs: data.queue.backpressureMs,\n enqueueBookkeepingMs: data.queue.enqueueBookkeepingMs,\n queueWaitMs: data.queue.queueWaitMs,\n startHandoffMs: data.queue.startHandoffMs,\n startMode: data.queue.startMode,\n }\n : undefined,\n dispatchActionRecordMs: data?.dispatchActionRecordMs,\n dispatchActionCommitHubMs: data?.dispatchActionCommitHubMs,\n dispatchActionCount: data?.dispatchActionCount,\n bodyShellMs: data?.bodyShellMs,\n asyncEscapeGuardMs: data?.asyncEscapeGuardMs,\n traitConvergeMs: data?.traitConvergeMs,\n scopedValidateMs: data?.scopedValidateMs,\n sourceSyncMs: data?.sourceSyncMs,\n commit: data?.commit\n ? {\n totalMs: data.commit.totalMs,\n rowIdSyncMs: data.commit.rowIdSyncMs,\n publishCommitMs: data.commit.publishCommitMs,\n stateUpdateDebugRecordMs: data.commit.stateUpdateDebugRecordMs,\n onCommitBeforeStateUpdateMs: data.commit.onCommitBeforeStateUpdateMs,\n onCommitAfterStateUpdateMs: data.commit.onCommitAfterStateUpdateMs,\n }\n : undefined,\n }\n : data\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:react-render / trace:react-selector: keep slim meta only (field trimming is handled by JsonValue projection).\n if (event.type === 'trace:react-render' || event.type === 'trace:react-selector') {\n const data: any = (event as any).data\n const metaProjection = projectJsonValue(\n isLightLike\n ? {\n componentLabel: data?.componentLabel,\n selectorKey: data?.selectorKey,\n fieldPaths: data?.fieldPaths,\n selectorId: data?.selectorId,\n lane: data?.lane,\n producer: data?.producer,\n fallbackReason: data?.fallbackReason,\n readsDigest: data?.readsDigest,\n equalsKind: data?.equalsKind,\n strictModePhase: data?.strictModePhase,\n }\n : {\n componentLabel: data?.componentLabel,\n selectorKey: data?.selectorKey,\n fieldPaths: data?.fieldPaths,\n selectorId: data?.selectorId,\n lane: data?.lane,\n producer: data?.producer,\n fallbackReason: data?.fallbackReason,\n readsDigest: data?.readsDigest,\n equalsKind: data?.equalsKind,\n strictModePhase: data?.strictModePhase,\n meta: data?.meta,\n },\n )\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n const label =\n typeof data?.componentLabel === 'string' && data.componentLabel.length > 0\n ? data.componentLabel\n : event.type === 'trace:react-selector'\n ? 'react-selector'\n : 'react-render'\n const last = lastTxnByInstance.get(instanceId)\n const txnSeqFromMeta =\n typeof data?.meta?.txnSeq === 'number' && Number.isFinite(data.meta.txnSeq) && data.meta.txnSeq >= 0\n ? Math.floor(data.meta.txnSeq)\n : undefined\n const txnIdFromMeta =\n typeof data?.meta?.txnId === 'string' && data.meta.txnId.length > 0 ? data.meta.txnId : undefined\n const txnIdAligned = txnIdFromMeta ?? base.txnId ?? last?.txnId\n const txnSeqAligned = txnSeqFromMeta ?? (base.txnSeq > 0 ? base.txnSeq : (last?.txnSeq ?? base.txnSeq))\n const ref = withDowngrade({\n ...base,\n txnId: txnIdAligned,\n txnSeq: txnSeqAligned,\n kind: event.type === 'trace:react-selector' ? 'react-selector' : 'react-render',\n label,\n meta: metaProjection.value,\n })\n\n if (instanceId !== 'unknown' && (ref.txnId == null || ref.txnSeq <= 0)) {\n enqueuePendingTxnAlignment(instanceId, ref)\n }\n\n return ref\n }\n\n // trace:selector:eval: SelectorGraph evaluation evidence within commit (used for txn→selector→render causal chain).\n if (event.type === 'trace:selector:eval') {\n const data: any = (event as any).data\n const metaInput = {\n selectorId: data?.selectorId,\n lane: data?.lane,\n producer: data?.producer,\n fallbackReason: data?.fallbackReason,\n readsDigest: data?.readsDigest,\n equalsKind: data?.equalsKind,\n changed: data?.changed,\n evalMs: data?.evalMs,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:exec-vm: Exec VM hit/miss evidence (049). In light tier we keep minimal summary fields.\n if (event.type === 'trace:exec-vm') {\n const data: any = (event as any).data\n const metaInput = {\n version: data?.version,\n stage: data?.stage,\n hit: data?.hit,\n reasonCode: data?.reasonCode ?? data?.reason,\n reasonDetail: data?.reasonDetail,\n execIrVersion: data?.execIrVersion,\n execIrHash: data?.execIrHash,\n serviceId: data?.serviceId,\n implId: data?.implId,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:trait:converge: converge evidence must be exportable (JsonValue hard gate) and trims heavy fields in light tier.\n if (event.type === 'trace:trait:converge') {\n const data = (event as Extract<Event, { readonly type: 'trace:trait:converge' }>).data\n const metaInput =\n diagnosticsLevel === 'light'\n ? stripTraitConvergeLight(data)\n : diagnosticsLevel === 'sampled'\n ? stripTraitConvergeSampled(data)\n : stripTraitConvergeLegacyFields(data)\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'trait:converge',\n label: 'trait:converge',\n meta: metaProjection.value,\n })\n }\n\n // trace:trait:check: validation diagnostics must be exportable and stay slim in light tier (keep key fields).\n if (event.type === 'trace:trait:check') {\n const data = (event as Extract<Event, { readonly type: 'trace:trait:check' }>).data\n const metaInput = isLightLike ? stripTraitCheckLight(data) : data\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'trait:check',\n label: 'trait:check',\n meta: metaProjection.value,\n })\n }\n\n // trace:trait:validate: validation decision summary must be exportable and slim in light tier (no heavy fields by default).\n if (event.type === 'trace:trait:validate') {\n const data = (event as Extract<Event, { readonly type: 'trace:trait:validate' }>).data\n const metaProjection = projectJsonValue(data)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'trait:validate',\n label: 'trait:validate',\n meta: metaProjection.value,\n })\n }\n\n // trace:module:traits: final traits snapshot must be exportable and slim in light tier (digest/count).\n if (event.type === 'trace:module:traits') {\n const data: any = (event as any).data\n const metaInput = isLightLike\n ? {\n digest: data?.digest,\n count: data?.count,\n }\n : {\n digest: data?.digest,\n count: data?.count,\n traits: data?.traits,\n provenanceIndex: data?.provenanceIndex,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:module:traits:conflict: conflict details must be exportable; avoid relying on truncated lifecycle:error messages.\n if (event.type === 'trace:module:traits:conflict') {\n const data: any = (event as any).data\n const metaInput = isLightLike\n ? {\n conflictCount: data?.conflictCount,\n traitIds: data?.traitIds,\n }\n : {\n conflictCount: data?.conflictCount,\n conflicts: data?.conflicts,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:module:descriptor: keep key anchors even in light tier (avoid data being fully trimmed).\n if (event.type === 'trace:module:descriptor') {\n const data: any = (event as any).data\n const metaInput = isLightLike\n ? {\n id: data?.id,\n traits: data?.traits,\n source: data?.source,\n }\n : { data }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:effectop: keep slim op meta and prefer EffectOp.meta.moduleId when present.\n if (event.type === 'trace:effectop') {\n const data: any = (event as any).data\n const opMeta: any = data?.meta\n const opKind = (data?.kind ?? 'service') as RuntimeDebugEventKind\n const label = typeof data?.name === 'string' ? data.name : 'effectop'\n const moduleId2 = typeof opMeta?.moduleId === 'string' ? opMeta.moduleId : moduleId\n const txnId2 = typeof opMeta?.txnId === 'string' && opMeta.txnId.length > 0 ? opMeta.txnId : base.txnId\n const txnSeq2 =\n typeof opMeta?.txnSeq === 'number' && Number.isFinite(opMeta.txnSeq) && opMeta.txnSeq >= 0\n ? Math.floor(opMeta.txnSeq)\n : base.txnSeq\n\n const metaInput = isLightLike\n ? {\n id: data?.id,\n kind: data?.kind,\n name: data?.name,\n meta: opMeta,\n }\n : {\n id: data?.id,\n kind: data?.kind,\n name: data?.name,\n payload: data?.payload,\n meta: opMeta,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n moduleId: moduleId2,\n txnId: txnId2,\n txnSeq: txnSeq2,\n kind: opKind,\n label,\n meta: metaProjection.value,\n })\n }\n\n // Other trace:* events: categorize as devtools and trim meta by tier.\n const metaProjection = projectJsonValue(\n isLightLike\n ? {\n data: undefined,\n }\n : {\n data: (event as any).data,\n },\n )\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n }\n}\n","import { Cause } from 'effect'\n\nexport type DowngradeReason = 'non_serializable' | 'oversized' | 'unknown'\n\nexport interface SerializableErrorSummary {\n readonly message: string\n readonly name?: string\n readonly code?: string\n readonly hint?: string\n}\n\nexport interface ErrorSummaryResult {\n readonly errorSummary: SerializableErrorSummary\n readonly downgrade?: DowngradeReason\n}\n\nconst truncate = (value: string, maxLen: number): { readonly value: string; readonly truncated: boolean } => {\n if (value.length <= maxLen) return { value, truncated: false }\n return { value: value.slice(0, maxLen), truncated: true }\n}\n\nconst safeStringify = (value: unknown): { readonly ok: true; readonly json: string } | { readonly ok: false } => {\n try {\n return { ok: true, json: JSON.stringify(value) }\n } catch {\n return { ok: false }\n }\n}\n\nconst getMessageFromUnknown = (cause: unknown): string => {\n if (typeof cause === 'string') return cause\n if (typeof cause === 'number' || typeof cause === 'boolean' || typeof cause === 'bigint') return String(cause)\n if (cause instanceof Error) return cause.message || cause.name || 'Error'\n if (cause && typeof cause === 'object' && 'message' in (cause as any) && typeof (cause as any).message === 'string') {\n return (cause as any).message as string\n }\n\n // Try Effect Cause pretty (best-effort). This may include more details than needed,\n // so callers MUST still treat it as an untrusted/oversized string and truncate.\n try {\n const pretty = Cause.pretty(cause as Cause.Cause<unknown>)\n if (typeof pretty === 'string' && pretty.length > 0) return pretty\n } catch {\n // ignore\n }\n\n return 'Unknown error'\n}\n\nexport const toSerializableErrorSummary = (\n cause: unknown,\n options?: {\n readonly maxMessageLength?: number\n },\n): ErrorSummaryResult => {\n const maxMessageLength = options?.maxMessageLength ?? 256\n\n const messageRaw = getMessageFromUnknown(cause)\n const { value: message, truncated } = truncate(messageRaw, maxMessageLength)\n\n const summary: { message: string; name?: string; code?: string; hint?: string } = {\n message,\n }\n\n if (cause instanceof Error) {\n if (cause.name && cause.name !== 'Error') summary.name = cause.name\n const anyCause = cause as any\n if (typeof anyCause.code === 'string' && anyCause.code.length > 0) summary.code = anyCause.code\n else if (typeof anyCause.code === 'number' && Number.isFinite(anyCause.code)) summary.code = String(anyCause.code)\n if (typeof anyCause.hint === 'string' && anyCause.hint.length > 0) summary.hint = anyCause.hint\n return {\n errorSummary: summary,\n downgrade: truncated ? 'oversized' : undefined,\n }\n }\n\n if (cause && typeof cause === 'object') {\n const anyCause = cause as any\n if (typeof anyCause.name === 'string' && anyCause.name.length > 0) summary.name = anyCause.name\n if (typeof anyCause.code === 'string' && anyCause.code.length > 0) summary.code = anyCause.code\n if (typeof anyCause.hint === 'string' && anyCause.hint.length > 0) summary.hint = anyCause.hint\n }\n\n // If the original cause isn't JSON-serializable, mark it explicitly.\n const stringifyResult = safeStringify(cause)\n if (!stringifyResult.ok) {\n return {\n errorSummary: summary,\n downgrade: 'non_serializable',\n }\n }\n\n if (truncated) {\n return {\n errorSummary: summary,\n downgrade: 'oversized',\n }\n }\n\n if (message === 'Unknown error') {\n return {\n errorSummary: summary,\n downgrade: 'unknown',\n }\n }\n\n return { errorSummary: summary }\n}\n","import { Effect, Fiber, Ref, Stream } from 'effect'\nimport * as LatestFiberSlot from './LatestFiberSlot.js'\n\nconst EXHAUST_ACQUIRE_BUSY = [true, true] as const\nconst EXHAUST_REJECT_BUSY = [false, true] as const\n\nexport type ModeRunnerMode =\n | 'task' // sequential\n | 'parallel'\n | 'latest'\n | 'exhaust'\n\nexport type ModeRunnerLatestStrategy = 'switch' | 'fiber-slot'\n\nexport interface ModeRunnerLatestContext {\n readonly runId: number\n readonly isCurrent: Effect.Effect<boolean>\n}\n\nexport interface ModeRunnerConfig<Payload, E, R> {\n readonly stream: Stream.Stream<Payload>\n readonly mode: ModeRunnerMode\n readonly run: (payload: Payload) => Effect.Effect<void, E, R>\n readonly runLatest?: (payload: Payload, context: ModeRunnerLatestContext) => Effect.Effect<void, E, R>\n readonly resolveConcurrencyLimit: Effect.Effect<number | 'unbounded', never, any>\n readonly latest?: {\n readonly strategy?: ModeRunnerLatestStrategy\n readonly awaitLatestOnEnd?: boolean\n }\n}\n\ntype SwitchLatestState = {\n runningId: number\n nextId: number\n}\n\nconst beginSwitchLatestRun = (stateRef: Ref.Ref<SwitchLatestState>) =>\n Ref.modify(stateRef, (state) => {\n const runId = state.nextId + 1\n state.nextId = runId\n state.runningId = runId\n return [runId, state] as const\n })\n\nconst clearSwitchLatestIfCurrent = (stateRef: Ref.Ref<SwitchLatestState>, runId: number) =>\n Ref.update(stateRef, (state) => {\n if (state.runningId === runId) {\n state.runningId = 0\n }\n return state\n })\n\nconst runLatestSwitch = <Payload, E, R>(\n stream: Stream.Stream<Payload>,\n runLatest: (payload: Payload, context: ModeRunnerLatestContext) => Effect.Effect<void, E, R>,\n): Effect.Effect<void, E, R> =>\n Effect.gen(function* () {\n const stateRef = yield* Ref.make<SwitchLatestState>({\n runningId: 0,\n nextId: 0,\n })\n\n const makeEffect = (payload: Payload) =>\n Effect.gen(function* () {\n const runId = yield* beginSwitchLatestRun(stateRef)\n const isCurrent = Ref.get(stateRef).pipe(Effect.map((state) => state.runningId === runId))\n yield* runLatest(payload, { runId, isCurrent }).pipe(Effect.ensuring(clearSwitchLatestIfCurrent(stateRef, runId)))\n })\n\n return yield* Stream.runDrain(\n Stream.map(stream, makeEffect).pipe(Stream.switchMap((effect) => Stream.fromEffect(effect))),\n )\n })\n\nconst runLatestFiberSlot = <Payload, E, R>(\n stream: Stream.Stream<Payload>,\n runLatest: (payload: Payload, context: ModeRunnerLatestContext) => Effect.Effect<void, E, R>,\n awaitLatestOnEnd: boolean,\n): Effect.Effect<void, E, R> =>\n Effect.gen(function* () {\n const stateRef = yield* LatestFiberSlot.make<E>()\n\n const start = (payload: Payload) =>\n Effect.gen(function* () {\n const [prevFiber, prevRunningId, runId] = yield* LatestFiberSlot.beginRun(stateRef)\n\n if (prevFiber && prevRunningId !== 0) {\n // Do not wait for full shutdown of old work; stale writes are guarded by runId.\n yield* Fiber.interrupt(prevFiber)\n }\n\n const isCurrent = Ref.get(stateRef).pipe(Effect.map((state) => state.runningId === runId))\n const fiber = yield* Effect.forkChild(\n runLatest(payload, { runId, isCurrent }).pipe(Effect.ensuring(LatestFiberSlot.clearIfCurrent(stateRef, runId))),\n )\n yield* LatestFiberSlot.setFiberIfCurrent(stateRef, runId, fiber)\n })\n\n yield* Stream.runForEach(stream, start)\n\n if (!awaitLatestOnEnd) {\n return\n }\n\n const finalState = yield* Ref.get(stateRef)\n const finalFiber = finalState.runningId !== 0 ? finalState.fiber : undefined\n if (finalFiber) {\n yield* Fiber.join(finalFiber)\n }\n })\n\nconst runExhaust = <Payload, E, R>(\n stream: Stream.Stream<Payload>,\n run: (payload: Payload) => Effect.Effect<void, E, R>,\n resolveConcurrencyLimit: Effect.Effect<number | 'unbounded', never, any>,\n): Effect.Effect<void, E, R> =>\n Effect.gen(function* () {\n const concurrency = yield* resolveConcurrencyLimit\n const busyRef = yield* Ref.make(false)\n\n const mapper = (payload: Payload) =>\n Effect.gen(function* () {\n const acquired = yield* Ref.modify(busyRef, (busy) =>\n busy ? EXHAUST_REJECT_BUSY : EXHAUST_ACQUIRE_BUSY,\n )\n if (!acquired) {\n return\n }\n try {\n yield* run(payload)\n } finally {\n yield* Ref.set(busyRef, false)\n }\n })\n\n return yield* Stream.runDrain(stream.pipe(Stream.mapEffect(mapper, { concurrency })))\n })\n\nconst runParallel = <Payload, E, R>(\n stream: Stream.Stream<Payload>,\n run: (payload: Payload) => Effect.Effect<void, E, R>,\n resolveConcurrencyLimit: Effect.Effect<number | 'unbounded', never, any>,\n): Effect.Effect<void, E, R> =>\n Effect.gen(function* () {\n const concurrency = yield* resolveConcurrencyLimit\n return yield* Stream.runDrain(stream.pipe(Stream.mapEffect(run, { concurrency })))\n })\n\nexport const runByMode = <Payload, E, R>(config: ModeRunnerConfig<Payload, E, R>): Effect.Effect<void, E, R> => {\n const runLatest = config.runLatest ?? ((payload: Payload) => config.run(payload))\n if (config.mode === 'latest') {\n const strategy = config.latest?.strategy ?? 'switch'\n if (strategy === 'fiber-slot') {\n return runLatestFiberSlot(config.stream, runLatest, config.latest?.awaitLatestOnEnd ?? false)\n }\n return runLatestSwitch(config.stream, runLatest)\n }\n\n if (config.mode === 'exhaust') {\n return runExhaust(config.stream, config.run, config.resolveConcurrencyLimit)\n }\n\n if (config.mode === 'parallel') {\n return runParallel(config.stream, config.run, config.resolveConcurrencyLimit)\n }\n\n return Stream.runForEach(config.stream, config.run)\n}\n","import { Fiber, Ref } from 'effect'\n\nexport type LatestFiberSlotState<E = never> = {\n fiber: Fiber.Fiber<void, E> | undefined\n runningId: number\n nextId: number\n}\n\nexport const make = <E = never>() =>\n Ref.make<LatestFiberSlotState<E>>({\n fiber: undefined,\n runningId: 0,\n nextId: 0,\n })\n\nexport const beginRun = <E>(slotRef: Ref.Ref<LatestFiberSlotState<E>>) =>\n Ref.modify(slotRef, (state) => {\n const runId = state.nextId + 1\n const prevFiber = state.fiber\n const prevRunningId = state.runningId\n state.nextId = runId\n state.runningId = runId\n return [[prevFiber, prevRunningId, runId] as const, state] as const\n })\n\nexport const setFiberIfCurrent = <E>(\n slotRef: Ref.Ref<LatestFiberSlotState<E>>,\n runId: number,\n fiber: Fiber.Fiber<void, E>,\n) =>\n Ref.update(slotRef, (state) => {\n if (state.runningId === runId) {\n state.fiber = fiber\n }\n return state\n })\n\nexport const clearIfCurrent = <E>(slotRef: Ref.Ref<LatestFiberSlotState<E>>, runId: number) =>\n Ref.update(slotRef, (state) => {\n if (state.runningId === runId) {\n state.runningId = 0\n state.fiber = undefined\n }\n return state\n })\n"],"mappings":"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","names":["Cause","Cause","diagnosticsLevel","metaProjection","Effect","Fiber","Ref","Ref","Effect","Fiber"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// src/internal/serviceId.ts
|
|
2
|
+
import { ServiceMap } from "effect";
|
|
3
|
+
var asNonEmptyString = (value) => typeof value === "string" && value.length > 0 ? value : void 0;
|
|
4
|
+
var fromTag = (tag) => {
|
|
5
|
+
const anyTag = tag;
|
|
6
|
+
return asNonEmptyString(anyTag.key) ?? asNonEmptyString(anyTag.id) ?? asNonEmptyString(anyTag._id);
|
|
7
|
+
};
|
|
8
|
+
var tagCache = /* @__PURE__ */ new Map();
|
|
9
|
+
var tagFromServiceId = (serviceId) => {
|
|
10
|
+
const cached = tagCache.get(serviceId);
|
|
11
|
+
if (cached) return cached;
|
|
12
|
+
const created = ServiceMap.Service(serviceId);
|
|
13
|
+
tagCache.set(serviceId, created);
|
|
14
|
+
return created;
|
|
15
|
+
};
|
|
16
|
+
var moduleRuntimeTagFromModuleId = (moduleId) => tagFromServiceId(`@logixjs/Module/${moduleId}`);
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
fromTag,
|
|
20
|
+
tagFromServiceId,
|
|
21
|
+
moduleRuntimeTagFromModuleId
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=chunk-VJLWD47W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/serviceId.ts"],"sourcesContent":["import { ServiceMap } from 'effect'\n\n/**\n * ServiceId contract (specs/078-module-service-manifest/contracts/service-id.md):\n * - Stable string derived from Context.Tag by priority: tag.key ?? tag.id ?? tag._id\n * - tag.toString() is forbidden as an identity source (diagnostics only).\n */\n\nexport type ServiceId = string\n\nconst asNonEmptyString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.length > 0 ? value : undefined\n\nexport const fromTag = (tag: ServiceMap.Key<any, any>): ServiceId | undefined => {\n const anyTag = tag as any\n return asNonEmptyString(anyTag.key) ?? asNonEmptyString(anyTag.id) ?? asNonEmptyString(anyTag._id)\n}\n\nexport const requireFromTag = (tag: ServiceMap.Key<any, any>, options?: { readonly hint?: string }): ServiceId => {\n const id = fromTag(tag)\n if (id) return id\n\n const hint =\n options?.hint ??\n 'Define the Tag with a stable string key, e.g. `class X extends Context.Tag(\"my-svc/x\")<X, Service>() {}`.'\n\n throw new Error(`[InvalidServiceId] Tag is missing a stable id (tag.key/tag.id/tag._id).\\n${hint}`)\n}\n\n\nconst tagCache = new Map<string, ServiceMap.Key<any, any>>()\n\nexport const tagFromServiceId = <S = unknown>(serviceId: ServiceId): ServiceMap.Key<any, S> => {\n const cached = tagCache.get(serviceId)\n if (cached) return cached as ServiceMap.Key<any, S>\n const created = ServiceMap.Service<any, S>(serviceId) as ServiceMap.Key<any, S>\n tagCache.set(serviceId, created)\n return created\n}\n\nexport const moduleRuntimeTagFromModuleId = <S = unknown>(moduleId: string): ServiceMap.Key<any, S> =>\n tagFromServiceId<S>(`@logixjs/Module/${moduleId}`)\n"],"mappings":";AAAA,SAAS,kBAAkB;AAU3B,IAAM,mBAAmB,CAAC,UACxB,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AAEnD,IAAM,UAAU,CAAC,QAAyD;AAC/E,QAAM,SAAS;AACf,SAAO,iBAAiB,OAAO,GAAG,KAAK,iBAAiB,OAAO,EAAE,KAAK,iBAAiB,OAAO,GAAG;AACnG;AAcA,IAAM,WAAW,oBAAI,IAAsC;AAEpD,IAAM,mBAAmB,CAAc,cAAiD;AAC7F,QAAM,SAAS,SAAS,IAAI,SAAS;AACrC,MAAI,OAAQ,QAAO;AACnB,QAAM,UAAU,WAAW,QAAgB,SAAS;AACpD,WAAS,IAAI,WAAW,OAAO;AAC/B,SAAO;AACT;AAEO,IAAM,+BAA+B,CAAc,aACxD,iBAAoB,mBAAmB,QAAQ,EAAE;","names":[]}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
keyHash,
|
|
6
6
|
layer,
|
|
7
7
|
make
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-EKCDHWRK.js";
|
|
9
9
|
import {
|
|
10
10
|
__export
|
|
11
11
|
} from "./chunk-PZ5AY32C.js";
|
|
@@ -34,4 +34,4 @@ export {
|
|
|
34
34
|
layer2 as layer,
|
|
35
35
|
Resource_exports
|
|
36
36
|
};
|
|
37
|
-
//# sourceMappingURL=chunk-
|
|
37
|
+
//# sourceMappingURL=chunk-W647DX5Z.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
make
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ZBBMZMA6.js";
|
|
4
4
|
import {
|
|
5
5
|
__export
|
|
6
6
|
} from "./chunk-PZ5AY32C.js";
|
|
@@ -18,4 +18,4 @@ export {
|
|
|
18
18
|
make2 as make,
|
|
19
19
|
Bound_exports
|
|
20
20
|
};
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
21
|
+
//# sourceMappingURL=chunk-WFIIU3YZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Bound.ts"],"sourcesContent":["import type * as Logix from './internal/module.js'\nimport * as BoundApiRuntime from './internal/runtime/BoundApiRuntime.js'\n\n// ---------------------------------------------------------------------------\n// BoundApi: pre-bound accessors for a module shape + environment.\n// ---------------------------------------------------------------------------\n\n/**\n * Bound API factory: creates pre-bound accessors for a module shape + environment.\n *\n * - By default, resolves the current Logix.ModuleRuntime from `Logic.RuntimeTag`.\n * - Optionally accepts a `Logix.ModuleTag<Sh>` to explicitly choose the runtime (e.g. cross-module collaboration).\n *\n * Note: this is a type-only surface; the concrete implementation is injected by the runtime.\n * In this PoC, the runtime provides a placeholder value at compile-time boundaries.\n */\nexport type BoundApi<Sh extends Logix.AnyModuleShape, R = never> = Logix.BoundApi<Sh, R>\nexport type BoundApiPublic<Sh extends Logix.AnyModuleShape, R = never> = Logix.BoundApi<Sh, R>\n\nexport function make<Sh extends Logix.AnyModuleShape, R = never>(\n shape: Sh,\n runtime: Logix.
|
|
1
|
+
{"version":3,"sources":["../src/Bound.ts"],"sourcesContent":["import type * as Logix from './internal/module.js'\nimport * as BoundApiRuntime from './internal/runtime/BoundApiRuntime.js'\n\n// ---------------------------------------------------------------------------\n// BoundApi: pre-bound accessors for a module shape + environment.\n// ---------------------------------------------------------------------------\n\n/**\n * Bound API factory: creates pre-bound accessors for a module shape + environment.\n *\n * - By default, resolves the current Logix.ModuleRuntime from `Logic.RuntimeTag`.\n * - Optionally accepts a `Logix.ModuleTag<Sh>` to explicitly choose the runtime (e.g. cross-module collaboration).\n *\n * Note: this is a type-only surface; the concrete implementation is injected by the runtime.\n * In this PoC, the runtime provides a placeholder value at compile-time boundaries.\n */\nexport type BoundApi<Sh extends Logix.AnyModuleShape, R = never> = Logix.BoundApi<Sh, R>\nexport type BoundApiPublic<Sh extends Logix.AnyModuleShape, R = never> = Logix.BoundApi<Sh, R>\n\nexport function make<Sh extends Logix.AnyModuleShape, R = never>(\n shape: Sh,\n runtime: Logix.ModuleRuntimeOfShape<Sh>,\n): BoundApiPublic<Sh, R> {\n return BoundApiRuntime.make(shape, runtime) as BoundApiPublic<Sh, R>\n}\n"],"mappings":";;;;;;;;AAAA;AAAA;AAAA,cAAAA;AAAA;AAmBO,SAASC,MACd,OACA,SACuB;AACvB,SAAuB,KAAK,OAAO,OAAO;AAC5C;","names":["make","make"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// src/internal/runtime/core/RootContext.ts
|
|
2
|
+
import { Deferred, Effect, ServiceMap } from "effect";
|
|
3
|
+
var RootContextLifecycleError = class extends Error {
|
|
4
|
+
constructor(reasonCode, fromState, message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.reasonCode = reasonCode;
|
|
7
|
+
this.fromState = fromState;
|
|
8
|
+
this._tag = "RootContextLifecycleError";
|
|
9
|
+
this.name = "RootContextLifecycleError";
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var RootContextTagImpl = class extends ServiceMap.Service()("@logixjs/core/RootContext") {
|
|
13
|
+
};
|
|
14
|
+
var RootContextTag = RootContextTagImpl;
|
|
15
|
+
var failRootContextTransition = (root, reasonCode, message) => {
|
|
16
|
+
const fromState = root.lifecycle.state;
|
|
17
|
+
root.lifecycle = { state: "failed", reasonCode };
|
|
18
|
+
return new RootContextLifecycleError(reasonCode, fromState, message);
|
|
19
|
+
};
|
|
20
|
+
var makeRootContext = (args) => Effect.gen(function* () {
|
|
21
|
+
const ready = yield* Deferred.make();
|
|
22
|
+
return {
|
|
23
|
+
context: void 0,
|
|
24
|
+
ready,
|
|
25
|
+
lifecycle: { state: "uninitialized" },
|
|
26
|
+
appId: args?.appId,
|
|
27
|
+
appModuleIds: args?.appModuleIds
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
var mergeRootContext = (root, context) => Effect.gen(function* () {
|
|
31
|
+
if (root.context !== void 0 || root.lifecycle.state !== "uninitialized") {
|
|
32
|
+
return yield* Effect.fail(
|
|
33
|
+
failRootContextTransition(
|
|
34
|
+
root,
|
|
35
|
+
"root_context::merge_duplicate",
|
|
36
|
+
"[Logix] RootContext merge duplicated during app assembly."
|
|
37
|
+
)
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
root.context = context;
|
|
41
|
+
root.lifecycle = { state: "merged" };
|
|
42
|
+
return root;
|
|
43
|
+
});
|
|
44
|
+
var readyRootContext = (root) => Effect.gen(function* () {
|
|
45
|
+
if (root.lifecycle.state === "failed") {
|
|
46
|
+
return yield* Effect.fail(
|
|
47
|
+
failRootContextTransition(
|
|
48
|
+
root,
|
|
49
|
+
"root_context::ready_after_failed",
|
|
50
|
+
"[Logix] RootContext ready attempted after lifecycle entered failed state."
|
|
51
|
+
)
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
if (root.context === void 0 || root.lifecycle.state === "uninitialized") {
|
|
55
|
+
return yield* Effect.fail(
|
|
56
|
+
failRootContextTransition(
|
|
57
|
+
root,
|
|
58
|
+
"root_context::ready_without_merge",
|
|
59
|
+
"[Logix] RootContext ready attempted before merge during app assembly."
|
|
60
|
+
)
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
const readySucceeded = yield* Deferred.succeed(root.ready, root.context);
|
|
64
|
+
if (!readySucceeded || root.lifecycle.state === "ready") {
|
|
65
|
+
return yield* Effect.fail(
|
|
66
|
+
failRootContextTransition(
|
|
67
|
+
root,
|
|
68
|
+
"root_context::ready_duplicate",
|
|
69
|
+
"[Logix] RootContext ready was already completed before app assembly finished."
|
|
70
|
+
)
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
root.lifecycle = { state: "ready" };
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
export {
|
|
77
|
+
RootContextTag,
|
|
78
|
+
makeRootContext,
|
|
79
|
+
mergeRootContext,
|
|
80
|
+
readyRootContext
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=chunk-YZDJMAKL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/runtime/core/RootContext.ts"],"sourcesContent":["import { Deferred, Effect, ServiceMap } from 'effect'\n\nexport type RootContextLifecycleState = 'uninitialized' | 'merged' | 'ready' | 'failed'\n\nexport type RootContextLifecycleReasonCode =\n | 'root_context::merge_duplicate'\n | 'root_context::ready_without_merge'\n | 'root_context::ready_after_failed'\n | 'root_context::ready_duplicate'\n\nexport interface RootContextLifecycle {\n readonly state: RootContextLifecycleState\n readonly reasonCode?: RootContextLifecycleReasonCode\n}\n\nexport class RootContextLifecycleError extends Error {\n readonly _tag = 'RootContextLifecycleError'\n\n constructor(\n readonly reasonCode: RootContextLifecycleReasonCode,\n readonly fromState: RootContextLifecycleState,\n message: string,\n ) {\n super(message)\n this.name = 'RootContextLifecycleError'\n }\n}\n\nexport interface RootContext {\n context: ServiceMap.ServiceMap<any> | undefined\n readonly ready: Deferred.Deferred<ServiceMap.ServiceMap<any>, never>\n lifecycle: RootContextLifecycle\n readonly appId?: string\n readonly appModuleIds?: ReadonlyArray<string>\n}\n\nclass RootContextTagImpl extends ServiceMap.Service<RootContextTagImpl, RootContext>()('@logixjs/core/RootContext') {}\n\nexport const RootContextTag = RootContextTagImpl\n\nconst failRootContextTransition = (\n root: RootContext,\n reasonCode: RootContextLifecycleReasonCode,\n message: string,\n): RootContextLifecycleError => {\n const fromState = root.lifecycle.state\n root.lifecycle = { state: 'failed', reasonCode }\n return new RootContextLifecycleError(reasonCode, fromState, message)\n}\n\nexport const makeRootContext = (args?: {\n readonly appId?: string\n readonly appModuleIds?: ReadonlyArray<string>\n}): Effect.Effect<RootContext, never, never> =>\n Effect.gen(function* () {\n const ready = yield* Deferred.make<ServiceMap.ServiceMap<any>>()\n return {\n context: undefined,\n ready,\n lifecycle: { state: 'uninitialized' },\n appId: args?.appId,\n appModuleIds: args?.appModuleIds,\n } satisfies RootContext\n })\n\nexport const mergeRootContext = (\n root: RootContext,\n context: ServiceMap.ServiceMap<any>,\n): Effect.Effect<RootContext, RootContextLifecycleError, never> =>\n Effect.gen(function* () {\n if (root.context !== undefined || root.lifecycle.state !== 'uninitialized') {\n return yield* Effect.fail(\n failRootContextTransition(\n root,\n 'root_context::merge_duplicate',\n '[Logix] RootContext merge duplicated during app assembly.',\n ),\n )\n }\n\n root.context = context\n root.lifecycle = { state: 'merged' }\n return root\n })\n\nexport const readyRootContext = (root: RootContext): Effect.Effect<void, RootContextLifecycleError, never> =>\n Effect.gen(function* () {\n if (root.lifecycle.state === 'failed') {\n return yield* Effect.fail(\n failRootContextTransition(\n root,\n 'root_context::ready_after_failed',\n '[Logix] RootContext ready attempted after lifecycle entered failed state.',\n ),\n )\n }\n\n if (root.context === undefined || root.lifecycle.state === 'uninitialized') {\n return yield* Effect.fail(\n failRootContextTransition(\n root,\n 'root_context::ready_without_merge',\n '[Logix] RootContext ready attempted before merge during app assembly.',\n ),\n )\n }\n\n const readySucceeded = yield* Deferred.succeed(root.ready, root.context)\n if (!readySucceeded || root.lifecycle.state === 'ready') {\n return yield* Effect.fail(\n failRootContextTransition(\n root,\n 'root_context::ready_duplicate',\n '[Logix] RootContext ready was already completed before app assembly finished.',\n ),\n )\n }\n\n root.lifecycle = { state: 'ready' }\n })\n"],"mappings":";AAAA,SAAS,UAAU,QAAQ,kBAAkB;AAetC,IAAM,4BAAN,cAAwC,MAAM;AAAA,EAGnD,YACW,YACA,WACT,SACA;AACA,UAAM,OAAO;AAJJ;AACA;AAJX,SAAS,OAAO;AAQd,SAAK,OAAO;AAAA,EACd;AACF;AAUA,IAAM,qBAAN,cAAiC,WAAW,QAAyC,EAAE,2BAA2B,EAAE;AAAC;AAE9G,IAAM,iBAAiB;AAE9B,IAAM,4BAA4B,CAChC,MACA,YACA,YAC8B;AAC9B,QAAM,YAAY,KAAK,UAAU;AACjC,OAAK,YAAY,EAAE,OAAO,UAAU,WAAW;AAC/C,SAAO,IAAI,0BAA0B,YAAY,WAAW,OAAO;AACrE;AAEO,IAAM,kBAAkB,CAAC,SAI9B,OAAO,IAAI,aAAa;AACtB,QAAM,QAAQ,OAAO,SAAS,KAAiC;AAC/D,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,WAAW,EAAE,OAAO,gBAAgB;AAAA,IACpC,OAAO,MAAM;AAAA,IACb,cAAc,MAAM;AAAA,EACtB;AACF,CAAC;AAEI,IAAM,mBAAmB,CAC9B,MACA,YAEA,OAAO,IAAI,aAAa;AACtB,MAAI,KAAK,YAAY,UAAa,KAAK,UAAU,UAAU,iBAAiB;AAC1E,WAAO,OAAO,OAAO;AAAA,MACnB;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,OAAK,UAAU;AACf,OAAK,YAAY,EAAE,OAAO,SAAS;AACnC,SAAO;AACT,CAAC;AAEI,IAAM,mBAAmB,CAAC,SAC/B,OAAO,IAAI,aAAa;AACtB,MAAI,KAAK,UAAU,UAAU,UAAU;AACrC,WAAO,OAAO,OAAO;AAAA,MACnB;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,YAAY,UAAa,KAAK,UAAU,UAAU,iBAAiB;AAC1E,WAAO,OAAO,OAAO;AAAA,MACnB;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB,OAAO,SAAS,QAAQ,KAAK,OAAO,KAAK,OAAO;AACvE,MAAI,CAAC,kBAAkB,KAAK,UAAU,UAAU,SAAS;AACvD,WAAO,OAAO,OAAO;AAAA,MACnB;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,OAAK,YAAY,EAAE,OAAO,QAAQ;AACpC,CAAC;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isDevEnv
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AYELIQXR.js";
|
|
4
4
|
import {
|
|
5
5
|
__export
|
|
6
6
|
} from "./chunk-PZ5AY32C.js";
|
|
@@ -13,10 +13,10 @@ __export(ScopeRegistry_exports, {
|
|
|
13
13
|
internal: () => internal,
|
|
14
14
|
layer: () => layer
|
|
15
15
|
});
|
|
16
|
-
import {
|
|
17
|
-
var ScopeRegistryTag = class extends
|
|
16
|
+
import { Layer, ServiceMap } from "effect";
|
|
17
|
+
var ScopeRegistryTag = class extends ServiceMap.Service()("@logixjs/core/ScopeRegistry") {
|
|
18
18
|
};
|
|
19
|
-
var ScopedRuntimeTag = class extends
|
|
19
|
+
var ScopedRuntimeTag = class extends ServiceMap.Service()("@logixjs/core/ScopeRegistry/ScopedRuntime") {
|
|
20
20
|
};
|
|
21
21
|
var internal = {
|
|
22
22
|
ScopeRegistryTag,
|
|
@@ -108,4 +108,4 @@ export {
|
|
|
108
108
|
layer,
|
|
109
109
|
ScopeRegistry_exports
|
|
110
110
|
};
|
|
111
|
-
//# sourceMappingURL=chunk-
|
|
111
|
+
//# sourceMappingURL=chunk-Z5XH6VHY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ScopeRegistry.ts"],"sourcesContent":["import { Layer, ManagedRuntime, ServiceMap } from 'effect'\nimport { isDevEnv } from './Env.js'\n\nexport type ScopeId = string\n\ntype AnyTag = ServiceMap.Key<any, any>\n\ntype LeaseId = number\n\ntype Entry = {\n readonly leaseId: LeaseId\n readonly value: unknown\n}\n\nexport interface ScopeRegistry {\n /**\n * Registers a scope-bound value (multi-party registration supported; the last registration wins for get()).\n *\n * Returns a release function that revokes this registration.\n */\n readonly register: <A>(scopeId: ScopeId, token: ServiceMap.Key<any, A>, value: A) => { readonly release: () => void }\n\n /**\n * Reads the current value for a token under a scope (the last registered value).\n */\n readonly get: <A>(scopeId: ScopeId, token: ServiceMap.Key<any, A>) => A | undefined\n\n /**\n * Deletes all registrations of a token under a scope (regardless of who registered them).\n */\n readonly clearToken: (scopeId: ScopeId, token: AnyTag) => void\n\n /**\n * Clears all tokens under a scope.\n */\n readonly clearScope: (scopeId: ScopeId) => void\n\n /**\n * Clears the entire registry.\n */\n readonly clearAll: () => void\n}\n\nexport class ScopeRegistryTag extends ServiceMap.Service<ScopeRegistryTag, ScopeRegistry>()('@logixjs/core/ScopeRegistry') {}\n\n/**\n * Stores a \"ManagedRuntime handle for a scope\" in ScopeRegistry.\n *\n * Typical use case: reusing the same runtime scope (Env/Scope/FiberRef) across React subtrees / independent roots\n * by registering the runtime under a scopeId and retrieving it elsewhere.\n */\nexport class ScopedRuntimeTag extends ServiceMap.Service<\n ScopedRuntimeTag,\n ManagedRuntime.ManagedRuntime<any, any>\n>()('@logixjs/core/ScopeRegistry/ScopedRuntime') {}\n\nexport const internal = {\n ScopeRegistryTag,\n ScopedRuntimeTag,\n}\n\nconst makeRegistry = (): ScopeRegistry => {\n let nextLeaseId: LeaseId = 0\n\n // scopeId -> (token -> stack(entries))\n const scopes = new Map<ScopeId, Map<AnyTag, Array<Entry>>>()\n\n const getStack = (scopeId: ScopeId, token: AnyTag): Array<Entry> => {\n const byToken = scopes.get(scopeId)\n if (byToken) {\n const stack = byToken.get(token)\n if (stack) return stack\n const created: Array<Entry> = []\n byToken.set(token, created)\n return created\n }\n const created: Array<Entry> = []\n const createdByToken = new Map<AnyTag, Array<Entry>>()\n createdByToken.set(token, created)\n scopes.set(scopeId, createdByToken)\n return created\n }\n\n const tryDeleteEmpty = (scopeId: ScopeId, token: AnyTag): void => {\n const byToken = scopes.get(scopeId)\n if (!byToken) return\n const stack = byToken.get(token)\n if (stack && stack.length === 0) {\n byToken.delete(token)\n }\n if (byToken.size === 0) {\n scopes.delete(scopeId)\n }\n }\n\n const register: ScopeRegistry['register'] = (scopeId, token, value) => {\n nextLeaseId += 1\n const leaseId = nextLeaseId\n const stack = getStack(scopeId, token as AnyTag)\n\n // dev: multiple registrations for the same scopeId+token often indicate scopeId collisions or lifecycle leaks.\n // React / concurrent rendering / Provider rebuilds may cause short re-entrancy, so this is a soft warning.\n if (isDevEnv() && stack.length > 0) {\n // eslint-disable-next-line no-console\n console.debug(\n `[ScopeRegistry] Multiple registrations detected for scopeId=\"${scopeId}\". ` +\n `This is allowed (LIFO), but usually indicates scopeId collisions or missing cleanup.`,\n )\n }\n\n stack.push({ leaseId, value })\n\n const release = () => {\n const stack2 = scopes.get(scopeId)?.get(token as AnyTag)\n if (!stack2 || stack2.length === 0) return\n\n // Common case: LIFO release\n const last = stack2[stack2.length - 1]\n if (last && last.leaseId === leaseId) {\n stack2.pop()\n tryDeleteEmpty(scopeId, token as AnyTag)\n return\n }\n\n // Fallback: releasing from the middle (linear scan)\n const idx = stack2.findIndex((e) => e.leaseId === leaseId)\n if (idx >= 0) {\n stack2.splice(idx, 1)\n tryDeleteEmpty(scopeId, token as AnyTag)\n }\n }\n\n return { release }\n }\n\n const get: ScopeRegistry['get'] = (scopeId, token) => {\n const stack = scopes.get(scopeId)?.get(token as AnyTag)\n if (!stack || stack.length === 0) return undefined\n return stack[stack.length - 1]!.value as any\n }\n\n const clearToken: ScopeRegistry['clearToken'] = (scopeId, token) => {\n const byToken = scopes.get(scopeId)\n if (!byToken) return\n byToken.delete(token)\n if (byToken.size === 0) {\n scopes.delete(scopeId)\n }\n }\n\n const clearScope: ScopeRegistry['clearScope'] = (scopeId) => {\n scopes.delete(scopeId)\n }\n\n const clearAll: ScopeRegistry['clearAll'] = () => {\n scopes.clear()\n }\n\n return { register, get, clearToken, clearScope, clearAll }\n}\n\nexport const layer = (): Layer.Layer<ScopeRegistryTag, never, never> => Layer.succeed(ScopeRegistryTag, makeRegistry())\n"],"mappings":"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","names":["created"]}
|