@graphrefly/graphrefly 0.43.0 → 0.44.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/{cascading-CH-_VwG9.d.cts → cascading-BglDkMdX.d.cts} +2 -2
- package/dist/{cascading-OgKQZjsa.d.ts → cascading-MFgxu7Yo.d.ts} +2 -2
- package/dist/{chunk-KVV66NN2.js → chunk-2T7U5EU6.js} +1 -1
- package/dist/chunk-5M4CCMMD.js +45 -0
- package/dist/{chunk-I7IGYPSL.js → chunk-5XJ6B66J.js} +1 -1
- package/dist/{chunk-OFZG3TB3.js → chunk-6X7AFUJV.js} +1 -1
- package/dist/{chunk-EBW4V6JN.js → chunk-7K6PWTDQ.js} +1 -1
- package/dist/{chunk-D27JNOLZ.js → chunk-7LIAPXJB.js} +1 -1
- package/dist/{chunk-CLD3F4R5.js → chunk-7WPU3UHQ.js} +1 -1
- package/dist/{chunk-NNKJUORL.js → chunk-A5WCQ5NO.js} +1 -1
- package/dist/chunk-APPIWSGD.js +84 -0
- package/dist/{chunk-TZQPPQEQ.js → chunk-BEZWM2SY.js} +1 -1
- package/dist/{chunk-K2Q24F5T.js → chunk-CB676TKJ.js} +1 -1
- package/dist/{chunk-SUWT3ZON.js → chunk-CE6TI2TL.js} +1 -1
- package/dist/{chunk-VOPGGIL7.js → chunk-CLVB32RD.js} +1 -1
- package/dist/{chunk-V5A7M7RJ.js → chunk-CRVT7D2P.js} +1 -1
- package/dist/chunk-D7GPHKFH.js +1 -0
- package/dist/{chunk-OCKEEPRJ.js → chunk-DHRX7JX4.js} +1 -1
- package/dist/chunk-FZMYDOWV.js +1 -0
- package/dist/{chunk-35JTVPOX.js → chunk-GHBWHMRZ.js} +1 -1
- package/dist/{chunk-KGKJCHEK.js → chunk-GLERH466.js} +1 -1
- package/dist/{chunk-TPKQW72B.js → chunk-HIDYF36O.js} +1 -1
- package/dist/chunk-HITNVN6B.js +3 -0
- package/dist/{chunk-P6C4WHZO.js → chunk-HY4DJBA7.js} +1 -1
- package/dist/chunk-KZIEYVXN.js +1 -0
- package/dist/{chunk-O2BLLH7M.js → chunk-N4MQX6JU.js} +1 -1
- package/dist/{chunk-4YAN45KM.js → chunk-N7FHEL4D.js} +1 -1
- package/dist/chunk-NTEURFZH.js +1 -0
- package/dist/{chunk-OYJKFY7V.js → chunk-OIVP6KFV.js} +1 -1
- package/dist/{chunk-Q4U3A3L5.js → chunk-OPHBU3LG.js} +1 -1
- package/dist/{chunk-PT7W5FCD.js → chunk-OYQOZP2F.js} +1 -1
- package/dist/{chunk-6HOSXQKF.js → chunk-PTZK576G.js} +1 -1
- package/dist/{chunk-S3EEIPO7.js → chunk-ST7UXLWR.js} +1 -1
- package/dist/chunk-SVY7VUYU.js +1 -0
- package/dist/{chunk-QYVXF7GW.js → chunk-TK3NWWD4.js} +1 -1
- package/dist/chunk-UNGSTR4X.js +61 -0
- package/dist/{chunk-VQ4A6T2A.js → chunk-VV4N5P64.js} +1 -1
- package/dist/{chunk-FDQGFWLF.js → chunk-W3I423PS.js} +1 -1
- package/dist/{chunk-XG62INFA.js → chunk-WJR24TAG.js} +1 -1
- package/dist/{chunk-F3IGTWCQ.js → chunk-XTGKMHSW.js} +1 -1
- package/dist/{chunk-JQFH2DV6.js → chunk-YBB7ZGTY.js} +1 -1
- package/dist/{chunk-CUNIRONA.js → chunk-Z4NPUARF.js} +1 -1
- package/dist/{chunk-KRH66M4O.js → chunk-ZGNQRPDT.js} +1 -1
- package/dist/{chunk-JNWRYDJN.js → chunk-ZKPSFFKU.js} +1 -1
- package/dist/{chunk-FG4TKHMC.js → chunk-ZLV5SQSX.js} +1 -1
- package/dist/compat/index.cjs +5 -5
- 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.cjs +1 -1
- package/dist/compat/jotai/index.d.cts +2 -2
- package/dist/compat/jotai/index.d.ts +2 -2
- package/dist/compat/jotai/index.js +1 -1
- package/dist/compat/nanostores/index.cjs +1 -1
- package/dist/compat/nanostores/index.d.cts +2 -2
- package/dist/compat/nanostores/index.d.ts +2 -2
- package/dist/compat/nanostores/index.js +1 -1
- package/dist/compat/nestjs/index.cjs +5 -5
- 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 -3
- 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 +3 -4
- package/dist/core/index.d.ts +3 -4
- package/dist/core/index.js +1 -1
- package/dist/{decay-CdEBmDIs.d.ts → decay-BvOWTZ00.d.ts} +2 -2
- package/dist/{decay-2ZukgQ4o.d.cts → decay-CFlLvXUT.d.cts} +2 -2
- package/dist/extra/browser.cjs +1 -1
- package/dist/extra/browser.d.cts +1 -1
- package/dist/extra/browser.d.ts +1 -1
- package/dist/extra/browser.js +1 -1
- package/dist/extra/index.cjs +15 -15
- package/dist/extra/index.d.cts +10 -10
- package/dist/extra/index.d.ts +10 -10
- 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 +9 -1
- package/dist/extra/operators.d.ts +9 -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.d.cts +3 -3
- package/dist/extra/render/index.d.ts +3 -3
- package/dist/extra/sources.cjs +3 -3
- 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.cjs +1 -1
- package/dist/extra/storage-browser.d.cts +1 -1
- package/dist/extra/storage-browser.d.ts +1 -1
- package/dist/extra/storage-browser.js +1 -1
- package/dist/{fallback-Ctlj2tMY.d.cts → fallback-74oxi34l.d.cts} +1 -1
- package/dist/{fallback-CqYVLL6X.d.ts → fallback-DUyyBTBK.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-C4SHb3Ly.d.cts → graph-CWvEUQAq.d.cts} +196 -3
- package/dist/{graph-7VguS7a4.d.ts → graph-D9LFnda9.d.ts} +196 -3
- package/dist/{index-O7fucFrU.d.cts → index-5k1T6jl0.d.cts} +9 -9
- package/dist/{index-DyR7eU5S.d.cts → index-9770hRuQ.d.cts} +4 -4
- package/dist/{index-COD1kVoS.d.cts → index-B-_tFaqV.d.cts} +4 -4
- package/dist/{index-CLon-IWF.d.cts → index-B17QddL1.d.cts} +4 -4
- package/dist/{index-B-i4_g3k.d.ts → index-B1F8Enjf.d.ts} +61 -8
- package/dist/{index-DBevwHj_.d.ts → index-B5S8ULbU.d.ts} +3 -3
- package/dist/{index-Dgs8zcj7.d.ts → index-B8YnZpIR.d.ts} +2 -2
- package/dist/{index-DSZ3ZCHF.d.ts → index-BHskSB8v.d.ts} +28 -17
- package/dist/{index-CDXc9zKM.d.cts → index-BIYAkbAi.d.cts} +1 -1
- package/dist/{index-C9kSENB4.d.cts → index-BQSKmbuG.d.cts} +1 -1
- package/dist/{index-tJoTcnHh.d.cts → index-BaQaY_IQ.d.cts} +2 -2
- package/dist/{index-CJK1JkYy.d.ts → index-BmZXHqkE.d.ts} +1 -1
- package/dist/{index-K0_0eR8g.d.ts → index-BoJ5JHxI.d.ts} +3 -3
- package/dist/{index-JZUPJIJy.d.ts → index-BocU7pqs.d.ts} +4 -4
- package/dist/{index-ChOyVLKm.d.cts → index-BrPrLl4e.d.cts} +1 -1
- package/dist/{index-BiX1Nkgx.d.cts → index-BxNs2HB9.d.cts} +22 -8
- package/dist/{index-Bf7eqeSF.d.ts → index-Byu-OpX_.d.ts} +2 -2
- package/dist/{index-BoLv_OfD.d.cts → index-C1T3d7V-.d.cts} +61 -8
- package/dist/{index-BTQtTb_H.d.cts → index-C5ri2Axc.d.cts} +3 -3
- package/dist/{index-z96luz5O.d.cts → index-C5stwKcw.d.cts} +1 -1
- package/dist/{index-D4Y1cMG0.d.ts → index-C9l6OEBL.d.ts} +1 -1
- package/dist/{index-CCq87F7t.d.ts → index-CBBLl_rc.d.ts} +1 -1
- package/dist/{index-cm1GNcWE.d.ts → index-CBGUK09R.d.ts} +4 -4
- package/dist/{index-0rKFCVFp.d.cts → index-CC-AvFTy.d.cts} +3 -3
- package/dist/{index-C59mYFKp.d.ts → index-CJF1URuX.d.ts} +9 -9
- package/dist/{index-BJX94aud.d.cts → index-CK29LV56.d.cts} +1 -1
- package/dist/{index-BP8a88zx.d.ts → index-CMh5Rz1y.d.ts} +4 -4
- package/dist/{index-CvrqGfNS.d.ts → index-CPQlGA29.d.ts} +1 -1
- package/dist/{index-D-AEQVLo.d.ts → index-CR8QpwX8.d.ts} +49 -24
- package/dist/{index-Du7u1lSf.d.cts → index-CS0LTlB8.d.cts} +4 -4
- package/dist/{index-Bc41FuHp.d.cts → index-CSOmP7xT.d.cts} +2 -2
- package/dist/{index-BsT7F2et.d.ts → index-CYq8vAyV.d.ts} +2 -2
- package/dist/{index-CPT7C_f1.d.ts → index-CZ3r5Rxp.d.ts} +4 -4
- package/dist/{index-BojK2fwH.d.cts → index-CasX6Pfq.d.cts} +68 -9
- package/dist/{index-BG0BN3PB.d.ts → index-CdAlHFEt.d.ts} +1 -1
- package/dist/{index-wAzD9yVj.d.ts → index-CdTelp1M.d.ts} +8 -4
- package/dist/{index-CQG3D1cp.d.ts → index-CeFiHtAg.d.ts} +4 -4
- package/dist/{index-RV_yDjOX.d.cts → index-Cj3WohTd.d.cts} +8 -4
- package/dist/{index-BAOD98JD.d.cts → index-Climxqsu.d.cts} +4 -4
- package/dist/{index-O16yXPK4.d.cts → index-Co7uli2l.d.cts} +28 -17
- package/dist/{index-DIOoAZUX.d.ts → index-CviRnE4K.d.ts} +1 -1
- package/dist/{index-Dhc7a7Xo.d.cts → index-Cwv0KWcU.d.cts} +2 -2
- package/dist/{index-Dn-wI9g4.d.ts → index-CzLVrjxn.d.ts} +2 -2
- package/dist/{index-C9pjcz3l.d.cts → index-D0aciIex.d.cts} +3 -3
- package/dist/{index-DwigL4lY.d.ts → index-DHen9Klo.d.ts} +22 -8
- package/dist/{index-BwLvVVsy.d.cts → index-DV_1YuVk.d.cts} +40 -8
- package/dist/{index-BdGtBX-X.d.cts → index-Dc4AYqrJ.d.cts} +3 -3
- package/dist/{index-Dmqp7KjD.d.ts → index-Dgl1HpPn.d.ts} +1 -1
- package/dist/{index-CAC_rNzm.d.ts → index-DisjX8a-.d.ts} +40 -8
- package/dist/{index-B5iz82A3.d.cts → index-UPSiS-X7.d.cts} +49 -24
- package/dist/{index-CZQXo5tH.d.ts → index-Yq60JP3s.d.ts} +3 -3
- package/dist/{index-f5IivDUX.d.cts → index-ZVQhLa2i.d.cts} +1 -1
- package/dist/{index-hHcaFlJX.d.cts → index-_6ODbuOu.d.cts} +1 -1
- package/dist/{index-BVpm6noz.d.cts → index-hcDJ8PSI.d.cts} +1 -1
- package/dist/{index-DBHK8O6H.d.ts → index-nozs3fFC.d.ts} +3 -3
- package/dist/{index-Dh_HJ82K.d.ts → index-p09KSrTN.d.ts} +68 -9
- package/dist/{index-C7O6r5fV.d.ts → index-sqkqlb1p.d.ts} +1 -1
- package/dist/{index-CZjOhcBy.d.cts → index-tRCxuAXF.d.cts} +2 -2
- package/dist/index.cjs +48 -48
- package/dist/index.d.cts +42 -43
- package/dist/index.d.ts +42 -43
- package/dist/index.js +1 -1
- package/dist/{node-ClS5yC-B.d.cts → node-kK3CvTrR.d.cts} +1 -1
- package/dist/{node-ClS5yC-B.d.ts → node-kK3CvTrR.d.ts} +1 -1
- package/dist/{observable-BsBzUrcI.d.ts → observable-DWjNfLvC.d.ts} +1 -1
- package/dist/{observable-DLGPPtb8.d.cts → observable-e3eiPPFy.d.cts} +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 -16
- package/dist/patterns/ai/index.d.cts +16 -17
- package/dist/patterns/ai/index.d.ts +16 -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/cqrs/index.cjs +3 -3
- 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 -5
- 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 -3
- 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 +16 -16
- 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/harness/index.cjs +9 -9
- package/dist/patterns/harness/index.d.cts +10 -11
- package/dist/patterns/harness/index.d.ts +10 -11
- package/dist/patterns/harness/index.js +1 -1
- package/dist/patterns/inspect/index.cjs +3 -3
- package/dist/patterns/inspect/index.d.cts +7 -7
- package/dist/patterns/inspect/index.d.ts +7 -7
- package/dist/patterns/inspect/index.js +1 -1
- package/dist/patterns/job-queue/index.cjs +3 -3
- 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/memory/index.cjs +3 -3
- 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 -3
- 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 -3
- package/dist/patterns/orchestration/index.d.cts +6 -7
- package/dist/patterns/orchestration/index.d.ts +6 -7
- package/dist/patterns/orchestration/index.js +1 -1
- package/dist/patterns/process/index.cjs +3 -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 -4
- 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 -3
- 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/surface/index.cjs +10 -10
- 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-DPqKDk59.d.cts → pipeline-graph-CIKhynsF.d.cts} +11 -6
- package/dist/{pipeline-graph-loP57TBA.d.ts → pipeline-graph-Sgj0gCwn.d.ts} +11 -6
- package/dist/{reactive-layout-v7KPvxoc.d.ts → reactive-layout-DOTs9P3X.d.ts} +2 -2
- package/dist/{reactive-layout-Dsvob4zD.d.cts → reactive-layout-DgctbqZo.d.cts} +2 -2
- package/dist/{reactive-log-BezYsbA_.d.ts → reactive-log-BKALbfal.d.ts} +1 -1
- package/dist/{reactive-log-B00laMSQ.d.cts → reactive-log-DIGdYqQ6.d.cts} +1 -1
- package/dist/{reactive-map-48mnZ-nu.d.cts → reactive-map-CEFGp8TK.d.cts} +1 -1
- package/dist/{reactive-map-BVVPdvmi.d.ts → reactive-map-DS_SIAxv.d.ts} +1 -1
- package/dist/resilience-6LYQJAC5.js +1 -0
- package/dist/{sugar-DLwvMr3F.d.ts → sugar-DQjFmVqb.d.cts} +178 -2
- package/dist/{sugar-DyVGtczU.d.cts → sugar-fhLIE7TT.d.ts} +178 -2
- package/dist/{topology-tree-BSdfSwMi.d.cts → topology-tree-Bcz27hpF.d.cts} +1 -1
- package/dist/{topology-tree-BNGvuG82.d.ts → topology-tree-xvaD0fOX.d.ts} +1 -1
- package/dist/{types-B1jDWVsM.d.cts → types-C0_yquda.d.cts} +1 -1
- package/dist/{types-DkzUUs0H.d.ts → types-CWFysE9E.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-3XDYJRYU.js +0 -1
- package/dist/chunk-4I45FVQS.js +0 -1
- package/dist/chunk-626TESAC.js +0 -3
- package/dist/chunk-INQD2KRQ.js +0 -1
- package/dist/chunk-LYCLF26R.js +0 -1
- package/dist/chunk-NON4NLIC.js +0 -45
- package/dist/chunk-QE4IGY7I.js +0 -61
- package/dist/chunk-VNC3TMVY.js +0 -1
- package/dist/chunk-Y4NI3X7O.js +0 -84
- package/dist/meta-BgVAsg9j.d.ts +0 -102
- package/dist/meta-vE8bxW1E.d.cts +0 -102
- package/dist/resilience-YIWPK4YC.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as Actor,
|
|
2
|
-
import { D as DescribeNodeOutput, a as DescribeDetail,
|
|
1
|
+
import { A as Actor, l as GraphReFlyConfig, V as VersioningLevel, N as Node, M as Messages, K as NodeSink } from './node-kK3CvTrR.cjs';
|
|
2
|
+
import { D as DescribeNodeOutput, a as DerivedFn, E as EffectFn, c as DescribeDetail, d as DescribeField } from './sugar-DQjFmVqb.cjs';
|
|
3
3
|
import { StorageHandle } from './extra/storage-core.cjs';
|
|
4
4
|
import { SnapshotStorageTier } from './extra/storage-tiers.cjs';
|
|
5
5
|
|
|
@@ -334,6 +334,73 @@ interface GraphOptions {
|
|
|
334
334
|
factoryArgs?: unknown;
|
|
335
335
|
[key: string]: unknown;
|
|
336
336
|
}
|
|
337
|
+
/**
|
|
338
|
+
* Options for {@link Graph.derived}. Forwarded to the underlying
|
|
339
|
+
* {@link derived} primitive plus graph-level extras.
|
|
340
|
+
*
|
|
341
|
+
* - `keepAlive: true` — installs an internal subscription so the node
|
|
342
|
+
* stays activated and `.cache` stays current for **external consumers**
|
|
343
|
+
* (UI render, debug snapshot, audit log) with no real subscriber. The
|
|
344
|
+
* subscription self-prunes on the node's terminal (`COMPLETE` / `ERROR`
|
|
345
|
+
* / `TEARDOWN`) and is also drained by {@link Graph.destroy}, so
|
|
346
|
+
* repeated `graph.remove(name)` cycles do not accumulate stale
|
|
347
|
+
* disposers.
|
|
348
|
+
*
|
|
349
|
+
* **Do not read `node.cache` from inside another reactive fn** (spec
|
|
350
|
+
* §5.12) — declare the node as a real dep instead. `keepAlive` is a
|
|
351
|
+
* convenience for *external* read patterns, not a shortcut around the
|
|
352
|
+
* message protocol.
|
|
353
|
+
* - `signal` — when aborted, removes this node from the graph via
|
|
354
|
+
* {@link Graph.remove}, which sends `[[TEARDOWN]]` and drains cleanup
|
|
355
|
+
* hooks. Already-aborted signals trigger removal synchronously.
|
|
356
|
+
* - `equals`, `initial`, `meta` — pass-through to {@link NodeOptions}.
|
|
357
|
+
* - `annotation` — forwarded to {@link Graph.add} (see `graph.trace`).
|
|
358
|
+
*/
|
|
359
|
+
interface GraphDerivedOptions<T> {
|
|
360
|
+
equals?: (a: T, b: T) => boolean;
|
|
361
|
+
initial?: T | null;
|
|
362
|
+
keepAlive?: boolean;
|
|
363
|
+
signal?: AbortSignal;
|
|
364
|
+
meta?: Record<string, unknown>;
|
|
365
|
+
annotation?: string;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Options for {@link Graph.effect}.
|
|
369
|
+
*
|
|
370
|
+
* - `signal` — when aborted, removes this node from the graph via
|
|
371
|
+
* {@link Graph.remove} (fires the effect's `deactivate` cleanup).
|
|
372
|
+
* - `meta` / `annotation` — same forwarding shape as
|
|
373
|
+
* {@link GraphDerivedOptions}.
|
|
374
|
+
*/
|
|
375
|
+
interface GraphEffectOptions {
|
|
376
|
+
signal?: AbortSignal;
|
|
377
|
+
meta?: Record<string, unknown>;
|
|
378
|
+
annotation?: string;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Options for {@link Graph.produce}.
|
|
382
|
+
*
|
|
383
|
+
* - `signal` — forwarded to the underlying {@link fromAny} for in-flight
|
|
384
|
+
* cancellation of `Promise` / `AsyncIterable` sources, AND triggers
|
|
385
|
+
* {@link Graph.remove} when aborted so the graph topology reflects the
|
|
386
|
+
* cancellation.
|
|
387
|
+
* - `equals` / `meta` / `annotation` — same forwarding shape as
|
|
388
|
+
* {@link GraphDerivedOptions}.
|
|
389
|
+
*/
|
|
390
|
+
interface GraphProduceOptions<T> {
|
|
391
|
+
equals?: (a: T, b: T) => boolean;
|
|
392
|
+
signal?: AbortSignal;
|
|
393
|
+
meta?: Record<string, unknown>;
|
|
394
|
+
annotation?: string;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Source shapes accepted by {@link Graph.produce}. Excludes `Node<T>` —
|
|
398
|
+
* Node→Node passthrough is rejected at the boundary because `fromAny`
|
|
399
|
+
* passes Nodes through verbatim, which would silently drop `meta`/`equals`
|
|
400
|
+
* options and bypass the `add()` registration's name semantics. For
|
|
401
|
+
* Node→Node, use {@link Graph.derived} with `keepAlive: true` instead.
|
|
402
|
+
*/
|
|
403
|
+
type GraphProduceInput<T> = PromiseLike<T> | AsyncIterable<T> | Iterable<T> | T;
|
|
337
404
|
/** Filter for {@link Graph.describe} — object-style partial match or predicate. */
|
|
338
405
|
type DescribeFilter = Partial<Pick<DescribeNodeOutput, "type" | "status">> | {
|
|
339
406
|
type?: DescribeNodeOutput["type"];
|
|
@@ -1035,6 +1102,115 @@ declare class Graph {
|
|
|
1035
1102
|
* TEARDOWN and unregisters the node).
|
|
1036
1103
|
*/
|
|
1037
1104
|
complete(name: string, options?: GraphActorOptions): void;
|
|
1105
|
+
/**
|
|
1106
|
+
* Internal: register a self-pruning keepalive subscription. The sink
|
|
1107
|
+
* watches for terminal messages (`COMPLETE`/`ERROR`/`TEARDOWN`) on `n`
|
|
1108
|
+
* and removes the disposer from `_disposers` when one arrives, so
|
|
1109
|
+
* repeated `graph.remove(name)` cycles do not accumulate stale
|
|
1110
|
+
* disposers (qa B3).
|
|
1111
|
+
*/
|
|
1112
|
+
private _registerSelfPruningKeepalive;
|
|
1113
|
+
/**
|
|
1114
|
+
* Internal: wire an `AbortSignal` so its abort triggers
|
|
1115
|
+
* `graph.remove(name)`. Already-aborted signals trigger removal
|
|
1116
|
+
* synchronously. The abort listener is itself registered as a graph
|
|
1117
|
+
* disposer so it gets cleaned up if `destroy()` runs first (qa B4).
|
|
1118
|
+
*/
|
|
1119
|
+
private _wireSignalToRemove;
|
|
1120
|
+
/**
|
|
1121
|
+
* Path-based reactive derivation. Resolves each entry in `depPaths` via
|
|
1122
|
+
* {@link Graph.resolve}, builds a {@link derived} node, registers it via
|
|
1123
|
+
* {@link Graph.add}, and returns the registered Node.
|
|
1124
|
+
*
|
|
1125
|
+
* **First-run gate inherited.** fn does not fire until every dep has
|
|
1126
|
+
* delivered at least one real DATA — same gate as `derived()` (spec §2.7,
|
|
1127
|
+
* `partial: false`). A SENTINEL dep holds activation; `null` is a real
|
|
1128
|
+
* DATA value and releases the gate. **Empty `depPaths` is a vacuous
|
|
1129
|
+
* gate** — fn fires once synchronously on first activation. Use this
|
|
1130
|
+
* for one-shot constants only; for async sources prefer
|
|
1131
|
+
* {@link Graph.produce}.
|
|
1132
|
+
*
|
|
1133
|
+
* **`keepAlive: true`** — installs an internal subscription so the node
|
|
1134
|
+
* stays activated and `.cache` stays current for **external consumers**
|
|
1135
|
+
* (UI render, debug snapshot, audit log). The subscription self-prunes
|
|
1136
|
+
* on the node's terminal and is also drained by {@link Graph.destroy}.
|
|
1137
|
+
*
|
|
1138
|
+
* **Do not read `node.cache` from inside another reactive fn** — that
|
|
1139
|
+
* is a §5.12 boundary violation regardless of `keepAlive`. Declare the
|
|
1140
|
+
* node as a real dep instead so the edge appears in `describe()` and
|
|
1141
|
+
* the message protocol carries the value.
|
|
1142
|
+
*
|
|
1143
|
+
* **`signal`** — when aborted, removes this node from the graph.
|
|
1144
|
+
*
|
|
1145
|
+
* @param name - Local registration name (must be unique on this graph).
|
|
1146
|
+
* @param depPaths - `::`-qualified paths resolved at construction time.
|
|
1147
|
+
* @param fn - Pure compute receiving sugar-unwrapped scalar dep values.
|
|
1148
|
+
* @param opts - {@link GraphDerivedOptions}.
|
|
1149
|
+
* @returns The registered `Node<T>`.
|
|
1150
|
+
*/
|
|
1151
|
+
derived<T>(name: string, depPaths: readonly string[], fn: DerivedFn<T>, opts?: GraphDerivedOptions<T>): Node<T>;
|
|
1152
|
+
/**
|
|
1153
|
+
* Path-based managed side effect. Resolves each entry in `depPaths`,
|
|
1154
|
+
* builds an {@link effect} node, registers it, and returns the
|
|
1155
|
+
* registered Node. fn does not auto-emit — call `actions.emit(v)` /
|
|
1156
|
+
* `actions.down(msgs)` explicitly to produce downstream messages.
|
|
1157
|
+
*
|
|
1158
|
+
* **Cleanup.** Return a cleanup function (`() => void`) or granular
|
|
1159
|
+
* hooks (`{ beforeRun?, deactivate?, invalidate? }`) — fired on the
|
|
1160
|
+
* matching transition by the underlying primitive (see
|
|
1161
|
+
* {@link NodeFnCleanup}). Graph teardown propagates `[[TEARDOWN]]`
|
|
1162
|
+
* which triggers `deactivate`.
|
|
1163
|
+
*
|
|
1164
|
+
* **`signal`** — when aborted, removes this node from the graph (fires
|
|
1165
|
+
* the effect's `deactivate` cleanup).
|
|
1166
|
+
*
|
|
1167
|
+
* @param name - Local registration name (must be unique on this graph).
|
|
1168
|
+
* @param depPaths - `::`-qualified paths resolved at construction time.
|
|
1169
|
+
* @param fn - Side-effect receiving sugar-unwrapped scalar dep values.
|
|
1170
|
+
* @param opts - {@link GraphEffectOptions}.
|
|
1171
|
+
* @returns The registered `Node<unknown>`.
|
|
1172
|
+
*/
|
|
1173
|
+
effect(name: string, depPaths: readonly string[], fn: EffectFn, opts?: GraphEffectOptions): Node<unknown>;
|
|
1174
|
+
/**
|
|
1175
|
+
* Wraps an external/async source as a named graph node via
|
|
1176
|
+
* {@link fromAny}. Accepts {@link GraphProduceInput} shapes:
|
|
1177
|
+
* `Promise`, `AsyncIterable`, `Iterable`, or scalar.
|
|
1178
|
+
*
|
|
1179
|
+
* **Node sources are rejected.** For `Node → Node`, use
|
|
1180
|
+
* {@link Graph.derived} with `keepAlive: true` — `fromAny` would
|
|
1181
|
+
* passthrough a Node verbatim and silently drop `meta`/`equals`
|
|
1182
|
+
* options. The type signature excludes `Node<T>`; a runtime guard
|
|
1183
|
+
* catches casts.
|
|
1184
|
+
*
|
|
1185
|
+
* **`undefined` is rejected.** `undefined` is the global SENTINEL;
|
|
1186
|
+
* emitting it as DATA would corrupt downstream first-run gates.
|
|
1187
|
+
* `null` (a valid DATA value) is accepted.
|
|
1188
|
+
*
|
|
1189
|
+
* **`signal`** — forwarded to {@link fromAny} for in-flight cancel of
|
|
1190
|
+
* Promise/AsyncIterable sources, AND triggers {@link Graph.remove}
|
|
1191
|
+
* when aborted so the topology reflects the cancellation.
|
|
1192
|
+
*
|
|
1193
|
+
* @param name - Local registration name (must be unique on this graph).
|
|
1194
|
+
* @param source - Any {@link GraphProduceInput} shape.
|
|
1195
|
+
* @param opts - {@link GraphProduceOptions}.
|
|
1196
|
+
* @returns The registered `Node<T>`.
|
|
1197
|
+
*/
|
|
1198
|
+
produce<T>(name: string, source: GraphProduceInput<T>, opts?: GraphProduceOptions<T>): Node<T>;
|
|
1199
|
+
/**
|
|
1200
|
+
* Atomic multi-mutation. Same semantics as core {@link batch}: DATA and
|
|
1201
|
+
* RESOLVED emissions inside `fn` defer, DIRTY propagates immediately, and
|
|
1202
|
+
* downstream consumers see one coalesced wave (spec §1.3 invariant 7).
|
|
1203
|
+
* Exposed on `Graph` for discoverability and import hygiene — pattern
|
|
1204
|
+
* authors can reach for `graph.batch(...)` without importing `batch` from
|
|
1205
|
+
* the core entry. Shares one global frame with the core import; nesting
|
|
1206
|
+
* either way is supported.
|
|
1207
|
+
*
|
|
1208
|
+
* **Caveat:** if `fn` throws, deferred DATA is discarded but DIRTY
|
|
1209
|
+
* messages already propagated synchronously, leaving downstream nodes
|
|
1210
|
+
* in `dirty` status with stale `.cache`. Catch and emit compensating
|
|
1211
|
+
* INVALIDATE/RESET if you need to recover.
|
|
1212
|
+
*/
|
|
1213
|
+
batch(fn: () => void): void;
|
|
1038
1214
|
/**
|
|
1039
1215
|
* Returns the full edge list for this graph tree, derived on demand from
|
|
1040
1216
|
* each registered node's `_deps` (no stored registry). Local-only
|
|
@@ -1221,6 +1397,13 @@ declare class Graph {
|
|
|
1221
1397
|
* When `reactive: true`, also accepts `name?`.
|
|
1222
1398
|
*/
|
|
1223
1399
|
explain(from: string | Node<string>, to: string | Node<string>, opts?: {
|
|
1400
|
+
/**
|
|
1401
|
+
* DF13 (2026-04-29) — narrow the static overload to forbid
|
|
1402
|
+
* `reactive: true`. A caller passing `{ reactive: true, ... }`
|
|
1403
|
+
* is steered into the reactive overload instead of falling
|
|
1404
|
+
* through to the implementation signature's union return.
|
|
1405
|
+
*/
|
|
1406
|
+
reactive?: false;
|
|
1224
1407
|
maxDepth?: number | Node<number>;
|
|
1225
1408
|
findCycle?: boolean | Node<boolean>;
|
|
1226
1409
|
}): CausalChain;
|
|
@@ -1333,7 +1516,17 @@ declare class Graph {
|
|
|
1333
1516
|
* stays `true` even if the instance is later reused via {@link add}.
|
|
1334
1517
|
*/
|
|
1335
1518
|
get destroyed(): boolean;
|
|
1336
|
-
/**
|
|
1519
|
+
/**
|
|
1520
|
+
* Clear structure after parent already signaled TEARDOWN through this subtree.
|
|
1521
|
+
*
|
|
1522
|
+
* Drains both `_disposers` and `_storageDisposers` to mirror the full
|
|
1523
|
+
* {@link destroy} path — child mounts that registered disposers via
|
|
1524
|
+
* {@link addDisposer} (audit trails, log dispose hooks, off-event
|
|
1525
|
+
* callbacks, attached storage) would otherwise leak when destruction
|
|
1526
|
+
* reaches the subtree via the parent's TEARDOWN cascade rather than a
|
|
1527
|
+
* direct `destroy()` call (EH-2). Disposers run BEFORE structure clear
|
|
1528
|
+
* so cleanups can still resolve node paths if needed.
|
|
1529
|
+
*/
|
|
1337
1530
|
private _destroyClearOnly;
|
|
1338
1531
|
/**
|
|
1339
1532
|
* Serializes structure and current values to JSON-shaped data (§3.8). Same
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as Actor,
|
|
2
|
-
import { D as DescribeNodeOutput, a as DescribeDetail,
|
|
1
|
+
import { A as Actor, l as GraphReFlyConfig, V as VersioningLevel, N as Node, M as Messages, K as NodeSink } from './node-kK3CvTrR.js';
|
|
2
|
+
import { D as DescribeNodeOutput, a as DerivedFn, E as EffectFn, c as DescribeDetail, d as DescribeField } from './sugar-fhLIE7TT.js';
|
|
3
3
|
import { StorageHandle } from './extra/storage-core.js';
|
|
4
4
|
import { SnapshotStorageTier } from './extra/storage-tiers.js';
|
|
5
5
|
|
|
@@ -334,6 +334,73 @@ interface GraphOptions {
|
|
|
334
334
|
factoryArgs?: unknown;
|
|
335
335
|
[key: string]: unknown;
|
|
336
336
|
}
|
|
337
|
+
/**
|
|
338
|
+
* Options for {@link Graph.derived}. Forwarded to the underlying
|
|
339
|
+
* {@link derived} primitive plus graph-level extras.
|
|
340
|
+
*
|
|
341
|
+
* - `keepAlive: true` — installs an internal subscription so the node
|
|
342
|
+
* stays activated and `.cache` stays current for **external consumers**
|
|
343
|
+
* (UI render, debug snapshot, audit log) with no real subscriber. The
|
|
344
|
+
* subscription self-prunes on the node's terminal (`COMPLETE` / `ERROR`
|
|
345
|
+
* / `TEARDOWN`) and is also drained by {@link Graph.destroy}, so
|
|
346
|
+
* repeated `graph.remove(name)` cycles do not accumulate stale
|
|
347
|
+
* disposers.
|
|
348
|
+
*
|
|
349
|
+
* **Do not read `node.cache` from inside another reactive fn** (spec
|
|
350
|
+
* §5.12) — declare the node as a real dep instead. `keepAlive` is a
|
|
351
|
+
* convenience for *external* read patterns, not a shortcut around the
|
|
352
|
+
* message protocol.
|
|
353
|
+
* - `signal` — when aborted, removes this node from the graph via
|
|
354
|
+
* {@link Graph.remove}, which sends `[[TEARDOWN]]` and drains cleanup
|
|
355
|
+
* hooks. Already-aborted signals trigger removal synchronously.
|
|
356
|
+
* - `equals`, `initial`, `meta` — pass-through to {@link NodeOptions}.
|
|
357
|
+
* - `annotation` — forwarded to {@link Graph.add} (see `graph.trace`).
|
|
358
|
+
*/
|
|
359
|
+
interface GraphDerivedOptions<T> {
|
|
360
|
+
equals?: (a: T, b: T) => boolean;
|
|
361
|
+
initial?: T | null;
|
|
362
|
+
keepAlive?: boolean;
|
|
363
|
+
signal?: AbortSignal;
|
|
364
|
+
meta?: Record<string, unknown>;
|
|
365
|
+
annotation?: string;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Options for {@link Graph.effect}.
|
|
369
|
+
*
|
|
370
|
+
* - `signal` — when aborted, removes this node from the graph via
|
|
371
|
+
* {@link Graph.remove} (fires the effect's `deactivate` cleanup).
|
|
372
|
+
* - `meta` / `annotation` — same forwarding shape as
|
|
373
|
+
* {@link GraphDerivedOptions}.
|
|
374
|
+
*/
|
|
375
|
+
interface GraphEffectOptions {
|
|
376
|
+
signal?: AbortSignal;
|
|
377
|
+
meta?: Record<string, unknown>;
|
|
378
|
+
annotation?: string;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Options for {@link Graph.produce}.
|
|
382
|
+
*
|
|
383
|
+
* - `signal` — forwarded to the underlying {@link fromAny} for in-flight
|
|
384
|
+
* cancellation of `Promise` / `AsyncIterable` sources, AND triggers
|
|
385
|
+
* {@link Graph.remove} when aborted so the graph topology reflects the
|
|
386
|
+
* cancellation.
|
|
387
|
+
* - `equals` / `meta` / `annotation` — same forwarding shape as
|
|
388
|
+
* {@link GraphDerivedOptions}.
|
|
389
|
+
*/
|
|
390
|
+
interface GraphProduceOptions<T> {
|
|
391
|
+
equals?: (a: T, b: T) => boolean;
|
|
392
|
+
signal?: AbortSignal;
|
|
393
|
+
meta?: Record<string, unknown>;
|
|
394
|
+
annotation?: string;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Source shapes accepted by {@link Graph.produce}. Excludes `Node<T>` —
|
|
398
|
+
* Node→Node passthrough is rejected at the boundary because `fromAny`
|
|
399
|
+
* passes Nodes through verbatim, which would silently drop `meta`/`equals`
|
|
400
|
+
* options and bypass the `add()` registration's name semantics. For
|
|
401
|
+
* Node→Node, use {@link Graph.derived} with `keepAlive: true` instead.
|
|
402
|
+
*/
|
|
403
|
+
type GraphProduceInput<T> = PromiseLike<T> | AsyncIterable<T> | Iterable<T> | T;
|
|
337
404
|
/** Filter for {@link Graph.describe} — object-style partial match or predicate. */
|
|
338
405
|
type DescribeFilter = Partial<Pick<DescribeNodeOutput, "type" | "status">> | {
|
|
339
406
|
type?: DescribeNodeOutput["type"];
|
|
@@ -1035,6 +1102,115 @@ declare class Graph {
|
|
|
1035
1102
|
* TEARDOWN and unregisters the node).
|
|
1036
1103
|
*/
|
|
1037
1104
|
complete(name: string, options?: GraphActorOptions): void;
|
|
1105
|
+
/**
|
|
1106
|
+
* Internal: register a self-pruning keepalive subscription. The sink
|
|
1107
|
+
* watches for terminal messages (`COMPLETE`/`ERROR`/`TEARDOWN`) on `n`
|
|
1108
|
+
* and removes the disposer from `_disposers` when one arrives, so
|
|
1109
|
+
* repeated `graph.remove(name)` cycles do not accumulate stale
|
|
1110
|
+
* disposers (qa B3).
|
|
1111
|
+
*/
|
|
1112
|
+
private _registerSelfPruningKeepalive;
|
|
1113
|
+
/**
|
|
1114
|
+
* Internal: wire an `AbortSignal` so its abort triggers
|
|
1115
|
+
* `graph.remove(name)`. Already-aborted signals trigger removal
|
|
1116
|
+
* synchronously. The abort listener is itself registered as a graph
|
|
1117
|
+
* disposer so it gets cleaned up if `destroy()` runs first (qa B4).
|
|
1118
|
+
*/
|
|
1119
|
+
private _wireSignalToRemove;
|
|
1120
|
+
/**
|
|
1121
|
+
* Path-based reactive derivation. Resolves each entry in `depPaths` via
|
|
1122
|
+
* {@link Graph.resolve}, builds a {@link derived} node, registers it via
|
|
1123
|
+
* {@link Graph.add}, and returns the registered Node.
|
|
1124
|
+
*
|
|
1125
|
+
* **First-run gate inherited.** fn does not fire until every dep has
|
|
1126
|
+
* delivered at least one real DATA — same gate as `derived()` (spec §2.7,
|
|
1127
|
+
* `partial: false`). A SENTINEL dep holds activation; `null` is a real
|
|
1128
|
+
* DATA value and releases the gate. **Empty `depPaths` is a vacuous
|
|
1129
|
+
* gate** — fn fires once synchronously on first activation. Use this
|
|
1130
|
+
* for one-shot constants only; for async sources prefer
|
|
1131
|
+
* {@link Graph.produce}.
|
|
1132
|
+
*
|
|
1133
|
+
* **`keepAlive: true`** — installs an internal subscription so the node
|
|
1134
|
+
* stays activated and `.cache` stays current for **external consumers**
|
|
1135
|
+
* (UI render, debug snapshot, audit log). The subscription self-prunes
|
|
1136
|
+
* on the node's terminal and is also drained by {@link Graph.destroy}.
|
|
1137
|
+
*
|
|
1138
|
+
* **Do not read `node.cache` from inside another reactive fn** — that
|
|
1139
|
+
* is a §5.12 boundary violation regardless of `keepAlive`. Declare the
|
|
1140
|
+
* node as a real dep instead so the edge appears in `describe()` and
|
|
1141
|
+
* the message protocol carries the value.
|
|
1142
|
+
*
|
|
1143
|
+
* **`signal`** — when aborted, removes this node from the graph.
|
|
1144
|
+
*
|
|
1145
|
+
* @param name - Local registration name (must be unique on this graph).
|
|
1146
|
+
* @param depPaths - `::`-qualified paths resolved at construction time.
|
|
1147
|
+
* @param fn - Pure compute receiving sugar-unwrapped scalar dep values.
|
|
1148
|
+
* @param opts - {@link GraphDerivedOptions}.
|
|
1149
|
+
* @returns The registered `Node<T>`.
|
|
1150
|
+
*/
|
|
1151
|
+
derived<T>(name: string, depPaths: readonly string[], fn: DerivedFn<T>, opts?: GraphDerivedOptions<T>): Node<T>;
|
|
1152
|
+
/**
|
|
1153
|
+
* Path-based managed side effect. Resolves each entry in `depPaths`,
|
|
1154
|
+
* builds an {@link effect} node, registers it, and returns the
|
|
1155
|
+
* registered Node. fn does not auto-emit — call `actions.emit(v)` /
|
|
1156
|
+
* `actions.down(msgs)` explicitly to produce downstream messages.
|
|
1157
|
+
*
|
|
1158
|
+
* **Cleanup.** Return a cleanup function (`() => void`) or granular
|
|
1159
|
+
* hooks (`{ beforeRun?, deactivate?, invalidate? }`) — fired on the
|
|
1160
|
+
* matching transition by the underlying primitive (see
|
|
1161
|
+
* {@link NodeFnCleanup}). Graph teardown propagates `[[TEARDOWN]]`
|
|
1162
|
+
* which triggers `deactivate`.
|
|
1163
|
+
*
|
|
1164
|
+
* **`signal`** — when aborted, removes this node from the graph (fires
|
|
1165
|
+
* the effect's `deactivate` cleanup).
|
|
1166
|
+
*
|
|
1167
|
+
* @param name - Local registration name (must be unique on this graph).
|
|
1168
|
+
* @param depPaths - `::`-qualified paths resolved at construction time.
|
|
1169
|
+
* @param fn - Side-effect receiving sugar-unwrapped scalar dep values.
|
|
1170
|
+
* @param opts - {@link GraphEffectOptions}.
|
|
1171
|
+
* @returns The registered `Node<unknown>`.
|
|
1172
|
+
*/
|
|
1173
|
+
effect(name: string, depPaths: readonly string[], fn: EffectFn, opts?: GraphEffectOptions): Node<unknown>;
|
|
1174
|
+
/**
|
|
1175
|
+
* Wraps an external/async source as a named graph node via
|
|
1176
|
+
* {@link fromAny}. Accepts {@link GraphProduceInput} shapes:
|
|
1177
|
+
* `Promise`, `AsyncIterable`, `Iterable`, or scalar.
|
|
1178
|
+
*
|
|
1179
|
+
* **Node sources are rejected.** For `Node → Node`, use
|
|
1180
|
+
* {@link Graph.derived} with `keepAlive: true` — `fromAny` would
|
|
1181
|
+
* passthrough a Node verbatim and silently drop `meta`/`equals`
|
|
1182
|
+
* options. The type signature excludes `Node<T>`; a runtime guard
|
|
1183
|
+
* catches casts.
|
|
1184
|
+
*
|
|
1185
|
+
* **`undefined` is rejected.** `undefined` is the global SENTINEL;
|
|
1186
|
+
* emitting it as DATA would corrupt downstream first-run gates.
|
|
1187
|
+
* `null` (a valid DATA value) is accepted.
|
|
1188
|
+
*
|
|
1189
|
+
* **`signal`** — forwarded to {@link fromAny} for in-flight cancel of
|
|
1190
|
+
* Promise/AsyncIterable sources, AND triggers {@link Graph.remove}
|
|
1191
|
+
* when aborted so the topology reflects the cancellation.
|
|
1192
|
+
*
|
|
1193
|
+
* @param name - Local registration name (must be unique on this graph).
|
|
1194
|
+
* @param source - Any {@link GraphProduceInput} shape.
|
|
1195
|
+
* @param opts - {@link GraphProduceOptions}.
|
|
1196
|
+
* @returns The registered `Node<T>`.
|
|
1197
|
+
*/
|
|
1198
|
+
produce<T>(name: string, source: GraphProduceInput<T>, opts?: GraphProduceOptions<T>): Node<T>;
|
|
1199
|
+
/**
|
|
1200
|
+
* Atomic multi-mutation. Same semantics as core {@link batch}: DATA and
|
|
1201
|
+
* RESOLVED emissions inside `fn` defer, DIRTY propagates immediately, and
|
|
1202
|
+
* downstream consumers see one coalesced wave (spec §1.3 invariant 7).
|
|
1203
|
+
* Exposed on `Graph` for discoverability and import hygiene — pattern
|
|
1204
|
+
* authors can reach for `graph.batch(...)` without importing `batch` from
|
|
1205
|
+
* the core entry. Shares one global frame with the core import; nesting
|
|
1206
|
+
* either way is supported.
|
|
1207
|
+
*
|
|
1208
|
+
* **Caveat:** if `fn` throws, deferred DATA is discarded but DIRTY
|
|
1209
|
+
* messages already propagated synchronously, leaving downstream nodes
|
|
1210
|
+
* in `dirty` status with stale `.cache`. Catch and emit compensating
|
|
1211
|
+
* INVALIDATE/RESET if you need to recover.
|
|
1212
|
+
*/
|
|
1213
|
+
batch(fn: () => void): void;
|
|
1038
1214
|
/**
|
|
1039
1215
|
* Returns the full edge list for this graph tree, derived on demand from
|
|
1040
1216
|
* each registered node's `_deps` (no stored registry). Local-only
|
|
@@ -1221,6 +1397,13 @@ declare class Graph {
|
|
|
1221
1397
|
* When `reactive: true`, also accepts `name?`.
|
|
1222
1398
|
*/
|
|
1223
1399
|
explain(from: string | Node<string>, to: string | Node<string>, opts?: {
|
|
1400
|
+
/**
|
|
1401
|
+
* DF13 (2026-04-29) — narrow the static overload to forbid
|
|
1402
|
+
* `reactive: true`. A caller passing `{ reactive: true, ... }`
|
|
1403
|
+
* is steered into the reactive overload instead of falling
|
|
1404
|
+
* through to the implementation signature's union return.
|
|
1405
|
+
*/
|
|
1406
|
+
reactive?: false;
|
|
1224
1407
|
maxDepth?: number | Node<number>;
|
|
1225
1408
|
findCycle?: boolean | Node<boolean>;
|
|
1226
1409
|
}): CausalChain;
|
|
@@ -1333,7 +1516,17 @@ declare class Graph {
|
|
|
1333
1516
|
* stays `true` even if the instance is later reused via {@link add}.
|
|
1334
1517
|
*/
|
|
1335
1518
|
get destroyed(): boolean;
|
|
1336
|
-
/**
|
|
1519
|
+
/**
|
|
1520
|
+
* Clear structure after parent already signaled TEARDOWN through this subtree.
|
|
1521
|
+
*
|
|
1522
|
+
* Drains both `_disposers` and `_storageDisposers` to mirror the full
|
|
1523
|
+
* {@link destroy} path — child mounts that registered disposers via
|
|
1524
|
+
* {@link addDisposer} (audit trails, log dispose hooks, off-event
|
|
1525
|
+
* callbacks, attached storage) would otherwise leak when destruction
|
|
1526
|
+
* reaches the subtree via the parent's TEARDOWN cascade rather than a
|
|
1527
|
+
* direct `destroy()` call (EH-2). Disposers run BEFORE structure clear
|
|
1528
|
+
* so cleanups can still resolve node paths if needed.
|
|
1529
|
+
*/
|
|
1337
1530
|
private _destroyClearOnly;
|
|
1338
1531
|
/**
|
|
1339
1532
|
* Serializes structure and current values to JSON-shaped data (§3.8). Same
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { i as index$2 } from './index-
|
|
2
|
-
import { i as index$3 } from './index-
|
|
3
|
-
import { i as index$4 } from './index-
|
|
4
|
-
import { i as index$5 } from './index-
|
|
5
|
-
import { N as Node } from './node-
|
|
6
|
-
import { i as index$6 } from './index-
|
|
7
|
-
import { i as index$7 } from './index-
|
|
8
|
-
import { i as index$8 } from './index-
|
|
9
|
-
import { i as index$9 } from './index-
|
|
1
|
+
import { i as index$2 } from './index-BrPrLl4e.cjs';
|
|
2
|
+
import { i as index$3 } from './index-BQSKmbuG.cjs';
|
|
3
|
+
import { i as index$4 } from './index-Climxqsu.cjs';
|
|
4
|
+
import { i as index$5 } from './index-C5stwKcw.cjs';
|
|
5
|
+
import { N as Node } from './node-kK3CvTrR.cjs';
|
|
6
|
+
import { i as index$6 } from './index-hcDJ8PSI.cjs';
|
|
7
|
+
import { i as index$7 } from './index-_6ODbuOu.cjs';
|
|
8
|
+
import { i as index$8 } from './index-CK29LV56.cjs';
|
|
9
|
+
import { i as index$9 } from './index-ZVQhLa2i.cjs';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Options for creating signals.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { A as Actor, N as Node, W as PolicyRuleData,
|
|
2
|
-
import { G as Graph, a as GraphOptions, r as GraphPersistSnapshot, b as GraphDescribeOutput, j as GraphDescribeOptions, C as CausalChain, e as DescribeFilter } from './graph-
|
|
3
|
-
import { T as TopicGraph } from './index-
|
|
4
|
-
import { w as watchTopologyTree } from './topology-tree-
|
|
1
|
+
import { A as Actor, N as Node, W as PolicyRuleData, m as GuardAction } from './node-kK3CvTrR.cjs';
|
|
2
|
+
import { G as Graph, a as GraphOptions, r as GraphPersistSnapshot, b as GraphDescribeOutput, j as GraphDescribeOptions, C as CausalChain, e as DescribeFilter } from './graph-CWvEUQAq.cjs';
|
|
3
|
+
import { T as TopicGraph } from './index-C5ri2Axc.cjs';
|
|
4
|
+
import { w as watchTopologyTree } from './topology-tree-Bcz27hpF.cjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Audit, policy enforcement, and compliance export (roadmap §9.2).
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { N as Node } from './node-
|
|
2
|
-
import { B as BaseAuditRecord } from './index-
|
|
3
|
-
import { a as ReactiveLogBundle } from './reactive-log-
|
|
1
|
+
import { N as Node } from './node-kK3CvTrR.cjs';
|
|
2
|
+
import { B as BaseAuditRecord } from './index-D0aciIex.cjs';
|
|
3
|
+
import { a as ReactiveLogBundle } from './reactive-log-DIGdYqQ6.cjs';
|
|
4
4
|
import { AppendLogStorageTier } from './extra/storage-tiers.cjs';
|
|
5
|
-
import { a as GraphOptions, G as Graph } from './graph-
|
|
5
|
+
import { a as GraphOptions, G as Graph } from './graph-CWvEUQAq.cjs';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* CQRS patterns (roadmap §4.5).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { N as Node } from './node-
|
|
2
|
-
import { B as BaseAuditRecord } from './index-
|
|
3
|
-
import { a as ReactiveLogBundle } from './reactive-log-
|
|
4
|
-
import { G as Graph } from './graph-
|
|
1
|
+
import { N as Node } from './node-kK3CvTrR.cjs';
|
|
2
|
+
import { B as BaseAuditRecord } from './index-D0aciIex.cjs';
|
|
3
|
+
import { a as ReactiveLogBundle } from './reactive-log-DIGdYqQ6.cjs';
|
|
4
|
+
import { G as Graph } from './graph-CWvEUQAq.cjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Memory patterns (roadmap §4.3) — public-face Phase-4 primitives audited under
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { N as Node } from './node-
|
|
1
|
+
import { N as Node } from './node-kK3CvTrR.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Backoff strategies for {@link retry} (roadmap §3.1). Delays are in **nanoseconds**.
|
|
@@ -227,8 +227,8 @@ type RetryFactoryOptions<T> = RetryOptions & {
|
|
|
227
227
|
*
|
|
228
228
|
* @category extra
|
|
229
229
|
*/
|
|
230
|
-
declare function retry<T>(input: Node<T>, opts?: RetryOptions): Node<T>;
|
|
231
|
-
declare function retry<T>(input: () => Node<T>, opts?: RetryFactoryOptions<T
|
|
230
|
+
declare function retry<T>(input: Node<T>, opts?: NodeOrValue<RetryOptions>): Node<T>;
|
|
231
|
+
declare function retry<T>(input: () => Node<T>, opts?: NodeOrValue<RetryFactoryOptions<T>>): Node<T>;
|
|
232
232
|
type CircuitState = "closed" | "open" | "half-open";
|
|
233
233
|
/**
|
|
234
234
|
* Thrown when {@link withBreaker} is configured with `onOpen: "error"` and the breaker rejects work.
|
|
@@ -275,6 +275,13 @@ interface CircuitBreaker {
|
|
|
275
275
|
readonly failureCount: number;
|
|
276
276
|
/** Manually reset to closed state, clearing all counters. */
|
|
277
277
|
reset(): void;
|
|
278
|
+
/**
|
|
279
|
+
* Release the reactive-options subscription (Tier 6.5 3.2.4, 2026-04-29).
|
|
280
|
+
* No-op when constructed with static options. Call when retiring a
|
|
281
|
+
* breaker whose options came from a `Node<CircuitBreakerOptions>` to
|
|
282
|
+
* avoid leaking the option-Node subscription.
|
|
283
|
+
*/
|
|
284
|
+
dispose(): void;
|
|
278
285
|
}
|
|
279
286
|
/**
|
|
280
287
|
* Factory for a synchronous circuit breaker with `closed`, `open`, and `half-open` states.
|
|
@@ -282,12 +289,24 @@ interface CircuitBreaker {
|
|
|
282
289
|
* Supports escalating cooldown via an optional {@link BackoffStrategy} — each consecutive
|
|
283
290
|
* open→half-open→open cycle increments the backoff attempt.
|
|
284
291
|
*
|
|
285
|
-
* @param options - Threshold, cooldown, half-open limit, and optional clock
|
|
292
|
+
* @param options - Threshold, cooldown, half-open limit, and optional clock
|
|
293
|
+
* override; OR a `Node<CircuitBreakerOptions>` carrying the same shape
|
|
294
|
+
* reactively (Tier 6.5 3.2.4).
|
|
286
295
|
* @returns {@link CircuitBreaker} instance.
|
|
287
296
|
*
|
|
288
297
|
* @remarks
|
|
289
298
|
* **Timing:** Uses `monotonicNs()` by default (nanoseconds). Override `now` for tests.
|
|
290
299
|
*
|
|
300
|
+
* **Reactive options (locked semantics, Tier 6.5 3.2.4, 2026-04-29).**
|
|
301
|
+
* When `options` is a `Node<CircuitBreakerOptions>`, the breaker
|
|
302
|
+
* subscribes at construction and re-reads `failureThreshold` /
|
|
303
|
+
* `cooldownNs` / `cooldown` / `halfOpenMax` / `now` on each DATA. **An
|
|
304
|
+
* option swap RESETS the breaker to `"closed"`** with all counters
|
|
305
|
+
* cleared — operators tuning a runaway breaker get a clean baseline.
|
|
306
|
+
* If retaining failure history across re-tunings matters, derive a new
|
|
307
|
+
* breaker per-tuning instead. Call `breaker.dispose()` when retiring to
|
|
308
|
+
* release the option-Node subscription.
|
|
309
|
+
*
|
|
291
310
|
* @example
|
|
292
311
|
* ```ts
|
|
293
312
|
* import { circuitBreaker, exponential, NS_PER_SEC } from "@graphrefly/graphrefly-ts";
|
|
@@ -300,7 +319,7 @@ interface CircuitBreaker {
|
|
|
300
319
|
*
|
|
301
320
|
* @category extra
|
|
302
321
|
*/
|
|
303
|
-
declare function circuitBreaker(options?: CircuitBreakerOptions): CircuitBreaker;
|
|
322
|
+
declare function circuitBreaker(options?: NodeOrValue<CircuitBreakerOptions>): CircuitBreaker;
|
|
304
323
|
type WithBreakerBundle<T> = {
|
|
305
324
|
node: Node<T>;
|
|
306
325
|
breakerState: Node<CircuitState>;
|
|
@@ -525,7 +544,7 @@ type RateLimiterBundle<T> = {
|
|
|
525
544
|
*
|
|
526
545
|
* @category extra
|
|
527
546
|
*/
|
|
528
|
-
declare function rateLimiter<T>(source: Node<T>, opts: RateLimiterOptions): RateLimiterBundle<T>;
|
|
547
|
+
declare function rateLimiter<T>(source: Node<T>, opts: NodeOrValue<RateLimiterOptions>): RateLimiterBundle<T>;
|
|
529
548
|
type StatusValue = "pending" | "running" | "completed" | "errored";
|
|
530
549
|
type WithStatusBundle<T> = {
|
|
531
550
|
node: Node<T>;
|
|
@@ -557,6 +576,17 @@ type WithStatusBundle<T> = {
|
|
|
557
576
|
* appear as edges in `describe()` if no consumer subscribes to them (per
|
|
558
577
|
* COMPOSITION-GUIDE §1, push-on-subscribe semantics).
|
|
559
578
|
*
|
|
579
|
+
* **Per-subscribe lifecycle (DF8, 2026-04-29 doc lock).** When the wrapped
|
|
580
|
+
* source is `resubscribable: true` and multiple consumers attach in
|
|
581
|
+
* sequence, each new subscription cycle re-runs the producer fn AND
|
|
582
|
+
* re-emits the initial `pending` + `null` companion DATAs. Downstream
|
|
583
|
+
* subscribers to the `status` / `error` companions see thrash:
|
|
584
|
+
* `pending → running → completed → pending → running …`. This is the
|
|
585
|
+
* intended fresh-cycle semantic (each subscription cycle reports its own
|
|
586
|
+
* lifecycle); consumers that need a "stable" status across cycles should
|
|
587
|
+
* derive a snapshot via a separate `state()` mirror rather than depending
|
|
588
|
+
* on the per-cycle reset.
|
|
589
|
+
*
|
|
560
590
|
* @example
|
|
561
591
|
* ```ts
|
|
562
592
|
* import { withStatus, state } from "@graphrefly/graphrefly-ts";
|
|
@@ -583,6 +613,20 @@ declare class TimeoutError extends Error {
|
|
|
583
613
|
name: string;
|
|
584
614
|
constructor(ns: number);
|
|
585
615
|
}
|
|
616
|
+
/**
|
|
617
|
+
* Either a literal value or a reactive Node carrying it. Mirrors
|
|
618
|
+
* {@link FallbackInput}'s precedent for "options that may be reactive."
|
|
619
|
+
*
|
|
620
|
+
* Used by {@link timeout} / {@link retry} / {@link rateLimiter} /
|
|
621
|
+
* {@link circuitBreaker} / {@link budgetGate} to accept reactive option
|
|
622
|
+
* configurations (Tier 6.5 3.2, 2026-04-29). Each primitive subscribes
|
|
623
|
+
* to the option Node via {@link resolveReactiveOption} and rebinds
|
|
624
|
+
* internal state per its locked swap-semantic rule (see each primitive's
|
|
625
|
+
* JSDoc for the rule).
|
|
626
|
+
*
|
|
627
|
+
* @category extra
|
|
628
|
+
*/
|
|
629
|
+
type NodeOrValue<T> = T | Node<T>;
|
|
586
630
|
/** Inputs accepted by {@link fallback}. */
|
|
587
631
|
type FallbackInput<T> = T | Node<T> | PromiseLike<T> | AsyncIterable<T>;
|
|
588
632
|
/**
|
|
@@ -626,7 +670,9 @@ declare function fallback<T>(source: Node<T>, fb: FallbackInput<T>, options?: {
|
|
|
626
670
|
* the timer. Terminal messages (`COMPLETE`/`ERROR`) cancel the timer.
|
|
627
671
|
*
|
|
628
672
|
* @param source - Upstream node.
|
|
629
|
-
* @param timeoutNs - Deadline in **nanoseconds** (must be > 0)
|
|
673
|
+
* @param timeoutNs - Deadline in **nanoseconds** (must be > 0), or a
|
|
674
|
+
* `Node<number>` carrying the deadline reactively (Tier 6.5 3.2.1).
|
|
675
|
+
* Internally converted to milliseconds for `setTimeout` scheduling.
|
|
630
676
|
* @returns Node that errors on timeout.
|
|
631
677
|
*
|
|
632
678
|
* @throws {RangeError} when `timeoutNs <= 0`.
|
|
@@ -634,6 +680,13 @@ declare function fallback<T>(source: Node<T>, fb: FallbackInput<T>, options?: {
|
|
|
634
680
|
* @remarks
|
|
635
681
|
* **Scheduling:** internally uses {@link ResettableTimer} (raw `setTimeout`) per spec §5.10's resilience-operator carve-out. The deadline is `timeoutNs / NS_PER_MS` ms; sub-millisecond `timeoutNs` values get the same minimum-1ms host-scheduler granularity that `setTimeout` provides.
|
|
636
682
|
*
|
|
683
|
+
* **Reactive `timeoutNs` (locked semantics, Tier 6.5 3.2.1, 2026-04-29).**
|
|
684
|
+
* When `timeoutNs` is a `Node<number>`, each timer-(re)start reads the
|
|
685
|
+
* latest value. An option swap mid-flight applies to the **next** timer
|
|
686
|
+
* window (no in-flight reset) — the active timer keeps its original
|
|
687
|
+
* deadline; the next DATA-driven `startTimer()` call reads the new
|
|
688
|
+
* value. Static-form callers see no behavior change.
|
|
689
|
+
*
|
|
637
690
|
* @example
|
|
638
691
|
* ```ts
|
|
639
692
|
* import { timeout, never, NS_PER_SEC } from "@graphrefly/graphrefly-ts";
|
|
@@ -644,7 +697,7 @@ declare function fallback<T>(source: Node<T>, fb: FallbackInput<T>, options?: {
|
|
|
644
697
|
*
|
|
645
698
|
* @category extra
|
|
646
699
|
*/
|
|
647
|
-
declare function timeout<T>(source: Node<T>, timeoutNs: number
|
|
700
|
+
declare function timeout<T>(source: Node<T>, timeoutNs: NodeOrValue<number>, options?: {
|
|
648
701
|
meta?: Record<string, unknown>;
|
|
649
702
|
}): Node<T>;
|
|
650
703
|
|