@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/state-trait/meta.ts"],"sourcesContent":["import type { JsonValue } from '../observability/jsonValue.js'\n\nexport type TraitMeta = Readonly<{\n readonly label?: string\n readonly description?: string\n readonly tags?: ReadonlyArray<string>\n readonly group?: string\n readonly docsUrl?: string\n readonly cacheGroup?: string\n /**\n * Extension annotations: only accepts `x-*` keys (anchors for capabilities like Phantom Source / Drift Detection).\n *\n * Constraints:\n * - Must be serializable (JSON values).\n * - Must be slim (keep only a few key hints; don't stuff large objects).\n */\n readonly annotations?: Readonly<Record<string, JsonValue>>\n /**\n * Semantic hint: when the same entity (e.g. the same resourceId) has multiple inconsistent meta declarations,\n * the one with canonical=true becomes the \"display canonical\", and others are recorded as conflicts.\n */\n readonly canonical?: boolean\n}>\n\nexport type TraitMetaSanitizeReport = Readonly<{\n /**\n * invalidInput:\n * - Input was not a plain object (e.g. string/array/function/etc).\n */\n readonly invalidInput?: boolean\n /**\n * unknownKeys:\n * - Top-level keys that are ignored (not part of TraitMeta, and not `x-*` legacy annotations).\n */\n readonly unknownKeys?: ReadonlyArray<string>\n readonly unknownKeyCount?: number\n /**\n * droppedKeys:\n * - Known keys that exist but are dropped due to invalid value type (e.g. tags is not string/array).\n */\n readonly droppedKeys?: ReadonlyArray<string>\n /**\n * droppedTagItems:\n * - Number of non-string/empty tag items dropped during normalization.\n */\n readonly droppedTagItems?: number\n /**\n * annotations:\n * - Only accepts `x-*` keys; invalid keys/values are dropped.\n */\n readonly ignoredAnnotationKeys?: ReadonlyArray<string>\n readonly ignoredAnnotationKeyCount?: number\n readonly droppedAnnotationKeys?: ReadonlyArray<string>\n readonly droppedAnnotationKeyCount?: number\n readonly droppedAnnotationValues?: number\n readonly droppedAnnotationNonSerializable?: number\n readonly droppedAnnotationDepthExceeded?: number\n readonly droppedAnnotationNonFiniteNumber?: number\n}>\n\nexport type TraitMetaConflict = Readonly<{\n readonly origin: string\n readonly meta: TraitMeta\n}>\n\nconst uniqSortedStrings = (input: ReadonlyArray<string>): ReadonlyArray<string> => {\n const set = new Set<string>()\n for (const item of input) {\n const v = item.trim()\n if (!v) continue\n set.add(v)\n }\n return Array.from(set).sort()\n}\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\ntype SanitizeJsonValueStats = {\n dropped: number\n nonSerializable: number\n depthExceeded: number\n nonFiniteNumber: number\n}\n\nconst sanitizeJsonValue = (input: unknown, depth: number, stats: SanitizeJsonValueStats): JsonValue | undefined => {\n if (input === null) return null\n\n if (typeof input === 'string') return input\n if (typeof input === 'boolean') return input\n if (typeof input === 'number') {\n if (!Number.isFinite(input)) {\n stats.dropped += 1\n stats.nonSerializable += 1\n stats.nonFiniteNumber += 1\n return undefined\n }\n return input\n }\n\n if (depth >= 6) {\n stats.dropped += 1\n stats.depthExceeded += 1\n return undefined\n }\n\n if (Array.isArray(input)) {\n const out: Array<JsonValue> = []\n for (const item of input) {\n const v = sanitizeJsonValue(item, depth + 1, stats)\n if (v !== undefined) out.push(v)\n }\n return out\n }\n\n if (isPlainRecord(input)) {\n const keys = Object.keys(input).sort()\n const out: Record<string, JsonValue> = {}\n for (const key of keys) {\n const v = sanitizeJsonValue(input[key], depth + 1, stats)\n if (v !== undefined) out[key] = v\n }\n return out\n }\n\n stats.dropped += 1\n stats.nonSerializable += 1\n return undefined\n}\n\nconst pushSample = (target: Array<string>, value: string, limit: number): void => {\n if (target.length >= limit) return\n target.push(value)\n}\n\nexport const sanitizeWithReport = (input: unknown): Readonly<{\n readonly meta?: TraitMeta\n readonly report?: TraitMetaSanitizeReport\n}> => {\n if (input === null || input === undefined) return {}\n if (typeof input !== 'object' || Array.isArray(input)) {\n return { report: { invalidInput: true } }\n }\n\n const record = input as Record<string, unknown>\n const out: Record<string, unknown> = {}\n\n const reportUnknownKeys: Array<string> = []\n let unknownKeyCount = 0\n const reportDroppedKeys: Array<string> = []\n let droppedTagItems = 0\n\n const reportIgnoredAnnotationKeys: Array<string> = []\n let ignoredAnnotationKeyCount = 0\n const reportDroppedAnnotationKeys: Array<string> = []\n let droppedAnnotationKeyCount = 0\n const stats: SanitizeJsonValueStats = { dropped: 0, nonSerializable: 0, depthExceeded: 0, nonFiniteNumber: 0 }\n\n const allowed = new Set([\n 'label',\n 'description',\n 'group',\n 'docsUrl',\n 'cacheGroup',\n 'canonical',\n 'tags',\n 'annotations',\n ])\n\n for (const key of Object.keys(record)) {\n if (allowed.has(key) || key.startsWith('x-')) continue\n unknownKeyCount += 1\n pushSample(reportUnknownKeys, key, 8)\n }\n\n const pickString = (key: keyof TraitMeta): void => {\n const value = record[key as string]\n if (typeof value !== 'string') return\n const trimmed = value.trim()\n if (!trimmed) return\n out[key] = trimmed\n }\n\n pickString('label')\n pickString('description')\n pickString('group')\n pickString('docsUrl')\n pickString('cacheGroup')\n\n const canonical = record.canonical\n if (canonical !== undefined && canonical !== null && typeof canonical !== 'boolean') {\n pushSample(reportDroppedKeys, 'canonical', 8)\n } else if (typeof canonical === 'boolean') {\n out.canonical = canonical\n }\n\n const tagsRaw = record.tags\n if (typeof tagsRaw === 'string') {\n const tags = uniqSortedStrings([tagsRaw])\n if (tags.length > 0) out.tags = tags\n } else if (Array.isArray(tagsRaw)) {\n const raw = tagsRaw.filter((x): x is string => typeof x === 'string')\n droppedTagItems += tagsRaw.length - raw.length\n const tags = uniqSortedStrings(raw)\n if (tags.length > 0) out.tags = tags\n // count empty/whitespace tags dropped by uniqSortedStrings\n droppedTagItems += raw.length - tags.length\n } else if (tagsRaw !== undefined && tagsRaw !== null) {\n pushSample(reportDroppedKeys, 'tags', 8)\n }\n\n const annotations: Record<string, JsonValue> = {}\n\n // legacy: allow passing `x-*` keys at the top-level (untyped input), then normalize into `annotations`.\n const annotationKeys = Object.keys(record)\n .filter((k) => k.startsWith('x-'))\n .sort()\n for (const key of annotationKeys) {\n const v = sanitizeJsonValue(record[key], 0, stats)\n if (v !== undefined) {\n annotations[key] = v\n } else {\n droppedAnnotationKeyCount += 1\n pushSample(reportDroppedAnnotationKeys, key, 8)\n }\n }\n\n // preferred: typed `annotations` field (only accepts `x-*` keys).\n const annotationsRaw = record.annotations\n if (annotationsRaw !== undefined && annotationsRaw !== null && !isPlainRecord(annotationsRaw)) {\n pushSample(reportDroppedKeys, 'annotations', 8)\n } else if (isPlainRecord(annotationsRaw)) {\n const keys = Object.keys(annotationsRaw)\n .sort()\n for (const key of keys) {\n if (!key.startsWith('x-')) {\n ignoredAnnotationKeyCount += 1\n pushSample(reportIgnoredAnnotationKeys, key, 8)\n continue\n }\n\n const v = sanitizeJsonValue(annotationsRaw[key], 0, stats)\n if (v !== undefined) {\n annotations[key] = v\n } else {\n droppedAnnotationKeyCount += 1\n pushSample(reportDroppedAnnotationKeys, key, 8)\n }\n }\n }\n\n if (Object.keys(annotations).length > 0) out.annotations = annotations\n\n // Dropped keys for invalid string fields (only track invalid types; empty string is ignored as low-signal).\n for (const key of ['label', 'description', 'group', 'docsUrl', 'cacheGroup'] as const) {\n const value = record[key]\n if (value !== undefined && value !== null && typeof value !== 'string') {\n pushSample(reportDroppedKeys, key, 8)\n }\n }\n\n const meta = Object.keys(out).length > 0 ? (out as TraitMeta) : undefined\n\n const report: TraitMetaSanitizeReport | undefined = (() => {\n const hasUnknownKeys = unknownKeyCount > 0\n const hasDroppedKeys = reportDroppedKeys.length > 0\n const hasDroppedTagItems = droppedTagItems > 0\n const hasIgnoredAnnotationKeys = ignoredAnnotationKeyCount > 0\n const hasDroppedAnnotations = droppedAnnotationKeyCount > 0 || stats.dropped > 0\n\n if (\n !hasUnknownKeys &&\n !hasDroppedKeys &&\n !hasDroppedTagItems &&\n !hasIgnoredAnnotationKeys &&\n !hasDroppedAnnotations\n ) {\n return undefined\n }\n\n return {\n ...(hasUnknownKeys ? { unknownKeys: reportUnknownKeys, unknownKeyCount } : {}),\n ...(hasDroppedKeys ? { droppedKeys: uniqSortedStrings(reportDroppedKeys) } : {}),\n ...(hasDroppedTagItems ? { droppedTagItems } : {}),\n ...(hasIgnoredAnnotationKeys\n ? { ignoredAnnotationKeys: uniqSortedStrings(reportIgnoredAnnotationKeys), ignoredAnnotationKeyCount }\n : {}),\n ...(hasDroppedAnnotations\n ? {\n droppedAnnotationKeys: uniqSortedStrings(reportDroppedAnnotationKeys),\n droppedAnnotationKeyCount,\n droppedAnnotationValues: stats.dropped,\n droppedAnnotationNonSerializable: stats.nonSerializable,\n droppedAnnotationDepthExceeded: stats.depthExceeded,\n droppedAnnotationNonFiniteNumber: stats.nonFiniteNumber,\n }\n : {}),\n } satisfies TraitMetaSanitizeReport\n })()\n\n return report ? { meta, report } : { meta }\n}\n\nexport const sanitize = (input: unknown): TraitMeta | undefined => sanitizeWithReport(input).meta\n\nconst stableStringify = (meta: TraitMeta): string => {\n const out: Record<string, unknown> = {}\n const keys = Object.keys(meta).sort()\n for (const k of keys) {\n out[k] = (meta as any)[k]\n }\n return JSON.stringify(out)\n}\n\nexport const equals = (a: TraitMeta | undefined, b: TraitMeta | undefined): boolean => {\n if (a === b) return true\n if (!a || !b) return false\n return stableStringify(a) === stableStringify(b)\n}\n\nexport type CanonicalMergeInput = Readonly<{\n readonly meta?: TraitMeta\n readonly origin?: string\n readonly conflicts?: ReadonlyArray<TraitMetaConflict>\n}>\n\nexport type CanonicalMergeResult = Readonly<{\n readonly meta?: TraitMeta\n readonly origin?: string\n readonly conflicts?: ReadonlyArray<TraitMetaConflict>\n}>\n\nexport const mergeCanonical = (\n current: CanonicalMergeInput,\n incoming: Readonly<{ readonly origin: string; readonly meta: TraitMeta }>,\n): CanonicalMergeResult => {\n const existing = current.meta\n if (!existing) {\n return {\n meta: incoming.meta,\n origin: incoming.origin,\n conflicts: current.conflicts,\n }\n }\n\n if (equals(existing, incoming.meta)) {\n return current\n }\n\n const conflicts: Array<TraitMetaConflict> = [...((current.conflicts ?? []) as ReadonlyArray<TraitMetaConflict>)]\n\n const push = (conflict: TraitMetaConflict): void => {\n const exists = conflicts.some((c) => c.origin === conflict.origin && equals(c.meta, conflict.meta))\n if (!exists) conflicts.push(conflict)\n }\n\n const existingCanonical = existing.canonical === true\n const incomingCanonical = incoming.meta.canonical === true\n\n if (!existingCanonical && incomingCanonical) {\n push({\n origin: current.origin ?? 'unknown',\n meta: existing,\n })\n return {\n meta: incoming.meta,\n origin: incoming.origin,\n conflicts,\n }\n }\n\n push({\n origin: incoming.origin,\n meta: incoming.meta,\n })\n\n return {\n meta: existing,\n origin: current.origin ?? incoming.origin,\n conflicts,\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// src/internal/runtime/core/diagnosticsBudget.ts
|
|
2
|
+
var DIAGNOSTICS_BUDGET_CONTRACT_V1 = "diagnostics_budget.v1";
|
|
3
|
+
var normalizePositiveInteger = (value) => {
|
|
4
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0) return void 0;
|
|
5
|
+
return Math.floor(value);
|
|
6
|
+
};
|
|
7
|
+
var makeRunBudgetEnvelopeV1 = (args) => {
|
|
8
|
+
const maxEvents = normalizePositiveInteger(args.limits?.maxEvents);
|
|
9
|
+
const maxBytes = normalizePositiveInteger(args.limits?.maxBytes);
|
|
10
|
+
const emitted = normalizePositiveInteger(args.usage?.emitted);
|
|
11
|
+
const dropped = normalizePositiveInteger(args.usage?.dropped);
|
|
12
|
+
const downgraded = normalizePositiveInteger(args.usage?.downgraded);
|
|
13
|
+
return {
|
|
14
|
+
contract: DIAGNOSTICS_BUDGET_CONTRACT_V1,
|
|
15
|
+
domain: args.domain,
|
|
16
|
+
runId: args.runId,
|
|
17
|
+
...maxEvents !== void 0 || maxBytes !== void 0 ? {
|
|
18
|
+
limits: {
|
|
19
|
+
...maxEvents !== void 0 ? { maxEvents } : null,
|
|
20
|
+
...maxBytes !== void 0 ? { maxBytes } : null
|
|
21
|
+
}
|
|
22
|
+
} : null,
|
|
23
|
+
...emitted !== void 0 || dropped !== void 0 || downgraded !== void 0 ? {
|
|
24
|
+
usage: {
|
|
25
|
+
...emitted !== void 0 ? { emitted } : null,
|
|
26
|
+
...dropped !== void 0 ? { dropped } : null,
|
|
27
|
+
...downgraded !== void 0 ? { downgraded } : null
|
|
28
|
+
}
|
|
29
|
+
} : null
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
var makeRunDegradeMarkerV1 = (degraded, reason) => ({
|
|
33
|
+
contract: DIAGNOSTICS_BUDGET_CONTRACT_V1,
|
|
34
|
+
degraded,
|
|
35
|
+
...degraded && reason ? { reason } : null
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export {
|
|
39
|
+
makeRunBudgetEnvelopeV1,
|
|
40
|
+
makeRunDegradeMarkerV1
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=chunk-K6JQW266.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/runtime/core/diagnosticsBudget.ts"],"sourcesContent":["export const DIAGNOSTICS_BUDGET_CONTRACT_V1 = 'diagnostics_budget.v1' as const\n\nexport type RunBudgetDomain = 'process' | 'workflow' | 'flow'\n\nexport type RunBudgetEnvelopeV1 = {\n readonly contract: typeof DIAGNOSTICS_BUDGET_CONTRACT_V1\n readonly domain: RunBudgetDomain\n readonly runId: string\n readonly limits?: {\n readonly maxEvents?: number\n readonly maxBytes?: number\n }\n readonly usage?: {\n readonly emitted?: number\n readonly dropped?: number\n readonly downgraded?: number\n }\n}\n\nexport type RunDegradeReasonV1 =\n | 'budget_exceeded'\n | 'payload_oversized'\n | 'payload_non_serializable'\n | 'observer_disabled'\n | 'sampled_out'\n | 'unknown'\n\nexport type RunDegradeMarkerV1 = {\n readonly contract: typeof DIAGNOSTICS_BUDGET_CONTRACT_V1\n readonly degraded: boolean\n readonly reason?: RunDegradeReasonV1\n}\n\nconst normalizePositiveInteger = (value: unknown): number | undefined => {\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) return undefined\n return Math.floor(value)\n}\n\nexport const makeRunBudgetEnvelopeV1 = (args: {\n readonly domain: RunBudgetDomain\n readonly runId: string\n readonly limits?: {\n readonly maxEvents?: number\n readonly maxBytes?: number\n }\n readonly usage?: {\n readonly emitted?: number\n readonly dropped?: number\n readonly downgraded?: number\n }\n}): RunBudgetEnvelopeV1 => {\n const maxEvents = normalizePositiveInteger(args.limits?.maxEvents)\n const maxBytes = normalizePositiveInteger(args.limits?.maxBytes)\n const emitted = normalizePositiveInteger(args.usage?.emitted)\n const dropped = normalizePositiveInteger(args.usage?.dropped)\n const downgraded = normalizePositiveInteger(args.usage?.downgraded)\n\n return {\n contract: DIAGNOSTICS_BUDGET_CONTRACT_V1,\n domain: args.domain,\n runId: args.runId,\n ...((maxEvents !== undefined || maxBytes !== undefined\n ? {\n limits: {\n ...(maxEvents !== undefined ? { maxEvents } : null),\n ...(maxBytes !== undefined ? { maxBytes } : null),\n },\n }\n : null) as object),\n ...((emitted !== undefined || dropped !== undefined || downgraded !== undefined\n ? {\n usage: {\n ...(emitted !== undefined ? { emitted } : null),\n ...(dropped !== undefined ? { dropped } : null),\n ...(downgraded !== undefined ? { downgraded } : null),\n },\n }\n : null) as object),\n } satisfies RunBudgetEnvelopeV1\n}\n\nexport const makeRunDegradeMarkerV1 = (\n degraded: boolean,\n reason?: RunDegradeReasonV1,\n): RunDegradeMarkerV1 => ({\n contract: DIAGNOSTICS_BUDGET_CONTRACT_V1,\n degraded,\n ...(degraded && reason ? { reason } : null),\n})\n"],"mappings":";AAAO,IAAM,iCAAiC;AAiC9C,IAAM,2BAA2B,CAAC,UAAuC;AACvE,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,KAAK,QAAQ,EAAG,QAAO;AAC9E,SAAO,KAAK,MAAM,KAAK;AACzB;AAEO,IAAM,0BAA0B,CAAC,SAYb;AACzB,QAAM,YAAY,yBAAyB,KAAK,QAAQ,SAAS;AACjE,QAAM,WAAW,yBAAyB,KAAK,QAAQ,QAAQ;AAC/D,QAAM,UAAU,yBAAyB,KAAK,OAAO,OAAO;AAC5D,QAAM,UAAU,yBAAyB,KAAK,OAAO,OAAO;AAC5D,QAAM,aAAa,yBAAyB,KAAK,OAAO,UAAU;AAElE,SAAO;AAAA,IACL,UAAU;AAAA,IACV,QAAQ,KAAK;AAAA,IACb,OAAO,KAAK;AAAA,IACZ,GAAK,cAAc,UAAa,aAAa,SACzC;AAAA,MACE,QAAQ;AAAA,QACN,GAAI,cAAc,SAAY,EAAE,UAAU,IAAI;AAAA,QAC9C,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI;AAAA,MAC9C;AAAA,IACF,IACA;AAAA,IACJ,GAAK,YAAY,UAAa,YAAY,UAAa,eAAe,SAClE;AAAA,MACE,OAAO;AAAA,QACL,GAAI,YAAY,SAAY,EAAE,QAAQ,IAAI;AAAA,QAC1C,GAAI,YAAY,SAAY,EAAE,QAAQ,IAAI;AAAA,QAC1C,GAAI,eAAe,SAAY,EAAE,WAAW,IAAI;AAAA,MAClD;AAAA,IACF,IACA;AAAA,EACN;AACF;AAEO,IAAM,yBAAyB,CACpC,UACA,YACwB;AAAA,EACxB,UAAU;AAAA,EACV;AAAA,EACA,GAAI,YAAY,SAAS,EAAE,OAAO,IAAI;AACxC;","names":[]}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import {
|
|
2
|
+
compile,
|
|
3
|
+
evaluateStrictGate,
|
|
4
|
+
hasBuildQualityGrade,
|
|
5
|
+
isReadQuery,
|
|
6
|
+
isReadQueryCompiled,
|
|
7
|
+
make,
|
|
8
|
+
markRuntimeMissingBuildGrade,
|
|
9
|
+
resolveBuildGradeStrictGateDecision,
|
|
10
|
+
shouldEvaluateStrictGateAtRuntime
|
|
11
|
+
} from "./chunk-PBD7BJUN.js";
|
|
12
|
+
import {
|
|
13
|
+
fnv1a32,
|
|
14
|
+
stableStringify
|
|
15
|
+
} from "./chunk-4MZ7BT3R.js";
|
|
16
|
+
import {
|
|
17
|
+
__export
|
|
18
|
+
} from "./chunk-PZ5AY32C.js";
|
|
19
|
+
|
|
20
|
+
// src/ReadQuery.ts
|
|
21
|
+
var ReadQuery_exports = {};
|
|
22
|
+
__export(ReadQuery_exports, {
|
|
23
|
+
buildSelectorQualityReport: () => buildSelectorQualityReport2,
|
|
24
|
+
compile: () => compile2,
|
|
25
|
+
evaluateStrictGate: () => evaluateStrictGate2,
|
|
26
|
+
gradeReadQueryAtBuild: () => gradeReadQueryAtBuild2,
|
|
27
|
+
hasBuildGateFailure: () => hasBuildGateFailure2,
|
|
28
|
+
hasBuildQualityGrade: () => hasBuildQualityGrade2,
|
|
29
|
+
isReadQuery: () => isReadQuery2,
|
|
30
|
+
isReadQueryCompiled: () => isReadQueryCompiled2,
|
|
31
|
+
make: () => make2,
|
|
32
|
+
markRuntimeMissingBuildGrade: () => markRuntimeMissingBuildGrade2,
|
|
33
|
+
resolveBuildGradeStrictGateDecision: () => resolveBuildGradeStrictGateDecision2,
|
|
34
|
+
shouldEvaluateStrictGateAtRuntime: () => shouldEvaluateStrictGateAtRuntime2
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// src/internal/runtime/core/ReadQueryBuildGate.ts
|
|
38
|
+
var toVerdict = (decision) => decision.verdict;
|
|
39
|
+
var toRule = (decision) => {
|
|
40
|
+
if (decision.verdict === "PASS") return void 0;
|
|
41
|
+
return decision.details.rule;
|
|
42
|
+
};
|
|
43
|
+
var toFallbackReason = (decision, compiled) => {
|
|
44
|
+
if (decision.verdict !== "PASS") return decision.details.fallbackReason;
|
|
45
|
+
return compiled.fallbackReason;
|
|
46
|
+
};
|
|
47
|
+
var gradeReadQueryAtBuild = (args) => {
|
|
48
|
+
const compiled = isReadQueryCompiled(args.input) ? args.input : compile(args.input);
|
|
49
|
+
const strictGateDecision = args.strictGate && args.strictGate.mode !== "off" ? evaluateStrictGate({
|
|
50
|
+
config: args.strictGate,
|
|
51
|
+
moduleId: args.moduleId,
|
|
52
|
+
instanceId: "build",
|
|
53
|
+
txnSeq: 0,
|
|
54
|
+
compiled
|
|
55
|
+
}) : { verdict: "PASS" };
|
|
56
|
+
const strictGateVerdict = toVerdict(strictGateDecision);
|
|
57
|
+
const strictGateRule = toRule(strictGateDecision);
|
|
58
|
+
const fallbackReason = toFallbackReason(strictGateDecision, compiled);
|
|
59
|
+
const entry = {
|
|
60
|
+
moduleId: args.moduleId,
|
|
61
|
+
selectorId: compiled.selectorId,
|
|
62
|
+
debugKey: compiled.debugKey,
|
|
63
|
+
lane: compiled.lane,
|
|
64
|
+
producer: compiled.producer,
|
|
65
|
+
readsDigest: compiled.readsDigest,
|
|
66
|
+
fallbackReason,
|
|
67
|
+
strictGateVerdict,
|
|
68
|
+
strictGateRule,
|
|
69
|
+
diagnosticCode: strictGateVerdict === "PASS" ? void 0 : "read_query::strict_gate"
|
|
70
|
+
};
|
|
71
|
+
const graded = {
|
|
72
|
+
...compiled,
|
|
73
|
+
quality: {
|
|
74
|
+
source: "build",
|
|
75
|
+
reportId: args.reportId,
|
|
76
|
+
strictGate: {
|
|
77
|
+
evaluatedAt: "build",
|
|
78
|
+
verdict: strictGateVerdict,
|
|
79
|
+
rule: strictGateRule,
|
|
80
|
+
fallbackReason
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
return {
|
|
85
|
+
compiled: graded,
|
|
86
|
+
entry,
|
|
87
|
+
strictGateDecision
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
var summarizeEntries = (entries) => {
|
|
91
|
+
let staticCount = 0;
|
|
92
|
+
let dynamicCount = 0;
|
|
93
|
+
let warnCount = 0;
|
|
94
|
+
let failCount = 0;
|
|
95
|
+
const fallbackBreakdown = {};
|
|
96
|
+
for (const entry of entries) {
|
|
97
|
+
if (entry.lane === "static") {
|
|
98
|
+
staticCount += 1;
|
|
99
|
+
} else {
|
|
100
|
+
dynamicCount += 1;
|
|
101
|
+
}
|
|
102
|
+
if (entry.strictGateVerdict === "WARN") warnCount += 1;
|
|
103
|
+
if (entry.strictGateVerdict === "FAIL") failCount += 1;
|
|
104
|
+
if (entry.fallbackReason) {
|
|
105
|
+
fallbackBreakdown[entry.fallbackReason] = (fallbackBreakdown[entry.fallbackReason] ?? 0) + 1;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
total: entries.length,
|
|
110
|
+
staticCount,
|
|
111
|
+
dynamicCount,
|
|
112
|
+
warnCount,
|
|
113
|
+
failCount,
|
|
114
|
+
fallbackBreakdown
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
var makeReportId = (moduleId, entries) => {
|
|
118
|
+
const digestInput = entries.map((entry) => ({
|
|
119
|
+
selectorId: entry.selectorId,
|
|
120
|
+
lane: entry.lane,
|
|
121
|
+
producer: entry.producer,
|
|
122
|
+
fallbackReason: entry.fallbackReason,
|
|
123
|
+
strictGateVerdict: entry.strictGateVerdict,
|
|
124
|
+
strictGateRule: entry.strictGateRule,
|
|
125
|
+
readsDigest: entry.readsDigest
|
|
126
|
+
}));
|
|
127
|
+
return `rq_report_${fnv1a32(stableStringify({ moduleId, entries: digestInput }))}`;
|
|
128
|
+
};
|
|
129
|
+
var buildSelectorQualityReport = (args) => {
|
|
130
|
+
const gradedWithoutReportId = args.selectors.map(
|
|
131
|
+
(input) => gradeReadQueryAtBuild({
|
|
132
|
+
moduleId: args.moduleId,
|
|
133
|
+
input,
|
|
134
|
+
strictGate: args.strictGate
|
|
135
|
+
})
|
|
136
|
+
);
|
|
137
|
+
const reportId = makeReportId(
|
|
138
|
+
args.moduleId,
|
|
139
|
+
gradedWithoutReportId.map((it) => it.entry)
|
|
140
|
+
);
|
|
141
|
+
const graded = gradedWithoutReportId.map((result) => {
|
|
142
|
+
const quality = result.compiled.quality;
|
|
143
|
+
if (!quality) {
|
|
144
|
+
throw new Error("gradeReadQueryAtBuild must attach quality metadata");
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
...result,
|
|
148
|
+
compiled: {
|
|
149
|
+
...result.compiled,
|
|
150
|
+
quality: {
|
|
151
|
+
...quality,
|
|
152
|
+
reportId
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
});
|
|
157
|
+
const entries = graded.map((it) => it.entry);
|
|
158
|
+
const summary = summarizeEntries(entries);
|
|
159
|
+
const report = {
|
|
160
|
+
reportId,
|
|
161
|
+
moduleId: args.moduleId,
|
|
162
|
+
generatedAt: args.generatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
163
|
+
entries,
|
|
164
|
+
summary
|
|
165
|
+
};
|
|
166
|
+
return {
|
|
167
|
+
report,
|
|
168
|
+
graded
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
var hasBuildGateFailure = (report) => report.summary.failCount > 0;
|
|
172
|
+
|
|
173
|
+
// src/ReadQuery.ts
|
|
174
|
+
var isReadQuery2 = isReadQuery;
|
|
175
|
+
var isReadQueryCompiled2 = isReadQueryCompiled;
|
|
176
|
+
var hasBuildQualityGrade2 = hasBuildQualityGrade;
|
|
177
|
+
var shouldEvaluateStrictGateAtRuntime2 = shouldEvaluateStrictGateAtRuntime;
|
|
178
|
+
var markRuntimeMissingBuildGrade2 = markRuntimeMissingBuildGrade;
|
|
179
|
+
var resolveBuildGradeStrictGateDecision2 = resolveBuildGradeStrictGateDecision;
|
|
180
|
+
var make2 = make;
|
|
181
|
+
var compile2 = compile;
|
|
182
|
+
var evaluateStrictGate2 = evaluateStrictGate;
|
|
183
|
+
var gradeReadQueryAtBuild2 = gradeReadQueryAtBuild;
|
|
184
|
+
var buildSelectorQualityReport2 = buildSelectorQualityReport;
|
|
185
|
+
var hasBuildGateFailure2 = hasBuildGateFailure;
|
|
186
|
+
|
|
187
|
+
export {
|
|
188
|
+
isReadQuery2 as isReadQuery,
|
|
189
|
+
isReadQueryCompiled2 as isReadQueryCompiled,
|
|
190
|
+
hasBuildQualityGrade2 as hasBuildQualityGrade,
|
|
191
|
+
shouldEvaluateStrictGateAtRuntime2 as shouldEvaluateStrictGateAtRuntime,
|
|
192
|
+
markRuntimeMissingBuildGrade2 as markRuntimeMissingBuildGrade,
|
|
193
|
+
resolveBuildGradeStrictGateDecision2 as resolveBuildGradeStrictGateDecision,
|
|
194
|
+
make2 as make,
|
|
195
|
+
compile2 as compile,
|
|
196
|
+
evaluateStrictGate2 as evaluateStrictGate,
|
|
197
|
+
gradeReadQueryAtBuild2 as gradeReadQueryAtBuild,
|
|
198
|
+
buildSelectorQualityReport2 as buildSelectorQualityReport,
|
|
199
|
+
hasBuildGateFailure2 as hasBuildGateFailure,
|
|
200
|
+
ReadQuery_exports
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=chunk-KMZYQF6Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ReadQuery.ts","../src/internal/runtime/core/ReadQueryBuildGate.ts"],"sourcesContent":["import * as ReadQueryCore from './internal/runtime/core/ReadQuery.js'\nimport * as ReadQueryBuildGateCore from './internal/runtime/core/ReadQueryBuildGate.js'\n\nexport type ReadLane = ReadQueryCore.ReadLane\nexport type ReadProducer = ReadQueryCore.ReadProducer\nexport type EqualsKind = ReadQueryCore.EqualsKind\nexport type ReadsDigest = ReadQueryCore.ReadsDigest\nexport type ReadQueryStrictGateRule = ReadQueryCore.ReadQueryStrictGateRule\nexport type ReadQueryFallbackReason = ReadQueryCore.ReadQueryFallbackReason\nexport type ReadQueryQualityMeta = ReadQueryCore.ReadQueryQualityMeta\nexport type ReadQueryStrictGateGrade = ReadQueryCore.ReadQueryStrictGateGrade\n\nexport type ReadQueryStaticIr = ReadQueryCore.ReadQueryStaticIr\n\nexport type ReadQuery<S, V> = ReadQueryCore.ReadQuery<S, V>\nexport type ReadQueryCompiled<S, V> = ReadQueryCore.ReadQueryCompiled<S, V>\nexport type ReadQueryInput<S, V> = ReadQueryCore.ReadQueryInput<S, V>\nexport type ReadQueryStrictGateConfig = ReadQueryCore.ReadQueryStrictGateConfig\nexport type ReadQueryStrictGateDecision = ReadQueryCore.ReadQueryStrictGateDecision\n\nexport const isReadQuery = ReadQueryCore.isReadQuery\nexport const isReadQueryCompiled = ReadQueryCore.isReadQueryCompiled\nexport const hasBuildQualityGrade = ReadQueryCore.hasBuildQualityGrade\nexport const shouldEvaluateStrictGateAtRuntime = ReadQueryCore.shouldEvaluateStrictGateAtRuntime\nexport const markRuntimeMissingBuildGrade = ReadQueryCore.markRuntimeMissingBuildGrade\nexport const resolveBuildGradeStrictGateDecision = ReadQueryCore.resolveBuildGradeStrictGateDecision\n\nexport const make = ReadQueryCore.make\n\nexport const compile = ReadQueryCore.compile\nexport const evaluateStrictGate = ReadQueryCore.evaluateStrictGate\n\nexport type SelectorQualityEntry = ReadQueryBuildGateCore.SelectorQualityEntry\nexport type SelectorQualitySummary = ReadQueryBuildGateCore.SelectorQualitySummary\nexport type SelectorQualityReport = ReadQueryBuildGateCore.SelectorQualityReport\nexport type SelectorQualityReportResult = ReadQueryBuildGateCore.SelectorQualityReportResult\nexport type BuildReadQueryGradeResult<S, V> = ReadQueryBuildGateCore.BuildReadQueryGradeResult<S, V>\n\nexport const gradeReadQueryAtBuild = ReadQueryBuildGateCore.gradeReadQueryAtBuild\nexport const buildSelectorQualityReport = ReadQueryBuildGateCore.buildSelectorQualityReport\nexport const hasBuildGateFailure = ReadQueryBuildGateCore.hasBuildGateFailure\n","import { fnv1a32, stableStringify } from '../../digest.js'\nimport {\n compile,\n evaluateStrictGate,\n isReadQueryCompiled,\n type ReadQueryCompiled,\n type ReadQueryFallbackReason,\n type ReadQueryInput,\n type ReadQueryStrictGateConfig,\n type ReadQueryStrictGateDecision,\n type ReadQueryStrictGateRule,\n} from './ReadQuery.js'\n\nexport interface SelectorQualityEntry {\n readonly moduleId: string\n readonly selectorId: string\n readonly debugKey?: string\n readonly lane: ReadQueryCompiled<any, any>['lane']\n readonly producer: ReadQueryCompiled<any, any>['producer']\n readonly readsDigest?: ReadQueryCompiled<any, any>['readsDigest']\n readonly fallbackReason?: ReadQueryFallbackReason\n readonly strictGateVerdict: 'PASS' | 'WARN' | 'FAIL'\n readonly strictGateRule?: ReadQueryStrictGateRule\n readonly diagnosticCode?: 'read_query::strict_gate'\n}\n\nexport interface SelectorQualitySummary {\n readonly total: number\n readonly staticCount: number\n readonly dynamicCount: number\n readonly warnCount: number\n readonly failCount: number\n readonly fallbackBreakdown: Readonly<Record<string, number>>\n}\n\nexport interface SelectorQualityReport {\n readonly reportId: string\n readonly moduleId: string\n readonly generatedAt: string\n readonly entries: ReadonlyArray<SelectorQualityEntry>\n readonly summary: SelectorQualitySummary\n}\n\nexport interface BuildReadQueryGradeResult<S, V> {\n readonly compiled: ReadQueryCompiled<S, V>\n readonly entry: SelectorQualityEntry\n readonly strictGateDecision: ReadQueryStrictGateDecision\n}\n\nconst toVerdict = (decision: ReadQueryStrictGateDecision): 'PASS' | 'WARN' | 'FAIL' => decision.verdict\n\nconst toRule = (decision: ReadQueryStrictGateDecision): ReadQueryStrictGateRule | undefined => {\n if (decision.verdict === 'PASS') return undefined\n return decision.details.rule\n}\n\nconst toFallbackReason = (\n decision: ReadQueryStrictGateDecision,\n compiled: ReadQueryCompiled<any, any>,\n): ReadQueryFallbackReason | undefined => {\n if (decision.verdict !== 'PASS') return decision.details.fallbackReason\n return compiled.fallbackReason\n}\n\nexport const gradeReadQueryAtBuild = <S, V>(args: {\n readonly moduleId: string\n readonly input: ReadQueryInput<S, V> | ReadQueryCompiled<S, V>\n readonly strictGate?: ReadQueryStrictGateConfig\n readonly reportId?: string\n}): BuildReadQueryGradeResult<S, V> => {\n const compiled = isReadQueryCompiled<S, V>(args.input) ? args.input : compile(args.input)\n\n const strictGateDecision: ReadQueryStrictGateDecision =\n args.strictGate && args.strictGate.mode !== 'off'\n ? evaluateStrictGate({\n config: args.strictGate,\n moduleId: args.moduleId,\n instanceId: 'build',\n txnSeq: 0,\n compiled,\n })\n : { verdict: 'PASS' }\n\n const strictGateVerdict = toVerdict(strictGateDecision)\n const strictGateRule = toRule(strictGateDecision)\n const fallbackReason = toFallbackReason(strictGateDecision, compiled)\n\n const entry: SelectorQualityEntry = {\n moduleId: args.moduleId,\n selectorId: compiled.selectorId,\n debugKey: compiled.debugKey,\n lane: compiled.lane,\n producer: compiled.producer,\n readsDigest: compiled.readsDigest,\n fallbackReason,\n strictGateVerdict,\n strictGateRule,\n diagnosticCode: strictGateVerdict === 'PASS' ? undefined : 'read_query::strict_gate',\n }\n\n const graded: ReadQueryCompiled<S, V> = {\n ...compiled,\n quality: {\n source: 'build',\n reportId: args.reportId,\n strictGate: {\n evaluatedAt: 'build',\n verdict: strictGateVerdict,\n rule: strictGateRule,\n fallbackReason,\n },\n },\n }\n\n return {\n compiled: graded,\n entry,\n strictGateDecision,\n }\n}\n\nconst summarizeEntries = (entries: ReadonlyArray<SelectorQualityEntry>): SelectorQualitySummary => {\n let staticCount = 0\n let dynamicCount = 0\n let warnCount = 0\n let failCount = 0\n const fallbackBreakdown: Record<string, number> = {}\n\n for (const entry of entries) {\n if (entry.lane === 'static') {\n staticCount += 1\n } else {\n dynamicCount += 1\n }\n\n if (entry.strictGateVerdict === 'WARN') warnCount += 1\n if (entry.strictGateVerdict === 'FAIL') failCount += 1\n\n if (entry.fallbackReason) {\n fallbackBreakdown[entry.fallbackReason] = (fallbackBreakdown[entry.fallbackReason] ?? 0) + 1\n }\n }\n\n return {\n total: entries.length,\n staticCount,\n dynamicCount,\n warnCount,\n failCount,\n fallbackBreakdown,\n }\n}\n\nconst makeReportId = (moduleId: string, entries: ReadonlyArray<SelectorQualityEntry>): string => {\n const digestInput = entries.map((entry) => ({\n selectorId: entry.selectorId,\n lane: entry.lane,\n producer: entry.producer,\n fallbackReason: entry.fallbackReason,\n strictGateVerdict: entry.strictGateVerdict,\n strictGateRule: entry.strictGateRule,\n readsDigest: entry.readsDigest,\n }))\n\n return `rq_report_${fnv1a32(stableStringify({ moduleId, entries: digestInput }))}`\n}\n\nexport interface SelectorQualityReportResult {\n readonly report: SelectorQualityReport\n readonly graded: ReadonlyArray<BuildReadQueryGradeResult<any, any>>\n}\n\nexport const buildSelectorQualityReport = (args: {\n readonly moduleId: string\n readonly selectors: ReadonlyArray<ReadQueryInput<any, any> | ReadQueryCompiled<any, any>>\n readonly strictGate?: ReadQueryStrictGateConfig\n readonly generatedAt?: string\n}): SelectorQualityReportResult => {\n const gradedWithoutReportId = args.selectors.map((input) =>\n gradeReadQueryAtBuild({\n moduleId: args.moduleId,\n input,\n strictGate: args.strictGate,\n }),\n )\n\n const reportId = makeReportId(\n args.moduleId,\n gradedWithoutReportId.map((it) => it.entry),\n )\n\n const graded = gradedWithoutReportId.map((result) => {\n const quality = result.compiled.quality\n if (!quality) {\n throw new Error('gradeReadQueryAtBuild must attach quality metadata')\n }\n\n return {\n ...result,\n compiled: {\n ...result.compiled,\n quality: {\n ...quality,\n reportId,\n },\n },\n }\n })\n\n const entries = graded.map((it) => it.entry)\n const summary = summarizeEntries(entries)\n\n const report: SelectorQualityReport = {\n reportId,\n moduleId: args.moduleId,\n generatedAt: args.generatedAt ?? new Date().toISOString(),\n entries,\n summary,\n }\n\n return {\n report,\n graded,\n }\n}\n\nexport const hasBuildGateFailure = (report: SelectorQualityReport): boolean => report.summary.failCount > 0\n"],"mappings":"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","names":["buildSelectorQualityReport","compile","evaluateStrictGate","gradeReadQueryAtBuild","hasBuildGateFailure","hasBuildQualityGrade","isReadQuery","isReadQueryCompiled","make","markRuntimeMissingBuildGrade","resolveBuildGradeStrictGateDecision","shouldEvaluateStrictGateAtRuntime","isReadQuery","isReadQueryCompiled","hasBuildQualityGrade","shouldEvaluateStrictGateAtRuntime","markRuntimeMissingBuildGrade","resolveBuildGradeStrictGateDecision","make","compile","evaluateStrictGate","gradeReadQueryAtBuild","buildSelectorQualityReport","hasBuildGateFailure"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// src/internal/runtime/core/EffectOpCore.ts
|
|
2
|
-
import {
|
|
3
|
-
var currentLinkId =
|
|
2
|
+
import { Effect, ServiceMap } from "effect";
|
|
3
|
+
var currentLinkId = ServiceMap.Reference("@logixjs/core/CurrentLinkId", {
|
|
4
|
+
defaultValue: () => void 0
|
|
5
|
+
});
|
|
4
6
|
var makeOperationRejected = (params) => ({
|
|
5
7
|
_tag: "OperationRejected",
|
|
6
8
|
message: params.message,
|
|
@@ -9,17 +11,24 @@ var makeOperationRejected = (params) => ({
|
|
|
9
11
|
linkId: params.linkId,
|
|
10
12
|
details: params.details
|
|
11
13
|
});
|
|
12
|
-
var
|
|
14
|
+
var composeMiddlewareCache = /* @__PURE__ */ new WeakMap();
|
|
15
|
+
var EffectOpMiddlewareTag = class extends ServiceMap.Service()("Logix/EffectOpMiddleware") {
|
|
13
16
|
};
|
|
14
17
|
var composeMiddleware = (stack) => {
|
|
15
|
-
|
|
18
|
+
const cached = composeMiddlewareCache.get(stack);
|
|
19
|
+
if (cached) {
|
|
20
|
+
return cached;
|
|
21
|
+
}
|
|
22
|
+
const composed = (op) => stack.reduceRight(
|
|
16
23
|
(eff, mw) => mw({ ...op, effect: eff }),
|
|
17
24
|
op.effect
|
|
18
25
|
);
|
|
26
|
+
composeMiddlewareCache.set(stack, composed);
|
|
27
|
+
return composed;
|
|
19
28
|
};
|
|
20
29
|
var runWithMiddleware = (op, stack) => {
|
|
21
30
|
return Effect.gen(function* () {
|
|
22
|
-
const existing = yield*
|
|
31
|
+
const existing = yield* Effect.service(currentLinkId);
|
|
23
32
|
const metaLinkId = op.meta?.linkId;
|
|
24
33
|
const linkId = typeof metaLinkId === "string" && metaLinkId.length > 0 ? metaLinkId : existing ?? op.id;
|
|
25
34
|
const nextOp = {
|
|
@@ -30,7 +39,7 @@ var runWithMiddleware = (op, stack) => {
|
|
|
30
39
|
}
|
|
31
40
|
};
|
|
32
41
|
const program = stack.length ? composeMiddleware(stack)(nextOp) : nextOp.effect;
|
|
33
|
-
return yield* Effect.
|
|
42
|
+
return yield* Effect.provideService(program, currentLinkId, linkId);
|
|
34
43
|
});
|
|
35
44
|
};
|
|
36
45
|
|
|
@@ -157,11 +166,12 @@ var toJsonValueInternal = (input, options, stats, seen, depth) => {
|
|
|
157
166
|
stats.nonSerializable += 1;
|
|
158
167
|
return truncateString(String(input), options.maxStringLength, stats);
|
|
159
168
|
}
|
|
160
|
-
const
|
|
161
|
-
const limit = Math.min(
|
|
169
|
+
const keys = Object.keys(input).sort();
|
|
170
|
+
const limit = Math.min(keys.length, options.maxObjectKeys);
|
|
162
171
|
const out = {};
|
|
163
172
|
for (let i = 0; i < limit; i++) {
|
|
164
|
-
const
|
|
173
|
+
const rawKey = keys[i];
|
|
174
|
+
const rawValue = input[rawKey];
|
|
165
175
|
const key = truncateString(rawKey, options.maxStringLength, stats);
|
|
166
176
|
if (rawValue === void 0) {
|
|
167
177
|
stats.dropped += 1;
|
|
@@ -169,9 +179,9 @@ var toJsonValueInternal = (input, options, stats, seen, depth) => {
|
|
|
169
179
|
}
|
|
170
180
|
out[key] = toJsonValueInternal(rawValue, options, stats, seen, depth + 1);
|
|
171
181
|
}
|
|
172
|
-
if (
|
|
182
|
+
if (keys.length > limit) {
|
|
173
183
|
stats.oversized += 1;
|
|
174
|
-
out.__truncatedKeys =
|
|
184
|
+
out.__truncatedKeys = keys.length - limit;
|
|
175
185
|
}
|
|
176
186
|
return out;
|
|
177
187
|
};
|
|
@@ -238,4 +248,4 @@ export {
|
|
|
238
248
|
composeMiddleware,
|
|
239
249
|
runWithMiddleware
|
|
240
250
|
};
|
|
241
|
-
//# sourceMappingURL=chunk-
|
|
251
|
+
//# sourceMappingURL=chunk-LPPZDFTD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/runtime/core/EffectOpCore.ts","../src/internal/observability/jsonValue.ts"],"sourcesContent":["// EffectOp core model and middleware composition logic.\n// For higher-level Runtime / Devtools integration, see:\n// specs/000-module-traits-runtime/references/effectop-and-middleware.md\n\nimport { Effect, ServiceMap } from 'effect'\n\nexport const currentLinkId = ServiceMap.Reference<string | undefined>('@logixjs/core/CurrentLinkId', {\n defaultValue: () => undefined,\n})\n\n/**\n * OperationPolicy:\n * - Local policy markers (intent only; no rule logic attached).\n *\n * Constraints (enforced by Runtime/middleware together):\n * - Only observation-only capabilities (Observer) may be disabled; global guards must not be disabled.\n */\nexport interface OperationPolicy {\n readonly disableObservers?: boolean\n}\n\n/**\n * OperationRejected:\n * - Unified failure result when a guard rejects execution.\n * - Semantics: explicit failure with no business side effects (rejection must happen before user code executes).\n */\nexport interface OperationRejected {\n readonly _tag: 'OperationRejected'\n readonly message: string\n readonly kind?: EffectOp['kind']\n readonly name?: string\n readonly linkId?: string\n readonly details?: unknown\n}\n\n/**\n * OperationError:\n * - Any boundary operation executed via EffectOp may be explicitly rejected by Guard middleware.\n * - Therefore, the middleware error channel must allow OperationRejected to be added.\n */\nexport type OperationError<E> = E | OperationRejected\n\nexport const makeOperationRejected = (params: {\n readonly message: string\n readonly kind?: EffectOp['kind']\n readonly name?: string\n readonly linkId?: string\n readonly details?: unknown\n}): OperationRejected => ({\n _tag: 'OperationRejected',\n message: params.message,\n kind: params.kind,\n name: params.name,\n linkId: params.linkId,\n details: params.details,\n})\n\n/**\n * EffectOp: a unified representation of an Effect execution at an \"observable boundary\".\n *\n * - Out / Err / Env are the generic parameters of the underlying Effect.\n * - meta carries structured context needed by Devtools / Middleware.\n */\nexport interface EffectOp<Out = unknown, Err = unknown, Env = unknown> {\n readonly id: string\n readonly kind:\n | 'action'\n | 'flow'\n | 'state'\n | 'service'\n | 'lifecycle'\n | 'trait-computed'\n | 'trait-link'\n | 'trait-source'\n | 'devtools'\n readonly name: string\n readonly payload?: unknown\n readonly meta?: {\n /**\n * linkId:\n * - Operation chain id: multiple boundary ops in the same chain must share it.\n * - Runtime ensures this field is populated on all boundary ops.\n */\n linkId?: string\n moduleId?: string\n instanceId?: string\n runtimeLabel?: string\n txnId?: string\n txnSeq?: number\n opSeq?: number\n fieldPath?: string\n deps?: ReadonlyArray<string>\n from?: string\n to?: string\n traitNodeId?: string\n stepId?: string\n resourceId?: string\n key?: unknown\n trace?: ReadonlyArray<string>\n tags?: ReadonlyArray<string>\n policy?: OperationPolicy\n // Reserved extension slot for middleware/devtools to attach extra information.\n readonly [k: string]: unknown\n }\n readonly effect: Effect.Effect<Out, Err, Env>\n}\n\n/**\n * Middleware: the general middleware model for observing / wrapping / guarding EffectOps.\n */\nexport type Middleware = <A, E, R>(op: EffectOp<A, E, R>) => Effect.Effect<A, OperationError<E>, R>\n\nexport type MiddlewareStack = ReadonlyArray<Middleware>\n\nconst composeMiddlewareCache = new WeakMap<MiddlewareStack, Middleware>()\n\n/**\n * EffectOpMiddlewareEnv:\n * - A Service in Effect Env that carries the current Runtime's MiddlewareStack.\n * - Injected by Runtime.ts when constructing a ManagedRuntime.\n * - Runtime code (e.g. StateTrait.install) uses this Service to decide which MiddlewareStack to use.\n */\nexport interface EffectOpMiddlewareEnv {\n readonly stack: MiddlewareStack\n}\n\nexport class EffectOpMiddlewareTag extends ServiceMap.Service<\n EffectOpMiddlewareTag,\n EffectOpMiddlewareEnv\n>()('Logix/EffectOpMiddleware') {}\n\n/**\n * composeMiddleware:\n * - Composes Middleware from \"outer to inner\" in declaration order:\n * - stack = [mw1, mw2] => mw1 -> mw2 -> effect -> mw2 -> mw1\n * - Matches the reduceRight example in the reference docs.\n */\nexport const composeMiddleware = (stack: MiddlewareStack): Middleware => {\n const cached = composeMiddlewareCache.get(stack)\n if (cached) {\n return cached\n }\n\n const composed: Middleware = <A, E, R>(op: EffectOp<A, E, R>): Effect.Effect<A, OperationError<E>, R> =>\n stack.reduceRight<Effect.Effect<A, OperationError<E>, R>>(\n (eff, mw) => mw({ ...op, effect: eff } as any) as any,\n op.effect as Effect.Effect<A, OperationError<E>, R>,\n )\n\n composeMiddlewareCache.set(stack, composed)\n return composed\n}\n\n/**\n * runWithMiddleware:\n * - Executes a given EffectOp with a MiddlewareStack according to the composition rules.\n * - If the stack is empty, returns op.effect directly.\n */\nexport const runWithMiddleware = <A, E, R>(op: EffectOp<A, E, R>, stack: MiddlewareStack): Effect.Effect<A, E, R> => {\n return Effect.gen(function* () {\n const existing = yield* Effect.service(currentLinkId)\n const metaLinkId = (op.meta as any)?.linkId\n const linkId = typeof metaLinkId === 'string' && metaLinkId.length > 0 ? metaLinkId : (existing ?? op.id)\n\n const nextOp: EffectOp<A, E, R> = {\n ...op,\n meta: {\n ...(op.meta ?? {}),\n linkId,\n },\n }\n\n const program = stack.length ? composeMiddleware(stack)(nextOp) : nextOp.effect\n\n // linkId is created at the boundary root and reused for nested ops (the FiberRef is the global single source of truth).\n // NOTE: middleware may explicitly reject with OperationRejected.\n return yield* Effect.provideService(program as any, currentLinkId, linkId)\n }) as Effect.Effect<A, E, R>\n}\n","export type JsonValue =\n | null\n | boolean\n | number\n | string\n | ReadonlyArray<JsonValue>\n | { readonly [key: string]: JsonValue }\n\nexport type DowngradeReason = 'non_serializable' | 'oversized' | 'unknown'\n\nexport const isJsonValue = (input: unknown): input is JsonValue => {\n const seen = new WeakSet<object>()\n\n const loop = (value: unknown, depth: number): value is JsonValue => {\n if (depth > 64) return false\n if (value === null) return true\n\n switch (typeof value) {\n case 'string':\n case 'boolean':\n return true\n case 'number':\n return Number.isFinite(value)\n case 'object': {\n if (Array.isArray(value)) {\n if (seen.has(value)) return false\n seen.add(value)\n for (const item of value) {\n if (!loop(item, depth + 1)) return false\n }\n return true\n }\n\n if (!isPlainRecord(value)) return false\n if (seen.has(value)) return false\n seen.add(value)\n\n for (const v of Object.values(value)) {\n if (!loop(v, depth + 1)) return false\n }\n\n return true\n }\n default:\n return false\n }\n }\n\n return loop(input, 0)\n}\n\nexport interface JsonValueProjectionStats {\n readonly dropped: number\n readonly oversized: number\n readonly nonSerializable: number\n}\n\nexport interface JsonValueProjection {\n readonly value: JsonValue\n readonly stats: JsonValueProjectionStats\n readonly downgrade?: DowngradeReason\n}\n\nexport interface JsonValueProjectOptions {\n readonly maxDepth?: number\n readonly maxObjectKeys?: number\n readonly maxArrayLength?: number\n readonly maxStringLength?: number\n readonly maxJsonBytes?: number\n readonly oversizedPreviewBytes?: number\n}\n\nconst defaultOptions: Required<JsonValueProjectOptions> = {\n maxDepth: 6,\n maxObjectKeys: 32,\n maxArrayLength: 32,\n maxStringLength: 256,\n maxJsonBytes: 4 * 1024,\n oversizedPreviewBytes: 256,\n}\n\nconst truncateString = (value: string, maxLen: number, stats: MutableStats): string => {\n if (value.length <= maxLen) return value\n stats.oversized += 1\n return value.slice(0, maxLen)\n}\n\ntype MutableStats = {\n dropped: number\n oversized: number\n nonSerializable: number\n}\n\nconst mergeDowngrade = (current: DowngradeReason | undefined, next: DowngradeReason): DowngradeReason => {\n if (!current) return next\n if (current === 'non_serializable' || next === 'non_serializable') return 'non_serializable'\n if (current === 'oversized' || next === 'oversized') return 'oversized'\n return 'unknown'\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) return false\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nconst asNumber = (value: number, stats: MutableStats): JsonValue => {\n if (Number.isFinite(value)) return value\n stats.nonSerializable += 1\n return String(value)\n}\n\nconst toJsonValueInternal = (\n input: unknown,\n options: Required<JsonValueProjectOptions>,\n stats: MutableStats,\n seen: WeakSet<object>,\n depth: number,\n): JsonValue => {\n if (input === null) return null\n\n switch (typeof input) {\n case 'string':\n return truncateString(input, options.maxStringLength, stats)\n case 'number':\n return asNumber(input, stats)\n case 'boolean':\n return input\n case 'bigint':\n stats.nonSerializable += 1\n return truncateString(input.toString(), options.maxStringLength, stats)\n case 'symbol':\n stats.nonSerializable += 1\n return truncateString(input.toString(), options.maxStringLength, stats)\n case 'function':\n stats.nonSerializable += 1\n return '[Function]'\n case 'undefined':\n stats.dropped += 1\n return null\n }\n\n // object\n if (depth >= options.maxDepth) {\n stats.oversized += 1\n return '[Truncated]'\n }\n\n if (input instanceof Date) {\n return input.toISOString()\n }\n\n if (input instanceof Error) {\n stats.nonSerializable += 1\n return {\n name: truncateString(input.name, options.maxStringLength, stats),\n message: truncateString(input.message, options.maxStringLength, stats),\n }\n }\n\n if (typeof input === 'object') {\n if (seen.has(input)) {\n stats.nonSerializable += 1\n return '[Circular]'\n }\n seen.add(input)\n }\n\n if (Array.isArray(input)) {\n const out: Array<JsonValue> = []\n const limit = Math.min(input.length, options.maxArrayLength)\n for (let i = 0; i < limit; i++) {\n out.push(toJsonValueInternal(input[i], options, stats, seen, depth + 1))\n }\n if (input.length > limit) {\n stats.oversized += 1\n out.push(`[...${input.length - limit} more]`)\n }\n return out\n }\n\n if (!isPlainRecord(input)) {\n stats.nonSerializable += 1\n return truncateString(String(input), options.maxStringLength, stats)\n }\n\n const keys = Object.keys(input).sort()\n const limit = Math.min(keys.length, options.maxObjectKeys)\n const out: Record<string, JsonValue> = {}\n\n for (let i = 0; i < limit; i++) {\n const rawKey = keys[i]!\n const rawValue = (input as any)[rawKey]\n const key = truncateString(rawKey, options.maxStringLength, stats)\n if (rawValue === undefined) {\n stats.dropped += 1\n continue\n }\n out[key] = toJsonValueInternal(rawValue, options, stats, seen, depth + 1)\n }\n\n if (keys.length > limit) {\n stats.oversized += 1\n out.__truncatedKeys = keys.length - limit\n }\n\n return out\n}\n\nexport const projectJsonValue = (input: unknown, options?: JsonValueProjectOptions): JsonValueProjection => {\n const resolved: Required<JsonValueProjectOptions> = { ...defaultOptions, ...(options ?? {}) }\n const stats: MutableStats = { dropped: 0, oversized: 0, nonSerializable: 0 }\n const seen = new WeakSet<object>()\n\n let downgrade: DowngradeReason | undefined\n const value = toJsonValueInternal(input, resolved, stats, seen, 0)\n\n if (stats.nonSerializable > 0) {\n downgrade = mergeDowngrade(downgrade, 'non_serializable')\n }\n if (stats.oversized > 0) {\n downgrade = mergeDowngrade(downgrade, 'oversized')\n }\n\n // Hard gate: ensure JSON.stringify never throws and respect the max byte budget.\n try {\n const json = JSON.stringify(value)\n if (json.length > resolved.maxJsonBytes) {\n downgrade = mergeDowngrade(downgrade, 'oversized')\n const preview = json.slice(0, Math.min(resolved.oversizedPreviewBytes, resolved.maxJsonBytes))\n return {\n value: {\n _tag: 'oversized',\n bytes: json.length,\n preview,\n },\n stats: {\n dropped: stats.dropped,\n oversized: stats.oversized + 1,\n nonSerializable: stats.nonSerializable,\n },\n downgrade,\n }\n }\n } catch {\n downgrade = mergeDowngrade(downgrade, 'non_serializable')\n return {\n value: '[Unserializable]',\n stats: {\n dropped: stats.dropped,\n oversized: stats.oversized,\n nonSerializable: stats.nonSerializable + 1,\n },\n downgrade,\n }\n }\n\n return {\n value,\n stats: {\n dropped: stats.dropped,\n oversized: stats.oversized,\n nonSerializable: stats.nonSerializable,\n },\n downgrade,\n }\n}\n"],"mappings":"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","names":["out","limit"]}
|