@graphrefly/graphrefly 0.38.0 → 0.40.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/dist/budget-gate-CmmVtasH.d.ts +115 -0
- package/dist/budget-gate-DiP_nK0n.d.cts +115 -0
- package/dist/{cascading-BsJ4GbnS.d.ts → cascading-BNfxffgc.d.ts} +2 -2
- package/dist/{cascading-B25wxpRa.d.cts → cascading-Cxs1eztH.d.cts} +2 -2
- package/dist/chunk-2BX4NB34.js +3 -0
- package/dist/{chunk-6VFC334U.js → chunk-2DMKW2AD.js} +1 -1
- package/dist/{chunk-4BDQXBXE.js → chunk-2QXRYP7Q.js} +1 -1
- package/dist/chunk-32N3JALT.js +1 -0
- package/dist/chunk-35JTVPOX.js +1 -0
- package/dist/chunk-3G5U5QNE.js +5 -0
- package/dist/{chunk-PHXZRR6C.js → chunk-4I45FVQS.js} +1 -1
- package/dist/{chunk-B5S7KTGP.js → chunk-6I726LZU.js} +1 -1
- package/dist/{chunk-NV63VQHI.js → chunk-6VWBPSSY.js} +1 -1
- package/dist/chunk-6XVD5TZV.js +1 -0
- package/dist/chunk-756D5TFD.js +1 -0
- package/dist/{chunk-DSOVKKTI.js → chunk-7Q4ZD3YW.js} +1 -1
- package/dist/{chunk-TMVY7OWG.js → chunk-B7LCDQEV.js} +1 -1
- package/dist/chunk-C72GO4IZ.js +1 -0
- package/dist/{chunk-RZ5HKPGI.js → chunk-CKFQS2CJ.js} +1 -1
- package/dist/chunk-D27JNOLZ.js +1 -0
- package/dist/chunk-ECQRP2UT.js +1 -0
- package/dist/{chunk-6773HURD.js → chunk-FHRBBHJN.js} +1 -1
- package/dist/{chunk-UVLZX2OU.js → chunk-I2DEVPMU.js} +1 -1
- package/dist/chunk-INQFTVZA.js +61 -0
- package/dist/{chunk-6KZZ6XQE.js → chunk-J63M5U46.js} +1 -1
- package/dist/{chunk-POCWFIJ7.js → chunk-JKBOIJ22.js} +1 -1
- package/dist/chunk-K2Z7UENB.js +1 -0
- package/dist/chunk-L6NSJVJZ.js +1 -0
- package/dist/{chunk-K5C67OGE.js → chunk-LCGAVGGV.js} +2 -2
- package/dist/chunk-LYM4PBMV.js +1 -0
- package/dist/{chunk-O2BLVQU4.js → chunk-MNZIKXK4.js} +1 -1
- package/dist/chunk-N43XM7BM.js +1 -0
- package/dist/{chunk-FWGIZP3W.js → chunk-OSZ22J7O.js} +1 -1
- package/dist/{chunk-FAYEMS5M.js → chunk-PPUYQ66A.js} +1 -1
- package/dist/{chunk-SP5O2MIX.js → chunk-QSK3RRII.js} +1 -1
- package/dist/chunk-RZJDIV2G.js +1 -0
- package/dist/chunk-SSCGRYJ2.js +1 -0
- package/dist/chunk-SVFKHUCW.js +1 -0
- package/dist/chunk-TSOYJ743.js +1 -0
- package/dist/{chunk-O245YLM5.js → chunk-UWA6D7UF.js} +1 -1
- package/dist/chunk-VMF23LGB.js +1 -0
- package/dist/chunk-WL6LFPJB.js +1 -0
- package/dist/chunk-WUT362QV.js +1 -0
- package/dist/chunk-XJLYLLIJ.js +1 -0
- package/dist/{chunk-IBGE62GZ.js → chunk-XW4YDF6G.js} +1 -1
- package/dist/chunk-YKD7WUYJ.js +43 -0
- package/dist/{chunk-7KZZLWZ6.js → chunk-YXDRGKXP.js} +1 -1
- package/dist/chunk-Z4F3DOWS.js +84 -0
- package/dist/compat/index.cjs +9 -13
- package/dist/compat/index.d.cts +16 -16
- package/dist/compat/index.d.ts +16 -16
- package/dist/compat/index.js +1 -1
- package/dist/compat/jotai/index.d.cts +2 -2
- package/dist/compat/jotai/index.d.ts +2 -2
- package/dist/compat/nanostores/index.d.cts +2 -2
- package/dist/compat/nanostores/index.d.ts +2 -2
- package/dist/compat/nestjs/index.cjs +7 -11
- package/dist/compat/nestjs/index.d.cts +8 -8
- package/dist/compat/nestjs/index.d.ts +8 -8
- package/dist/compat/nestjs/index.js +1 -1
- package/dist/compat/react/index.d.cts +2 -2
- package/dist/compat/react/index.d.ts +2 -2
- package/dist/compat/solid/index.d.cts +2 -2
- package/dist/compat/solid/index.d.ts +2 -2
- package/dist/compat/svelte/index.d.cts +2 -2
- package/dist/compat/svelte/index.d.ts +2 -2
- package/dist/compat/vue/index.d.cts +2 -2
- package/dist/compat/vue/index.d.ts +2 -2
- package/dist/compat/zustand/index.cjs +3 -7
- package/dist/compat/zustand/index.d.cts +4 -4
- package/dist/compat/zustand/index.d.ts +4 -4
- package/dist/compat/zustand/index.js +1 -1
- package/dist/core/index.cjs +1 -1
- package/dist/core/index.d.cts +4 -4
- package/dist/core/index.d.ts +4 -4
- package/dist/core/index.js +1 -1
- package/dist/{composite-DTOlDuch.d.ts → decay-BnrlbxSv.d.ts} +39 -3
- package/dist/{composite-CgG0MqHm.d.cts → decay-C25AyNAj.d.cts} +39 -3
- package/dist/extra/browser.d.cts +1 -1
- package/dist/extra/browser.d.ts +1 -1
- package/dist/extra/index.cjs +16 -20
- package/dist/extra/index.d.cts +11 -9
- package/dist/extra/index.d.ts +11 -9
- package/dist/extra/index.js +1 -1
- package/dist/extra/node.cjs +2 -2
- package/dist/extra/node.d.cts +1 -1
- package/dist/extra/node.d.ts +1 -1
- package/dist/extra/node.js +1 -1
- package/dist/extra/operators.cjs +1 -1
- package/dist/extra/operators.d.cts +1 -1
- package/dist/extra/operators.d.ts +1 -1
- package/dist/extra/operators.js +1 -1
- package/dist/extra/reactive.cjs +1 -1
- package/dist/extra/reactive.d.cts +3 -3
- package/dist/extra/reactive.d.ts +3 -3
- package/dist/extra/reactive.js +1 -1
- package/dist/extra/render/index.cjs +5 -0
- package/dist/extra/render/index.d.cts +183 -0
- package/dist/extra/render/index.d.ts +183 -0
- package/dist/extra/render/index.js +1 -0
- package/dist/extra/sources.cjs +1 -1
- package/dist/extra/sources.d.cts +1 -1
- package/dist/extra/sources.d.ts +1 -1
- package/dist/extra/sources.js +1 -1
- package/dist/extra/storage-browser.d.cts +1 -1
- package/dist/extra/storage-browser.d.ts +1 -1
- package/dist/{fallback-axI2cXwt.d.cts → fallback-8JYU8tlT.d.cts} +1 -1
- package/dist/{fallback-DuEXfA4F.d.ts → fallback-CMZl39L5.d.ts} +1 -1
- package/dist/graph/index.cjs +7 -7
- package/dist/graph/index.d.cts +5 -5
- package/dist/graph/index.d.ts +5 -5
- package/dist/graph/index.js +1 -1
- package/dist/{graph-BjW1taJl.d.ts → graph-BkIkog4h.d.ts} +76 -100
- package/dist/{graph-CHsVwf9S.d.cts → graph-E6likq7w.d.cts} +76 -100
- package/dist/{index-CIcu6fIR.d.ts → index-2n8Eai6M.d.ts} +1 -1
- package/dist/{index-BwOsJfLJ.d.ts → index-3k4Gg6-n.d.ts} +3 -3
- package/dist/{index-BUFCHvOR.d.ts → index-40ZT4MHj.d.ts} +3 -3
- package/dist/index-8s-Qm-gz.d.ts +218 -0
- package/dist/index-A3U3CSve.d.cts +113 -0
- package/dist/{index-CDvC1m5p.d.ts → index-B2RUoIUz.d.ts} +1 -1
- package/dist/{index-Byp771zP.d.ts → index-B6iTqKtJ.d.ts} +2 -2
- package/dist/{index-D-B7U42V.d.cts → index-B72TQQHd.d.cts} +2 -2
- package/dist/{resilience-Bys63Cpd.d.ts → index-BAQrjuZF.d.ts} +202 -26
- package/dist/{index-BiomL7AW.d.ts → index-BJSZxSFX.d.ts} +1 -1
- package/dist/index-BQ1fR4li.d.ts +210 -0
- package/dist/{index-D7-RSD93.d.cts → index-BTHOTC0Q.d.cts} +4 -4
- package/dist/{index-CEVzBWeB.d.ts → index-BaA-xpSw.d.ts} +26 -19
- package/dist/{index-CAV-3RpJ.d.cts → index-Bd91Nmf4.d.cts} +4 -4
- package/dist/{index-BI1wMfyc.d.ts → index-BgjS2b8N.d.ts} +3 -3
- package/dist/{index-Bpr0Pwgl.d.cts → index-BiHUBEKq.d.cts} +3 -3
- package/dist/{index-UsU9ptzs.d.cts → index-BilOa6AE.d.cts} +55 -9
- package/dist/{index-DJVQ-t07.d.ts → index-BmSQLAZo.d.cts} +41 -48
- package/dist/{index-DTDVDzhA.d.ts → index-C-dkXOpB.d.cts} +56 -54
- package/dist/{index-B-ORMr3k.d.ts → index-C5cQ7Gfx.d.ts} +4 -4
- package/dist/{index-ML6vHKXK.d.ts → index-C6ZUaos7.d.ts} +1 -1
- package/dist/{index-Vz7KPfgz.d.ts → index-CAP3UGsq.d.ts} +1 -1
- package/dist/{index-BFaALJxR.d.ts → index-CD2dBMet.d.ts} +10 -8
- package/dist/index-CGhMJNHb.d.cts +128 -0
- package/dist/{index-B3D_z0Z6.d.cts → index-CL7oilfm.d.cts} +1 -1
- package/dist/{index-Bn0uZEL4.d.ts → index-CQtWm7jS.d.ts} +9 -9
- package/dist/{index-CM-i58FY.d.cts → index-CRm0YIzC.d.cts} +9 -9
- package/dist/index-CUIkE1l9.d.cts +230 -0
- package/dist/{index-CijfwEWx.d.ts → index-Cczxgd2D.d.ts} +2 -2
- package/dist/{index-CAbHN_rP.d.cts → index-CgnCFhr2.d.cts} +1 -1
- package/dist/{index-B2IUcH13.d.cts → index-Ck35nA-T.d.ts} +41 -48
- package/dist/{index-BpMZzX9P.d.cts → index-Cnr1WrlX.d.cts} +3 -3
- package/dist/{index-JYtN9uqM.d.ts → index-CoM4rzyB.d.ts} +1 -1
- package/dist/{index-Ckil6miL.d.cts → index-CtFNGe-m.d.cts} +2 -2
- package/dist/{index-BjWZARLy.d.ts → index-Ctb7_2sG.d.ts} +1 -1
- package/dist/index-CuPUehFa.d.cts +218 -0
- package/dist/index-D1Gc7wV5.d.ts +230 -0
- package/dist/{index-DqICM_I7.d.ts → index-D1IEZUsj.d.ts} +67 -9
- package/dist/{index-BFuVcqL8.d.cts → index-D3ayz3hy.d.cts} +1 -1
- package/dist/{index-CQsqqEVz.d.cts → index-D4uimgee.d.cts} +1 -1
- package/dist/{resilience-BWP2c7Af.d.cts → index-DGTo1yka.d.cts} +202 -26
- package/dist/{index-BmWuVdER.d.ts → index-DH4fm2Ck.d.ts} +2 -2
- package/dist/{index-BkQqf1EF.d.cts → index-DJ_MPOJ5.d.cts} +67 -9
- package/dist/{index-9xhIaM-w.d.cts → index-DOBLxOti.d.cts} +1 -1
- package/dist/{index-BqcgiSQg.d.cts → index-DQQCOIt8.d.cts} +10 -8
- package/dist/{index-DJNAWzcH.d.cts → index-DVAlsmEU.d.cts} +26 -19
- package/dist/index-DVDapw2k.d.cts +210 -0
- package/dist/{index-D_QQ_dTD.d.cts → index-DYTBbF8T.d.cts} +1 -1
- package/dist/{index-BgzPO43H.d.cts → index-DgJc8Zgc.d.cts} +6 -6
- package/dist/{index-Czk3r0yA.d.cts → index-DhLyOHYZ.d.ts} +56 -54
- package/dist/{index-CrlHFsiT.d.ts → index-DhnsQfa3.d.ts} +100 -118
- package/dist/{index-Bub6x_D4.d.cts → index-DktLSZOc.d.cts} +37 -90
- package/dist/{index-BaSy4L6w.d.cts → index-DpiGqtrs.d.cts} +100 -118
- package/dist/{index-D-HZ7sP4.d.ts → index-I1cCY3ZI.d.ts} +6 -6
- package/dist/{index-D9vBTuzo.d.ts → index-IUCY0OFN.d.ts} +4 -4
- package/dist/{index-DeSsvHDD.d.cts → index-MxYuWOrf.d.cts} +3 -3
- package/dist/index-N2MAxt7_.d.ts +128 -0
- package/dist/{index-CpZKtdMw.d.cts → index-PgwvGWa1.d.cts} +1 -1
- package/dist/{index-AUqWe_fX.d.ts → index-WSlcjhQF.d.ts} +55 -9
- package/dist/{index-Di7OdwlO.d.ts → index-bXXLSvor.d.ts} +37 -90
- package/dist/index-da2V5vPy.d.ts +113 -0
- package/dist/{index-DY2f2b9z.d.ts → index-eaQuGJnv.d.ts} +3 -3
- package/dist/{index-BsgxnHN8.d.cts → index-t6L2qpHh.d.cts} +3 -3
- package/dist/{index-C-3UXnHT.d.cts → index-tV3AA9hI.d.cts} +2 -2
- package/dist/{index-8OxXae3g.d.ts → index-yLt-aPMp.d.ts} +1 -1
- package/dist/{index-CqSJ25A9.d.cts → index-z8WFPVI8.d.cts} +1 -1
- package/dist/index.cjs +63 -59
- package/dist/index.d.cts +48 -47
- package/dist/index.d.ts +48 -47
- package/dist/index.js +1 -1
- package/dist/{meta-DreaEM_a.d.cts → meta-Ct9nqQS5.d.cts} +11 -7
- package/dist/{meta-BYqlATmg.d.ts → meta-D8OyedKp.d.ts} +11 -7
- package/dist/{node-fSc-hCv8.d.cts → node-BYInONRr.d.cts} +3 -3
- package/dist/{node-fSc-hCv8.d.ts → node-BYInONRr.d.ts} +3 -3
- package/dist/{observable-Cqty11jG.d.cts → observable-DMIlYJV1.d.cts} +1 -1
- package/dist/{observable-EAV_rNfM.d.ts → observable-DO8DDEzv.d.ts} +1 -1
- package/dist/patterns/ai/browser.cjs +5 -5
- package/dist/patterns/ai/browser.d.cts +4 -4
- package/dist/patterns/ai/browser.d.ts +4 -4
- package/dist/patterns/ai/browser.js +1 -1
- package/dist/patterns/ai/index.cjs +16 -20
- package/dist/patterns/ai/index.d.cts +17 -17
- package/dist/patterns/ai/index.d.ts +17 -17
- package/dist/patterns/ai/index.js +1 -1
- package/dist/patterns/ai/node.cjs +1 -1
- package/dist/patterns/ai/node.d.cts +4 -4
- package/dist/patterns/ai/node.d.ts +4 -4
- package/dist/patterns/ai/node.js +1 -1
- package/dist/patterns/audit/index.cjs +3 -7
- package/dist/patterns/audit/index.d.cts +6 -6
- package/dist/patterns/audit/index.d.ts +6 -6
- package/dist/patterns/audit/index.js +1 -1
- package/dist/patterns/cqrs/index.cjs +3 -7
- package/dist/patterns/cqrs/index.d.cts +6 -6
- package/dist/patterns/cqrs/index.d.ts +6 -6
- package/dist/patterns/cqrs/index.js +1 -1
- package/dist/patterns/demo-shell/index.cjs +5 -8
- package/dist/patterns/demo-shell/index.d.cts +5 -5
- package/dist/patterns/demo-shell/index.d.ts +5 -5
- package/dist/patterns/demo-shell/index.js +1 -1
- package/dist/patterns/domain-templates/index.cjs +3 -7
- package/dist/patterns/domain-templates/index.d.cts +4 -4
- package/dist/patterns/domain-templates/index.d.ts +4 -4
- package/dist/patterns/domain-templates/index.js +1 -1
- package/dist/patterns/graphspec/index.cjs +37 -37
- package/dist/patterns/graphspec/index.d.cts +5 -5
- package/dist/patterns/graphspec/index.d.ts +5 -5
- package/dist/patterns/graphspec/index.js +1 -1
- package/dist/patterns/guarded-execution/index.cjs +3 -7
- package/dist/patterns/guarded-execution/index.d.cts +7 -7
- package/dist/patterns/guarded-execution/index.d.ts +7 -7
- package/dist/patterns/guarded-execution/index.js +1 -1
- package/dist/patterns/harness/index.cjs +8 -12
- package/dist/patterns/harness/index.d.cts +12 -12
- package/dist/patterns/harness/index.d.ts +12 -12
- package/dist/patterns/harness/index.js +1 -1
- package/dist/patterns/job-queue/index.cjs +3 -7
- package/dist/patterns/job-queue/index.d.cts +6 -6
- package/dist/patterns/job-queue/index.d.ts +6 -6
- package/dist/patterns/job-queue/index.js +1 -1
- package/dist/patterns/lens/index.cjs +3 -7
- package/dist/patterns/lens/index.d.cts +5 -6
- package/dist/patterns/lens/index.d.ts +5 -6
- package/dist/patterns/lens/index.js +1 -1
- package/dist/patterns/memory/index.cjs +3 -7
- package/dist/patterns/memory/index.d.cts +6 -6
- package/dist/patterns/memory/index.d.ts +6 -6
- package/dist/patterns/memory/index.js +1 -1
- package/dist/patterns/messaging/index.cjs +3 -7
- package/dist/patterns/messaging/index.d.cts +5 -5
- package/dist/patterns/messaging/index.d.ts +5 -5
- package/dist/patterns/messaging/index.js +1 -1
- package/dist/patterns/orchestration/index.cjs +3 -7
- package/dist/patterns/orchestration/index.d.cts +8 -8
- package/dist/patterns/orchestration/index.d.ts +8 -8
- package/dist/patterns/orchestration/index.js +1 -1
- package/dist/patterns/process/index.cjs +1 -1
- package/dist/patterns/process/index.d.cts +7 -7
- package/dist/patterns/process/index.d.ts +7 -7
- package/dist/patterns/process/index.js +1 -1
- package/dist/patterns/reactive-layout/index.cjs +4 -8
- package/dist/patterns/reactive-layout/index.d.cts +5 -5
- package/dist/patterns/reactive-layout/index.d.ts +5 -5
- package/dist/patterns/reactive-layout/index.js +1 -1
- package/dist/patterns/reduction/index.cjs +3 -7
- package/dist/patterns/reduction/index.d.cts +4 -4
- package/dist/patterns/reduction/index.d.ts +4 -4
- package/dist/patterns/reduction/index.js +1 -1
- package/dist/patterns/refine-loop/index.cjs +5 -9
- package/dist/patterns/refine-loop/index.d.cts +6 -6
- package/dist/patterns/refine-loop/index.d.ts +6 -6
- package/dist/patterns/refine-loop/index.js +1 -1
- package/dist/patterns/resilient-pipeline/index.cjs +3 -1
- package/dist/patterns/resilient-pipeline/index.d.cts +6 -6
- package/dist/patterns/resilient-pipeline/index.d.ts +6 -6
- package/dist/patterns/resilient-pipeline/index.js +1 -1
- package/dist/patterns/surface/index.cjs +12 -16
- package/dist/patterns/surface/index.d.cts +6 -6
- package/dist/patterns/surface/index.d.ts +6 -6
- package/dist/patterns/surface/index.js +1 -1
- package/dist/{pipeline-graph-9JBbmRxA.d.ts → pipeline-graph-CB4La-UW.d.ts} +34 -17
- package/dist/{pipeline-graph-DuHpXSOn.d.cts → pipeline-graph-MWrQZXCq.d.cts} +34 -17
- package/dist/{reactive-layout-BMLDB4Vd.d.cts → reactive-layout-BtZfUKuL.d.cts} +2 -2
- package/dist/{reactive-layout-D-tRiNhg.d.ts → reactive-layout-KJj4E2dT.d.ts} +2 -2
- package/dist/{reactive-log-BgWSA1fg.d.ts → reactive-log-BlAsPLl2.d.ts} +2 -2
- package/dist/{reactive-log-C3IMAGpT.d.cts → reactive-log-_zeEnB9H.d.cts} +2 -2
- package/dist/{reactive-map-DmgeADH8.d.cts → reactive-map-6P_k3AQM.d.cts} +2 -2
- package/dist/{reactive-map-CHyeCf4D.d.ts → reactive-map-CjXByDV-.d.ts} +2 -2
- package/dist/resilience-S33JV6XC.js +1 -0
- package/dist/{sugar-D13E2M_z.d.ts → sugar-BhfjgetH.d.ts} +1 -1
- package/dist/{sugar-DgaGJcI6.d.cts → sugar-DzePN5-g.d.cts} +1 -1
- package/dist/{topology-tree-jrZue3ao.d.cts → topology-tree-3LBKFsUo.d.cts} +1 -1
- package/dist/{topology-tree-D47-nI6Z.d.ts → topology-tree-mF7Emqzm.d.ts} +1 -1
- package/dist/{types-BMSGPlpO.d.cts → types-1Dhoi7HM.d.cts} +1 -1
- package/dist/{types-CidcBDuk.d.ts → types-39jk0kaV.d.ts} +1 -1
- package/package.json +11 -1
- package/dist/chunk-2YFDSYEF.js +0 -1
- package/dist/chunk-5BGFS2XH.js +0 -1
- package/dist/chunk-CMTN3KPT.js +0 -80
- package/dist/chunk-DQJLC6YY.js +0 -1
- package/dist/chunk-G7JN6LCB.js +0 -1
- package/dist/chunk-KJEAIIIY.js +0 -43
- package/dist/chunk-LV3ACS5J.js +0 -1
- package/dist/chunk-NBGPXQSP.js +0 -1
- package/dist/chunk-NN3QPJ6U.js +0 -1
- package/dist/chunk-NSAZ6PR6.js +0 -1
- package/dist/chunk-O32GJOUJ.js +0 -1
- package/dist/chunk-QEVSIVSF.js +0 -1
- package/dist/chunk-QMC2PLNM.js +0 -7
- package/dist/chunk-QOJFR6GS.js +0 -1
- package/dist/chunk-SFK7MN7S.js +0 -1
- package/dist/chunk-TB7JKSVS.js +0 -61
- package/dist/chunk-UAXFKMAG.js +0 -1
- package/dist/chunk-XIMFHEKV.js +0 -1
- package/dist/chunk-XLMYQB6F.js +0 -1
- package/dist/chunk-XLYF4LBH.js +0 -1
- package/dist/imperative-audit-ahAE65a9.d.cts +0 -28
- package/dist/imperative-audit-ahAE65a9.d.ts +0 -28
- package/dist/index-5dNRlW7J.d.ts +0 -135
- package/dist/index-BWUMIt7J.d.cts +0 -135
- package/dist/index-BhzwpIJc.d.cts +0 -105
- package/dist/index-BsZk9T8y.d.ts +0 -105
- package/dist/index-C56XZiDe.d.cts +0 -163
- package/dist/index-CpdnP-0y.d.cts +0 -186
- package/dist/index-DKrIuF-r.d.ts +0 -163
- package/dist/index-DOU1Ee_k.d.ts +0 -186
- package/dist/resilience-LGBK236C.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { j as CompileSpecOptions, G as GraphSpec, c as GraphSpecCatalog, C as CatalogFnEntry, a as CatalogSourceEntry, b as ConfigFieldSchema, F as FnFactory, d as GraphSpecFeedbackEdge, e as GraphSpecNode, f as GraphSpecTemplate, g as GraphSpecTemplateRef, h as GraphSpecValidation, S as SourceFactory } from './index-
|
|
2
|
-
import { G as Graph,
|
|
1
|
+
import { j as CompileSpecOptions, G as GraphSpec, c as GraphSpecCatalog, C as CatalogFnEntry, a as CatalogSourceEntry, b as ConfigFieldSchema, F as FnFactory, d as GraphSpecFeedbackEdge, e as GraphSpecNode, f as GraphSpecTemplate, g as GraphSpecTemplateRef, h as GraphSpecValidation, S as SourceFactory } from './index-DhLyOHYZ.js';
|
|
2
|
+
import { G as Graph, p as GraphNodeFactory, n as GraphDiffResult } from './graph-BkIkog4h.js';
|
|
3
3
|
import { KvStorageTier } from './extra/storage-tiers.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { A as Actor,
|
|
2
|
-
import { G as Graph, a as GraphOptions,
|
|
3
|
-
import { T as TopicGraph } from './index-
|
|
1
|
+
import { A as Actor, N as Node, P as PolicyRuleData, G as GuardAction } from './node-BYInONRr.js';
|
|
2
|
+
import { G as Graph, a as GraphOptions, c as GraphPersistSnapshot } from './graph-BkIkog4h.js';
|
|
3
|
+
import { T as TopicGraph } from './index-40ZT4MHj.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Audit, policy enforcement, and compliance export (roadmap §9.2).
|
|
@@ -10,9 +10,10 @@ import { T as TopicGraph } from './index-BpMZzX9P.cjs';
|
|
|
10
10
|
*
|
|
11
11
|
* - {@link auditTrail} — reactive mutation log with by-node/by-actor/by-time
|
|
12
12
|
* queries.
|
|
13
|
-
* - {@link
|
|
14
|
-
*
|
|
15
|
-
* nodes so subsequent writes
|
|
13
|
+
* - {@link policyGate} — reactive ABAC gate (Tier 2.3 rename of
|
|
14
|
+
* `policyEnforcer`); in `"audit"` mode records would-be denials, in
|
|
15
|
+
* `"enforce"` mode pushes guards onto target nodes so subsequent writes
|
|
16
|
+
* throw {@link GuardDenied}.
|
|
16
17
|
* - {@link complianceSnapshot} — point-in-time export of graph state +
|
|
17
18
|
* audit trail + policies for regulatory archival.
|
|
18
19
|
*
|
|
@@ -88,7 +89,7 @@ declare class AuditTrailGraph extends Graph {
|
|
|
88
89
|
* snapshot synchronously.
|
|
89
90
|
*/
|
|
90
91
|
declare function auditTrail(target: Graph, opts?: AuditTrailOptions): AuditTrailGraph;
|
|
91
|
-
/** A single policy denial recorded by {@link
|
|
92
|
+
/** A single policy denial recorded by {@link PolicyGateGraph}. */
|
|
92
93
|
interface PolicyViolation {
|
|
93
94
|
timestamp_ns: number;
|
|
94
95
|
wall_clock_ns: number;
|
|
@@ -99,8 +100,8 @@ interface PolicyViolation {
|
|
|
99
100
|
/** `"observed"` (audit mode after-the-fact) or `"blocked"` (enforce mode pre-write). */
|
|
100
101
|
result: "observed" | "blocked";
|
|
101
102
|
}
|
|
102
|
-
/** Options for {@link
|
|
103
|
-
interface
|
|
103
|
+
/** Options for {@link policyGate}. */
|
|
104
|
+
interface PolicyGateOptions {
|
|
104
105
|
name?: string;
|
|
105
106
|
graph?: GraphOptions;
|
|
106
107
|
/**
|
|
@@ -122,14 +123,28 @@ interface PolicyEnforcerOptions {
|
|
|
122
123
|
* `target` OR any transitively-mounted subgraph after construction are
|
|
123
124
|
* guarded automatically (enforce mode only).
|
|
124
125
|
*
|
|
126
|
+
* Accepts a static `readonly string[]` or a reactive
|
|
127
|
+
* `Node<readonly string[]>` (Tier 3.4 — F.9 reactive primitive carve-out).
|
|
128
|
+
* When a `Node` is passed, the enforcer rebinds the guarded path set on
|
|
129
|
+
* every emission: paths added to the new set get wrapped, paths removed
|
|
130
|
+
* from the new set get released, and the audit-mode allow-list filter
|
|
131
|
+
* uses the latest cached value. Static-array callers retain the current
|
|
132
|
+
* "caller owns the path set" semantics.
|
|
133
|
+
*
|
|
125
134
|
* **Cost:** unrestricted mode runs `describe({detail:"minimal"})` once
|
|
126
135
|
* at construction (O(N) over the graph tree) plus one topology
|
|
127
136
|
* subscription per graph instance in the mount tree. Restricted mode
|
|
128
|
-
* skips both and disables
|
|
129
|
-
*
|
|
137
|
+
* (static or reactive) skips both and disables `watchTopologyTree`
|
|
138
|
+
* dynamic coverage — for reactive callers, the path-set Node is the
|
|
139
|
+
* single source of truth for which paths are guarded.
|
|
140
|
+
*/
|
|
141
|
+
paths?: readonly string[] | Node<readonly string[]>;
|
|
142
|
+
/**
|
|
143
|
+
* Ring-buffer cap for the violations topic. Default: 1000. Static
|
|
144
|
+
* number only — reactive form is deferred pending TopicGraph reactive
|
|
145
|
+
* `retainedLimit` support (see Tier 10.8 design follow-up in
|
|
146
|
+
* `docs/optimizations.md`).
|
|
130
147
|
*/
|
|
131
|
-
paths?: readonly string[];
|
|
132
|
-
/** Ring-buffer cap for the violations topic. Default: 1000. */
|
|
133
148
|
violationsLimit?: number;
|
|
134
149
|
}
|
|
135
150
|
/**
|
|
@@ -138,14 +153,14 @@ interface PolicyEnforcerOptions {
|
|
|
138
153
|
* to update them at runtime; the enforcer rebinds its internal
|
|
139
154
|
* {@link NodeGuard} on every push.
|
|
140
155
|
*/
|
|
141
|
-
declare class
|
|
156
|
+
declare class PolicyGateGraph extends Graph {
|
|
142
157
|
readonly policies: Node<readonly PolicyRuleData[]>;
|
|
143
158
|
readonly violations: TopicGraph<PolicyViolation>;
|
|
144
159
|
readonly violationCount: Node<number>;
|
|
145
160
|
private readonly _target;
|
|
146
161
|
private readonly _mode;
|
|
147
162
|
private _currentGuard;
|
|
148
|
-
constructor(target: Graph, policies: readonly PolicyRuleData[] | Node<readonly PolicyRuleData[]>, opts:
|
|
163
|
+
constructor(target: Graph, policies: readonly PolicyRuleData[] | Node<readonly PolicyRuleData[]>, opts: PolicyGateOptions);
|
|
149
164
|
private _publishViolation;
|
|
150
165
|
/** Snapshot of recorded violations. */
|
|
151
166
|
all(): readonly PolicyViolation[];
|
|
@@ -157,37 +172,16 @@ declare class PolicyEnforcerGraph extends Graph {
|
|
|
157
172
|
* static rule list or a {@link Node} of rules (LLM-updatable). Records
|
|
158
173
|
* `PolicyViolation` entries to `violations` topic; in `"enforce"` mode also
|
|
159
174
|
* pushes guards onto target nodes so disallowed writes throw.
|
|
160
|
-
*/
|
|
161
|
-
declare function policyEnforcer(target: Graph, policies: readonly PolicyRuleData[] | Node<readonly PolicyRuleData[]>, opts?: PolicyEnforcerOptions): PolicyEnforcerGraph;
|
|
162
|
-
/**
|
|
163
|
-
* Reactive {@link CausalChain} that recomputes whenever the audited graph
|
|
164
|
-
* changes. Returns a `Node<CausalChain>` suitable for subscription, mounting,
|
|
165
|
-
* or composition (e.g. inside `graphLens.why(node)`).
|
|
166
175
|
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
* `data`, `error`, `complete`, and `teardown` bump the version (matching the
|
|
171
|
-
* audit defaults).
|
|
172
|
-
*/
|
|
173
|
-
/**
|
|
174
|
-
* @deprecated Use `graph.explain(from, to, { reactive: true, ... })` directly.
|
|
175
|
-
* This free-function wrapper now dispatches to the consolidated
|
|
176
|
-
* {@link Graph.explain} overload for mental-model consistency with
|
|
177
|
-
* `describe` / `observe`. Will be removed pre-1.0.
|
|
176
|
+
* Self-tags via `g.tagFactory("policyGate", placeholderArgs(opts))` so
|
|
177
|
+
* `graph.describe()` surfaces `factory: "policyGate"` provenance (Phase 2.5
|
|
178
|
+
* DT5 ride-along, locked with the Tier 2.3 rename).
|
|
178
179
|
*/
|
|
179
|
-
declare function
|
|
180
|
-
maxDepth?: number;
|
|
181
|
-
name?: string;
|
|
182
|
-
findCycle?: boolean;
|
|
183
|
-
}): {
|
|
184
|
-
node: Node<CausalChain>;
|
|
185
|
-
dispose: () => void;
|
|
186
|
-
};
|
|
180
|
+
declare function policyGate(target: Graph, policies: readonly PolicyRuleData[] | Node<readonly PolicyRuleData[]>, opts?: PolicyGateOptions): PolicyGateGraph;
|
|
187
181
|
/** Options for {@link complianceSnapshot}. */
|
|
188
182
|
interface ComplianceSnapshotOptions {
|
|
189
183
|
audit?: AuditTrailGraph;
|
|
190
|
-
policies?:
|
|
184
|
+
policies?: PolicyGateGraph;
|
|
191
185
|
/** Actor recorded as the snapshot taker. */
|
|
192
186
|
actor?: Actor;
|
|
193
187
|
}
|
|
@@ -236,16 +230,15 @@ declare const index_AuditTrailGraph: typeof AuditTrailGraph;
|
|
|
236
230
|
type index_AuditTrailOptions = AuditTrailOptions;
|
|
237
231
|
type index_ComplianceSnapshotOptions = ComplianceSnapshotOptions;
|
|
238
232
|
type index_ComplianceSnapshotResult = ComplianceSnapshotResult;
|
|
239
|
-
type
|
|
240
|
-
declare const
|
|
241
|
-
type
|
|
233
|
+
type index_PolicyGateGraph = PolicyGateGraph;
|
|
234
|
+
declare const index_PolicyGateGraph: typeof PolicyGateGraph;
|
|
235
|
+
type index_PolicyGateOptions = PolicyGateOptions;
|
|
242
236
|
type index_PolicyViolation = PolicyViolation;
|
|
243
237
|
declare const index_auditTrail: typeof auditTrail;
|
|
244
238
|
declare const index_complianceSnapshot: typeof complianceSnapshot;
|
|
245
|
-
declare const
|
|
246
|
-
declare const index_reactiveExplainPath: typeof reactiveExplainPath;
|
|
239
|
+
declare const index_policyGate: typeof policyGate;
|
|
247
240
|
declare namespace index {
|
|
248
|
-
export { type index_AuditEntry as AuditEntry, index_AuditTrailGraph as AuditTrailGraph, type index_AuditTrailOptions as AuditTrailOptions, type index_ComplianceSnapshotOptions as ComplianceSnapshotOptions, type index_ComplianceSnapshotResult as ComplianceSnapshotResult,
|
|
241
|
+
export { type index_AuditEntry as AuditEntry, index_AuditTrailGraph as AuditTrailGraph, type index_AuditTrailOptions as AuditTrailOptions, type index_ComplianceSnapshotOptions as ComplianceSnapshotOptions, type index_ComplianceSnapshotResult as ComplianceSnapshotResult, index_PolicyGateGraph as PolicyGateGraph, type index_PolicyGateOptions as PolicyGateOptions, type index_PolicyViolation as PolicyViolation, index_auditTrail as auditTrail, index_complianceSnapshot as complianceSnapshot, index_policyGate as policyGate };
|
|
249
242
|
}
|
|
250
243
|
|
|
251
|
-
export { type AuditEntry as A, type ComplianceSnapshotOptions as C,
|
|
244
|
+
export { type AuditEntry as A, type ComplianceSnapshotOptions as C, PolicyGateGraph as P, type PolicyViolation as a, AuditTrailGraph as b, type AuditTrailOptions as c, type ComplianceSnapshotResult as d, type PolicyGateOptions as e, auditTrail as f, complianceSnapshot as g, index as i, policyGate as p };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { G as Graph, a as GraphOptions } from './graph-
|
|
3
|
-
import {
|
|
1
|
+
import { N as Node } from './node-BYInONRr.cjs';
|
|
2
|
+
import { G as Graph, a as GraphOptions } from './graph-E6likq7w.cjs';
|
|
3
|
+
import { a as ReactiveLogBundle } from './reactive-log-_zeEnB9H.cjs';
|
|
4
4
|
import { AppendLogStorageTier } from './extra/storage-tiers.cjs';
|
|
5
5
|
|
|
6
6
|
type TopicOptions = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { G as Graph } from './graph-
|
|
2
|
-
import { M as MeasurementAdapter } from './reactive-layout-
|
|
1
|
+
import { G as Graph } from './graph-E6likq7w.cjs';
|
|
2
|
+
import { M as MeasurementAdapter } from './reactive-layout-BtZfUKuL.cjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Three-pane demo shell (roadmap §7.2).
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { N as Node, A as Actor, P as PolicyRuleData } from './node-BYInONRr.cjs';
|
|
2
|
+
import { G as Graph, b as GraphDescribeOutput, a as GraphOptions, d as GraphDescribeOptions, D as DescribeFilter } from './graph-E6likq7w.cjs';
|
|
3
|
+
import { P as PolicyGateGraph, a as PolicyViolation } from './index-BmSQLAZo.cjs';
|
|
4
|
+
import { T as TopicGraph } from './index-Cnr1WrlX.cjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Composable safety layer (roadmap §9.0b — Tier 5.1 Wave-B rebuild).
|
|
8
|
+
*
|
|
9
|
+
* {@link guardedExecution} wraps any {@link Graph} with:
|
|
10
|
+
*
|
|
11
|
+
* - {@link policyGate} — reactive ABAC (Tier 2.3 rename of `policyEnforcer`),
|
|
12
|
+
* policies stored as a `Node` so LLMs / humans can update them at runtime.
|
|
13
|
+
* Full transitive dynamic coverage via `watchTopologyTree`.
|
|
14
|
+
* - Reactive {@link GuardedExecutionGraph.scopedDescribeNode} — a thin
|
|
15
|
+
* delegate over `target.describe({ reactive: true, actor })` that re-derives
|
|
16
|
+
* on every settle (topology change, error transition, actor swap).
|
|
17
|
+
* - The enforcer's `violations` topic is republished as `violations` on
|
|
18
|
+
* the wrapper, composable with {@link graphLens}'s `health`.
|
|
19
|
+
* - The wrapper-level `lints` topic surfaces non-policy diagnostic warnings
|
|
20
|
+
* (`empty-policies` / `audit-no-effect` / `no-actor`) so misconfigurations
|
|
21
|
+
* are caught reactively rather than via thrown errors at scattered call sites.
|
|
22
|
+
* - The `scope` derived publishes the current configuration tuple
|
|
23
|
+
* (`{actor, mode, policiesCount}`) for dashboards.
|
|
24
|
+
*
|
|
25
|
+
* V1 scope: policies + actor + reactive scoped describe + lints + scope.
|
|
26
|
+
* Budget-as-option is NOT in V1 — it requires a cost-tracking design that
|
|
27
|
+
* hasn't landed yet. Callers who need a budget limit today append a
|
|
28
|
+
* budget-aware {@link PolicyRuleData} to the policies list (check current
|
|
29
|
+
* cost and `deny` when exhausted).
|
|
30
|
+
*
|
|
31
|
+
* @module
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/** Diagnostic warning published on {@link GuardedExecutionGraph.lints}. */
|
|
35
|
+
interface GuardedExecutionLint {
|
|
36
|
+
/**
|
|
37
|
+
* - `"empty-policies"` — `policies` Node emitted an empty array in
|
|
38
|
+
* `mode: "enforce"`. Static empty arrays throw at construction; this
|
|
39
|
+
* covers the reactive case.
|
|
40
|
+
* - `"audit-no-effect"` — `mode: "audit"` plus the target has no per-node
|
|
41
|
+
* guards, so `scopedDescribeNode` filters by per-node guards only and
|
|
42
|
+
* policies will never gate visibility (they still populate `violations`
|
|
43
|
+
* on writes).
|
|
44
|
+
* - `"no-actor"` — neither a wrapper-configured nor per-call actor was
|
|
45
|
+
* supplied. `scopedDescribeNode` falls back to "describe everything"
|
|
46
|
+
* for the corresponding subscription.
|
|
47
|
+
*/
|
|
48
|
+
kind: "empty-policies" | "audit-no-effect" | "no-actor";
|
|
49
|
+
message: string;
|
|
50
|
+
timestamp_ns: number;
|
|
51
|
+
}
|
|
52
|
+
/** Configuration tuple published on {@link GuardedExecutionGraph.scope}. */
|
|
53
|
+
interface GuardedScope {
|
|
54
|
+
/** The wrapper-configured default actor, or `null` when none configured. */
|
|
55
|
+
actor: Actor | null;
|
|
56
|
+
mode: "audit" | "enforce";
|
|
57
|
+
/** Current policy count (reactive — re-emits on `policies` Node updates). */
|
|
58
|
+
policiesCount: number;
|
|
59
|
+
}
|
|
60
|
+
/** Options for {@link guardedExecution}. */
|
|
61
|
+
interface GuardedExecutionOptions {
|
|
62
|
+
/**
|
|
63
|
+
* Policies enforced against every guarded write. Static list or a live
|
|
64
|
+
* `Node<readonly PolicyRuleData[]>` (LLM-updatable).
|
|
65
|
+
*
|
|
66
|
+
* **Empty-policies handling:**
|
|
67
|
+
* - Static empty array + `mode: "enforce"` throws `RangeError` at
|
|
68
|
+
* construction (deny-by-default is almost certainly a misconfiguration).
|
|
69
|
+
* - Node-supplied empty array + `mode: "enforce"` emits a one-time
|
|
70
|
+
* `"empty-policies"` lint on first such emission (the wrapper can't
|
|
71
|
+
* throw mid-run — surface the warning reactively).
|
|
72
|
+
* - `mode: "audit"` tolerates empty policies (no guards stacked; policies
|
|
73
|
+
* only feed the `violations` channel on writes).
|
|
74
|
+
*/
|
|
75
|
+
policies: readonly PolicyRuleData[] | Node<readonly PolicyRuleData[]>;
|
|
76
|
+
/**
|
|
77
|
+
* Default actor used when the caller invokes
|
|
78
|
+
* {@link GuardedExecutionGraph.scopedDescribeNode} without an override.
|
|
79
|
+
* Accepts a static {@link Actor} or a `Node<Actor>` — when a Node is
|
|
80
|
+
* supplied, the reactive describe re-derives on every actor emission so
|
|
81
|
+
* harnesses binding a per-turn actor get a single live describe Node
|
|
82
|
+
* instead of re-creating one per turn.
|
|
83
|
+
*
|
|
84
|
+
* Omit to scope per-call only. A `"no-actor"` lint fires once per instance
|
|
85
|
+
* if neither a configured nor per-call actor is ever supplied (the
|
|
86
|
+
* resulting describe is unscoped — full visibility).
|
|
87
|
+
*/
|
|
88
|
+
actor?: Actor | Node<Actor>;
|
|
89
|
+
/**
|
|
90
|
+
* `"enforce"` (default) — push guards onto target nodes so disallowed
|
|
91
|
+
* writes throw {@link GuardDenied}.
|
|
92
|
+
* `"audit"` — record would-be denials to the `violations` topic without
|
|
93
|
+
* blocking writes.
|
|
94
|
+
*/
|
|
95
|
+
mode?: "audit" | "enforce";
|
|
96
|
+
/** Ring-buffer cap for the `violations` topic. Default 1000 (inherited from policyGate). */
|
|
97
|
+
violationsLimit?: number;
|
|
98
|
+
/** Ring-buffer cap for the `lints` topic. Default 64 — each lint kind fires at most once per instance. */
|
|
99
|
+
lintsLimit?: number;
|
|
100
|
+
/** Wrapper graph name. Default `${target.name}_guarded`. */
|
|
101
|
+
name?: string;
|
|
102
|
+
/** Wrapper graph options. */
|
|
103
|
+
graph?: GraphOptions;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Wrapper over a target {@link Graph} providing reactive ABAC + reactive
|
|
107
|
+
* scoped describe + diagnostic lints. Mounts a {@link PolicyGateGraph} under
|
|
108
|
+
* `enforcer`, a {@link TopicGraph} of {@link GuardedExecutionLint} under
|
|
109
|
+
* `lints`, and a `scope` derived publishing `{actor, mode, policiesCount}`.
|
|
110
|
+
*
|
|
111
|
+
* @category patterns
|
|
112
|
+
*/
|
|
113
|
+
declare class GuardedExecutionGraph extends Graph {
|
|
114
|
+
readonly enforcer: PolicyGateGraph;
|
|
115
|
+
readonly violations: TopicGraph<PolicyViolation>;
|
|
116
|
+
readonly lints: TopicGraph<GuardedExecutionLint>;
|
|
117
|
+
readonly scope: Node<GuardedScope>;
|
|
118
|
+
/**
|
|
119
|
+
* Canonical reactive describe scoped to the wrapper's configured `actor`.
|
|
120
|
+
* Subscribes ONCE at construction; lifecycle owned by the wrapper (disposed
|
|
121
|
+
* on `wrapper.destroy()`). Use this property for the common case
|
|
122
|
+
* (long-lived consumer wanting "describe scoped to my actor"); use
|
|
123
|
+
* {@link scopedDescribeNode} only when a per-call actor override or
|
|
124
|
+
* different `detail`/`fields` is required.
|
|
125
|
+
*
|
|
126
|
+
* Re-derives on every settle of the target graph: structural changes,
|
|
127
|
+
* status transitions (errors flip nodes into `"errored"`), and actor
|
|
128
|
+
* emissions (when a `Node<Actor>` is bound, including the SENTINEL bridge
|
|
129
|
+
* applied internally — see qa G1B).
|
|
130
|
+
*/
|
|
131
|
+
readonly scopedDescribe: Node<GraphDescribeOutput>;
|
|
132
|
+
private readonly _target;
|
|
133
|
+
private readonly _actorNode;
|
|
134
|
+
private readonly _mode;
|
|
135
|
+
private readonly _firedLintKinds;
|
|
136
|
+
constructor(target: Graph, opts: GuardedExecutionOptions);
|
|
137
|
+
private _fireLint;
|
|
138
|
+
/**
|
|
139
|
+
* **Per-call escape hatch.** Prefer {@link scopedDescribe} (the mounted
|
|
140
|
+
* property) for the common case of "describe scoped to my actor." Use
|
|
141
|
+
* this method ONLY when you need a per-call actor override or different
|
|
142
|
+
* `detail`/`fields`/`filter`.
|
|
143
|
+
*
|
|
144
|
+
* Returns a live `Node<GraphDescribeOutput>` scoped to the supplied (or
|
|
145
|
+
* configured) actor, plus an explicit `dispose` for caller-controlled
|
|
146
|
+
* lifecycle. Re-derives on every settle of the target graph: structural
|
|
147
|
+
* changes, status transitions, and actor emissions (when a `Node<Actor>`
|
|
148
|
+
* is bound).
|
|
149
|
+
*
|
|
150
|
+
* **Lifecycle (qa G1A — EC1 fix).** Each call instantiates a fresh
|
|
151
|
+
* `target.describe({reactive: true})` handle (with its own version state,
|
|
152
|
+
* observe handle, transitive topology subscriptions, derived + keepalive).
|
|
153
|
+
* The caller MUST invoke the returned `dispose()` when finished to release
|
|
154
|
+
* these resources. Disposers ARE also tracked on the wrapper graph so
|
|
155
|
+
* `wrapper.destroy()` cleans up any handles the caller forgot — but a
|
|
156
|
+
* long-lived wrapper with heavy per-call usage will leak until destroy
|
|
157
|
+
* unless `dispose()` is called explicitly.
|
|
158
|
+
*
|
|
159
|
+
* @param actorOverride - Optional per-call override. Static {@link Actor}
|
|
160
|
+
* or `Node<Actor>`. Omit to use the wrapper-configured default.
|
|
161
|
+
* @param opts - Standard {@link GraphDescribeOptions} fields (`detail`,
|
|
162
|
+
* `fields`, `filter`). `actor` / `reactive` / `reactiveName` are
|
|
163
|
+
* controlled by the wrapper.
|
|
164
|
+
* @returns `{node, dispose}` — `node` is the live describe Node; `dispose`
|
|
165
|
+
* tears down the underlying reactive describe subscription idempotently.
|
|
166
|
+
*/
|
|
167
|
+
scopedDescribeNode(actorOverride?: Actor | Node<Actor>, opts?: Omit<GraphDescribeOptions, "actor" | "reactive" | "reactiveName">): {
|
|
168
|
+
node: Node<GraphDescribeOutput>;
|
|
169
|
+
dispose: () => void;
|
|
170
|
+
};
|
|
171
|
+
/** The wrapped graph (escape hatch for tooling). */
|
|
172
|
+
get target(): Graph;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Wrap a {@link Graph} with {@link policyGate} plus a reactive scoped describe
|
|
176
|
+
* lens. Returns a {@link GuardedExecutionGraph} that can be mounted, diffed,
|
|
177
|
+
* or composed with {@link graphLens}.
|
|
178
|
+
*
|
|
179
|
+
* @param target - The graph to guard.
|
|
180
|
+
* @param opts - See {@link GuardedExecutionOptions}.
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```ts
|
|
184
|
+
* const guarded = guardedExecution(app, {
|
|
185
|
+
* actor: state<Actor>({ type: "human", id: "alice" }), // reactive — re-derive on swap
|
|
186
|
+
* policies: [
|
|
187
|
+
* { effect: "allow", action: "read", actorType: "human" },
|
|
188
|
+
* { effect: "deny", action: "write", pathPattern: "system::*" },
|
|
189
|
+
* ],
|
|
190
|
+
* mode: "enforce",
|
|
191
|
+
* });
|
|
192
|
+
*
|
|
193
|
+
* // Canonical: subscribe to the mounted reactive describe (no per-call leak).
|
|
194
|
+
* guarded.scopedDescribe.subscribe((msgs) => { /* live describe per actor / topology change *\/ });
|
|
195
|
+
* // Per-call escape hatch (different actor / detail) — caller manages dispose.
|
|
196
|
+
* const detailed = guarded.scopedDescribeNode(undefined, { detail: "standard" });
|
|
197
|
+
* try { detailed.node.subscribe(/* … *\/); } finally { detailed.dispose(); }
|
|
198
|
+
* guarded.violations.events.subscribe(msgs => console.log("violations:", msgs));
|
|
199
|
+
* guarded.lints.events.subscribe(msgs => console.warn("lints:", msgs));
|
|
200
|
+
* guarded.scope.subscribe(msgs => console.log("scope:", msgs));
|
|
201
|
+
* ```
|
|
202
|
+
*
|
|
203
|
+
* @category patterns
|
|
204
|
+
*/
|
|
205
|
+
declare function guardedExecution(target: Graph, opts: GuardedExecutionOptions): GuardedExecutionGraph;
|
|
206
|
+
|
|
207
|
+
declare const index_DescribeFilter: typeof DescribeFilter;
|
|
208
|
+
type index_GuardedExecutionGraph = GuardedExecutionGraph;
|
|
209
|
+
declare const index_GuardedExecutionGraph: typeof GuardedExecutionGraph;
|
|
210
|
+
type index_GuardedExecutionLint = GuardedExecutionLint;
|
|
211
|
+
type index_GuardedExecutionOptions = GuardedExecutionOptions;
|
|
212
|
+
type index_GuardedScope = GuardedScope;
|
|
213
|
+
declare const index_guardedExecution: typeof guardedExecution;
|
|
214
|
+
declare namespace index {
|
|
215
|
+
export { index_DescribeFilter as DescribeFilter, index_GuardedExecutionGraph as GuardedExecutionGraph, type index_GuardedExecutionLint as GuardedExecutionLint, type index_GuardedExecutionOptions as GuardedExecutionOptions, type index_GuardedScope as GuardedScope, index_guardedExecution as guardedExecution };
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export { GuardedExecutionGraph as G, type GuardedExecutionLint as a, type GuardedExecutionOptions as b, type GuardedScope as c, guardedExecution as g, index as i };
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { f as factoryTag, p as placeholderArgs } from './meta-D8OyedKp.js';
|
|
2
|
+
import { N as Node } from './node-BYInONRr.js';
|
|
3
|
+
import { S as StatusValue, C as CircuitState, R as RateLimiterState, a as RateLimiterOptions, b as CircuitBreakerOptions, c as RetryOptions, F as FallbackInput, N as NS_PER_MS, d as NS_PER_SEC } from './index-BAQrjuZF.js';
|
|
4
|
+
import { G as Graph, a as GraphOptions } from './graph-BkIkog4h.js';
|
|
5
|
+
import { B as BudgetConstraint } from './budget-gate-CmmVtasH.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Resilience composition with correct nesting order (roadmap §9.0b — Tier 5.2 Wave-B rebuild).
|
|
9
|
+
*
|
|
10
|
+
* {@link resilientPipeline} composes the resilience primitives from
|
|
11
|
+
* `extra/resilience/` in the canonical nesting order:
|
|
12
|
+
*
|
|
13
|
+
* ```text
|
|
14
|
+
* rateLimit → budget → breaker → timeout → retry → fallback → status
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Returns a {@link ResilientPipelineGraph} (Graph subclass) with mounted
|
|
18
|
+
* intermediate nodes and per-layer status companions, replacing the prior
|
|
19
|
+
* bundle return. Each intermediate is mounted under a stable name so
|
|
20
|
+
* `pipeline.describe()` shows the resilience chain in topology snapshots,
|
|
21
|
+
* mermaid renders, and `lens.health` aggregations.
|
|
22
|
+
*
|
|
23
|
+
* **Per-attempt timeout vs. retry ordering.** `timeout` is applied BEFORE
|
|
24
|
+
* `retry` so each retry attempt resubscribes to a fresh deadline (per-attempt
|
|
25
|
+
* semantics). If `timeout` wrapped `retry`, a single deadline would apply to
|
|
26
|
+
* the entire retry chain — not what callers expect.
|
|
27
|
+
*
|
|
28
|
+
* **`breakerOnOpen` + `retry` interaction.** With `breakerOnOpen: "error"` AND
|
|
29
|
+
* `retry`, retry sees `CircuitOpenError` and resubscribes; the next attempt
|
|
30
|
+
* very likely also breaker-open → another error → retry burns its budget
|
|
31
|
+
* against an open circuit. Either set retry's `backoff` long enough for the
|
|
32
|
+
* breaker reset window OR keep the default `breakerOnOpen: "skip"` (emits
|
|
33
|
+
* RESOLVED when open; downstream drops the beat without retry firing).
|
|
34
|
+
*
|
|
35
|
+
* **Reactive options (switchMap rebuild).** Every primitive option accepts a
|
|
36
|
+
* `T | Node<T>` (precedent-aligned with `FallbackInput<T>`). When the caller
|
|
37
|
+
* supplies a static value, the layer is built once at construction. When the
|
|
38
|
+
* caller supplies a `Node<T>`, the pipeline subscribes via `switchMap` and
|
|
39
|
+
* **rebuilds the layer on every option emission** — the chain stalls until
|
|
40
|
+
* the option Node emits its first DATA. Each rebuild creates a fresh
|
|
41
|
+
* primitive instance, so internal state is lost (rate-limiter pending buffer,
|
|
42
|
+
* breaker failure count, retry attempt count, in-flight timeout). Per-layer
|
|
43
|
+
* **companion Nodes** (`droppedCount`, `rateLimitState`, `breakerState`) are
|
|
44
|
+
* therefore exposed ONLY for the static-options path. Primitive-side widening
|
|
45
|
+
* (filed in `docs/optimizations.md` under "Tier 5.2 follow-up — primitive-side
|
|
46
|
+
* reactive-options widening") will preserve internal state once it lands and
|
|
47
|
+
* the pipeline will trivially forward Node-form options to the primitive.
|
|
48
|
+
*
|
|
49
|
+
* @module
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* `T | Node<T>` for primitive options — precedent-aligned with
|
|
54
|
+
* {@link FallbackInput} and `policyGate.policies`. When the caller supplies a
|
|
55
|
+
* static value, the layer is built once at construction. When the caller
|
|
56
|
+
* supplies a `Node<T>`, the pipeline subscribes via {@link switchMap}: the
|
|
57
|
+
* layer is rebuilt on every option emission. **State-loss caveat:** each
|
|
58
|
+
* rebuild creates a fresh primitive instance — `rateLimiter` loses its pending
|
|
59
|
+
* buffer, `circuitBreaker` resets failure count, `retry` resets attempt
|
|
60
|
+
* count, `timeout` cancels in-flight deadline. This is the documented
|
|
61
|
+
* switchMap-pattern semantics; primitive-side widening (filed in
|
|
62
|
+
* `docs/optimizations.md`) will preserve internal state once it lands and the
|
|
63
|
+
* pipeline can forward Node-form options directly.
|
|
64
|
+
*
|
|
65
|
+
* Per-layer **companion Nodes** (`droppedCount`, `rateLimitState`,
|
|
66
|
+
* `breakerState`) are exposed only for the static-options path — Node-form
|
|
67
|
+
* leaves them as `undefined` because each rebuild creates new companion
|
|
68
|
+
* instances and a switchMap-mirrored companion would track only the latest
|
|
69
|
+
* bundle. Callers needing both reactive options AND companions wait for
|
|
70
|
+
* primitive-side widening.
|
|
71
|
+
*/
|
|
72
|
+
type NodeOrValue<T> = T | Node<T>;
|
|
73
|
+
/**
|
|
74
|
+
* Options for {@link resilientPipeline}. Every layer is optional — omit a
|
|
75
|
+
* field and that layer is skipped.
|
|
76
|
+
*
|
|
77
|
+
* Reactive (`Node<T>`) forms are accepted everywhere a primitive value would
|
|
78
|
+
* fit; the pipeline subscribes via `switchMap` and rebuilds the layer on each
|
|
79
|
+
* emission. See module JSDoc for the rebuild semantics + state-loss caveat.
|
|
80
|
+
*/
|
|
81
|
+
interface ResilientPipelineOptions<T> {
|
|
82
|
+
/**
|
|
83
|
+
* Admission control — at most `maxEvents` `DATA` per `windowNs`. See
|
|
84
|
+
* {@link rateLimiter}.
|
|
85
|
+
*
|
|
86
|
+
* `maxBuffer` is optional at the pipeline layer (defaults to `Infinity`,
|
|
87
|
+
* preserving the historical unbounded behavior). Pass an explicit positive
|
|
88
|
+
* integer to opt in to a bounded queue.
|
|
89
|
+
*/
|
|
90
|
+
rateLimit?: NodeOrValue<Omit<RateLimiterOptions, "maxBuffer"> & {
|
|
91
|
+
maxBuffer?: number;
|
|
92
|
+
}>;
|
|
93
|
+
/** Cost/constraint gate. See {@link budgetGate}. */
|
|
94
|
+
budget?: NodeOrValue<ReadonlyArray<BudgetConstraint>>;
|
|
95
|
+
/** Circuit breaker — fail-fast when the downstream resource is unhealthy. See {@link circuitBreaker}. */
|
|
96
|
+
breaker?: NodeOrValue<CircuitBreakerOptions>;
|
|
97
|
+
/**
|
|
98
|
+
* Behavior when the breaker is open:
|
|
99
|
+
* - `"skip"` (default) — emit `RESOLVED` (lets downstream drop the beat).
|
|
100
|
+
* - `"error"` — emit a `CircuitOpenError` so `retry` / `fallback` can react.
|
|
101
|
+
* See module JSDoc for the retry-budget burn caveat.
|
|
102
|
+
*
|
|
103
|
+
* Static (configuration-only — no reactive form).
|
|
104
|
+
*/
|
|
105
|
+
breakerOnOpen?: "skip" | "error";
|
|
106
|
+
/** Retry policy on terminal `ERROR`. See {@link retry}. */
|
|
107
|
+
retry?: NodeOrValue<RetryOptions>;
|
|
108
|
+
/**
|
|
109
|
+
* Per-attempt deadline in milliseconds. Converted to ns internally. Omit
|
|
110
|
+
* to skip the timeout wrap.
|
|
111
|
+
*
|
|
112
|
+
* Specified in ms (not ns) because callers consistently think in
|
|
113
|
+
* millisecond deadlines; the underlying {@link timeout} primitive takes ns
|
|
114
|
+
* internally.
|
|
115
|
+
*/
|
|
116
|
+
timeoutMs?: NodeOrValue<number>;
|
|
117
|
+
/** Final fallback value emitted on terminal `ERROR` after retry exhausts. See {@link fallback}. */
|
|
118
|
+
fallback?: FallbackInput<T>;
|
|
119
|
+
/**
|
|
120
|
+
* Initial status reported by the status node. Default `"pending"`. Static.
|
|
121
|
+
*/
|
|
122
|
+
initialStatus?: StatusValue;
|
|
123
|
+
/** Wrapper graph name. Default `"resilient_pipeline"`. */
|
|
124
|
+
name?: string;
|
|
125
|
+
/** Wrapper graph options. */
|
|
126
|
+
graph?: GraphOptions;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Graph subclass returned by {@link resilientPipeline}. Mounts each
|
|
130
|
+
* configured intermediate under a stable name and exposes per-layer status
|
|
131
|
+
* companions.
|
|
132
|
+
*
|
|
133
|
+
* @category patterns
|
|
134
|
+
*/
|
|
135
|
+
declare class ResilientPipelineGraph<T> extends Graph {
|
|
136
|
+
/**
|
|
137
|
+
* Final resilient node — subscribe to this for `DATA` emissions.
|
|
138
|
+
*
|
|
139
|
+
* Named `output` (not `node`) because `Graph.node(name)` already names the
|
|
140
|
+
* path-resolution method on the base class; a `readonly node` field would
|
|
141
|
+
* shadow it.
|
|
142
|
+
*/
|
|
143
|
+
readonly output: Node<T>;
|
|
144
|
+
/** Live status: `"pending" | "running" | "completed" | "errored"`. */
|
|
145
|
+
readonly status: Node<StatusValue>;
|
|
146
|
+
/**
|
|
147
|
+
* Last error payload, or `null` when not errored.
|
|
148
|
+
*
|
|
149
|
+
* Named `lastError` (not `error`) because `Graph.error(name, err)` already
|
|
150
|
+
* names a method on the base class.
|
|
151
|
+
*/
|
|
152
|
+
readonly lastError: Node<unknown | null>;
|
|
153
|
+
/** Breaker state when `opts.breaker` is provided; `undefined` otherwise. */
|
|
154
|
+
readonly breakerState: Node<CircuitState> | undefined;
|
|
155
|
+
/**
|
|
156
|
+
* Drop-counter when `opts.rateLimit` is provided; `undefined` otherwise.
|
|
157
|
+
*
|
|
158
|
+
* **Lifetime note:** `droppedCount` retains its final value through
|
|
159
|
+
* terminal (`COMPLETE` / `ERROR` / `TEARDOWN`); the underlying counter
|
|
160
|
+
* resets to `0` only at the next subscription cycle.
|
|
161
|
+
*/
|
|
162
|
+
readonly droppedCount: Node<number> | undefined;
|
|
163
|
+
/**
|
|
164
|
+
* Combined rate-limit state when `opts.rateLimit` is provided; `undefined`
|
|
165
|
+
* otherwise. Same lifecycle as {@link droppedCount} but exposes
|
|
166
|
+
* `pendingCount` and `paused` alongside the drop counter for richer
|
|
167
|
+
* backpressure observability (Tier 5.2 D7).
|
|
168
|
+
*/
|
|
169
|
+
readonly rateLimitState: Node<RateLimiterState> | undefined;
|
|
170
|
+
constructor(source: Node<T>, opts?: ResilientPipelineOptions<T>);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Compose a resilient pipeline around `source` in the canonical nesting
|
|
174
|
+
* order — `rateLimit → budget → breaker → timeout → retry → fallback → status`.
|
|
175
|
+
* Omit any option to skip that layer.
|
|
176
|
+
*
|
|
177
|
+
* Returns a {@link ResilientPipelineGraph} (Graph subclass) —
|
|
178
|
+
* `pipeline.output` is the externally visible final node; `pipeline.status`
|
|
179
|
+
* / `pipeline.lastError` / `pipeline.breakerState` / `pipeline.droppedCount`
|
|
180
|
+
* are the per-layer companions. Call `pipeline.describe()` to see the
|
|
181
|
+
* mounted intermediates; compose with {@link graphLens}'s `health` for
|
|
182
|
+
* aggregate status.
|
|
183
|
+
*
|
|
184
|
+
* **Naming note:** `output` and `lastError` (not `node` / `error`) avoid
|
|
185
|
+
* clashes with `Graph.node(name)` and `Graph.error(name, err)` on the base
|
|
186
|
+
* class.
|
|
187
|
+
*
|
|
188
|
+
* @param source - Upstream node to wrap.
|
|
189
|
+
* @param opts - See {@link ResilientPipelineOptions}. All fields optional.
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* ```ts
|
|
193
|
+
* const safeFetch = resilientPipeline(fetchNode, {
|
|
194
|
+
* rateLimit: { maxEvents: 10, windowNs: NS_PER_SEC },
|
|
195
|
+
* breaker: { failureThreshold: 5 },
|
|
196
|
+
* retry: { count: 3, backoff: "exponential" },
|
|
197
|
+
* timeoutMs: 10_000,
|
|
198
|
+
* fallback: null,
|
|
199
|
+
* });
|
|
200
|
+
* safeFetch.output.subscribe(msgs => console.log(msgs));
|
|
201
|
+
* safeFetch.status.subscribe(msgs => console.log(msgs));
|
|
202
|
+
* safeFetch.describe({ format: "ascii" }); // visualize the chain
|
|
203
|
+
* ```
|
|
204
|
+
*
|
|
205
|
+
* @category patterns
|
|
206
|
+
*/
|
|
207
|
+
declare function resilientPipeline<T>(source: Node<T>, opts?: ResilientPipelineOptions<T>): ResilientPipelineGraph<T>;
|
|
208
|
+
|
|
209
|
+
declare const index_BudgetConstraint: typeof BudgetConstraint;
|
|
210
|
+
declare const index_CircuitBreakerOptions: typeof CircuitBreakerOptions;
|
|
211
|
+
declare const index_CircuitState: typeof CircuitState;
|
|
212
|
+
declare const index_FallbackInput: typeof FallbackInput;
|
|
213
|
+
declare const index_NS_PER_MS: typeof NS_PER_MS;
|
|
214
|
+
declare const index_NS_PER_SEC: typeof NS_PER_SEC;
|
|
215
|
+
type index_NodeOrValue<T> = NodeOrValue<T>;
|
|
216
|
+
declare const index_RateLimiterOptions: typeof RateLimiterOptions;
|
|
217
|
+
declare const index_RateLimiterState: typeof RateLimiterState;
|
|
218
|
+
type index_ResilientPipelineGraph<T> = ResilientPipelineGraph<T>;
|
|
219
|
+
declare const index_ResilientPipelineGraph: typeof ResilientPipelineGraph;
|
|
220
|
+
type index_ResilientPipelineOptions<T> = ResilientPipelineOptions<T>;
|
|
221
|
+
declare const index_RetryOptions: typeof RetryOptions;
|
|
222
|
+
declare const index_StatusValue: typeof StatusValue;
|
|
223
|
+
declare const index_factoryTag: typeof factoryTag;
|
|
224
|
+
declare const index_placeholderArgs: typeof placeholderArgs;
|
|
225
|
+
declare const index_resilientPipeline: typeof resilientPipeline;
|
|
226
|
+
declare namespace index {
|
|
227
|
+
export { index_BudgetConstraint as BudgetConstraint, index_CircuitBreakerOptions as CircuitBreakerOptions, index_CircuitState as CircuitState, index_FallbackInput as FallbackInput, index_NS_PER_MS as NS_PER_MS, index_NS_PER_SEC as NS_PER_SEC, type index_NodeOrValue as NodeOrValue, index_RateLimiterOptions as RateLimiterOptions, index_RateLimiterState as RateLimiterState, index_ResilientPipelineGraph as ResilientPipelineGraph, type index_ResilientPipelineOptions as ResilientPipelineOptions, index_RetryOptions as RetryOptions, index_StatusValue as StatusValue, index_factoryTag as factoryTag, index_placeholderArgs as placeholderArgs, index_resilientPipeline as resilientPipeline };
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export { type NodeOrValue as N, ResilientPipelineGraph as R, type ResilientPipelineOptions as a, index as i, resilientPipeline as r };
|