@graphrefly/graphrefly 0.45.0 → 0.47.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/README.md +1 -2
- package/dist/_internal-B23BagFd.d.cts +33 -0
- package/dist/_internal-B23BagFd.d.ts +33 -0
- package/dist/adaptive-rate-limiter-Dch_xYIi.d.cts +111 -0
- package/dist/adaptive-rate-limiter-Dch_xYIi.d.ts +111 -0
- package/dist/agents-C0Ji9ldU.d.cts +629 -0
- package/dist/agents-C9zexT7I.d.ts +629 -0
- package/dist/audit-BAXb3VOg.d.ts +246 -0
- package/dist/audit-C_bPfkqS.d.cts +246 -0
- package/dist/backoff-7KIK3WQW.js +24 -0
- package/dist/backoff-7KIK3WQW.js.map +1 -0
- package/dist/backoff-Bnb9OoPh.d.cts +6 -0
- package/dist/backoff-Bnb9OoPh.d.ts +6 -0
- package/dist/base/composition/index.cjs +865 -0
- package/dist/base/composition/index.cjs.map +1 -0
- package/dist/base/composition/index.d.cts +468 -0
- package/dist/base/composition/index.d.ts +468 -0
- package/dist/base/composition/index.js +40 -0
- package/dist/base/composition/index.js.map +1 -0
- package/dist/base/index.cjs +6390 -0
- package/dist/base/index.cjs.map +1 -0
- package/dist/base/index.d.cts +21 -0
- package/dist/base/index.d.ts +21 -0
- package/dist/base/index.js +259 -0
- package/dist/base/index.js.map +1 -0
- package/dist/base/io/index.cjs +3270 -0
- package/dist/base/io/index.cjs.map +1 -0
- package/dist/base/io/index.d.cts +2245 -0
- package/dist/base/io/index.d.ts +2245 -0
- package/dist/base/io/index.js +117 -0
- package/dist/base/io/index.js.map +1 -0
- package/dist/base/meta/index.cjs +43 -0
- package/dist/base/meta/index.cjs.map +1 -0
- package/dist/base/meta/index.d.cts +45 -0
- package/dist/base/meta/index.d.ts +45 -0
- package/dist/base/meta/index.js +13 -0
- package/dist/base/meta/index.js.map +1 -0
- package/dist/base/mutation/index.cjs +200 -0
- package/dist/base/mutation/index.cjs.map +1 -0
- package/dist/base/mutation/index.d.cts +177 -0
- package/dist/base/mutation/index.d.ts +177 -0
- package/dist/base/mutation/index.js +22 -0
- package/dist/base/mutation/index.js.map +1 -0
- package/dist/base/render/index.cjs +1120 -0
- package/dist/base/render/index.cjs.map +1 -0
- package/dist/base/render/index.d.cts +227 -0
- package/dist/base/render/index.d.ts +227 -0
- package/dist/base/render/index.js +24 -0
- package/dist/base/render/index.js.map +1 -0
- package/dist/base/sources/browser/index.cjs +172 -0
- package/dist/base/sources/browser/index.cjs.map +1 -0
- package/dist/base/sources/browser/index.d.cts +84 -0
- package/dist/base/sources/browser/index.d.ts +84 -0
- package/dist/base/sources/browser/index.js +151 -0
- package/dist/base/sources/browser/index.js.map +1 -0
- package/dist/base/sources/event/index.cjs +98 -0
- package/dist/base/sources/event/index.cjs.map +1 -0
- package/dist/base/sources/event/index.d.cts +91 -0
- package/dist/base/sources/event/index.d.ts +91 -0
- package/dist/base/sources/event/index.js +13 -0
- package/dist/base/sources/event/index.js.map +1 -0
- package/dist/base/sources/index.cjs +755 -0
- package/dist/base/sources/index.cjs.map +1 -0
- package/dist/base/sources/index.d.cts +357 -0
- package/dist/base/sources/index.d.ts +357 -0
- package/dist/base/sources/index.js +42 -0
- package/dist/base/sources/index.js.map +1 -0
- package/dist/base/sources/node/index.cjs +320 -0
- package/dist/base/sources/node/index.cjs.map +1 -0
- package/dist/base/sources/node/index.d.cts +185 -0
- package/dist/base/sources/node/index.d.ts +185 -0
- package/dist/base/sources/node/index.js +306 -0
- package/dist/base/sources/node/index.js.map +1 -0
- package/dist/base/utils/index.cjs +37 -0
- package/dist/base/utils/index.cjs.map +1 -0
- package/dist/base/utils/index.d.cts +37 -0
- package/dist/base/utils/index.d.ts +37 -0
- package/dist/base/utils/index.js +11 -0
- package/dist/base/utils/index.js.map +1 -0
- package/dist/base/worker/index.cjs +548 -0
- package/dist/base/worker/index.cjs.map +1 -0
- package/dist/base/worker/index.d.cts +207 -0
- package/dist/base/worker/index.d.ts +207 -0
- package/dist/base/worker/index.js +20 -0
- package/dist/base/worker/index.js.map +1 -0
- package/dist/breaker-C9skL3d8.d.ts +175 -0
- package/dist/breaker-ugSdq54q.d.cts +175 -0
- package/dist/cascading-CSSbKGrJ.d.ts +199 -0
- package/dist/cascading-baGkiihI.d.cts +199 -0
- package/dist/chunk-22SG74BD.js +207 -0
- package/dist/chunk-22SG74BD.js.map +1 -0
- package/dist/chunk-255UCBG4.js +58 -0
- package/dist/chunk-255UCBG4.js.map +1 -0
- package/dist/chunk-2LO3EL4W.js +1 -0
- package/dist/chunk-2LO3EL4W.js.map +1 -0
- package/dist/chunk-2OB3CEJS.js +1065 -0
- package/dist/chunk-2OB3CEJS.js.map +1 -0
- package/dist/chunk-36NMM65U.js +144 -0
- package/dist/chunk-36NMM65U.js.map +1 -0
- package/dist/chunk-3CEXCBN6.js +1 -0
- package/dist/chunk-3CEXCBN6.js.map +1 -0
- package/dist/chunk-3MUSLI6E.js +105 -0
- package/dist/chunk-3MUSLI6E.js.map +1 -0
- package/dist/chunk-3PSLNJDU.js +884 -0
- package/dist/chunk-3PSLNJDU.js.map +1 -0
- package/dist/chunk-42FQ27MQ.js +594 -0
- package/dist/chunk-42FQ27MQ.js.map +1 -0
- package/dist/chunk-4GYMCUDZ.js +1085 -0
- package/dist/chunk-4GYMCUDZ.js.map +1 -0
- package/dist/chunk-4S53H2KR.js +382 -0
- package/dist/chunk-4S53H2KR.js.map +1 -0
- package/dist/chunk-4XCHZRUJ.js +128 -0
- package/dist/chunk-4XCHZRUJ.js.map +1 -0
- package/dist/chunk-5IMMNARC.js +1153 -0
- package/dist/chunk-5IMMNARC.js.map +1 -0
- package/dist/chunk-6XZYT4SW.js +256 -0
- package/dist/chunk-6XZYT4SW.js.map +1 -0
- package/dist/chunk-7EGRP2VX.js +76 -0
- package/dist/chunk-7EGRP2VX.js.map +1 -0
- package/dist/chunk-A7KV5UK4.js +150 -0
- package/dist/chunk-A7KV5UK4.js.map +1 -0
- package/dist/chunk-APY2SS5X.js +156 -0
- package/dist/chunk-APY2SS5X.js.map +1 -0
- package/dist/chunk-AZDQPQ3V.js +66 -0
- package/dist/chunk-AZDQPQ3V.js.map +1 -0
- package/dist/chunk-BU3SEFA5.js +90 -0
- package/dist/chunk-BU3SEFA5.js.map +1 -0
- package/dist/chunk-BXGZFGZ4.js +189 -0
- package/dist/chunk-BXGZFGZ4.js.map +1 -0
- package/dist/chunk-CGHORL6G.js +579 -0
- package/dist/chunk-CGHORL6G.js.map +1 -0
- package/dist/chunk-CXANAIZU.js +530 -0
- package/dist/chunk-CXANAIZU.js.map +1 -0
- package/dist/chunk-CZQHCKKG.js +1 -0
- package/dist/chunk-CZQHCKKG.js.map +1 -0
- package/dist/chunk-DKNHAICT.js +133 -0
- package/dist/chunk-DKNHAICT.js.map +1 -0
- package/dist/chunk-DM4OMPWK.js +584 -0
- package/dist/chunk-DM4OMPWK.js.map +1 -0
- package/dist/chunk-DMSNO6ZB.js +452 -0
- package/dist/chunk-DMSNO6ZB.js.map +1 -0
- package/dist/chunk-E5OZPDIW.js +229 -0
- package/dist/chunk-E5OZPDIW.js.map +1 -0
- package/dist/chunk-EHRRQ4IC.js +211 -0
- package/dist/chunk-EHRRQ4IC.js.map +1 -0
- package/dist/chunk-EVYY4X5A.js +509 -0
- package/dist/chunk-EVYY4X5A.js.map +1 -0
- package/dist/chunk-FDFD67UO.js +1 -0
- package/dist/chunk-FDFD67UO.js.map +1 -0
- package/dist/chunk-FMPF42Q4.js +13 -0
- package/dist/chunk-FMPF42Q4.js.map +1 -0
- package/dist/chunk-FW23JYNQ.js +454 -0
- package/dist/chunk-FW23JYNQ.js.map +1 -0
- package/dist/chunk-GWRNLJNW.js +2508 -0
- package/dist/chunk-GWRNLJNW.js.map +1 -0
- package/dist/chunk-HL7HUJIX.js +1 -0
- package/dist/chunk-HL7HUJIX.js.map +1 -0
- package/dist/chunk-IHTWQEDR.js +169 -0
- package/dist/chunk-IHTWQEDR.js.map +1 -0
- package/dist/chunk-IJRR6YAI.js +128 -0
- package/dist/chunk-IJRR6YAI.js.map +1 -0
- package/dist/chunk-JGFRAFDL.js +221 -0
- package/dist/chunk-JGFRAFDL.js.map +1 -0
- package/dist/chunk-JKTC747G.js +725 -0
- package/dist/chunk-JKTC747G.js.map +1 -0
- package/dist/chunk-KN3H5CNT.js +11 -0
- package/dist/chunk-KN3H5CNT.js.map +1 -0
- package/dist/chunk-KPG3DGLA.js +1 -0
- package/dist/chunk-KPG3DGLA.js.map +1 -0
- package/dist/chunk-KRNQ6RGQ.js +1 -0
- package/dist/chunk-KRNQ6RGQ.js.map +1 -0
- package/dist/chunk-MLTPJMH6.js +417 -0
- package/dist/chunk-MLTPJMH6.js.map +1 -0
- package/dist/chunk-N3SZ7BMH.js +95 -0
- package/dist/chunk-N3SZ7BMH.js.map +1 -0
- package/dist/chunk-NDUD3IMO.js +540 -0
- package/dist/chunk-NDUD3IMO.js.map +1 -0
- package/dist/chunk-NY2PYHNC.js +873 -0
- package/dist/chunk-NY2PYHNC.js.map +1 -0
- package/dist/chunk-O3MT7DYI.js +225 -0
- package/dist/chunk-O3MT7DYI.js.map +1 -0
- package/dist/chunk-OCUDSN63.js +2386 -0
- package/dist/chunk-OCUDSN63.js.map +1 -0
- package/dist/chunk-OIWU3NYV.js +199 -0
- package/dist/chunk-OIWU3NYV.js.map +1 -0
- package/dist/chunk-OQUIJT7A.js +1 -0
- package/dist/chunk-OQUIJT7A.js.map +1 -0
- package/dist/chunk-P5LBT622.js +105 -0
- package/dist/chunk-P5LBT622.js.map +1 -0
- package/dist/chunk-PKGQG5QQ.js +519 -0
- package/dist/chunk-PKGQG5QQ.js.map +1 -0
- package/dist/chunk-PKPO3JTZ.js +561 -0
- package/dist/chunk-PKPO3JTZ.js.map +1 -0
- package/dist/chunk-PL5UDIQ5.js +118 -0
- package/dist/chunk-PL5UDIQ5.js.map +1 -0
- package/dist/chunk-PZWISPIQ.js +432 -0
- package/dist/chunk-PZWISPIQ.js.map +1 -0
- package/dist/chunk-Q3EYOCZB.js +510 -0
- package/dist/chunk-Q3EYOCZB.js.map +1 -0
- package/dist/chunk-QMBYUVRL.js +15 -0
- package/dist/chunk-QMBYUVRL.js.map +1 -0
- package/dist/chunk-RAGGHLCV.js +200 -0
- package/dist/chunk-RAGGHLCV.js.map +1 -0
- package/dist/chunk-RJOG4IJU.js +1039 -0
- package/dist/chunk-RJOG4IJU.js.map +1 -0
- package/dist/chunk-SOOKUYVM.js +403 -0
- package/dist/chunk-SOOKUYVM.js.map +1 -0
- package/dist/chunk-T5BN5KG7.js +1 -0
- package/dist/chunk-T5BN5KG7.js.map +1 -0
- package/dist/chunk-TNX5ZGDJ.js +574 -0
- package/dist/chunk-TNX5ZGDJ.js.map +1 -0
- package/dist/chunk-TP7244Y6.js +207 -0
- package/dist/chunk-TP7244Y6.js.map +1 -0
- package/dist/chunk-TSBFTJKM.js +57 -0
- package/dist/chunk-TSBFTJKM.js.map +1 -0
- package/dist/chunk-URQ2CBBF.js +143 -0
- package/dist/chunk-URQ2CBBF.js.map +1 -0
- package/dist/chunk-VLAGJZSL.js +1079 -0
- package/dist/chunk-VLAGJZSL.js.map +1 -0
- package/dist/chunk-W2BOPXTI.js +1 -0
- package/dist/chunk-W2BOPXTI.js.map +1 -0
- package/dist/chunk-Y52CS6YA.js +88 -0
- package/dist/chunk-Y52CS6YA.js.map +1 -0
- package/dist/chunk-YCBUWK77.js +92 -0
- package/dist/chunk-YCBUWK77.js.map +1 -0
- package/dist/chunk-YJ4U2D2C.js +314 -0
- package/dist/chunk-YJ4U2D2C.js.map +1 -0
- package/dist/chunk-Z4YXAUDN.js +239 -0
- package/dist/chunk-Z4YXAUDN.js.map +1 -0
- package/dist/chunk-Z65DVDEQ.js +146 -0
- package/dist/chunk-Z65DVDEQ.js.map +1 -0
- package/dist/chunk-Z6EGP5D7.js +92 -0
- package/dist/chunk-Z6EGP5D7.js.map +1 -0
- package/dist/chunk-ZT4WMQW4.js +1575 -0
- package/dist/chunk-ZT4WMQW4.js.map +1 -0
- package/dist/chunk-ZVXXDWIB.js +1282 -0
- package/dist/chunk-ZVXXDWIB.js.map +1 -0
- package/dist/compat/index.cjs +3150 -6
- package/dist/compat/index.cjs.map +1 -1
- package/dist/compat/index.d.cts +116 -1
- package/dist/compat/index.d.ts +116 -1
- package/dist/compat/index.js +175 -2
- package/dist/compat/index.js.map +1 -1
- package/dist/compat/jotai/index.cjs +130 -2
- package/dist/compat/jotai/index.cjs.map +1 -1
- package/dist/compat/jotai/index.d.cts +2 -1
- package/dist/compat/jotai/index.d.ts +2 -1
- package/dist/compat/jotai/index.js +7 -2
- package/dist/compat/jotai/index.js.map +1 -1
- package/dist/compat/nanostores/index.cjs +186 -2
- package/dist/compat/nanostores/index.cjs.map +1 -1
- package/dist/compat/nanostores/index.d.cts +2 -1
- package/dist/compat/nanostores/index.d.ts +2 -1
- package/dist/compat/nanostores/index.js +21 -2
- package/dist/compat/nanostores/index.js.map +1 -1
- package/dist/compat/nestjs/index.cjs +2291 -6
- package/dist/compat/nestjs/index.cjs.map +1 -1
- package/dist/compat/nestjs/index.d.cts +10 -1
- package/dist/compat/nestjs/index.d.ts +10 -1
- package/dist/compat/nestjs/index.js +76 -2
- package/dist/compat/nestjs/index.js.map +1 -1
- package/dist/compat/react/index.cjs +95 -2
- package/dist/compat/react/index.cjs.map +1 -1
- package/dist/compat/react/index.d.cts +2 -1
- package/dist/compat/react/index.d.ts +2 -1
- package/dist/compat/react/index.js +11 -2
- package/dist/compat/react/index.js.map +1 -1
- package/dist/compat/solid/index.cjs +82 -2
- package/dist/compat/solid/index.cjs.map +1 -1
- package/dist/compat/solid/index.d.cts +2 -1
- package/dist/compat/solid/index.d.ts +2 -1
- package/dist/compat/solid/index.js +11 -2
- package/dist/compat/solid/index.js.map +1 -1
- package/dist/compat/svelte/index.cjs +85 -2
- package/dist/compat/svelte/index.cjs.map +1 -1
- package/dist/compat/svelte/index.d.cts +2 -1
- package/dist/compat/svelte/index.d.ts +2 -1
- package/dist/compat/svelte/index.js +11 -2
- package/dist/compat/svelte/index.js.map +1 -1
- package/dist/compat/vue/index.cjs +100 -2
- package/dist/compat/vue/index.cjs.map +1 -1
- package/dist/compat/vue/index.d.cts +3 -1
- package/dist/compat/vue/index.d.ts +3 -1
- package/dist/compat/vue/index.js +11 -2
- package/dist/compat/vue/index.js.map +1 -1
- package/dist/compat/zustand/index.cjs +50 -2
- package/dist/compat/zustand/index.cjs.map +1 -1
- package/dist/compat/zustand/index.d.cts +2 -1
- package/dist/compat/zustand/index.d.ts +2 -1
- package/dist/compat/zustand/index.js +7 -2
- package/dist/compat/zustand/index.js.map +1 -1
- package/dist/distill-De6Rnn15.d.cts +48 -0
- package/dist/distill-De6Rnn15.d.ts +48 -0
- package/dist/external-register-CWyroXb_.d.cts +138 -0
- package/dist/external-register-CWyroXb_.d.ts +138 -0
- package/dist/fallback-Bx46zqky.d.cts +243 -0
- package/dist/fallback-pIWW8A2d.d.ts +243 -0
- package/dist/guarded-execution-BcdtxeBk.d.ts +207 -0
- package/dist/guarded-execution-C-3hnP6A.d.cts +207 -0
- package/dist/index-B6pxYJzO.d.cts +36 -0
- package/dist/index-B6pxYJzO.d.ts +36 -0
- package/dist/index-BFsng6v1.d.cts +44 -0
- package/dist/index-BFsng6v1.d.ts +44 -0
- package/dist/index-B_p8tnvf.d.cts +770 -0
- package/dist/index-Bg-LwEt-.d.cts +45 -0
- package/dist/index-Bg-LwEt-.d.ts +45 -0
- package/dist/index-Brp888t0.d.cts +127 -0
- package/dist/index-Brp888t0.d.ts +127 -0
- package/dist/index-CDfk6jHN.d.cts +37 -0
- package/dist/index-CDfk6jHN.d.ts +37 -0
- package/dist/index-DLAxYaN5.d.cts +169 -0
- package/dist/index-DLAxYaN5.d.ts +169 -0
- package/dist/index-DeWbQzMe.d.cts +34 -0
- package/dist/index-DeWbQzMe.d.ts +34 -0
- package/dist/index-_HDSmPyp.d.ts +770 -0
- package/dist/index-dX9IzPqj.d.cts +86 -0
- package/dist/index-dX9IzPqj.d.ts +86 -0
- package/dist/index.cjs +26009 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +55 -42
- package/dist/index.d.ts +55 -42
- package/dist/index.js +849 -0
- package/dist/index.js.map +1 -1
- package/dist/layout-types-B5aiHYgk.d.cts +72 -0
- package/dist/layout-types-B5aiHYgk.d.ts +72 -0
- package/dist/memory-composers-BryDrRBX.d.cts +529 -0
- package/dist/memory-composers-CVQqPYEV.d.ts +529 -0
- package/dist/observable-B25XqCbZ.d.cts +59 -0
- package/dist/observable-B25XqCbZ.d.ts +59 -0
- package/dist/pipeline-graph-Ce47CB6Y.d.cts +145 -0
- package/dist/pipeline-graph-DXCwY9vG.d.ts +145 -0
- package/dist/presets/ai/index.cjs +4377 -0
- package/dist/presets/ai/index.cjs.map +1 -0
- package/dist/presets/ai/index.d.cts +98 -0
- package/dist/presets/ai/index.d.ts +98 -0
- package/dist/presets/ai/index.js +54 -0
- package/dist/presets/ai/index.js.map +1 -0
- package/dist/presets/harness/index.cjs +5929 -0
- package/dist/presets/harness/index.cjs.map +1 -0
- package/dist/presets/harness/index.d.cts +566 -0
- package/dist/presets/harness/index.d.ts +566 -0
- package/dist/presets/harness/index.js +71 -0
- package/dist/presets/harness/index.js.map +1 -0
- package/dist/presets/index.cjs +9782 -0
- package/dist/presets/index.cjs.map +1 -0
- package/dist/presets/index.d.cts +28 -0
- package/dist/presets/index.d.ts +28 -0
- package/dist/presets/index.js +129 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/inspect/index.cjs +1087 -0
- package/dist/presets/inspect/index.cjs.map +1 -0
- package/dist/presets/inspect/index.d.cts +172 -0
- package/dist/presets/inspect/index.d.ts +172 -0
- package/dist/presets/inspect/index.js +21 -0
- package/dist/presets/inspect/index.js.map +1 -0
- package/dist/presets/resilience/index.cjs +1593 -0
- package/dist/presets/resilience/index.cjs.map +1 -0
- package/dist/presets/resilience/index.d.cts +205 -0
- package/dist/presets/resilience/index.d.ts +205 -0
- package/dist/presets/resilience/index.js +18 -0
- package/dist/presets/resilience/index.js.map +1 -0
- package/dist/rate-limiter-CEALq4N1.d.ts +559 -0
- package/dist/rate-limiter-DpVbSYdH.d.cts +559 -0
- package/dist/reactive-layout-fswlBUvX.d.cts +195 -0
- package/dist/reactive-layout-fswlBUvX.d.ts +195 -0
- package/dist/retry-BDbRZ_gx.d.ts +125 -0
- package/dist/retry-DWuhjvsA.d.cts +125 -0
- package/dist/solutions/index.cjs +8200 -0
- package/dist/solutions/index.cjs.map +1 -0
- package/dist/solutions/index.d.cts +23 -0
- package/dist/solutions/index.d.ts +23 -0
- package/dist/solutions/index.js +55 -0
- package/dist/solutions/index.js.map +1 -0
- package/dist/spawnable-5mDY501F.d.cts +746 -0
- package/dist/spawnable-D3lR0oQu.d.ts +746 -0
- package/dist/status-U-rUI79b.d.cts +84 -0
- package/dist/status-U-rUI79b.d.ts +84 -0
- package/dist/timeout-U5O4ESK3.js +12 -0
- package/dist/timeout-U5O4ESK3.js.map +1 -0
- package/dist/types-BB5Lw-pB.d.cts +442 -0
- package/dist/types-BB5Lw-pB.d.ts +442 -0
- package/dist/types-CJWIMJiZ.d.ts +548 -0
- package/dist/types-vCq7ShIm.d.cts +548 -0
- package/dist/utils/ai/browser.cjs +2169 -0
- package/dist/utils/ai/browser.cjs.map +1 -0
- package/dist/utils/ai/browser.d.cts +129 -0
- package/dist/utils/ai/browser.d.ts +129 -0
- package/dist/utils/ai/browser.js +255 -0
- package/dist/utils/ai/browser.js.map +1 -0
- package/dist/utils/ai/index.cjs +8468 -0
- package/dist/utils/ai/index.cjs.map +1 -0
- package/dist/utils/ai/index.d.cts +1777 -0
- package/dist/utils/ai/index.d.ts +1777 -0
- package/dist/utils/ai/index.js +173 -0
- package/dist/utils/ai/index.js.map +1 -0
- package/dist/utils/ai/node.cjs +648 -0
- package/dist/utils/ai/node.cjs.map +1 -0
- package/dist/utils/ai/node.d.cts +57 -0
- package/dist/utils/ai/node.d.ts +57 -0
- package/dist/utils/ai/node.js +84 -0
- package/dist/utils/ai/node.js.map +1 -0
- package/dist/utils/cqrs/index.cjs +1036 -0
- package/dist/utils/cqrs/index.cjs.map +1 -0
- package/dist/utils/cqrs/index.d.cts +438 -0
- package/dist/utils/cqrs/index.d.ts +438 -0
- package/dist/utils/cqrs/index.js +18 -0
- package/dist/utils/cqrs/index.js.map +1 -0
- package/dist/utils/demo-shell/index.cjs +865 -0
- package/dist/utils/demo-shell/index.cjs.map +1 -0
- package/dist/utils/demo-shell/index.d.cts +90 -0
- package/dist/utils/demo-shell/index.d.ts +90 -0
- package/dist/utils/demo-shell/index.js +13 -0
- package/dist/utils/demo-shell/index.js.map +1 -0
- package/dist/utils/domain-templates/index.cjs +732 -0
- package/dist/utils/domain-templates/index.cjs.map +1 -0
- package/dist/utils/domain-templates/index.d.cts +214 -0
- package/dist/utils/domain-templates/index.d.ts +214 -0
- package/dist/utils/domain-templates/index.js +17 -0
- package/dist/utils/domain-templates/index.js.map +1 -0
- package/dist/utils/graphspec/index.cjs +1174 -0
- package/dist/utils/graphspec/index.cjs.map +1 -0
- package/dist/utils/graphspec/index.d.cts +449 -0
- package/dist/utils/graphspec/index.d.ts +449 -0
- package/dist/utils/graphspec/index.js +35 -0
- package/dist/utils/graphspec/index.js.map +1 -0
- package/dist/utils/harness/index.cjs +656 -0
- package/dist/utils/harness/index.cjs.map +1 -0
- package/dist/utils/harness/index.d.cts +542 -0
- package/dist/utils/harness/index.d.ts +542 -0
- package/dist/utils/harness/index.js +56 -0
- package/dist/utils/harness/index.js.map +1 -0
- package/dist/utils/index.cjs +17614 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +96 -0
- package/dist/utils/index.d.ts +96 -0
- package/dist/utils/index.js +514 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/inspect/index.cjs +807 -0
- package/dist/utils/inspect/index.cjs.map +1 -0
- package/dist/utils/inspect/index.d.cts +123 -0
- package/dist/utils/inspect/index.d.ts +123 -0
- package/dist/utils/inspect/index.js +30 -0
- package/dist/utils/inspect/index.js.map +1 -0
- package/dist/utils/job-queue/index.cjs +717 -0
- package/dist/utils/job-queue/index.cjs.map +1 -0
- package/dist/utils/job-queue/index.d.cts +200 -0
- package/dist/utils/job-queue/index.d.ts +200 -0
- package/dist/utils/job-queue/index.js +18 -0
- package/dist/utils/job-queue/index.js.map +1 -0
- package/dist/utils/memory/index.cjs +1456 -0
- package/dist/utils/memory/index.cjs.map +1 -0
- package/dist/utils/memory/index.d.cts +660 -0
- package/dist/utils/memory/index.d.ts +660 -0
- package/dist/utils/memory/index.js +19 -0
- package/dist/utils/memory/index.js.map +1 -0
- package/dist/utils/messaging/index.cjs +666 -0
- package/dist/utils/messaging/index.cjs.map +1 -0
- package/dist/utils/messaging/index.d.cts +562 -0
- package/dist/utils/messaging/index.d.ts +562 -0
- package/dist/utils/messaging/index.js +50 -0
- package/dist/utils/messaging/index.js.map +1 -0
- package/dist/utils/orchestration/index.cjs +876 -0
- package/dist/utils/orchestration/index.cjs.map +1 -0
- package/dist/utils/orchestration/index.d.cts +233 -0
- package/dist/utils/orchestration/index.d.ts +233 -0
- package/dist/utils/orchestration/index.js +19 -0
- package/dist/utils/orchestration/index.js.map +1 -0
- package/dist/utils/process/index.cjs +743 -0
- package/dist/utils/process/index.cjs.map +1 -0
- package/dist/utils/process/index.d.cts +411 -0
- package/dist/utils/process/index.d.ts +411 -0
- package/dist/utils/process/index.js +14 -0
- package/dist/utils/process/index.js.map +1 -0
- package/dist/utils/reactive-layout/index.cjs +1607 -0
- package/dist/utils/reactive-layout/index.cjs.map +1 -0
- package/dist/utils/reactive-layout/index.d.cts +492 -0
- package/dist/utils/reactive-layout/index.d.ts +492 -0
- package/dist/utils/reactive-layout/index.js +52 -0
- package/dist/utils/reactive-layout/index.js.map +1 -0
- package/dist/utils/reduction/index.cjs +203 -0
- package/dist/utils/reduction/index.cjs.map +1 -0
- package/dist/utils/reduction/index.d.cts +102 -0
- package/dist/utils/reduction/index.d.ts +102 -0
- package/dist/utils/reduction/index.js +14 -0
- package/dist/utils/reduction/index.js.map +1 -0
- package/dist/utils/resilience/index.cjs +1617 -0
- package/dist/utils/resilience/index.cjs.map +1 -0
- package/dist/utils/resilience/index.d.cts +9 -0
- package/dist/utils/resilience/index.d.ts +9 -0
- package/dist/utils/resilience/index.js +44 -0
- package/dist/utils/resilience/index.js.map +1 -0
- package/dist/utils/surface/index.cjs +1070 -0
- package/dist/utils/surface/index.cjs.map +1 -0
- package/dist/utils/surface/index.d.cts +240 -0
- package/dist/utils/surface/index.d.ts +240 -0
- package/dist/utils/surface/index.js +30 -0
- package/dist/utils/surface/index.js.map +1 -0
- package/dist/utils/topology-view/index.cjs +620 -0
- package/dist/utils/topology-view/index.cjs.map +1 -0
- package/dist/utils/topology-view/index.d.cts +68 -0
- package/dist/utils/topology-view/index.d.ts +68 -0
- package/dist/utils/topology-view/index.js +11 -0
- package/dist/utils/topology-view/index.js.map +1 -0
- package/package.json +293 -241
- package/dist/core/index.cjs +0 -21
- package/dist/core/index.cjs.map +0 -1
- package/dist/core/index.d.cts +0 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/index.js +0 -3
- package/dist/core/index.js.map +0 -1
- package/dist/extra/browser.cjs +0 -21
- package/dist/extra/browser.cjs.map +0 -1
- package/dist/extra/browser.d.cts +0 -1
- package/dist/extra/browser.d.ts +0 -1
- package/dist/extra/browser.js +0 -3
- package/dist/extra/browser.js.map +0 -1
- package/dist/extra/index.cjs +0 -21
- package/dist/extra/index.cjs.map +0 -1
- package/dist/extra/index.d.cts +0 -1
- package/dist/extra/index.d.ts +0 -1
- package/dist/extra/index.js +0 -3
- package/dist/extra/index.js.map +0 -1
- package/dist/extra/node.cjs +0 -21
- package/dist/extra/node.cjs.map +0 -1
- package/dist/extra/node.d.cts +0 -1
- package/dist/extra/node.d.ts +0 -1
- package/dist/extra/node.js +0 -3
- package/dist/extra/node.js.map +0 -1
- package/dist/extra/operators.cjs +0 -21
- package/dist/extra/operators.cjs.map +0 -1
- package/dist/extra/operators.d.cts +0 -1
- package/dist/extra/operators.d.ts +0 -1
- package/dist/extra/operators.js +0 -3
- package/dist/extra/operators.js.map +0 -1
- package/dist/extra/reactive.cjs +0 -21
- package/dist/extra/reactive.cjs.map +0 -1
- package/dist/extra/reactive.d.cts +0 -1
- package/dist/extra/reactive.d.ts +0 -1
- package/dist/extra/reactive.js +0 -3
- package/dist/extra/reactive.js.map +0 -1
- package/dist/extra/render/index.cjs +0 -21
- package/dist/extra/render/index.cjs.map +0 -1
- package/dist/extra/render/index.d.cts +0 -1
- package/dist/extra/render/index.d.ts +0 -1
- package/dist/extra/render/index.js +0 -3
- package/dist/extra/render/index.js.map +0 -1
- package/dist/extra/sources.cjs +0 -21
- package/dist/extra/sources.cjs.map +0 -1
- package/dist/extra/sources.d.cts +0 -1
- package/dist/extra/sources.d.ts +0 -1
- package/dist/extra/sources.js +0 -3
- package/dist/extra/sources.js.map +0 -1
- package/dist/extra/storage-browser.cjs +0 -21
- package/dist/extra/storage-browser.cjs.map +0 -1
- package/dist/extra/storage-browser.d.cts +0 -1
- package/dist/extra/storage-browser.d.ts +0 -1
- package/dist/extra/storage-browser.js +0 -3
- package/dist/extra/storage-browser.js.map +0 -1
- package/dist/extra/storage-core.cjs +0 -21
- package/dist/extra/storage-core.cjs.map +0 -1
- package/dist/extra/storage-core.d.cts +0 -1
- package/dist/extra/storage-core.d.ts +0 -1
- package/dist/extra/storage-core.js +0 -3
- package/dist/extra/storage-core.js.map +0 -1
- package/dist/extra/storage-node.cjs +0 -21
- package/dist/extra/storage-node.cjs.map +0 -1
- package/dist/extra/storage-node.d.cts +0 -1
- package/dist/extra/storage-node.d.ts +0 -1
- package/dist/extra/storage-node.js +0 -3
- package/dist/extra/storage-node.js.map +0 -1
- package/dist/extra/storage-tiers-browser.cjs +0 -21
- package/dist/extra/storage-tiers-browser.cjs.map +0 -1
- package/dist/extra/storage-tiers-browser.d.cts +0 -1
- package/dist/extra/storage-tiers-browser.d.ts +0 -1
- package/dist/extra/storage-tiers-browser.js +0 -3
- package/dist/extra/storage-tiers-browser.js.map +0 -1
- package/dist/extra/storage-tiers-node.cjs +0 -21
- package/dist/extra/storage-tiers-node.cjs.map +0 -1
- package/dist/extra/storage-tiers-node.d.cts +0 -1
- package/dist/extra/storage-tiers-node.d.ts +0 -1
- package/dist/extra/storage-tiers-node.js +0 -3
- package/dist/extra/storage-tiers-node.js.map +0 -1
- package/dist/extra/storage-tiers.cjs +0 -21
- package/dist/extra/storage-tiers.cjs.map +0 -1
- package/dist/extra/storage-tiers.d.cts +0 -1
- package/dist/extra/storage-tiers.d.ts +0 -1
- package/dist/extra/storage-tiers.js +0 -3
- package/dist/extra/storage-tiers.js.map +0 -1
- package/dist/extra/storage-wal.cjs +0 -21
- package/dist/extra/storage-wal.cjs.map +0 -1
- package/dist/extra/storage-wal.d.cts +0 -1
- package/dist/extra/storage-wal.d.ts +0 -1
- package/dist/extra/storage-wal.js +0 -3
- package/dist/extra/storage-wal.js.map +0 -1
- package/dist/graph/index.cjs +0 -21
- package/dist/graph/index.cjs.map +0 -1
- package/dist/graph/index.d.cts +0 -1
- package/dist/graph/index.d.ts +0 -1
- package/dist/graph/index.js +0 -3
- package/dist/graph/index.js.map +0 -1
- package/dist/patterns/ai/browser.cjs +0 -21
- package/dist/patterns/ai/browser.cjs.map +0 -1
- package/dist/patterns/ai/browser.d.cts +0 -1
- package/dist/patterns/ai/browser.d.ts +0 -1
- package/dist/patterns/ai/browser.js +0 -3
- package/dist/patterns/ai/browser.js.map +0 -1
- package/dist/patterns/ai/index.cjs +0 -21
- package/dist/patterns/ai/index.cjs.map +0 -1
- package/dist/patterns/ai/index.d.cts +0 -1
- package/dist/patterns/ai/index.d.ts +0 -1
- package/dist/patterns/ai/index.js +0 -3
- package/dist/patterns/ai/index.js.map +0 -1
- package/dist/patterns/ai/node.cjs +0 -21
- package/dist/patterns/ai/node.cjs.map +0 -1
- package/dist/patterns/ai/node.d.cts +0 -1
- package/dist/patterns/ai/node.d.ts +0 -1
- package/dist/patterns/ai/node.js +0 -3
- package/dist/patterns/ai/node.js.map +0 -1
- package/dist/patterns/cqrs/index.cjs +0 -21
- package/dist/patterns/cqrs/index.cjs.map +0 -1
- package/dist/patterns/cqrs/index.d.cts +0 -1
- package/dist/patterns/cqrs/index.d.ts +0 -1
- package/dist/patterns/cqrs/index.js +0 -3
- package/dist/patterns/cqrs/index.js.map +0 -1
- package/dist/patterns/demo-shell/index.cjs +0 -21
- package/dist/patterns/demo-shell/index.cjs.map +0 -1
- package/dist/patterns/demo-shell/index.d.cts +0 -1
- package/dist/patterns/demo-shell/index.d.ts +0 -1
- package/dist/patterns/demo-shell/index.js +0 -3
- package/dist/patterns/demo-shell/index.js.map +0 -1
- package/dist/patterns/domain-templates/index.cjs +0 -21
- package/dist/patterns/domain-templates/index.cjs.map +0 -1
- package/dist/patterns/domain-templates/index.d.cts +0 -1
- package/dist/patterns/domain-templates/index.d.ts +0 -1
- package/dist/patterns/domain-templates/index.js +0 -3
- package/dist/patterns/domain-templates/index.js.map +0 -1
- package/dist/patterns/graphspec/index.cjs +0 -21
- package/dist/patterns/graphspec/index.cjs.map +0 -1
- package/dist/patterns/graphspec/index.d.cts +0 -1
- package/dist/patterns/graphspec/index.d.ts +0 -1
- package/dist/patterns/graphspec/index.js +0 -3
- package/dist/patterns/graphspec/index.js.map +0 -1
- package/dist/patterns/harness/index.cjs +0 -21
- package/dist/patterns/harness/index.cjs.map +0 -1
- package/dist/patterns/harness/index.d.cts +0 -1
- package/dist/patterns/harness/index.d.ts +0 -1
- package/dist/patterns/harness/index.js +0 -3
- package/dist/patterns/harness/index.js.map +0 -1
- package/dist/patterns/inspect/index.cjs +0 -21
- package/dist/patterns/inspect/index.cjs.map +0 -1
- package/dist/patterns/inspect/index.d.cts +0 -1
- package/dist/patterns/inspect/index.d.ts +0 -1
- package/dist/patterns/inspect/index.js +0 -3
- package/dist/patterns/inspect/index.js.map +0 -1
- package/dist/patterns/job-queue/index.cjs +0 -21
- package/dist/patterns/job-queue/index.cjs.map +0 -1
- package/dist/patterns/job-queue/index.d.cts +0 -1
- package/dist/patterns/job-queue/index.d.ts +0 -1
- package/dist/patterns/job-queue/index.js +0 -3
- package/dist/patterns/job-queue/index.js.map +0 -1
- package/dist/patterns/memory/index.cjs +0 -21
- package/dist/patterns/memory/index.cjs.map +0 -1
- package/dist/patterns/memory/index.d.cts +0 -1
- package/dist/patterns/memory/index.d.ts +0 -1
- package/dist/patterns/memory/index.js +0 -3
- package/dist/patterns/memory/index.js.map +0 -1
- package/dist/patterns/messaging/index.cjs +0 -21
- package/dist/patterns/messaging/index.cjs.map +0 -1
- package/dist/patterns/messaging/index.d.cts +0 -1
- package/dist/patterns/messaging/index.d.ts +0 -1
- package/dist/patterns/messaging/index.js +0 -3
- package/dist/patterns/messaging/index.js.map +0 -1
- package/dist/patterns/orchestration/index.cjs +0 -21
- package/dist/patterns/orchestration/index.cjs.map +0 -1
- package/dist/patterns/orchestration/index.d.cts +0 -1
- package/dist/patterns/orchestration/index.d.ts +0 -1
- package/dist/patterns/orchestration/index.js +0 -3
- package/dist/patterns/orchestration/index.js.map +0 -1
- package/dist/patterns/process/index.cjs +0 -21
- package/dist/patterns/process/index.cjs.map +0 -1
- package/dist/patterns/process/index.d.cts +0 -1
- package/dist/patterns/process/index.d.ts +0 -1
- package/dist/patterns/process/index.js +0 -3
- package/dist/patterns/process/index.js.map +0 -1
- package/dist/patterns/reactive-layout/index.cjs +0 -21
- package/dist/patterns/reactive-layout/index.cjs.map +0 -1
- package/dist/patterns/reactive-layout/index.d.cts +0 -1
- package/dist/patterns/reactive-layout/index.d.ts +0 -1
- package/dist/patterns/reactive-layout/index.js +0 -3
- package/dist/patterns/reactive-layout/index.js.map +0 -1
- package/dist/patterns/reduction/index.cjs +0 -21
- package/dist/patterns/reduction/index.cjs.map +0 -1
- package/dist/patterns/reduction/index.d.cts +0 -1
- package/dist/patterns/reduction/index.d.ts +0 -1
- package/dist/patterns/reduction/index.js +0 -3
- package/dist/patterns/reduction/index.js.map +0 -1
- package/dist/patterns/surface/index.cjs +0 -21
- package/dist/patterns/surface/index.cjs.map +0 -1
- package/dist/patterns/surface/index.d.cts +0 -1
- package/dist/patterns/surface/index.d.ts +0 -1
- package/dist/patterns/surface/index.js +0 -3
- package/dist/patterns/surface/index.js.map +0 -1
- package/dist/patterns/topology-view/index.cjs +0 -21
- package/dist/patterns/topology-view/index.cjs.map +0 -1
- package/dist/patterns/topology-view/index.d.cts +0 -1
- package/dist/patterns/topology-view/index.d.ts +0 -1
- package/dist/patterns/topology-view/index.js +0 -3
- package/dist/patterns/topology-view/index.js.map +0 -1
- package/dist/testing/index.cjs +0 -21
- package/dist/testing/index.cjs.map +0 -1
- package/dist/testing/index.d.cts +0 -1
- package/dist/testing/index.d.ts +0 -1
- package/dist/testing/index.js +0 -3
- package/dist/testing/index.js.map +0 -1
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { Node } from '@graphrefly/pure-ts/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* WorkerTransport — normalized message channel for all worker types.
|
|
5
|
+
*
|
|
6
|
+
* Abstracts Worker, SharedWorker, ServiceWorker, BroadcastChannel, and
|
|
7
|
+
* MessagePort behind a uniform post/listen/terminate interface.
|
|
8
|
+
*/
|
|
9
|
+
/** Normalized bidirectional message channel. */
|
|
10
|
+
interface WorkerTransport {
|
|
11
|
+
/** Send data to the other side. Optional transferables for zero-copy. */
|
|
12
|
+
post(data: unknown, transfer?: Transferable[]): void;
|
|
13
|
+
/** Listen for incoming messages. Returns unsubscribe function. */
|
|
14
|
+
listen(handler: (data: unknown) => void): () => void;
|
|
15
|
+
/** Terminate the connection (if supported by the underlying transport). */
|
|
16
|
+
terminate?(): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Auto-detect transport type and create a normalized WorkerTransport.
|
|
20
|
+
*
|
|
21
|
+
* Supports:
|
|
22
|
+
* - `Worker` — direct postMessage/onmessage
|
|
23
|
+
* - `SharedWorker` — port-based postMessage/onmessage
|
|
24
|
+
* - `ServiceWorker` — postMessage via controller, listen via navigator.serviceWorker
|
|
25
|
+
* - `BroadcastChannel` — postMessage/onmessage (no Transferable support)
|
|
26
|
+
* - `MessagePort` — direct postMessage/onmessage (worker-side SharedWorker port)
|
|
27
|
+
*/
|
|
28
|
+
declare function createTransport(target: unknown): WorkerTransport;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* workerBridge — main-thread reactive node bridge to a worker.
|
|
32
|
+
*
|
|
33
|
+
* Creates proxy nodes for imported worker nodes, subscribes to exposed
|
|
34
|
+
* nodes and sends values across the wire. Uses derived() + effect() for
|
|
35
|
+
* natural batch coalescing via two-phase push + bitmask resolution.
|
|
36
|
+
*
|
|
37
|
+
* Wire filtering: graph-local signals ({@link isLocalOnly}) stay local;
|
|
38
|
+
* DATA values go through the coalescing path; RESOLVED, COMPLETE, ERROR,
|
|
39
|
+
* TEARDOWN, and unknown {@link Symbol.for} types go through the signal
|
|
40
|
+
* subscription.
|
|
41
|
+
*
|
|
42
|
+
* Handshake:
|
|
43
|
+
* 1. Main creates bridge, starts listening
|
|
44
|
+
* 2. Worker sends { t: 'r', stores: { name: initialValue, ... } }
|
|
45
|
+
* 3. Main creates proxy nodes, marks meta.status "connected"
|
|
46
|
+
* 4. Main sends { t: 'i', stores: { name: currentValue, ... } }
|
|
47
|
+
* 5. Bidirectional value flow begins
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
interface WorkerBridgeOptions<TExpose extends Record<string, Node<any>>, TImport extends readonly string[]> {
|
|
51
|
+
/** Nodes to send to the worker. */
|
|
52
|
+
expose?: TExpose;
|
|
53
|
+
/** Node names the worker will provide. */
|
|
54
|
+
import?: TImport;
|
|
55
|
+
/** Per-node transferable extractors for zero-copy ArrayBuffer passing. */
|
|
56
|
+
transfer?: Partial<Record<keyof TExpose, (value: any) => Transferable[]>>;
|
|
57
|
+
/** Debug name. */
|
|
58
|
+
name?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Handshake timeout in milliseconds. If the worker doesn't send READY
|
|
61
|
+
* within this window, `meta.status` transitions to `"closed"` and
|
|
62
|
+
* `meta.error` is set. Default: no timeout.
|
|
63
|
+
*/
|
|
64
|
+
timeoutMs?: number;
|
|
65
|
+
}
|
|
66
|
+
/** Proxy nodes created from imported worker node names. */
|
|
67
|
+
type ImportedNodes<T extends readonly string[]> = {
|
|
68
|
+
readonly [K in T[number]]: Node<any>;
|
|
69
|
+
};
|
|
70
|
+
type WorkerBridge<_TExpose extends Record<string, Node<any>>, TImport extends readonly string[]> = ImportedNodes<TImport> & {
|
|
71
|
+
/** Connection status meta node. */
|
|
72
|
+
meta: {
|
|
73
|
+
status: Node<"connecting" | "connected" | "closed">;
|
|
74
|
+
error: Node<Error | null>;
|
|
75
|
+
};
|
|
76
|
+
/** Destroy the bridge: sends TEARDOWN, disconnects, terminates worker. */
|
|
77
|
+
destroy(): void;
|
|
78
|
+
};
|
|
79
|
+
declare function workerBridge<TExpose extends Record<string, Node<any>>, TImport extends readonly string[]>(target: unknown | WorkerTransport, opts: WorkerBridgeOptions<TExpose, TImport>): WorkerBridge<TExpose, TImport>;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Wire protocol for worker bridge communication.
|
|
83
|
+
*
|
|
84
|
+
* Graph-local signals ({@link isLocalOnly}) stay local to each side's
|
|
85
|
+
* reactive graph. DATA values cross via coalescing; RESOLVED/COMPLETE/TEARDOWN
|
|
86
|
+
* as signals; ERROR as serialized payloads.
|
|
87
|
+
*
|
|
88
|
+
* Lifecycle signals serialize as string names since Symbols can't survive
|
|
89
|
+
* structured clone. Unknown {@link Symbol.for} symbols are round-tripped
|
|
90
|
+
* via their registered key.
|
|
91
|
+
*/
|
|
92
|
+
/** Value update — one node changed. */
|
|
93
|
+
interface ValueMessage {
|
|
94
|
+
t: "v";
|
|
95
|
+
/** Node name. */
|
|
96
|
+
s: string;
|
|
97
|
+
/** Serialized value. */
|
|
98
|
+
d: unknown;
|
|
99
|
+
}
|
|
100
|
+
/** Lifecycle signal — serialized symbol name. */
|
|
101
|
+
interface SignalMessage {
|
|
102
|
+
t: "s";
|
|
103
|
+
/** Node name, or `"*"` for bridge-wide. */
|
|
104
|
+
s: string;
|
|
105
|
+
/** Signal name string (e.g. "TEARDOWN"). */
|
|
106
|
+
sig: string;
|
|
107
|
+
/** Optional payload for custom symbols (spec §1.3.6 forward unchanged). */
|
|
108
|
+
d?: unknown;
|
|
109
|
+
}
|
|
110
|
+
/** Ready — worker declares its exported nodes with initial values. */
|
|
111
|
+
interface ReadyMessage {
|
|
112
|
+
t: "r";
|
|
113
|
+
stores: Record<string, unknown>;
|
|
114
|
+
}
|
|
115
|
+
/** Init — main sends initial values of its exposed nodes. */
|
|
116
|
+
interface InitMessage {
|
|
117
|
+
t: "i";
|
|
118
|
+
stores: Record<string, unknown>;
|
|
119
|
+
}
|
|
120
|
+
/** Batch value update — multiple nodes changed in one reactive cycle. */
|
|
121
|
+
interface BatchMessage {
|
|
122
|
+
t: "b";
|
|
123
|
+
u: Record<string, unknown>;
|
|
124
|
+
/** V0 versions per node for delta sync — peer skips if version <= lastSeen (§6.0b). */
|
|
125
|
+
v?: Record<string, number>;
|
|
126
|
+
}
|
|
127
|
+
/** Error payload — serialized since Error objects don't survive structured clone. */
|
|
128
|
+
interface ErrorMessage {
|
|
129
|
+
t: "e";
|
|
130
|
+
/** Node name. */
|
|
131
|
+
s: string;
|
|
132
|
+
/** Serialized error. */
|
|
133
|
+
err: {
|
|
134
|
+
message: string;
|
|
135
|
+
name: string;
|
|
136
|
+
stack?: string;
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
type BridgeMessage = ValueMessage | SignalMessage | ReadyMessage | InitMessage | BatchMessage | ErrorMessage;
|
|
140
|
+
/**
|
|
141
|
+
* Serialize a message type symbol to a string for structured clone transfer.
|
|
142
|
+
*
|
|
143
|
+
* Known GraphReFly symbols map to their canonical names. Unknown symbols
|
|
144
|
+
* registered via {@link Symbol.for} use their registered key. Unregistered
|
|
145
|
+
* symbols return `"UNKNOWN"`.
|
|
146
|
+
*/
|
|
147
|
+
declare function signalToName(s: symbol): string;
|
|
148
|
+
/**
|
|
149
|
+
* Deserialize a string back to a message type symbol.
|
|
150
|
+
*
|
|
151
|
+
* Known GraphReFly names map to their canonical symbols. Other non-empty
|
|
152
|
+
* strings are reconstructed via {@link Symbol.for} (round-trip safe for
|
|
153
|
+
* custom message types). Returns `undefined` for `"UNKNOWN"`.
|
|
154
|
+
*/
|
|
155
|
+
declare function nameToSignal(name: string): symbol | undefined;
|
|
156
|
+
/** Serialize an error for structured clone transfer. */
|
|
157
|
+
declare function serializeError(err: unknown): {
|
|
158
|
+
message: string;
|
|
159
|
+
name: string;
|
|
160
|
+
stack?: string;
|
|
161
|
+
};
|
|
162
|
+
/** Deserialize an error payload back to an Error object. */
|
|
163
|
+
declare function deserializeError(payload: {
|
|
164
|
+
message: string;
|
|
165
|
+
name: string;
|
|
166
|
+
stack?: string;
|
|
167
|
+
}): Error;
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* workerSelf — worker-side reactive node bridge.
|
|
171
|
+
*
|
|
172
|
+
* Mirror of workerBridge() for the worker side. Creates proxy nodes for
|
|
173
|
+
* imports from main thread, exposes local nodes via the same wire protocol.
|
|
174
|
+
* Uses derived() + effect() for batch coalescing.
|
|
175
|
+
*
|
|
176
|
+
* Wire filtering: graph-local signals ({@link isLocalOnly}) stay local;
|
|
177
|
+
* DATA values go through the coalescing path; RESOLVED, COMPLETE, ERROR,
|
|
178
|
+
* TEARDOWN, and unknown {@link Symbol.for} types go through the signal
|
|
179
|
+
* subscription.
|
|
180
|
+
*
|
|
181
|
+
* Handshake (worker perspective):
|
|
182
|
+
* 1. workerSelf() called — creates proxy nodes for imports
|
|
183
|
+
* 2. Runs expose factory with proxy nodes -> gets nodes to expose
|
|
184
|
+
* 3. Sends { t: 'r', stores: { name: initialValue, ... } } to main
|
|
185
|
+
* 4. Receives { t: 'i', stores: { name: value, ... } } from main
|
|
186
|
+
* 5. Updates proxy nodes -> triggers local effects
|
|
187
|
+
*/
|
|
188
|
+
|
|
189
|
+
interface WorkerSelfOptions<TImport extends readonly string[]> {
|
|
190
|
+
/** Node names that the main thread will provide. */
|
|
191
|
+
import?: TImport;
|
|
192
|
+
/** Factory that receives imported proxy nodes and returns nodes to expose. */
|
|
193
|
+
expose: (imported: WorkerImported<TImport>) => Record<string, Node<any>>;
|
|
194
|
+
/** Per-node transferable extractors for zero-copy ArrayBuffer passing. */
|
|
195
|
+
transfer?: Record<string, (value: any) => Transferable[]>;
|
|
196
|
+
}
|
|
197
|
+
/** Proxy nodes available inside the worker from main-thread exposed nodes. */
|
|
198
|
+
type WorkerImported<T extends readonly string[]> = {
|
|
199
|
+
readonly [K in T[number]]: Node<any>;
|
|
200
|
+
};
|
|
201
|
+
interface WorkerSelfHandle {
|
|
202
|
+
/** Dispose all subscriptions and stop the bridge. */
|
|
203
|
+
destroy(): void;
|
|
204
|
+
}
|
|
205
|
+
declare function workerSelf<TImport extends readonly string[]>(target: unknown | WorkerTransport, opts: WorkerSelfOptions<TImport>): WorkerSelfHandle;
|
|
206
|
+
|
|
207
|
+
export { type BatchMessage, type BridgeMessage, type ErrorMessage, type InitMessage, type ReadyMessage, type SignalMessage, type ValueMessage, type WorkerBridge, type WorkerBridgeOptions, type WorkerSelfHandle, type WorkerSelfOptions, type WorkerTransport, createTransport, deserializeError, nameToSignal, serializeError, signalToName, workerBridge, workerSelf };
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { Node } from '@graphrefly/pure-ts/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* WorkerTransport — normalized message channel for all worker types.
|
|
5
|
+
*
|
|
6
|
+
* Abstracts Worker, SharedWorker, ServiceWorker, BroadcastChannel, and
|
|
7
|
+
* MessagePort behind a uniform post/listen/terminate interface.
|
|
8
|
+
*/
|
|
9
|
+
/** Normalized bidirectional message channel. */
|
|
10
|
+
interface WorkerTransport {
|
|
11
|
+
/** Send data to the other side. Optional transferables for zero-copy. */
|
|
12
|
+
post(data: unknown, transfer?: Transferable[]): void;
|
|
13
|
+
/** Listen for incoming messages. Returns unsubscribe function. */
|
|
14
|
+
listen(handler: (data: unknown) => void): () => void;
|
|
15
|
+
/** Terminate the connection (if supported by the underlying transport). */
|
|
16
|
+
terminate?(): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Auto-detect transport type and create a normalized WorkerTransport.
|
|
20
|
+
*
|
|
21
|
+
* Supports:
|
|
22
|
+
* - `Worker` — direct postMessage/onmessage
|
|
23
|
+
* - `SharedWorker` — port-based postMessage/onmessage
|
|
24
|
+
* - `ServiceWorker` — postMessage via controller, listen via navigator.serviceWorker
|
|
25
|
+
* - `BroadcastChannel` — postMessage/onmessage (no Transferable support)
|
|
26
|
+
* - `MessagePort` — direct postMessage/onmessage (worker-side SharedWorker port)
|
|
27
|
+
*/
|
|
28
|
+
declare function createTransport(target: unknown): WorkerTransport;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* workerBridge — main-thread reactive node bridge to a worker.
|
|
32
|
+
*
|
|
33
|
+
* Creates proxy nodes for imported worker nodes, subscribes to exposed
|
|
34
|
+
* nodes and sends values across the wire. Uses derived() + effect() for
|
|
35
|
+
* natural batch coalescing via two-phase push + bitmask resolution.
|
|
36
|
+
*
|
|
37
|
+
* Wire filtering: graph-local signals ({@link isLocalOnly}) stay local;
|
|
38
|
+
* DATA values go through the coalescing path; RESOLVED, COMPLETE, ERROR,
|
|
39
|
+
* TEARDOWN, and unknown {@link Symbol.for} types go through the signal
|
|
40
|
+
* subscription.
|
|
41
|
+
*
|
|
42
|
+
* Handshake:
|
|
43
|
+
* 1. Main creates bridge, starts listening
|
|
44
|
+
* 2. Worker sends { t: 'r', stores: { name: initialValue, ... } }
|
|
45
|
+
* 3. Main creates proxy nodes, marks meta.status "connected"
|
|
46
|
+
* 4. Main sends { t: 'i', stores: { name: currentValue, ... } }
|
|
47
|
+
* 5. Bidirectional value flow begins
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
interface WorkerBridgeOptions<TExpose extends Record<string, Node<any>>, TImport extends readonly string[]> {
|
|
51
|
+
/** Nodes to send to the worker. */
|
|
52
|
+
expose?: TExpose;
|
|
53
|
+
/** Node names the worker will provide. */
|
|
54
|
+
import?: TImport;
|
|
55
|
+
/** Per-node transferable extractors for zero-copy ArrayBuffer passing. */
|
|
56
|
+
transfer?: Partial<Record<keyof TExpose, (value: any) => Transferable[]>>;
|
|
57
|
+
/** Debug name. */
|
|
58
|
+
name?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Handshake timeout in milliseconds. If the worker doesn't send READY
|
|
61
|
+
* within this window, `meta.status` transitions to `"closed"` and
|
|
62
|
+
* `meta.error` is set. Default: no timeout.
|
|
63
|
+
*/
|
|
64
|
+
timeoutMs?: number;
|
|
65
|
+
}
|
|
66
|
+
/** Proxy nodes created from imported worker node names. */
|
|
67
|
+
type ImportedNodes<T extends readonly string[]> = {
|
|
68
|
+
readonly [K in T[number]]: Node<any>;
|
|
69
|
+
};
|
|
70
|
+
type WorkerBridge<_TExpose extends Record<string, Node<any>>, TImport extends readonly string[]> = ImportedNodes<TImport> & {
|
|
71
|
+
/** Connection status meta node. */
|
|
72
|
+
meta: {
|
|
73
|
+
status: Node<"connecting" | "connected" | "closed">;
|
|
74
|
+
error: Node<Error | null>;
|
|
75
|
+
};
|
|
76
|
+
/** Destroy the bridge: sends TEARDOWN, disconnects, terminates worker. */
|
|
77
|
+
destroy(): void;
|
|
78
|
+
};
|
|
79
|
+
declare function workerBridge<TExpose extends Record<string, Node<any>>, TImport extends readonly string[]>(target: unknown | WorkerTransport, opts: WorkerBridgeOptions<TExpose, TImport>): WorkerBridge<TExpose, TImport>;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Wire protocol for worker bridge communication.
|
|
83
|
+
*
|
|
84
|
+
* Graph-local signals ({@link isLocalOnly}) stay local to each side's
|
|
85
|
+
* reactive graph. DATA values cross via coalescing; RESOLVED/COMPLETE/TEARDOWN
|
|
86
|
+
* as signals; ERROR as serialized payloads.
|
|
87
|
+
*
|
|
88
|
+
* Lifecycle signals serialize as string names since Symbols can't survive
|
|
89
|
+
* structured clone. Unknown {@link Symbol.for} symbols are round-tripped
|
|
90
|
+
* via their registered key.
|
|
91
|
+
*/
|
|
92
|
+
/** Value update — one node changed. */
|
|
93
|
+
interface ValueMessage {
|
|
94
|
+
t: "v";
|
|
95
|
+
/** Node name. */
|
|
96
|
+
s: string;
|
|
97
|
+
/** Serialized value. */
|
|
98
|
+
d: unknown;
|
|
99
|
+
}
|
|
100
|
+
/** Lifecycle signal — serialized symbol name. */
|
|
101
|
+
interface SignalMessage {
|
|
102
|
+
t: "s";
|
|
103
|
+
/** Node name, or `"*"` for bridge-wide. */
|
|
104
|
+
s: string;
|
|
105
|
+
/** Signal name string (e.g. "TEARDOWN"). */
|
|
106
|
+
sig: string;
|
|
107
|
+
/** Optional payload for custom symbols (spec §1.3.6 forward unchanged). */
|
|
108
|
+
d?: unknown;
|
|
109
|
+
}
|
|
110
|
+
/** Ready — worker declares its exported nodes with initial values. */
|
|
111
|
+
interface ReadyMessage {
|
|
112
|
+
t: "r";
|
|
113
|
+
stores: Record<string, unknown>;
|
|
114
|
+
}
|
|
115
|
+
/** Init — main sends initial values of its exposed nodes. */
|
|
116
|
+
interface InitMessage {
|
|
117
|
+
t: "i";
|
|
118
|
+
stores: Record<string, unknown>;
|
|
119
|
+
}
|
|
120
|
+
/** Batch value update — multiple nodes changed in one reactive cycle. */
|
|
121
|
+
interface BatchMessage {
|
|
122
|
+
t: "b";
|
|
123
|
+
u: Record<string, unknown>;
|
|
124
|
+
/** V0 versions per node for delta sync — peer skips if version <= lastSeen (§6.0b). */
|
|
125
|
+
v?: Record<string, number>;
|
|
126
|
+
}
|
|
127
|
+
/** Error payload — serialized since Error objects don't survive structured clone. */
|
|
128
|
+
interface ErrorMessage {
|
|
129
|
+
t: "e";
|
|
130
|
+
/** Node name. */
|
|
131
|
+
s: string;
|
|
132
|
+
/** Serialized error. */
|
|
133
|
+
err: {
|
|
134
|
+
message: string;
|
|
135
|
+
name: string;
|
|
136
|
+
stack?: string;
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
type BridgeMessage = ValueMessage | SignalMessage | ReadyMessage | InitMessage | BatchMessage | ErrorMessage;
|
|
140
|
+
/**
|
|
141
|
+
* Serialize a message type symbol to a string for structured clone transfer.
|
|
142
|
+
*
|
|
143
|
+
* Known GraphReFly symbols map to their canonical names. Unknown symbols
|
|
144
|
+
* registered via {@link Symbol.for} use their registered key. Unregistered
|
|
145
|
+
* symbols return `"UNKNOWN"`.
|
|
146
|
+
*/
|
|
147
|
+
declare function signalToName(s: symbol): string;
|
|
148
|
+
/**
|
|
149
|
+
* Deserialize a string back to a message type symbol.
|
|
150
|
+
*
|
|
151
|
+
* Known GraphReFly names map to their canonical symbols. Other non-empty
|
|
152
|
+
* strings are reconstructed via {@link Symbol.for} (round-trip safe for
|
|
153
|
+
* custom message types). Returns `undefined` for `"UNKNOWN"`.
|
|
154
|
+
*/
|
|
155
|
+
declare function nameToSignal(name: string): symbol | undefined;
|
|
156
|
+
/** Serialize an error for structured clone transfer. */
|
|
157
|
+
declare function serializeError(err: unknown): {
|
|
158
|
+
message: string;
|
|
159
|
+
name: string;
|
|
160
|
+
stack?: string;
|
|
161
|
+
};
|
|
162
|
+
/** Deserialize an error payload back to an Error object. */
|
|
163
|
+
declare function deserializeError(payload: {
|
|
164
|
+
message: string;
|
|
165
|
+
name: string;
|
|
166
|
+
stack?: string;
|
|
167
|
+
}): Error;
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* workerSelf — worker-side reactive node bridge.
|
|
171
|
+
*
|
|
172
|
+
* Mirror of workerBridge() for the worker side. Creates proxy nodes for
|
|
173
|
+
* imports from main thread, exposes local nodes via the same wire protocol.
|
|
174
|
+
* Uses derived() + effect() for batch coalescing.
|
|
175
|
+
*
|
|
176
|
+
* Wire filtering: graph-local signals ({@link isLocalOnly}) stay local;
|
|
177
|
+
* DATA values go through the coalescing path; RESOLVED, COMPLETE, ERROR,
|
|
178
|
+
* TEARDOWN, and unknown {@link Symbol.for} types go through the signal
|
|
179
|
+
* subscription.
|
|
180
|
+
*
|
|
181
|
+
* Handshake (worker perspective):
|
|
182
|
+
* 1. workerSelf() called — creates proxy nodes for imports
|
|
183
|
+
* 2. Runs expose factory with proxy nodes -> gets nodes to expose
|
|
184
|
+
* 3. Sends { t: 'r', stores: { name: initialValue, ... } } to main
|
|
185
|
+
* 4. Receives { t: 'i', stores: { name: value, ... } } from main
|
|
186
|
+
* 5. Updates proxy nodes -> triggers local effects
|
|
187
|
+
*/
|
|
188
|
+
|
|
189
|
+
interface WorkerSelfOptions<TImport extends readonly string[]> {
|
|
190
|
+
/** Node names that the main thread will provide. */
|
|
191
|
+
import?: TImport;
|
|
192
|
+
/** Factory that receives imported proxy nodes and returns nodes to expose. */
|
|
193
|
+
expose: (imported: WorkerImported<TImport>) => Record<string, Node<any>>;
|
|
194
|
+
/** Per-node transferable extractors for zero-copy ArrayBuffer passing. */
|
|
195
|
+
transfer?: Record<string, (value: any) => Transferable[]>;
|
|
196
|
+
}
|
|
197
|
+
/** Proxy nodes available inside the worker from main-thread exposed nodes. */
|
|
198
|
+
type WorkerImported<T extends readonly string[]> = {
|
|
199
|
+
readonly [K in T[number]]: Node<any>;
|
|
200
|
+
};
|
|
201
|
+
interface WorkerSelfHandle {
|
|
202
|
+
/** Dispose all subscriptions and stop the bridge. */
|
|
203
|
+
destroy(): void;
|
|
204
|
+
}
|
|
205
|
+
declare function workerSelf<TImport extends readonly string[]>(target: unknown | WorkerTransport, opts: WorkerSelfOptions<TImport>): WorkerSelfHandle;
|
|
206
|
+
|
|
207
|
+
export { type BatchMessage, type BridgeMessage, type ErrorMessage, type InitMessage, type ReadyMessage, type SignalMessage, type ValueMessage, type WorkerBridge, type WorkerBridgeOptions, type WorkerSelfHandle, type WorkerSelfOptions, type WorkerTransport, createTransport, deserializeError, nameToSignal, serializeError, signalToName, workerBridge, workerSelf };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createTransport,
|
|
3
|
+
deserializeError,
|
|
4
|
+
nameToSignal,
|
|
5
|
+
serializeError,
|
|
6
|
+
signalToName,
|
|
7
|
+
workerBridge,
|
|
8
|
+
workerSelf
|
|
9
|
+
} from "../../chunk-NDUD3IMO.js";
|
|
10
|
+
import "../../chunk-AZDQPQ3V.js";
|
|
11
|
+
export {
|
|
12
|
+
createTransport,
|
|
13
|
+
deserializeError,
|
|
14
|
+
nameToSignal,
|
|
15
|
+
serializeError,
|
|
16
|
+
signalToName,
|
|
17
|
+
workerBridge,
|
|
18
|
+
workerSelf
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { Node } from '@graphrefly/pure-ts/core';
|
|
2
|
+
import { N as NodeOrValue } from './_internal-B23BagFd.js';
|
|
3
|
+
import { B as BackoffStrategy } from './backoff-Bnb9OoPh.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Central gate-state vocabulary for resilience primitives.
|
|
7
|
+
*
|
|
8
|
+
* **DS-13.5.B follow-on (locked 2026-05-01).** Two-state base enum
|
|
9
|
+
* (`"open" | "closed"`) used as the literal vocabulary inside
|
|
10
|
+
* gate-shaped `<Primitive>State` companions on `budgetGate`. Other
|
|
11
|
+
* primitives extend this base with primitive-specific values:
|
|
12
|
+
*
|
|
13
|
+
* - `rateLimiter` → `GateState | "throttled"`.
|
|
14
|
+
* - `circuitBreaker` → `GateState | "half-open"`.
|
|
15
|
+
*
|
|
16
|
+
* Keeping the base as a separate exported type lets callers narrow
|
|
17
|
+
* generic gate-state consumers without coupling to any one primitive's
|
|
18
|
+
* extension axis.
|
|
19
|
+
*
|
|
20
|
+
* @category extra/resilience
|
|
21
|
+
*/
|
|
22
|
+
type GateState = "open" | "closed";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Circuit breaker — open/half-open/closed state machine + companion bundle.
|
|
26
|
+
*
|
|
27
|
+
* - {@link circuitBreaker} returns a synchronous breaker handle (counters,
|
|
28
|
+
* state machine, optional reactive-options subscription).
|
|
29
|
+
* - {@link withBreaker} wraps a `Node<T>` and surfaces a reactive
|
|
30
|
+
* `Node<CircuitState>` companion (`bundle.breakerState`) for telemetry.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
type CircuitState = "closed" | "open" | "half-open";
|
|
34
|
+
/**
|
|
35
|
+
* Lifecycle-shaped state companion emitted by {@link withBreaker}
|
|
36
|
+
* (DS-13.5.B, locked 2026-05-01). Pre-1.0 break vs the prior
|
|
37
|
+
* `Node<CircuitState>` (string-only) shape.
|
|
38
|
+
*
|
|
39
|
+
* `status` extends {@link GateState} with `"half-open"`. The numeric
|
|
40
|
+
* fields surface the breaker's full internal state for telemetry and
|
|
41
|
+
* `describe()` traversal.
|
|
42
|
+
*
|
|
43
|
+
* @category extra/resilience
|
|
44
|
+
*/
|
|
45
|
+
interface BreakerState {
|
|
46
|
+
readonly status: GateState | "half-open";
|
|
47
|
+
readonly failureCount: number;
|
|
48
|
+
readonly openCycle: number;
|
|
49
|
+
readonly lastOpenedAtNs: number;
|
|
50
|
+
readonly halfOpenAttempts: number;
|
|
51
|
+
readonly lastCooldownNs: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Thrown when {@link withBreaker} is configured with `onOpen: "error"` and the breaker rejects work.
|
|
55
|
+
*
|
|
56
|
+
* @category extra
|
|
57
|
+
*/
|
|
58
|
+
declare class CircuitOpenError extends Error {
|
|
59
|
+
name: string;
|
|
60
|
+
constructor();
|
|
61
|
+
}
|
|
62
|
+
interface CircuitBreakerOptions {
|
|
63
|
+
/** Number of consecutive failures before opening. Default: 5. */
|
|
64
|
+
failureThreshold?: number;
|
|
65
|
+
/** Base cooldown in nanoseconds before transitioning to half-open. Default: 30s. */
|
|
66
|
+
cooldownNs?: number;
|
|
67
|
+
/** Backoff strategy for cooldown escalation across consecutive open cycles. Overrides `cooldownNs` when provided. */
|
|
68
|
+
cooldown?: BackoffStrategy;
|
|
69
|
+
/** Max trial requests allowed in half-open state. Default: 1. */
|
|
70
|
+
halfOpenMax?: number;
|
|
71
|
+
/**
|
|
72
|
+
* Clock function returning **nanoseconds** with `monotonicNs()` semantics
|
|
73
|
+
* (monotonically non-decreasing; suitable for elapsed-time arithmetic — never
|
|
74
|
+
* use `Date.now()` because wall-clock skew can flip elapsed math negative).
|
|
75
|
+
* Default: `monotonicNs` from `core/clock`. Override for deterministic tests.
|
|
76
|
+
*/
|
|
77
|
+
now?: () => number;
|
|
78
|
+
}
|
|
79
|
+
interface CircuitBreaker {
|
|
80
|
+
/** Whether a request should be allowed through. Triggers open→half-open transition when cooldown expires. */
|
|
81
|
+
canExecute(): boolean;
|
|
82
|
+
/** Record a successful execution. Resets to closed. */
|
|
83
|
+
recordSuccess(): void;
|
|
84
|
+
/** Record a failed execution. May transition to open. */
|
|
85
|
+
recordFailure(error?: unknown): void;
|
|
86
|
+
/**
|
|
87
|
+
* Current circuit state (read-only, does not trigger transitions).
|
|
88
|
+
*
|
|
89
|
+
* **Telemetry:** wrap with {@link withBreaker} to surface this as a reactive
|
|
90
|
+
* `Node<CircuitState>` companion (`bundle.breakerState`) — every state
|
|
91
|
+
* transition (`closed`/`open`/`half-open`) emits to subscribers.
|
|
92
|
+
*/
|
|
93
|
+
readonly state: CircuitState;
|
|
94
|
+
/** Number of consecutive failures in the current closed period. */
|
|
95
|
+
readonly failureCount: number;
|
|
96
|
+
/** Manually reset to closed state, clearing all counters. */
|
|
97
|
+
reset(): void;
|
|
98
|
+
/**
|
|
99
|
+
* Release the reactive-options subscription (Tier 6.5 3.2.4, 2026-04-29).
|
|
100
|
+
* No-op when constructed with static options. Call when retiring a
|
|
101
|
+
* breaker whose options came from a `Node<CircuitBreakerOptions>` to
|
|
102
|
+
* avoid leaking the option-Node subscription.
|
|
103
|
+
*/
|
|
104
|
+
dispose(): void;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Factory for a synchronous circuit breaker with `closed`, `open`, and `half-open` states.
|
|
108
|
+
*
|
|
109
|
+
* Supports escalating cooldown via an optional {@link BackoffStrategy} — each consecutive
|
|
110
|
+
* open→half-open→open cycle increments the backoff attempt.
|
|
111
|
+
*
|
|
112
|
+
* @param options - Threshold, cooldown, half-open limit, and optional clock
|
|
113
|
+
* override; OR a `Node<CircuitBreakerOptions>` carrying the same shape
|
|
114
|
+
* reactively (Tier 6.5 3.2.4).
|
|
115
|
+
* @returns {@link CircuitBreaker} instance.
|
|
116
|
+
*
|
|
117
|
+
* @remarks
|
|
118
|
+
* **Timing:** Uses `monotonicNs()` by default (nanoseconds). Override `now` for tests.
|
|
119
|
+
*
|
|
120
|
+
* **Reactive options (locked semantics, Tier 6.5 3.2.4, 2026-04-29).**
|
|
121
|
+
* When `options` is a `Node<CircuitBreakerOptions>`, the breaker
|
|
122
|
+
* subscribes at construction and re-reads `failureThreshold` /
|
|
123
|
+
* `cooldownNs` / `cooldown` / `halfOpenMax` / `now` on each DATA. **An
|
|
124
|
+
* option swap RESETS the breaker to `"closed"`** with all counters
|
|
125
|
+
* cleared — operators tuning a runaway breaker get a clean baseline.
|
|
126
|
+
* If retaining failure history across re-tunings matters, derive a new
|
|
127
|
+
* breaker per-tuning instead. Call `breaker.dispose()` when retiring to
|
|
128
|
+
* release the option-Node subscription.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```ts
|
|
132
|
+
* import { circuitBreaker, exponential, NS_PER_SEC } from "@graphrefly/graphrefly-ts";
|
|
133
|
+
*
|
|
134
|
+
* const b = circuitBreaker({
|
|
135
|
+
* failureThreshold: 3,
|
|
136
|
+
* cooldown: exponential({ baseNs: 1 * NS_PER_SEC }),
|
|
137
|
+
* });
|
|
138
|
+
* ```
|
|
139
|
+
*
|
|
140
|
+
* @category extra
|
|
141
|
+
*/
|
|
142
|
+
declare function circuitBreaker(options?: NodeOrValue<CircuitBreakerOptions>): CircuitBreaker;
|
|
143
|
+
type WithBreakerBundle<T> = {
|
|
144
|
+
node: Node<T>;
|
|
145
|
+
breakerState: Node<BreakerState>;
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Returns a unary wrapper that gates upstream `DATA` through a {@link CircuitBreaker}.
|
|
149
|
+
*
|
|
150
|
+
* @param breaker - Shared breaker instance (typically one per resource).
|
|
151
|
+
* @param options - `onOpen: "skip"` emits `RESOLVED` when open; `"error"` emits {@link CircuitOpenError}.
|
|
152
|
+
* @returns Function mapping `Node<T>` to `{ node, breakerState }` companion nodes.
|
|
153
|
+
*
|
|
154
|
+
* @remarks
|
|
155
|
+
* **Success path:** `COMPLETE` calls {@link CircuitBreaker.recordSuccess}. **Failure path:** upstream `ERROR` calls {@link CircuitBreaker.recordFailure} and is forwarded.
|
|
156
|
+
*
|
|
157
|
+
* **State telemetry:** `breakerState: Node<CircuitState>` is a reactive companion that mirrors `breaker.state` — every transition (`closed`/`open`/`half-open`) emits a `DATA`. Also accessible via `node.meta.breakerState` for `describe()` traversal.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```ts
|
|
161
|
+
* import { state, withBreaker, circuitBreaker } from "@graphrefly/graphrefly-ts";
|
|
162
|
+
*
|
|
163
|
+
* const b = circuitBreaker({ failureThreshold: 2 });
|
|
164
|
+
* const s = state(1);
|
|
165
|
+
* const { node, breakerState } = withBreaker(b)(s);
|
|
166
|
+
* ```
|
|
167
|
+
*
|
|
168
|
+
* @category extra
|
|
169
|
+
*/
|
|
170
|
+
declare function withBreaker<T>(breaker: CircuitBreaker, options?: {
|
|
171
|
+
onOpen?: "skip" | "error";
|
|
172
|
+
meta?: Record<string, unknown>;
|
|
173
|
+
}): (source: Node<T>) => WithBreakerBundle<T>;
|
|
174
|
+
|
|
175
|
+
export { type BreakerState as B, type CircuitBreaker as C, type GateState as G, type WithBreakerBundle as W, type CircuitBreakerOptions as a, CircuitOpenError as b, type CircuitState as c, circuitBreaker as d, withBreaker as w };
|