@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/WorkflowRuntime.ts"],"sourcesContent":["import { Cause, Deferred, Effect, Exit, Fiber, Option, Semaphore, ServiceMap, Stream } from 'effect'\nimport * as EffectOpCore from './EffectOpCore.js'\nimport * as Debug from './DebugSink.js'\nimport * as LogicUnitMeta from './LogicUnitMeta.js'\nimport { toSerializableErrorSummary } from './errorSummary.js'\nimport type { AnyModuleShape, LogicPlan, ModuleRuntime as PublicModuleRuntime } from './module.js'\nimport { HostSchedulerTag, TickSchedulerTag } from './env.js'\nimport { getRuntimeInternals } from './runtimeInternalsAccessor.js'\nimport { RootContextTag, type RootContext } from './RootContext.js'\nimport * as TaskRunner from './TaskRunner.js'\nimport { makeRunBudgetEnvelopeV1, makeRunDegradeMarkerV1 } from './diagnosticsBudget.js'\nimport * as EffectOp from '../../effect-op.js'\nimport { makeWorkflowError } from '../../workflow/errors.js'\nimport { compileWorkflowRuntimeStepsV1, type CompiledWorkflowStep } from '../../workflow/compiler.js'\nimport { evalInputExpr, type CompiledInputExpr } from '../../workflow/inputExpr.js'\nimport type { WorkflowDefV1, WorkflowTriggerV1 } from '../../workflow/model.js'\nimport { tagFromServiceId } from '../../serviceId.js'\n\ntype ModuleTag = ServiceMap.Key<unknown, PublicModuleRuntime<unknown, unknown>>\n\nexport type WorkflowLike = {\n readonly _tag?: 'Workflow'\n readonly def: WorkflowDefV1\n readonly validate?: () => void\n}\n\ntype ConcurrencyMode = 'latest' | 'exhaust' | 'parallel'\ntype Priority = 'urgent' | 'nonUrgent'\n\ntype ServicePort = (input: unknown) => Effect.Effect<unknown, unknown, unknown>\n\ntype CompiledRuntimeStep =\n | { readonly kind: 'dispatch'; readonly key: string; readonly actionTag: string; readonly payload?: CompiledInputExpr }\n | { readonly kind: 'delay'; readonly key: string; readonly ms: number }\n | {\n readonly kind: 'call'\n readonly key: string\n readonly serviceId: string\n readonly input?: CompiledInputExpr\n readonly timeoutMs?: number\n readonly retryTimes?: number\n readonly port: ServicePort\n readonly onSuccess: ReadonlyArray<CompiledRuntimeStep>\n readonly onFailure: ReadonlyArray<CompiledRuntimeStep>\n }\n\ntype CompiledProgram = {\n readonly programId: string\n readonly localId: string\n readonly trigger: WorkflowTriggerV1\n readonly concurrency: ConcurrencyMode\n readonly priority: Priority\n readonly compiledSteps: ReadonlyArray<CompiledWorkflowStep>\n steps?: ReadonlyArray<CompiledRuntimeStep>\n}\n\ntype ProgramState =\n | { readonly mode: 'latest'; runSeq: number; current?: Fiber.Fiber<void, never>; currentRunId?: string }\n | { readonly mode: 'exhaust'; runSeq: number; busy: boolean }\n | { readonly mode: 'parallel'; runSeq: number }\n\ntype ProgramEntry = {\n readonly program: CompiledProgram\n readonly state: ProgramState\n}\n\ntype WorkflowRegistryV1 = {\n readonly byActionTag: Map<string, ReadonlyArray<ProgramEntry>>\n readonly entries: Array<ProgramEntry>\n watcherStarted: boolean\n watcherStartCount: number\n portsResolving: boolean\n portsReady: Deferred.Deferred<void, unknown>\n parallelLimiter: Semaphore.Semaphore | null | undefined\n}\n\nconst WORKFLOW_REGISTRY = Symbol.for('@logixjs/core/workflowRegistry')\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isObjectLike = (value: unknown): value is Record<string, unknown> | ((...args: never[]) => unknown) =>\n (typeof value === 'object' && value !== null) || typeof value === 'function'\n\nconst getRegistry = (runtime: object): WorkflowRegistryV1 | undefined =>\n (runtime as Record<PropertyKey, unknown>)[WORKFLOW_REGISTRY] as WorkflowRegistryV1 | undefined\n\nconst resolveActionTag = (action: unknown): string | undefined => {\n const tag = isObjectLike(action) ? (action as Record<string, unknown>)._tag : undefined\n if (typeof tag === 'string' && tag.length > 0) return tag\n const type = isObjectLike(action) ? (action as Record<string, unknown>).type : undefined\n if (typeof type === 'string' && type.length > 0) return type\n if (tag != null) return String(tag)\n if (type != null) return String(type)\n return undefined\n}\n\nconst asNonEmptyString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined\n\nconst KERNEL_PORT_SOURCE_REFRESH = 'logix/kernel/sourceRefresh'\n\n\nconst resolveServicePort = (\n runtime: PublicModuleRuntime<unknown, unknown>,\n env: ServiceMap.ServiceMap<unknown>,\n serviceId: string,\n programId: string,\n stepKey: string,\n): ServicePort => {\n if (serviceId === KERNEL_PORT_SOURCE_REFRESH) {\n return (input) =>\n Effect.gen(function* () {\n const fieldPath = asNonEmptyString(isRecord(input) ? input.fieldPath : undefined)\n if (!fieldPath) {\n throw makeWorkflowError({\n code: 'WORKFLOW_INVALID_STEP',\n message: 'KernelPort sourceRefresh requires input.fieldPath (non-empty string).',\n programId,\n source: { stepKey },\n detail: { serviceId, input },\n })\n }\n\n const internals = getRuntimeInternals(runtime)\n const handler = internals.traits.getSourceRefreshHandler(fieldPath)\n\n // If no refresh handler is registered, treat it as a no-op (aligns with BoundApiRuntime behavior).\n if (!handler) {\n return\n }\n\n const force = isRecord(input) && input.force === true\n const runHandler = (state: unknown) =>\n force ? Effect.provideService(handler(state), TaskRunner.forceSourceRefresh, true) : handler(state)\n\n const inTxn = yield* Effect.service(TaskRunner.inSyncTransactionFiber).pipe(Effect.orDie)\n if (inTxn) {\n const state = yield* runtime.getState\n yield* runHandler(state)\n return\n }\n\n yield* internals.txn.runWithStateTransaction(\n {\n kind: 'source-refresh',\n name: fieldPath,\n },\n () =>\n Effect.gen(function* () {\n const state = yield* runtime.getState\n yield* runHandler(state)\n }),\n )\n })\n }\n\n const tag = tagFromServiceId(serviceId)\n const opt = ServiceMap.getOption(env, tag)\n if (Option.isNone(opt)) {\n throw makeWorkflowError({\n code: 'WORKFLOW_MISSING_SERVICE',\n message: `Missing service for serviceId=\"${serviceId}\".`,\n programId,\n source: { stepKey },\n detail: { serviceId },\n })\n }\n\n const value: unknown = opt.value\n if (typeof value === 'function') {\n const fn = value as (input: unknown) => Effect.Effect<unknown, unknown, unknown>\n return (input) => fn(input)\n }\n\n const callFn = isObjectLike(value) ? (value as Record<string, unknown>).call : undefined\n if (typeof callFn === 'function') {\n const call = callFn as (this: unknown, input: unknown) => Effect.Effect<unknown, unknown, unknown>\n return (input) => call.call(value, input)\n }\n\n throw makeWorkflowError({\n code: 'WORKFLOW_INVALID_SERVICE_PORT',\n message: `Invalid service port for serviceId=\"${serviceId}\" (expected a function or { call(input): Effect }).`,\n programId,\n source: { stepKey },\n detail: { serviceId, portType: typeof value },\n })\n}\n\nconst compileSteps = (steps: ReadonlyArray<CompiledWorkflowStep>, resolvePort: (serviceId: string, stepKey: string) => ServicePort) => {\n const visit = (step: CompiledWorkflowStep): CompiledRuntimeStep => {\n switch (step.kind) {\n case 'dispatch':\n return {\n kind: 'dispatch',\n key: step.key,\n actionTag: step.actionTag,\n ...(step.payload ? { payload: step.payload } : null),\n }\n case 'delay':\n return { kind: 'delay', key: step.key, ms: step.ms }\n case 'call':\n return {\n kind: 'call',\n key: step.key,\n serviceId: step.serviceId,\n port: resolvePort(step.serviceId, step.key),\n ...(step.input ? { input: step.input } : null),\n ...(step.timeoutMs !== undefined ? { timeoutMs: step.timeoutMs } : null),\n ...(step.retryTimes !== undefined ? { retryTimes: step.retryTimes } : null),\n onSuccess: step.onSuccess.map(visit),\n onFailure: step.onFailure.map(visit),\n }\n }\n }\n\n return steps.map(visit)\n}\n\nconst resolveConcurrency = (def: WorkflowDefV1): ConcurrencyMode => (def.policy?.concurrency ?? 'parallel') as ConcurrencyMode\nconst resolvePriority = (def: WorkflowDefV1): Priority => (def.policy?.priority ?? 'urgent') as Priority\n\nconst makeRunId = (instanceId: string, programId: string, runSeq: number): string =>\n `${instanceId}::wf:${programId}::r${runSeq}`\n\nconst makeWorkflowRunBudgetMeta = (args: {\n readonly runId: string\n readonly diagnostics: Debug.DiagnosticsLevel\n readonly observed: boolean\n}) => ({\n budgetEnvelope: makeRunBudgetEnvelopeV1({\n domain: 'workflow',\n runId: args.runId,\n }),\n degrade: makeRunDegradeMarkerV1(\n !args.observed,\n args.observed ? undefined : args.diagnostics === 'sampled' ? 'sampled_out' : 'observer_disabled',\n ),\n})\n\nconst runBoundary = <A, E, R>(args: {\n readonly kind: EffectOp.EffectOp['kind']\n readonly name: string\n readonly effect: Effect.Effect<A, E, R>\n readonly payload?: unknown\n readonly meta?: EffectOp.EffectOp['meta']\n readonly middleware: EffectOpCore.EffectOpMiddlewareEnv | undefined\n}): Effect.Effect<A, E, R> =>\n Effect.gen(function* () {\n const op = yield* EffectOp.makeInRunSession({\n kind: args.kind,\n name: args.name,\n effect: args.effect,\n payload: args.payload,\n meta: args.meta,\n })\n const stack = args.middleware?.stack ?? []\n return yield* EffectOp.run(op, stack)\n }) as unknown as Effect.Effect<A, E, R>\n\ntype WorkflowBoundaryMeta = NonNullable<EffectOp.EffectOp['meta']>\ntype WorkflowBoundaryLocalMeta = Omit<WorkflowBoundaryMeta, 'moduleId' | 'instanceId' | 'programId'>\n\nconst makeWorkflowBoundaryRunner = (args: {\n readonly runtime: PublicModuleRuntime<unknown, unknown>\n readonly programId: string\n readonly middleware: EffectOpCore.EffectOpMiddlewareEnv | undefined\n}) => {\n const baseMeta = {\n moduleId: args.runtime.moduleId,\n instanceId: args.runtime.instanceId,\n programId: args.programId,\n } satisfies Pick<WorkflowBoundaryMeta, 'moduleId' | 'instanceId' | 'programId'>\n\n return <A, E, R>(boundary: {\n readonly kind: EffectOp.EffectOp['kind']\n readonly name: string\n readonly effect: Effect.Effect<A, E, R>\n readonly payload?: unknown\n readonly meta?: WorkflowBoundaryLocalMeta\n }): Effect.Effect<A, E, R> =>\n runBoundary({\n kind: boundary.kind,\n name: boundary.name,\n effect: boundary.effect,\n payload: boundary.payload,\n meta: {\n ...baseMeta,\n ...(boundary.meta ?? null),\n },\n middleware: args.middleware,\n })\n}\n\nconst makeTimer = (args: {\n readonly host: {\n readonly scheduleMicrotask: (cb: () => void) => void\n readonly scheduleMacrotask: (cb: () => void) => () => void\n readonly scheduleTimeout: (ms: number, cb: () => void) => () => void\n }\n readonly ms: number\n readonly onCancel: Effect.Effect<void, never, never>\n}): Effect.Effect<void, never, never> =>\n Effect.promise<void>((signal) =>\n new Promise<void>((resolve) => {\n let fired = false\n const cancel =\n args.ms <= 0\n ? args.host.scheduleMacrotask(() => {\n fired = true\n args.host.scheduleMicrotask(resolve)\n })\n : args.host.scheduleTimeout(args.ms, () => {\n fired = true\n args.host.scheduleMicrotask(resolve)\n })\n\n const onAbort = () => {\n cancel()\n if (!fired) {\n void Effect.runPromise(args.onCancel)\n }\n }\n\n signal.addEventListener('abort', onAbort, { once: true })\n }),\n )\n\nconst ensureLimiterReady = (registry: WorkflowRegistryV1, runtime: PublicModuleRuntime<unknown, unknown>) =>\n Effect.gen(function* () {\n if (registry.parallelLimiter !== undefined) return\n\n const internals = getRuntimeInternals(runtime)\n const policy = yield* internals.concurrency.resolveConcurrencyPolicy()\n const limit = policy.concurrencyLimit\n if (limit === 'unbounded') {\n registry.parallelLimiter = null\n return\n }\n\n const n = typeof limit === 'number' && Number.isFinite(limit) && limit >= 1 ? Math.floor(limit) : 16\n registry.parallelLimiter = yield* Semaphore.make(n)\n })\n\nconst withRootEnvIfAvailable = <A, E, R>(eff: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.gen(function* () {\n const rootOpt = yield* Effect.serviceOption(RootContextTag)\n if (Option.isNone(rootOpt)) {\n return yield* eff\n }\n const root: RootContext = rootOpt.value\n const rootEnv = root.context ?? (yield* Deferred.await(root.ready))\n\n const currentEnv = yield* Effect.services<unknown>()\n const mergedEnv = ServiceMap.merge(rootEnv as unknown as ServiceMap.ServiceMap<unknown>, currentEnv)\n return yield* (Effect.provideServices(eff as unknown as Effect.Effect<A, E, unknown>, mergedEnv) as unknown as Effect.Effect<A, E, R>)\n }) as unknown as Effect.Effect<A, E, R>\n\nconst ensurePortsResolved = (\n registry: WorkflowRegistryV1,\n runtime: PublicModuleRuntime<unknown, unknown>,\n): Effect.Effect<void, unknown, unknown> =>\n Effect.gen(function* () {\n const done = yield* Deferred.isDone(registry.portsReady)\n if (done) {\n yield* Deferred.await(registry.portsReady)\n return\n }\n\n if (registry.portsResolving) {\n yield* Deferred.await(registry.portsReady)\n return\n }\n\n registry.portsResolving = true\n const env = yield* Effect.services<unknown>()\n\n yield* Effect.sync(() => {\n const portCache = new Map<string, ServicePort>()\n for (const entry of registry.entries) {\n const program = entry.program\n if (program.steps) continue\n\n const resolvePort = (serviceId: string, stepKey: string): ServicePort => {\n const cached = portCache.get(serviceId)\n if (cached) return cached\n const resolved = resolveServicePort(runtime, env, serviceId, program.programId, stepKey)\n portCache.set(serviceId, resolved)\n return resolved\n }\n\n program.steps = compileSteps(program.compiledSteps, resolvePort)\n }\n }).pipe(\n Effect.tap(() => Deferred.succeed(registry.portsReady, undefined)),\n Effect.catchCause((cause) => Deferred.failCause(registry.portsReady, cause).pipe(Effect.flatMap(() => Effect.failCause(cause)))),\n Effect.ensuring(\n Effect.sync(() => {\n registry.portsResolving = false\n }),\n ),\n )\n })\n\nconst shouldObserveForRun = (diagnostics: Debug.DiagnosticsLevel, runSeq: number): boolean => {\n if (diagnostics === 'off') return false\n if (diagnostics === 'sampled') {\n // Deterministic sampling (no Math.random): 1/16 by runSeq.\n return (runSeq & 0x0f) === 0\n }\n return true\n}\n\nconst startProgramRun = (args: {\n readonly entry: ProgramEntry\n readonly runtime: PublicModuleRuntime<unknown, unknown>\n readonly registry: WorkflowRegistryV1\n readonly trigger: { readonly kind: 'action'; readonly actionTag: string } | { readonly kind: 'lifecycle'; readonly phase: string }\n readonly payload: unknown\n readonly middleware: EffectOpCore.EffectOpMiddlewareEnv | undefined\n}): Effect.Effect<void, never, unknown> =>\n Effect.gen(function* () {\n const { entry, runtime, registry } = args\n const { program, state } = entry\n const runWorkflowBoundary = makeWorkflowBoundaryRunner({\n runtime,\n programId: program.programId,\n middleware: args.middleware,\n })\n\n const diagnostics = yield* Effect.service(Debug.currentDiagnosticsLevel).pipe(Effect.orDie)\n\n const beginRun = (): { readonly runSeq: number; readonly runId: string; readonly canWriteBack: () => boolean } => {\n if (state.mode === 'latest') {\n state.runSeq += 1\n const runSeq = state.runSeq\n const runId = makeRunId(runtime.instanceId, program.programId, runSeq)\n return {\n runSeq,\n runId,\n canWriteBack: () => state.runSeq === runSeq,\n }\n }\n\n state.runSeq += 1\n const runSeq = state.runSeq\n const runId = makeRunId(runtime.instanceId, program.programId, runSeq)\n return {\n runSeq,\n runId,\n canWriteBack: () => true,\n }\n }\n\n if (state.mode === 'exhaust') {\n if (state.busy) {\n if (diagnostics !== 'off') {\n const observe = shouldObserveForRun(diagnostics, state.runSeq)\n const tickScheduler = yield* Effect.service(TickSchedulerTag).pipe(Effect.orDie)\n const tickSeq = observe ? tickScheduler.getTickSeq() : undefined\n yield* runWorkflowBoundary({\n kind: 'flow',\n name: 'workflow.drop',\n payload: { programId: program.programId, trigger: args.trigger },\n meta: {\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy: { disableObservers: !observe },\n reason: 'exhaust' as const,\n },\n effect: Effect.void,\n })\n }\n return\n }\n state.busy = true\n }\n\n const { runSeq, runId, canWriteBack } = beginRun()\n\n if (state.mode === 'latest') {\n const prev = state.current\n const prevRunId = state.currentRunId\n if (prev) {\n yield* Fiber.interrupt(prev)\n if (diagnostics !== 'off') {\n const observe = shouldObserveForRun(diagnostics, runSeq)\n const tickScheduler = yield* Effect.service(TickSchedulerTag).pipe(Effect.orDie)\n const tickSeq = observe ? tickScheduler.getTickSeq() : undefined\n yield* runWorkflowBoundary({\n kind: 'flow',\n name: 'workflow.cancel',\n payload: { programId: program.programId, cancelled: prevRunId, by: runId },\n meta: {\n ...makeWorkflowRunBudgetMeta({\n runId,\n diagnostics,\n observed: observe,\n }),\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy: { disableObservers: !observe },\n reason: 'latest' as const,\n cancelledByRunId: runId,\n cancelledRunId: prevRunId,\n },\n effect: Effect.void,\n })\n }\n }\n state.currentRunId = runId\n }\n\n const observe = shouldObserveForRun(diagnostics, runSeq)\n const policy = { disableObservers: !observe } satisfies NonNullable<EffectOp.EffectOp['meta']>['policy']\n const runBudgetMeta = makeWorkflowRunBudgetMeta({\n runId,\n diagnostics,\n observed: observe,\n })\n\n const programEffect = Effect.gen(function* () {\n const host = yield* Effect.service(HostSchedulerTag).pipe(Effect.orDie)\n const tick = yield* Effect.service(TickSchedulerTag).pipe(Effect.orDie)\n\n if (!program.steps) {\n throw makeWorkflowError({\n code: 'WORKFLOW_INVALID_DEF',\n message: `Workflow steps were not resolved before run (programId=\"${program.programId}\").`,\n programId: program.programId,\n detail: { programId: program.programId },\n })\n }\n\n const getTickSeq = (): number | undefined => (observe ? tick.getTickSeq() : undefined)\n const emitTimerEvents = observe && diagnostics === 'full'\n\n const evalPayload = (expr: CompiledInputExpr | undefined): unknown => (expr ? evalInputExpr(expr, args.payload) : undefined)\n\n const defaultInputForCall = (): unknown =>\n args.trigger.kind === 'action' ? args.payload : undefined\n\n let timerTriggered = false\n\n const runSteps = (steps: ReadonlyArray<CompiledRuntimeStep>): Effect.Effect<void, never, unknown> =>\n Effect.gen(function* () {\n for (const step of steps) {\n if (!canWriteBack()) return\n\n if (step.kind === 'dispatch') {\n const payload = evalPayload(step.payload)\n const action = { _tag: step.actionTag, payload }\n const tickSeq = getTickSeq()\n const timerOriginOverride = timerTriggered\n ? ({\n kind: 'workflow.timer',\n name: `timer:${program.programId}:${step.key}`,\n } as const)\n : undefined\n const internals = timerOriginOverride ? getRuntimeInternals(runtime) : undefined\n\n const dispatchEffectBase =\n program.priority === 'nonUrgent'\n ? timerOriginOverride\n ? internals!.txn.dispatchLowPriorityWithOriginOverride(action, timerOriginOverride)\n : runtime.dispatchLowPriority(action)\n : timerOriginOverride\n ? internals!.txn.dispatchWithOriginOverride(action, timerOriginOverride)\n : runtime.dispatch(action)\n\n yield* runWorkflowBoundary({\n kind: 'flow',\n name: 'workflow.dispatch',\n payload: { actionTag: step.actionTag },\n meta: {\n runId,\n ...runBudgetMeta,\n stepKey: step.key,\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy,\n },\n effect: dispatchEffectBase,\n }).pipe(Effect.asVoid)\n continue\n }\n\n if (step.kind === 'delay') {\n const timerId = emitTimerEvents ? `${runId}::timer:${step.key}` : undefined\n\n const recordTimerEvent = (name: string, patchMeta?: Record<string, unknown>) =>\n Effect.gen(function* () {\n const tickSeq = getTickSeq()\n yield* runWorkflowBoundary({\n kind: 'flow',\n name,\n payload: { ms: step.ms },\n meta: {\n runId,\n ...runBudgetMeta,\n stepKey: step.key,\n ...(timerId ? { timerId } : null),\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy,\n ...(patchMeta ?? null),\n },\n effect: Effect.void,\n })\n })\n\n const schedule = emitTimerEvents ? recordTimerEvent('workflow.timer.schedule') : Effect.void\n const onCancel = emitTimerEvents ? recordTimerEvent('workflow.timer.cancel', { reason: 'interrupt' }) : Effect.void\n const fired = emitTimerEvents ? recordTimerEvent('workflow.timer.fired') : Effect.void\n\n const delayEffect = schedule.pipe(\n Effect.flatMap(() => makeTimer({ host, ms: step.ms, onCancel })),\n Effect.flatMap(() => fired),\n )\n\n const tickSeq = getTickSeq()\n\n yield* runWorkflowBoundary({\n kind: 'flow',\n name: 'workflow.delay',\n payload: { ms: step.ms },\n meta: {\n runId,\n ...runBudgetMeta,\n stepKey: step.key,\n ...(tickSeq !== undefined ? { tickSeq } : null),\n ...(timerId ? { timerId } : null),\n policy,\n },\n effect: delayEffect,\n }).pipe(Effect.asVoid)\n\n timerTriggered = true\n continue\n }\n\n // call\n const input = step.input ? evalInputExpr(step.input, args.payload) : defaultInputForCall()\n const maxRetries = step.retryTimes ?? 0\n // Attempt id is 1-based and stable within a run.\n let exit: Exit.Exit<unknown, unknown> | undefined\n for (let attempt = 1; attempt <= maxRetries + 1; attempt += 1) {\n const tickSeq = getTickSeq()\n\n const base = runWorkflowBoundary({\n kind: 'service',\n name: `workflow.call:${step.serviceId}`,\n payload: { serviceId: step.serviceId },\n meta: {\n runId,\n ...runBudgetMeta,\n stepKey: step.key,\n serviceId: step.serviceId,\n attempt,\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy,\n },\n effect: step.port(input),\n })\n\n const withTimeout =\n step.timeoutMs === undefined\n ? base\n : Effect.gen(function* () {\n const timeoutMs = step.timeoutMs\n if (timeoutMs === undefined) {\n // Defensive: TS doesn't keep narrowing across generator boundaries.\n return yield* base\n }\n\n // Unique per attempt (otherwise retries would reuse the same timerId and break explainability).\n const timerId = emitTimerEvents ? `${runId}::timeout:${step.key}:a${attempt}` : undefined\n\n const recordTimeoutEvent = (name: string, patchMeta?: Record<string, unknown>) =>\n Effect.gen(function* () {\n const tickSeq = getTickSeq()\n yield* runWorkflowBoundary({\n kind: 'flow',\n name,\n payload: { ms: timeoutMs },\n meta: {\n runId,\n ...runBudgetMeta,\n stepKey: step.key,\n attempt,\n ...(timerId ? { timerId } : null),\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy,\n ...(patchMeta ?? null),\n },\n effect: Effect.void,\n })\n })\n\n const schedule = emitTimerEvents ? recordTimeoutEvent('workflow.timeout.schedule') : Effect.void\n const onCancel = emitTimerEvents\n ? recordTimeoutEvent('workflow.timeout.cancel', { reason: 'interrupt' })\n : Effect.void\n const fired = emitTimerEvents ? recordTimeoutEvent('workflow.timeout.fired') : Effect.void\n\n const timeoutError = makeWorkflowError({\n code: 'WORKFLOW_CALL_TIMEOUT',\n message: `Workflow call timed out (serviceId=\"${step.serviceId}\", timeoutMs=${timeoutMs}).`,\n programId: program.programId,\n source: { stepKey: step.key },\n detail: { serviceId: step.serviceId, timeoutMs, attempt },\n })\n\n const timeoutFail = schedule.pipe(\n Effect.flatMap(() => makeTimer({ host, ms: timeoutMs, onCancel })),\n Effect.flatMap(() => fired),\n Effect.flatMap(() => Effect.fail(timeoutError)),\n )\n\n return yield* Effect.raceFirst(base, timeoutFail)\n })\n\n const attemptExit = yield* Effect.exit(withTimeout)\n exit = attemptExit\n\n if (!canWriteBack() || Exit.isSuccess(attemptExit)) {\n break\n }\n\n // Do not retry defects/interrupts; only retry failure-channel errors.\n if (Cause.hasInterruptsOnly(attemptExit.cause) || Option.isNone(Cause.findErrorOption(attemptExit.cause))) {\n break\n }\n\n // Retry if we still have remaining attempts.\n if (attempt < maxRetries + 1) {\n continue\n }\n\n break\n }\n\n // Defensive: attempt loop always runs at least once.\n if (!exit) {\n exit = Exit.succeed(undefined) as Exit.Exit<unknown, unknown>\n }\n\n if (!canWriteBack()) return\n\n if (Exit.isSuccess(exit)) {\n yield* runSteps(step.onSuccess)\n } else {\n // Timeout uses a timer; mark the continuation as timer-triggered (for trace:tick.triggerSummary).\n const failure = Option.getOrUndefined(Cause.findErrorOption(exit.cause))\n const isTimeout =\n isObjectLike(failure) &&\n (failure as Record<string, unknown>)._tag === 'WorkflowError' &&\n (failure as Record<string, unknown>).code === 'WORKFLOW_CALL_TIMEOUT'\n if (isTimeout) timerTriggered = true\n yield* runSteps(step.onFailure)\n }\n }\n })\n\n const runTickSeq = getTickSeq()\n yield* runWorkflowBoundary({\n kind: 'flow',\n name: 'workflow.run',\n payload: { trigger: args.trigger },\n meta: {\n runId,\n ...runBudgetMeta,\n ...(runTickSeq !== undefined ? { tickSeq: runTickSeq } : null),\n policy,\n },\n effect: runSteps(program.steps!),\n }).pipe(Effect.asVoid)\n })\n\n const limited = registry.parallelLimiter ? registry.parallelLimiter.withPermits(1)(programEffect) : programEffect\n\n const runOutsideTransaction = Effect.provideService(limited.pipe(\n Effect.catchCause((cause) => {\n const { errorSummary, downgrade } = toSerializableErrorSummary(cause)\n const downgradeHint = downgrade ? ` (downgrade=${downgrade})` : ''\n return Debug.record({\n type: 'diagnostic',\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n code: 'workflow::run_crashed',\n severity: 'error',\n message: `Workflow run crashed for programId=\"${program.programId}\" runId=\"${runId}\".${downgradeHint}`,\n hint: `${errorSummary.name ? `${errorSummary.name}: ` : ''}${errorSummary.message}`,\n actionTag: args.trigger.kind === 'action' ? args.trigger.actionTag : undefined,\n kind: 'workflow_run_crashed',\n trigger: {\n kind: 'workflow',\n name: 'run',\n details: {\n programId: program.programId,\n runId,\n trigger: args.trigger,\n },\n },\n }).pipe(Effect.catchCause(() => Effect.void))\n }),\n Effect.ensuring(\n Effect.sync(() => {\n if (state.mode === 'exhaust') {\n state.busy = false\n }\n }),\n ),\n ), TaskRunner.inSyncTransactionFiber, false)\n\n const fiber = yield* runOutsideTransaction.pipe(Effect.forkScoped({ startImmediately: true }))\n\n if (state.mode === 'latest') {\n state.current = fiber as Fiber.Fiber<void, never>\n }\n })\n\ntype RegistryInit = {\n readonly moduleId: string\n readonly instanceId: string\n readonly registry: WorkflowRegistryV1\n}\n\nconst ensureRegistry = (runtime: PublicModuleRuntime<unknown, unknown>) =>\n Effect.gen(function* () {\n const existing = getRegistry(runtime)\n if (existing) {\n return {\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n registry: existing,\n }\n }\n\n const portsReady = yield* Deferred.make<void, unknown>()\n\n const next: WorkflowRegistryV1 = {\n byActionTag: new Map(),\n entries: [],\n watcherStarted: false,\n watcherStartCount: 0,\n portsResolving: false,\n portsReady,\n parallelLimiter: undefined,\n }\n\n Object.defineProperty(runtime, WORKFLOW_REGISTRY, {\n value: next,\n enumerable: false,\n configurable: true,\n writable: false,\n })\n\n return { moduleId: runtime.moduleId, instanceId: runtime.instanceId, registry: next }\n })\n\nconst registerPrograms = (args: {\n readonly moduleTag: ModuleTag\n readonly programs: ReadonlyArray<WorkflowLike>\n readonly entryLabel: string\n}): Effect.Effect<void, never, unknown> =>\n Effect.gen(function* () {\n const runtime = yield* Effect.service(args.moduleTag).pipe(Effect.orDie)\n const { moduleId, instanceId, registry } = yield* ensureRegistry(runtime)\n\n // Lazily resolve the global parallel limiter once.\n if (registry.parallelLimiter === undefined) {\n yield* ensureLimiterReady(registry, runtime)\n }\n\n const validateNoIoStepsForOnInit = (steps: ReadonlyArray<CompiledWorkflowStep>, programId: string): void => {\n const visit = (step: CompiledWorkflowStep): void => {\n if (step.kind === 'call' || step.kind === 'delay') {\n throw makeWorkflowError({\n code: 'WORKFLOW_INVALID_TRIGGER',\n message: 'Lifecycle onInit programs must not include call/delay (initRequired must stay sync-only; use onStart for IO/time).',\n programId,\n source: { stepKey: step.key },\n detail: { kind: step.kind },\n })\n }\n }\n for (const s of steps) visit(s)\n }\n\n const programHasCall = (steps: ReadonlyArray<CompiledWorkflowStep>): boolean =>\n steps.some((s) => s.kind === 'call')\n\n const insertEntry = (actionTag: string, entry: ProgramEntry): void => {\n const prev = registry.byActionTag.get(actionTag)\n registry.byActionTag.set(actionTag, prev ? [...prev, entry] : [entry])\n }\n\n const internals = getRuntimeInternals(runtime)\n\n for (const program of args.programs) {\n const def = program.def\n const localId = asNonEmptyString(def.localId)\n if (!localId) {\n throw makeWorkflowError({\n code: 'WORKFLOW_INVALID_DEF',\n message: 'Workflow.install: def.localId must be a non-empty string.',\n detail: { localId: def.localId },\n })\n }\n\n const programId = `${moduleId}.${localId}`\n const compiled = compileWorkflowRuntimeStepsV1({ def })\n\n if (def.trigger.kind === 'lifecycle' && def.trigger.phase === 'onInit') {\n validateNoIoStepsForOnInit(compiled, programId)\n }\n\n const compiledProgram: CompiledProgram = {\n programId,\n localId,\n trigger: def.trigger,\n concurrency: resolveConcurrency(def),\n priority: resolvePriority(def),\n compiledSteps: compiled,\n }\n\n if (!programHasCall(compiled)) {\n compiledProgram.steps = compileSteps(compiled, () => {\n throw makeWorkflowError({\n code: 'WORKFLOW_MISSING_SERVICE',\n message: 'Internal error: unexpected call step while resolving call-less program.',\n programId,\n detail: { programId },\n })\n })\n }\n\n const state: ProgramState =\n compiledProgram.concurrency === 'latest'\n ? { mode: 'latest', runSeq: 0, current: undefined, currentRunId: undefined }\n : compiledProgram.concurrency === 'exhaust'\n ? { mode: 'exhaust', runSeq: 0, busy: false }\n : { mode: 'parallel', runSeq: 0 }\n\n const entry: ProgramEntry = { program: compiledProgram, state }\n registry.entries.push(entry)\n\n if (def.trigger.kind === 'action') {\n insertEntry(def.trigger.actionTag, entry)\n } else {\n if (def.trigger.phase === 'onStart') {\n internals.lifecycle.registerStart(\n withRootEnvIfAvailable(\n Effect.gen(function* () {\n const middlewareOpt = yield* Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag)\n const middleware = Option.isSome(middlewareOpt) ? middlewareOpt.value : undefined\n yield* ensurePortsResolved(registry, runtime).pipe(Effect.orDie)\n yield* startProgramRun({\n entry,\n runtime,\n registry,\n trigger: { kind: 'lifecycle', phase: 'onStart' },\n payload: undefined,\n middleware,\n })\n }),\n ),\n { name: `workflow:${localId}` },\n )\n } else {\n internals.lifecycle.registerInitRequired(\n Effect.gen(function* () {\n const middlewareOpt = yield* Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag)\n const middleware = Option.isSome(middlewareOpt) ? middlewareOpt.value : undefined\n yield* startProgramRun({\n entry,\n runtime,\n registry,\n trigger: { kind: 'lifecycle', phase: 'onInit' },\n payload: undefined,\n middleware,\n })\n }),\n { name: `workflow:${localId}` },\n )\n }\n }\n }\n\n void instanceId\n })\n\nconst startWatcherIfNeeded = (args: {\n readonly moduleTag: ModuleTag\n readonly entryLabel: string\n}): Effect.Effect<void, never, unknown> =>\n Effect.gen(function* () {\n const runtime = yield* Effect.service(args.moduleTag).pipe(Effect.orDie)\n const init = yield* ensureRegistry(runtime)\n const registry = init.registry\n\n if (registry.watcherStarted) {\n return\n }\n\n registry.watcherStarted = true\n registry.watcherStartCount += 1\n\n const middlewareOpt = yield* Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag)\n const middleware = Option.isSome(middlewareOpt) ? middlewareOpt.value : undefined\n\n const actions$ = runtime.actions$ as Stream.Stream<unknown>\n\n const portsExit = yield* Effect.exit(ensurePortsResolved(registry, runtime))\n if (Exit.isFailure(portsExit)) {\n const { errorSummary, downgrade } = toSerializableErrorSummary(portsExit.cause)\n const downgradeHint = downgrade ? ` (downgrade=${downgrade})` : ''\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n code: 'workflow::ports_resolution_failed',\n severity: 'error',\n message: `Workflow ports resolution failed before starting watcher.${downgradeHint}`,\n hint: `${errorSummary.name ? `${errorSummary.name}: ` : ''}${errorSummary.message}`,\n kind: 'workflow_ports_resolution_failed',\n trigger: {\n kind: 'workflow',\n name: 'portsResolution',\n details: {\n entryLabel: args.entryLabel,\n },\n },\n })\n return\n }\n\n yield* Stream.runForEach(actions$, (action) =>\n Effect.gen(function* () {\n const actionTag = resolveActionTag(action)\n if (!actionTag) return\n\n const entries = registry.byActionTag.get(actionTag)\n if (!entries || entries.length === 0) return\n\n const payload = isRecord(action) ? action.payload : undefined\n\n yield* Effect.forEach(\n entries,\n (entry) =>\n startProgramRun({\n entry,\n runtime,\n registry,\n trigger: { kind: 'action', actionTag },\n payload,\n middleware,\n }),\n { discard: true },\n )\n }),\n ).pipe(\n (effect) => Effect.provideService(effect, TaskRunner.inSyncTransactionFiber, false),\n Effect.catchCause((cause) => {\n const { errorSummary, downgrade } = toSerializableErrorSummary(cause)\n const downgradeHint = downgrade ? ` (downgrade=${downgrade})` : ''\n return Debug.record({\n type: 'diagnostic',\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n code: 'workflow::watcher_crashed',\n severity: 'error',\n message: `Workflow watcher crashed.${downgradeHint}`,\n hint: `${errorSummary.name ? `${errorSummary.name}: ` : ''}${errorSummary.message}`,\n kind: 'workflow_watcher_crashed',\n trigger: {\n kind: 'workflow',\n name: 'watcher',\n details: {\n entryLabel: args.entryLabel,\n },\n },\n })\n }),\n )\n\n void args.entryLabel\n })\n\nexport const mountAll = (args: {\n readonly moduleTag: ModuleTag\n readonly programs: ReadonlyArray<WorkflowLike>\n}): LogicPlan<AnyModuleShape, unknown, never> => {\n const plan = {\n setup: registerPrograms({ moduleTag: args.moduleTag, programs: args.programs, entryLabel: 'mountAll' }),\n run: startWatcherIfNeeded({ moduleTag: args.moduleTag, entryLabel: 'mountAll' }),\n } satisfies LogicPlan<AnyModuleShape, unknown, never>\n\n LogicUnitMeta.attachLogicUnitMeta(plan, {\n id: '__logix_internal:workflows',\n kind: 'internal',\n name: 'workflows',\n })\n\n return plan\n}\n\nexport const installOne = (args: {\n readonly moduleTag: ModuleTag\n readonly program: WorkflowLike\n}): LogicPlan<AnyModuleShape, unknown, never> => {\n const localId = asNonEmptyString(args.program.def.localId) ?? 'unknown'\n const plan = {\n setup: registerPrograms({ moduleTag: args.moduleTag, programs: [args.program], entryLabel: `install:${localId}` }),\n run: startWatcherIfNeeded({ moduleTag: args.moduleTag, entryLabel: `install:${localId}` }),\n } satisfies LogicPlan<AnyModuleShape, unknown, never>\n\n LogicUnitMeta.attachLogicUnitMeta(plan, {\n id: `workflow:${localId}`,\n kind: 'workflow',\n name: localId,\n })\n\n return plan\n}\n\n// test-only probe: whether a watcher has started (for single-subscription gates).\nexport const __unsafeGetWatcherStartCount = (runtime: unknown): number => {\n if (!runtime || typeof runtime !== 'object') return 0\n const reg = getRegistry(runtime)\n return reg ? reg.watcherStartCount : 0\n}\n"],"mappings":"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","names":["runSeq","runId","observe","tickSeq"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isJsonValue
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LPPZDFTD.js";
|
|
4
4
|
|
|
5
5
|
// src/internal/observability/evidence.ts
|
|
6
6
|
var OBSERVABILITY_PROTOCOL_VERSION = "v1";
|
|
@@ -76,4 +76,4 @@ export {
|
|
|
76
76
|
exportEvidencePackage,
|
|
77
77
|
importEvidencePackage
|
|
78
78
|
};
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
79
|
+
//# sourceMappingURL=chunk-R4LFQGP3.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// src/internal/runtime/core/ConvergeStaticIrCollector.ts
|
|
2
|
+
import { Effect, Layer, ServiceMap } from "effect";
|
|
3
|
+
var currentConvergeStaticIrCollectors = ServiceMap.Reference(
|
|
4
|
+
"@logixjs/core/ConvergeStaticIrCollectors",
|
|
5
|
+
{
|
|
6
|
+
defaultValue: () => []
|
|
7
|
+
}
|
|
8
|
+
);
|
|
9
|
+
var appendConvergeStaticIrCollectors = (collectors) => Layer.effect(
|
|
10
|
+
currentConvergeStaticIrCollectors,
|
|
11
|
+
Effect.gen(function* () {
|
|
12
|
+
const current = yield* Effect.service(currentConvergeStaticIrCollectors);
|
|
13
|
+
return [...current, ...collectors];
|
|
14
|
+
})
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export {
|
|
18
|
+
currentConvergeStaticIrCollectors,
|
|
19
|
+
appendConvergeStaticIrCollectors
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=chunk-RHJIGDUE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/runtime/core/ConvergeStaticIrCollector.ts"],"sourcesContent":["import { Effect, Layer, ServiceMap } from 'effect'\nimport type { ConvergeStaticIrExport } from '../../state-trait/converge-ir.js'\n\n/**\n * ConvergeStaticIrCollector:\n * - Consumer interface for collecting ConvergeStaticIrExport (de-duplicated/indexed by staticIrDigest); an internal injectable capability.\n * - Typical implementations: DevtoolsHub (process-level) / EvidenceCollector (RunSession-level).\n *\n * Notes:\n * - Uses FiberRef<ReadonlyArray<...>> to allow appending multiple collectors within the same scope (similar to Debug sinks).\n * - ModuleRuntime reads the FiberRef value during installation and captures it in a closure, avoiding Env lookup on hot paths.\n */\nexport interface ConvergeStaticIrCollector {\n readonly register: (ir: ConvergeStaticIrExport) => void\n}\n\nexport const currentConvergeStaticIrCollectors = ServiceMap.Reference<ReadonlyArray<ConvergeStaticIrCollector>>(\n '@logixjs/core/ConvergeStaticIrCollectors',\n {\n defaultValue: () => [],\n },\n)\n\nexport const appendConvergeStaticIrCollectors = (\n collectors: ReadonlyArray<ConvergeStaticIrCollector>,\n): Layer.Layer<any, never, never> =>\n Layer.effect(\n currentConvergeStaticIrCollectors,\n Effect.gen(function* () {\n const current = yield* Effect.service(currentConvergeStaticIrCollectors)\n return [...current, ...collectors]\n }),\n ) as Layer.Layer<any, never, never>\n"],"mappings":";AAAA,SAAS,QAAQ,OAAO,kBAAkB;AAgBnC,IAAM,oCAAoC,WAAW;AAAA,EAC1D;AAAA,EACA;AAAA,IACE,cAAc,MAAM,CAAC;AAAA,EACvB;AACF;AAEO,IAAM,mCAAmC,CAC9C,eAEA,MAAM;AAAA,EACJ;AAAA,EACA,OAAO,IAAI,aAAa;AACtB,UAAM,UAAU,OAAO,OAAO,QAAQ,iCAAiC;AACvE,WAAO,CAAC,GAAG,SAAS,GAAG,UAAU;AAAA,EACnC,CAAC;AACH;","names":[]}
|
|
@@ -3,7 +3,7 @@ var CutoverCoverageMatrix = {
|
|
|
3
3
|
version: "v1",
|
|
4
4
|
requiredServiceIds: ["txnQueue", "operationRunner", "transaction", "dispatch"]
|
|
5
5
|
};
|
|
6
|
-
var expectedImplIdForKernel = (kernelId) => kernelId
|
|
6
|
+
var expectedImplIdForKernel = (kernelId) => kernelId;
|
|
7
7
|
var parseFallbackServiceIds = (overridesApplied) => {
|
|
8
8
|
const out = /* @__PURE__ */ new Set();
|
|
9
9
|
for (const entry of overridesApplied) {
|
|
@@ -15,7 +15,7 @@ var parseFallbackServiceIds = (overridesApplied) => {
|
|
|
15
15
|
const serviceId = entry.slice(colon + 1, eq);
|
|
16
16
|
if (serviceId.length > 0) out.add(serviceId);
|
|
17
17
|
}
|
|
18
|
-
return Array.from(out).sort(
|
|
18
|
+
return Array.from(out).sort();
|
|
19
19
|
};
|
|
20
20
|
var collectMissingServiceIds = (args) => {
|
|
21
21
|
const bindingByServiceId = /* @__PURE__ */ new Map();
|
|
@@ -26,14 +26,24 @@ var collectMissingServiceIds = (args) => {
|
|
|
26
26
|
for (const serviceId of args.requiredServiceIds) {
|
|
27
27
|
const binding = bindingByServiceId.get(serviceId);
|
|
28
28
|
const implId = binding?.implId;
|
|
29
|
-
if (!implId || implId !== args.expectedImplId) {
|
|
29
|
+
if (!implId || args.expectedImplId != null && implId !== args.expectedImplId) {
|
|
30
30
|
missing.push(serviceId);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
return missing;
|
|
34
34
|
};
|
|
35
|
+
var resolveGateReason = (args) => {
|
|
36
|
+
if (args.fullyActivated) return "fully_activated";
|
|
37
|
+
if (args.mode === "trial") return "trial_mode_with_fallback";
|
|
38
|
+
const hasMissing = args.missingServiceIds.length > 0;
|
|
39
|
+
const hasFallback = args.fallbackServiceIds.length > 0;
|
|
40
|
+
if (hasMissing && hasFallback) return "missing_and_fallback";
|
|
41
|
+
if (hasMissing) return "missing_required_bindings";
|
|
42
|
+
return "fallback_bindings_detected";
|
|
43
|
+
};
|
|
35
44
|
var evaluateFullCutoverGate = (args) => {
|
|
36
|
-
const expectedImplId = expectedImplIdForKernel(args.requestedKernelId);
|
|
45
|
+
const expectedImplId = args.requestedKernelId === "core" ? void 0 : expectedImplIdForKernel(args.requestedKernelId);
|
|
46
|
+
const expectedImplIdLabel = expectedImplId ?? "(any)";
|
|
37
47
|
const matrix = args.coverageMatrix ?? CutoverCoverageMatrix;
|
|
38
48
|
const fallbackServiceIds = parseFallbackServiceIds(args.runtimeServicesEvidence.overridesApplied);
|
|
39
49
|
const missingServiceIds = collectMissingServiceIds({
|
|
@@ -43,6 +53,12 @@ var evaluateFullCutoverGate = (args) => {
|
|
|
43
53
|
});
|
|
44
54
|
const fullyActivated = missingServiceIds.length === 0 && fallbackServiceIds.length === 0;
|
|
45
55
|
const verdict = args.mode === "fullCutover" ? fullyActivated ? "PASS" : "FAIL" : "PASS";
|
|
56
|
+
const reason = resolveGateReason({
|
|
57
|
+
mode: args.mode,
|
|
58
|
+
missingServiceIds,
|
|
59
|
+
fallbackServiceIds,
|
|
60
|
+
fullyActivated
|
|
61
|
+
});
|
|
46
62
|
const moduleIdRaw = args.runtimeServicesEvidence.moduleId;
|
|
47
63
|
const moduleId = typeof moduleIdRaw === "string" && moduleIdRaw.length > 0 ? moduleIdRaw : "unknown";
|
|
48
64
|
const anchor = {
|
|
@@ -60,9 +76,15 @@ var evaluateFullCutoverGate = (args) => {
|
|
|
60
76
|
missingServiceIds,
|
|
61
77
|
fallbackServiceIds,
|
|
62
78
|
anchor,
|
|
79
|
+
reason,
|
|
80
|
+
evidence: {
|
|
81
|
+
requiredServiceCount: matrix.requiredServiceIds.length,
|
|
82
|
+
missingServiceIds,
|
|
83
|
+
fallbackServiceIds
|
|
84
|
+
},
|
|
63
85
|
...level === "off" ? {} : {
|
|
64
86
|
details: {
|
|
65
|
-
expectedImplId,
|
|
87
|
+
expectedImplId: expectedImplIdLabel,
|
|
66
88
|
bindings: args.runtimeServicesEvidence.bindings,
|
|
67
89
|
overridesApplied: args.runtimeServicesEvidence.overridesApplied
|
|
68
90
|
}
|
|
@@ -71,8 +93,8 @@ var evaluateFullCutoverGate = (args) => {
|
|
|
71
93
|
};
|
|
72
94
|
|
|
73
95
|
// src/internal/runtime/core/RuntimeServiceBuiltins.ts
|
|
74
|
-
import {
|
|
75
|
-
var RuntimeServiceBuiltinsTag = class extends
|
|
96
|
+
import { ServiceMap } from "effect";
|
|
97
|
+
var RuntimeServiceBuiltinsTag = class extends ServiceMap.Service()("@logixjs/core/RuntimeServiceBuiltins") {
|
|
76
98
|
};
|
|
77
99
|
|
|
78
100
|
export {
|
|
@@ -80,4 +102,4 @@ export {
|
|
|
80
102
|
evaluateFullCutoverGate,
|
|
81
103
|
RuntimeServiceBuiltinsTag
|
|
82
104
|
};
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
105
|
+
//# sourceMappingURL=chunk-RLXO27MW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/runtime/core/FullCutoverGate.ts","../src/internal/runtime/core/RuntimeServiceBuiltins.ts"],"sourcesContent":["import type { KernelId } from './KernelRef.js'\nimport type { RuntimeServiceBinding, RuntimeServicesEvidence } from './RuntimeKernel.js'\n\nexport interface CutoverCoverageMatrix {\n readonly version: 'v1'\n readonly requiredServiceIds: ReadonlyArray<string>\n}\n\nexport const CutoverCoverageMatrix = {\n version: 'v1',\n requiredServiceIds: ['txnQueue', 'operationRunner', 'transaction', 'dispatch'],\n} as const satisfies CutoverCoverageMatrix\n\nexport type FullCutoverGateMode = 'trial' | 'fullCutover'\n\nexport type FullCutoverGateReason =\n | 'fully_activated'\n | 'trial_mode_with_fallback'\n | 'missing_required_bindings'\n | 'fallback_bindings_detected'\n | 'missing_and_fallback'\n\nexport interface FullCutoverGateAnchor {\n readonly moduleId: string\n readonly instanceId: string\n /**\n * Convention: txnSeq=0 denotes assembly (a wiring-time failure anchor).\n * Full Cutover Gate is evaluated during assembly by default, so it does not depend on a real txn.\n */\n readonly txnSeq: number\n}\n\nexport type FullCutoverGateVerdict = 'PASS' | 'FAIL'\n\nexport interface FullCutoverGateResult {\n readonly version: 'v1'\n readonly mode: FullCutoverGateMode\n readonly requestedKernelId: KernelId\n readonly verdict: FullCutoverGateVerdict\n /**\n * fullyActivated: a stricter \"full cutover\" truth value.\n * - Requires every serviceId in the coverage matrix to be bound to the expected implId.\n * - Requires no fallback (any `fallback=` in overridesApplied means not fully activated).\n *\n * Note: in trial mode the verdict may be PASS while fullyActivated can still be false.\n */\n readonly fullyActivated: boolean\n readonly missingServiceIds: ReadonlyArray<string>\n readonly fallbackServiceIds: ReadonlyArray<string>\n readonly anchor: FullCutoverGateAnchor\n readonly reason: FullCutoverGateReason\n readonly evidence: {\n readonly requiredServiceCount: number\n readonly missingServiceIds: ReadonlyArray<string>\n readonly fallbackServiceIds: ReadonlyArray<string>\n }\n /**\n * When diagnostics=off, it must stay slim (avoid permanent overhead).\n * In light/full, additional explainable info is allowed (still must be serializable).\n */\n readonly details?: {\n readonly expectedImplId: string\n readonly bindings: ReadonlyArray<RuntimeServiceBinding>\n readonly overridesApplied: ReadonlyArray<string>\n }\n}\n\nconst expectedImplIdForKernel = (kernelId: KernelId): string => kernelId\n\nconst parseFallbackServiceIds = (overridesApplied: ReadonlyArray<string>): ReadonlyArray<string> => {\n const out = new Set<string>()\n for (const entry of overridesApplied) {\n if (!entry.includes('(fallback=')) continue\n const colon = entry.indexOf(':')\n if (colon < 0) continue\n const eq = entry.indexOf('=', colon + 1)\n if (eq < 0) continue\n const serviceId = entry.slice(colon + 1, eq)\n if (serviceId.length > 0) out.add(serviceId)\n }\n return Array.from(out).sort()\n}\n\nconst collectMissingServiceIds = (args: {\n readonly expectedImplId: string | undefined\n readonly requiredServiceIds: ReadonlyArray<string>\n readonly bindings: ReadonlyArray<RuntimeServiceBinding>\n}): ReadonlyArray<string> => {\n const bindingByServiceId = new Map<string, RuntimeServiceBinding>()\n for (const b of args.bindings) {\n bindingByServiceId.set(b.serviceId, b)\n }\n\n const missing: string[] = []\n for (const serviceId of args.requiredServiceIds) {\n const binding = bindingByServiceId.get(serviceId)\n const implId = binding?.implId\n if (!implId || (args.expectedImplId != null && implId !== args.expectedImplId)) {\n missing.push(serviceId)\n }\n }\n\n return missing\n}\n\nconst resolveGateReason = (args: {\n readonly mode: FullCutoverGateMode\n readonly missingServiceIds: ReadonlyArray<string>\n readonly fallbackServiceIds: ReadonlyArray<string>\n readonly fullyActivated: boolean\n}): FullCutoverGateReason => {\n if (args.fullyActivated) return 'fully_activated'\n if (args.mode === 'trial') return 'trial_mode_with_fallback'\n const hasMissing = args.missingServiceIds.length > 0\n const hasFallback = args.fallbackServiceIds.length > 0\n if (hasMissing && hasFallback) return 'missing_and_fallback'\n if (hasMissing) return 'missing_required_bindings'\n return 'fallback_bindings_detected'\n}\n\nexport const evaluateFullCutoverGate = (args: {\n readonly mode: FullCutoverGateMode\n readonly requestedKernelId: KernelId\n readonly runtimeServicesEvidence: RuntimeServicesEvidence\n readonly coverageMatrix?: CutoverCoverageMatrix\n readonly diagnosticsLevel?: 'off' | 'light' | 'full' | 'sampled'\n}): FullCutoverGateResult => {\n const expectedImplId = args.requestedKernelId === 'core' ? undefined : expectedImplIdForKernel(args.requestedKernelId)\n const expectedImplIdLabel = expectedImplId ?? '(any)'\n const matrix = args.coverageMatrix ?? CutoverCoverageMatrix\n\n const fallbackServiceIds = parseFallbackServiceIds(args.runtimeServicesEvidence.overridesApplied)\n const missingServiceIds = collectMissingServiceIds({\n expectedImplId,\n requiredServiceIds: matrix.requiredServiceIds,\n bindings: args.runtimeServicesEvidence.bindings,\n })\n\n const fullyActivated = missingServiceIds.length === 0 && fallbackServiceIds.length === 0\n\n const verdict: FullCutoverGateVerdict = args.mode === 'fullCutover' ? (fullyActivated ? 'PASS' : 'FAIL') : 'PASS'\n const reason = resolveGateReason({\n mode: args.mode,\n missingServiceIds,\n fallbackServiceIds,\n fullyActivated,\n })\n\n const moduleIdRaw = args.runtimeServicesEvidence.moduleId\n const moduleId = typeof moduleIdRaw === 'string' && moduleIdRaw.length > 0 ? moduleIdRaw : 'unknown'\n\n const anchor: FullCutoverGateAnchor = {\n moduleId,\n instanceId: args.runtimeServicesEvidence.instanceId,\n txnSeq: 0,\n }\n\n const level = args.diagnosticsLevel ?? 'off'\n\n return {\n version: 'v1',\n mode: args.mode,\n requestedKernelId: args.requestedKernelId,\n verdict,\n fullyActivated,\n missingServiceIds,\n fallbackServiceIds,\n anchor,\n reason,\n evidence: {\n requiredServiceCount: matrix.requiredServiceIds.length,\n missingServiceIds,\n fallbackServiceIds,\n },\n ...(level === 'off'\n ? {}\n : {\n details: {\n expectedImplId: expectedImplIdLabel,\n bindings: args.runtimeServicesEvidence.bindings,\n overridesApplied: args.runtimeServicesEvidence.overridesApplied,\n },\n }),\n }\n}\n","import { Effect, ServiceMap } from 'effect'\n\nexport interface RuntimeServiceBuiltins {\n /**\n * Returns the make Effect of a builtin implementation (provided by ModuleRuntime during assembly, avoiding external code\n * capturing internal closures/state).\n * - For kernel implementors only (e.g. core-ng) to implement behavior-equivalent replacements or thin wrappers.\n * - Not an app-facing contract; must not be depended on from business Flow/Logic.\n */\n readonly getBuiltinMake: (serviceId: string) => Effect.Effect<unknown, never, any>\n}\n\nexport class RuntimeServiceBuiltinsTag extends ServiceMap.Service<\n RuntimeServiceBuiltinsTag,\n RuntimeServiceBuiltins\n>()('@logixjs/core/RuntimeServiceBuiltins') {}\n"],"mappings":"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","names":[]}
|