@graphrefly/graphrefly 0.44.0 → 0.46.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 +22 -19
- 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 +811 -0
- package/dist/base/composition/index.cjs.map +1 -0
- package/dist/base/composition/index.d.cts +469 -0
- package/dist/base/composition/index.d.ts +469 -0
- package/dist/base/composition/index.js +40 -0
- package/dist/base/composition/index.js.map +1 -0
- package/dist/base/index.cjs +6336 -0
- package/dist/base/index.cjs.map +1 -0
- package/dist/base/index.d.cts +22 -0
- package/dist/base/index.d.ts +22 -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/{extra/render/index.d.ts → base/render/index.d.cts} +75 -31
- package/dist/{extra/render/index.d.cts → base/render/index.d.ts} +75 -31
- 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/{extra/sources.d.ts → base/sources/index.d.cts} +74 -301
- package/dist/{extra/sources.d.cts → base/sources/index.d.ts} +74 -301
- 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/{extra/node.d.ts → base/sources/node/index.d.cts} +35 -37
- package/dist/{extra/node.d.cts → base/sources/node/index.d.ts} +35 -37
- 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-BglDkMdX.d.cts → cascading-CSSbKGrJ.d.ts} +3 -3
- package/dist/{cascading-MFgxu7Yo.d.ts → cascading-baGkiihI.d.cts} +3 -3
- 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-3QZY5BI7.js +92 -0
- package/dist/chunk-3QZY5BI7.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-5THCXDWY.js +725 -0
- package/dist/chunk-5THCXDWY.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-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-FR6RGA3B.js +1277 -0
- package/dist/chunk-FR6RGA3B.js.map +1 -0
- package/dist/chunk-FW23JYNQ.js +454 -0
- package/dist/chunk-FW23JYNQ.js.map +1 -0
- package/dist/chunk-GBCENOLN.js +1575 -0
- package/dist/chunk-GBCENOLN.js.map +1 -0
- package/dist/chunk-HL7HUJIX.js +1 -0
- package/dist/chunk-HL7HUJIX.js.map +1 -0
- package/dist/chunk-HULCUY35.js +2508 -0
- package/dist/chunk-HULCUY35.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-KIIXR252.js +211 -0
- package/dist/chunk-KIIXR252.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-LBAJK24K.js +1071 -0
- package/dist/chunk-LBAJK24K.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-OO5BM6CJ.js +1153 -0
- package/dist/chunk-OO5BM6CJ.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-RGL53X5G.js +574 -0
- package/dist/chunk-RGL53X5G.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-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-W2BOPXTI.js +1 -0
- package/dist/chunk-W2BOPXTI.js.map +1 -0
- package/dist/chunk-WKSWLSCX.js +207 -0
- package/dist/chunk-WKSWLSCX.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-Z6EGP5D7.js +92 -0
- package/dist/chunk-Z6EGP5D7.js.map +1 -0
- package/dist/compat/index.cjs +3100 -9
- package/dist/compat/index.cjs.map +1 -0
- package/dist/compat/index.d.cts +112 -18
- package/dist/compat/index.d.ts +112 -18
- package/dist/compat/index.js +176 -1
- package/dist/compat/index.js.map +1 -0
- package/dist/compat/jotai/index.cjs +149 -1
- package/dist/compat/jotai/index.cjs.map +1 -0
- package/dist/compat/jotai/index.d.cts +2 -2
- package/dist/compat/jotai/index.d.ts +2 -2
- package/dist/compat/jotai/index.js +8 -1
- package/dist/compat/jotai/index.js.map +1 -0
- package/dist/compat/nanostores/index.cjs +205 -1
- package/dist/compat/nanostores/index.cjs.map +1 -0
- package/dist/compat/nanostores/index.d.cts +2 -2
- package/dist/compat/nanostores/index.d.ts +2 -2
- package/dist/compat/nanostores/index.js +22 -1
- package/dist/compat/nanostores/index.js.map +1 -0
- package/dist/compat/nestjs/index.cjs +2241 -9
- package/dist/compat/nestjs/index.cjs.map +1 -0
- package/dist/compat/nestjs/index.d.cts +7 -10
- package/dist/compat/nestjs/index.d.ts +7 -10
- package/dist/compat/nestjs/index.js +78 -1
- package/dist/compat/nestjs/index.js.map +1 -0
- package/dist/compat/react/index.cjs +114 -1
- package/dist/compat/react/index.cjs.map +1 -0
- package/dist/compat/react/index.d.cts +2 -2
- package/dist/compat/react/index.d.ts +2 -2
- package/dist/compat/react/index.js +12 -1
- package/dist/compat/react/index.js.map +1 -0
- package/dist/compat/solid/index.cjs +101 -1
- package/dist/compat/solid/index.cjs.map +1 -0
- package/dist/compat/solid/index.d.cts +2 -2
- package/dist/compat/solid/index.d.ts +2 -2
- package/dist/compat/solid/index.js +12 -1
- package/dist/compat/solid/index.js.map +1 -0
- package/dist/compat/svelte/index.cjs +104 -1
- package/dist/compat/svelte/index.cjs.map +1 -0
- package/dist/compat/svelte/index.d.cts +2 -2
- package/dist/compat/svelte/index.d.ts +2 -2
- package/dist/compat/svelte/index.js +12 -1
- package/dist/compat/svelte/index.js.map +1 -0
- package/dist/compat/vue/index.cjs +119 -1
- package/dist/compat/vue/index.cjs.map +1 -0
- package/dist/compat/vue/index.d.cts +2 -2
- package/dist/compat/vue/index.d.ts +2 -2
- package/dist/compat/vue/index.js +12 -1
- package/dist/compat/vue/index.js.map +1 -0
- package/dist/compat/zustand/index.cjs +69 -3
- package/dist/compat/zustand/index.cjs.map +1 -0
- package/dist/compat/zustand/index.d.cts +2 -6
- package/dist/compat/zustand/index.d.ts +2 -6
- package/dist/compat/zustand/index.js +8 -1
- package/dist/compat/zustand/index.js.map +1 -0
- 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-74oxi34l.d.cts → fallback-Bx46zqky.d.cts} +3 -10
- package/dist/{fallback-DUyyBTBK.d.ts → fallback-pIWW8A2d.d.ts} +3 -10
- package/dist/guarded-execution-BcdtxeBk.d.ts +207 -0
- package/dist/guarded-execution-C-3hnP6A.d.cts +207 -0
- package/dist/{index-CBGUK09R.d.ts → index-5SU_O78r.d.cts} +5 -5
- package/dist/{index-BmZXHqkE.d.ts → index-B6pxYJzO.d.cts} +1 -1
- package/dist/{index-hcDJ8PSI.d.cts → index-B6pxYJzO.d.ts} +1 -1
- package/dist/{index-C5stwKcw.d.cts → index-BFsng6v1.d.cts} +1 -1
- package/dist/{index-CdAlHFEt.d.ts → index-BFsng6v1.d.ts} +1 -1
- package/dist/{index-_6ODbuOu.d.cts → index-Bg-LwEt-.d.cts} +1 -1
- package/dist/{index-CviRnE4K.d.ts → index-Bg-LwEt-.d.ts} +1 -1
- package/dist/{index-CBBLl_rc.d.ts → index-Brp888t0.d.cts} +1 -1
- package/dist/{index-BQSKmbuG.d.cts → index-Brp888t0.d.ts} +1 -1
- package/dist/{index-sqkqlb1p.d.ts → index-CDfk6jHN.d.cts} +1 -1
- package/dist/{index-ZVQhLa2i.d.cts → index-CDfk6jHN.d.ts} +1 -1
- package/dist/{index-Climxqsu.d.cts → index-CEXCtYYJ.d.ts} +5 -5
- package/dist/index-DLAxYaN5.d.cts +169 -0
- package/dist/index-DLAxYaN5.d.ts +169 -0
- package/dist/{index-CK29LV56.d.cts → index-DeWbQzMe.d.cts} +1 -1
- package/dist/{index-CPQlGA29.d.ts → index-DeWbQzMe.d.ts} +1 -1
- package/dist/{index-BrPrLl4e.d.cts → index-dX9IzPqj.d.cts} +1 -1
- package/dist/{index-Dgl1HpPn.d.ts → index-dX9IzPqj.d.ts} +1 -1
- package/dist/index.cjs +25934 -191
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +58 -94
- package/dist/index.d.ts +58 -94
- package/dist/index.js +852 -1
- package/dist/index.js.map +1 -0
- 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-DWjNfLvC.d.ts → observable-BXQoW1P-.d.cts} +1 -1
- package/dist/{observable-e3eiPPFy.d.cts → observable-BXQoW1P-.d.ts} +1 -1
- package/dist/{pipeline-graph-Sgj0gCwn.d.ts → pipeline-graph-Ce47CB6Y.d.cts} +13 -10
- package/dist/{pipeline-graph-CIKhynsF.d.cts → pipeline-graph-DXCwY9vG.d.ts} +13 -10
- 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-DOTs9P3X.d.ts → reactive-layout-fswlBUvX.d.cts} +19 -7
- package/dist/{reactive-layout-DgctbqZo.d.cts → reactive-layout-fswlBUvX.d.ts} +19 -7
- 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-CWFysE9E.d.ts → types-BB5Lw-pB.d.cts} +3 -3
- package/dist/{types-C0_yquda.d.cts → types-BB5Lw-pB.d.ts} +3 -3
- 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/{patterns → utils}/ai/browser.d.cts +7 -5
- package/dist/{patterns → utils}/ai/browser.d.ts +7 -5
- 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/{index-CR8QpwX8.d.ts → utils/ai/index.d.cts} +73 -976
- package/dist/{index-UPSiS-X7.d.cts → utils/ai/index.d.ts} +73 -976
- 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/{patterns → utils}/ai/node.d.cts +5 -7
- package/dist/{patterns → utils}/ai/node.d.ts +5 -7
- 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/{index-CeFiHtAg.d.ts → utils/cqrs/index.d.cts} +7 -37
- package/dist/{index-B-_tFaqV.d.cts → utils/cqrs/index.d.ts} +7 -37
- 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/{index-B8YnZpIR.d.ts → utils/demo-shell/index.d.cts} +4 -16
- package/dist/{index-Cwv0KWcU.d.cts → utils/demo-shell/index.d.ts} +4 -16
- 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/{index-CzLVrjxn.d.ts → utils/domain-templates/index.d.cts} +3 -20
- package/dist/{index-BaQaY_IQ.d.cts → utils/domain-templates/index.d.ts} +3 -20
- 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/{index-CMh5Rz1y.d.ts → utils/graphspec/index.d.cts} +106 -42
- package/dist/{index-CS0LTlB8.d.cts → utils/graphspec/index.d.ts} +106 -42
- 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 +17609 -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/{index-DisjX8a-.d.ts → utils/job-queue/index.d.cts} +5 -26
- package/dist/{index-DV_1YuVk.d.cts → utils/job-queue/index.d.ts} +5 -26
- 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 +1451 -0
- package/dist/utils/memory/index.cjs.map +1 -0
- package/dist/{index-CZ3r5Rxp.d.ts → utils/memory/index.d.cts} +242 -34
- package/dist/{index-B17QddL1.d.cts → utils/memory/index.d.ts} +242 -34
- 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/{index-p09KSrTN.d.ts → utils/process/index.d.cts} +97 -44
- package/dist/{index-CasX6Pfq.d.cts → utils/process/index.d.ts} +97 -44
- 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/{index-B5S8ULbU.d.ts → utils/reactive-layout/index.d.cts} +58 -81
- package/dist/{index-Dc4AYqrJ.d.cts → utils/reactive-layout/index.d.ts} +58 -81
- 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/{index-Byu-OpX_.d.ts → utils/reduction/index.d.cts} +6 -17
- package/dist/{index-tRCxuAXF.d.cts → utils/reduction/index.d.ts} +6 -17
- 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/{index-CYq8vAyV.d.ts → utils/surface/index.d.cts} +7 -58
- package/dist/{index-CSOmP7xT.d.cts → utils/surface/index.d.ts} +7 -58
- 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 +664 -584
- package/dist/backoff-HPZMEZNF.js +0 -1
- package/dist/chunk-2T7U5EU6.js +0 -1
- package/dist/chunk-3G5U5QNE.js +0 -5
- package/dist/chunk-4VVTGLXJ.js +0 -1
- package/dist/chunk-5M4CCMMD.js +0 -45
- package/dist/chunk-5QDBSZBV.js +0 -1
- package/dist/chunk-5XJ6B66J.js +0 -1
- package/dist/chunk-6QZNQS5B.js +0 -1
- package/dist/chunk-6X7AFUJV.js +0 -9
- package/dist/chunk-7K6PWTDQ.js +0 -1
- package/dist/chunk-7LIAPXJB.js +0 -1
- package/dist/chunk-7WPU3UHQ.js +0 -1
- package/dist/chunk-A5WCQ5NO.js +0 -1
- package/dist/chunk-APPIWSGD.js +0 -84
- package/dist/chunk-BEZWM2SY.js +0 -1
- package/dist/chunk-C72GO4IZ.js +0 -1
- package/dist/chunk-CB676TKJ.js +0 -1
- package/dist/chunk-CE6TI2TL.js +0 -1
- package/dist/chunk-CE72X3WO.js +0 -1
- package/dist/chunk-CK2E7BTU.js +0 -1
- package/dist/chunk-CLVB32RD.js +0 -1
- package/dist/chunk-CRVT7D2P.js +0 -1
- package/dist/chunk-D5RFJOZ2.js +0 -1
- package/dist/chunk-D7GPHKFH.js +0 -1
- package/dist/chunk-DHRX7JX4.js +0 -2
- package/dist/chunk-ESMPEKEV.js +0 -1
- package/dist/chunk-F672GV32.js +0 -1
- package/dist/chunk-FZMYDOWV.js +0 -1
- package/dist/chunk-GHBWHMRZ.js +0 -1
- package/dist/chunk-GLERH466.js +0 -1
- package/dist/chunk-GPW2V3RE.js +0 -1
- package/dist/chunk-HIDYF36O.js +0 -1
- package/dist/chunk-HITNVN6B.js +0 -3
- package/dist/chunk-HY4DJBA7.js +0 -5
- package/dist/chunk-KZIEYVXN.js +0 -1
- package/dist/chunk-L6NSJVJZ.js +0 -1
- package/dist/chunk-N4MQX6JU.js +0 -18
- package/dist/chunk-N7FHEL4D.js +0 -1
- package/dist/chunk-NTEURFZH.js +0 -1
- package/dist/chunk-OIVP6KFV.js +0 -1
- package/dist/chunk-OPHBU3LG.js +0 -1
- package/dist/chunk-OYQOZP2F.js +0 -5
- package/dist/chunk-PTZK576G.js +0 -1
- package/dist/chunk-QYADASLV.js +0 -1
- package/dist/chunk-ST7UXLWR.js +0 -1
- package/dist/chunk-SVY7VUYU.js +0 -1
- package/dist/chunk-TK3NWWD4.js +0 -1
- package/dist/chunk-TSOYJ743.js +0 -1
- package/dist/chunk-UNGSTR4X.js +0 -61
- package/dist/chunk-VIMF6LGM.js +0 -1
- package/dist/chunk-VJLMUKOI.js +0 -1
- package/dist/chunk-VN6RDSK2.js +0 -1
- package/dist/chunk-VV4N5P64.js +0 -1
- package/dist/chunk-W3I423PS.js +0 -1
- package/dist/chunk-WJR24TAG.js +0 -1
- package/dist/chunk-XTGKMHSW.js +0 -1
- package/dist/chunk-YBB7ZGTY.js +0 -1
- package/dist/chunk-Z4NPUARF.js +0 -1
- package/dist/chunk-ZGNQRPDT.js +0 -1
- package/dist/chunk-ZKPSFFKU.js +0 -1
- package/dist/chunk-ZLV5SQSX.js +0 -1
- package/dist/content-addressed-storage-4-ST1tYk.d.cts +0 -124
- package/dist/content-addressed-storage-DuYMjV7o.d.ts +0 -124
- package/dist/core/index.cjs +0 -1
- package/dist/core/index.d.cts +0 -3
- package/dist/core/index.d.ts +0 -3
- package/dist/core/index.js +0 -1
- package/dist/decay-BvOWTZ00.d.ts +0 -112
- package/dist/decay-CFlLvXUT.d.cts +0 -112
- package/dist/extra/browser.cjs +0 -1
- package/dist/extra/browser.d.cts +0 -4
- package/dist/extra/browser.d.ts +0 -4
- package/dist/extra/browser.js +0 -1
- package/dist/extra/index.cjs +0 -20
- package/dist/extra/index.d.cts +0 -17
- package/dist/extra/index.d.ts +0 -17
- package/dist/extra/index.js +0 -1
- package/dist/extra/node.cjs +0 -2
- package/dist/extra/node.js +0 -2
- package/dist/extra/operators.cjs +0 -1
- package/dist/extra/operators.d.cts +0 -958
- package/dist/extra/operators.d.ts +0 -958
- package/dist/extra/operators.js +0 -1
- package/dist/extra/reactive.cjs +0 -1
- package/dist/extra/reactive.d.cts +0 -353
- package/dist/extra/reactive.d.ts +0 -353
- package/dist/extra/reactive.js +0 -1
- package/dist/extra/render/index.cjs +0 -5
- package/dist/extra/render/index.js +0 -1
- package/dist/extra/sources.cjs +0 -3
- package/dist/extra/sources.js +0 -1
- package/dist/extra/storage-browser.cjs +0 -1
- package/dist/extra/storage-browser.d.cts +0 -37
- package/dist/extra/storage-browser.d.ts +0 -37
- package/dist/extra/storage-browser.js +0 -1
- package/dist/extra/storage-core.cjs +0 -1
- package/dist/extra/storage-core.d.cts +0 -28
- package/dist/extra/storage-core.d.ts +0 -28
- package/dist/extra/storage-core.js +0 -1
- package/dist/extra/storage-node.cjs +0 -1
- package/dist/extra/storage-node.d.cts +0 -2
- package/dist/extra/storage-node.d.ts +0 -2
- package/dist/extra/storage-node.js +0 -0
- package/dist/extra/storage-tiers-browser.cjs +0 -1
- package/dist/extra/storage-tiers-browser.d.cts +0 -120
- package/dist/extra/storage-tiers-browser.d.ts +0 -120
- package/dist/extra/storage-tiers-browser.js +0 -1
- package/dist/extra/storage-tiers-node.cjs +0 -1
- package/dist/extra/storage-tiers-node.d.cts +0 -210
- package/dist/extra/storage-tiers-node.d.ts +0 -210
- package/dist/extra/storage-tiers-node.js +0 -1
- package/dist/extra/storage-tiers.cjs +0 -1
- package/dist/extra/storage-tiers.d.cts +0 -412
- package/dist/extra/storage-tiers.d.ts +0 -412
- package/dist/extra/storage-tiers.js +0 -1
- package/dist/graph/index.cjs +0 -7
- package/dist/graph/index.d.cts +0 -7
- package/dist/graph/index.d.ts +0 -7
- package/dist/graph/index.js +0 -1
- package/dist/graph-CWvEUQAq.d.cts +0 -1861
- package/dist/graph-D9LFnda9.d.ts +0 -1861
- package/dist/index-5k1T6jl0.d.cts +0 -121
- package/dist/index-9770hRuQ.d.cts +0 -779
- package/dist/index-B1F8Enjf.d.ts +0 -704
- package/dist/index-BHskSB8v.d.ts +0 -3413
- package/dist/index-BIYAkbAi.d.cts +0 -26
- package/dist/index-BoJ5JHxI.d.ts +0 -557
- package/dist/index-BocU7pqs.d.ts +0 -779
- package/dist/index-BxNs2HB9.d.cts +0 -1858
- package/dist/index-C1T3d7V-.d.cts +0 -704
- package/dist/index-C5ri2Axc.d.cts +0 -301
- package/dist/index-C9l6OEBL.d.ts +0 -26
- package/dist/index-CC-AvFTy.d.cts +0 -557
- package/dist/index-CJF1URuX.d.ts +0 -121
- package/dist/index-CdTelp1M.d.ts +0 -202
- package/dist/index-Cj3WohTd.d.cts +0 -202
- package/dist/index-Co7uli2l.d.cts +0 -3413
- package/dist/index-D0aciIex.d.cts +0 -209
- package/dist/index-DHen9Klo.d.ts +0 -1858
- package/dist/index-Yq60JP3s.d.ts +0 -209
- package/dist/index-nozs3fFC.d.ts +0 -301
- package/dist/node-kK3CvTrR.d.cts +0 -1347
- package/dist/node-kK3CvTrR.d.ts +0 -1347
- package/dist/patterns/ai/browser.cjs +0 -8
- package/dist/patterns/ai/browser.js +0 -3
- package/dist/patterns/ai/index.cjs +0 -74
- package/dist/patterns/ai/index.d.cts +0 -20
- package/dist/patterns/ai/index.d.ts +0 -20
- package/dist/patterns/ai/index.js +0 -1
- package/dist/patterns/ai/node.cjs +0 -1
- package/dist/patterns/ai/node.js +0 -1
- package/dist/patterns/cqrs/index.cjs +0 -3
- package/dist/patterns/cqrs/index.d.cts +0 -8
- package/dist/patterns/cqrs/index.d.ts +0 -8
- package/dist/patterns/cqrs/index.js +0 -1
- package/dist/patterns/demo-shell/index.cjs +0 -5
- package/dist/patterns/demo-shell/index.d.cts +0 -7
- package/dist/patterns/demo-shell/index.d.ts +0 -7
- package/dist/patterns/demo-shell/index.js +0 -1
- package/dist/patterns/domain-templates/index.cjs +0 -3
- package/dist/patterns/domain-templates/index.d.cts +0 -6
- package/dist/patterns/domain-templates/index.d.ts +0 -6
- package/dist/patterns/domain-templates/index.js +0 -1
- package/dist/patterns/graphspec/index.cjs +0 -86
- package/dist/patterns/graphspec/index.d.cts +0 -8
- package/dist/patterns/graphspec/index.d.ts +0 -8
- package/dist/patterns/graphspec/index.js +0 -1
- package/dist/patterns/harness/index.cjs +0 -48
- package/dist/patterns/harness/index.d.cts +0 -13
- package/dist/patterns/harness/index.d.ts +0 -13
- package/dist/patterns/harness/index.js +0 -1
- package/dist/patterns/inspect/index.cjs +0 -3
- package/dist/patterns/inspect/index.d.cts +0 -9
- package/dist/patterns/inspect/index.d.ts +0 -9
- package/dist/patterns/inspect/index.js +0 -1
- package/dist/patterns/job-queue/index.cjs +0 -3
- package/dist/patterns/job-queue/index.d.cts +0 -9
- package/dist/patterns/job-queue/index.d.ts +0 -9
- package/dist/patterns/job-queue/index.js +0 -1
- package/dist/patterns/memory/index.cjs +0 -3
- package/dist/patterns/memory/index.d.cts +0 -8
- package/dist/patterns/memory/index.d.ts +0 -8
- package/dist/patterns/memory/index.js +0 -1
- package/dist/patterns/messaging/index.cjs +0 -3
- package/dist/patterns/messaging/index.d.cts +0 -7
- package/dist/patterns/messaging/index.d.ts +0 -7
- package/dist/patterns/messaging/index.js +0 -1
- package/dist/patterns/orchestration/index.cjs +0 -3
- package/dist/patterns/orchestration/index.d.cts +0 -8
- package/dist/patterns/orchestration/index.d.ts +0 -8
- package/dist/patterns/orchestration/index.js +0 -1
- package/dist/patterns/process/index.cjs +0 -3
- package/dist/patterns/process/index.d.cts +0 -10
- package/dist/patterns/process/index.d.ts +0 -10
- package/dist/patterns/process/index.js +0 -1
- package/dist/patterns/reactive-layout/index.cjs +0 -4
- package/dist/patterns/reactive-layout/index.d.cts +0 -7
- package/dist/patterns/reactive-layout/index.d.ts +0 -7
- package/dist/patterns/reactive-layout/index.js +0 -1
- package/dist/patterns/reduction/index.cjs +0 -3
- package/dist/patterns/reduction/index.d.cts +0 -6
- package/dist/patterns/reduction/index.d.ts +0 -6
- package/dist/patterns/reduction/index.js +0 -1
- package/dist/patterns/surface/index.cjs +0 -13
- package/dist/patterns/surface/index.d.cts +0 -9
- package/dist/patterns/surface/index.d.ts +0 -9
- package/dist/patterns/surface/index.js +0 -1
- package/dist/reactive-log-BKALbfal.d.ts +0 -223
- package/dist/reactive-log-DIGdYqQ6.d.cts +0 -223
- package/dist/reactive-map-CEFGp8TK.d.cts +0 -296
- package/dist/reactive-map-DS_SIAxv.d.ts +0 -296
- package/dist/resilience-6LYQJAC5.js +0 -1
- package/dist/sugar-DQjFmVqb.d.cts +0 -399
- package/dist/sugar-fhLIE7TT.d.ts +0 -399
- package/dist/topology-tree-Bcz27hpF.d.cts +0 -25
- package/dist/topology-tree-xvaD0fOX.d.ts +0 -25
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
// src/base/worker/bridge.ts
|
|
2
|
+
import {
|
|
3
|
+
batch,
|
|
4
|
+
DATA,
|
|
5
|
+
defaultConfig,
|
|
6
|
+
ERROR as ERROR2,
|
|
7
|
+
node,
|
|
8
|
+
TEARDOWN as TEARDOWN2
|
|
9
|
+
} from "@graphrefly/pure-ts/core";
|
|
10
|
+
import { filter, first, fromTimer, map, merge } from "@graphrefly/pure-ts/extra";
|
|
11
|
+
|
|
12
|
+
// src/base/worker/protocol.ts
|
|
13
|
+
import { COMPLETE, ERROR, INVALIDATE, PAUSE, RESUME, TEARDOWN } from "@graphrefly/pure-ts/core";
|
|
14
|
+
var signalToNameMap = /* @__PURE__ */ new Map([
|
|
15
|
+
[INVALIDATE, "INVALIDATE"],
|
|
16
|
+
[PAUSE, "PAUSE"],
|
|
17
|
+
[RESUME, "RESUME"],
|
|
18
|
+
[TEARDOWN, "TEARDOWN"],
|
|
19
|
+
[COMPLETE, "COMPLETE"],
|
|
20
|
+
[ERROR, "ERROR"]
|
|
21
|
+
]);
|
|
22
|
+
var nameToSignalMap = /* @__PURE__ */ new Map([
|
|
23
|
+
["INVALIDATE", INVALIDATE],
|
|
24
|
+
["PAUSE", PAUSE],
|
|
25
|
+
["RESUME", RESUME],
|
|
26
|
+
["TEARDOWN", TEARDOWN],
|
|
27
|
+
["COMPLETE", COMPLETE],
|
|
28
|
+
["ERROR", ERROR]
|
|
29
|
+
]);
|
|
30
|
+
function signalToName(s) {
|
|
31
|
+
const known = signalToNameMap.get(s);
|
|
32
|
+
if (known) return known;
|
|
33
|
+
const key = Symbol.keyFor(s);
|
|
34
|
+
return key ?? "UNKNOWN";
|
|
35
|
+
}
|
|
36
|
+
function nameToSignal(name) {
|
|
37
|
+
const known = nameToSignalMap.get(name);
|
|
38
|
+
if (known) return known;
|
|
39
|
+
if (name && name !== "UNKNOWN") return Symbol.for(name);
|
|
40
|
+
return void 0;
|
|
41
|
+
}
|
|
42
|
+
function serializeError(err) {
|
|
43
|
+
if (err instanceof Error) {
|
|
44
|
+
return { message: err.message, name: err.name, stack: err.stack };
|
|
45
|
+
}
|
|
46
|
+
return { message: String(err), name: "Error" };
|
|
47
|
+
}
|
|
48
|
+
function deserializeError(payload) {
|
|
49
|
+
const err = new Error(payload.message);
|
|
50
|
+
err.name = payload.name;
|
|
51
|
+
if (payload.stack) err.stack = payload.stack;
|
|
52
|
+
return err;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// src/base/worker/transport.ts
|
|
56
|
+
function createTransport(target) {
|
|
57
|
+
if (typeof MessagePort !== "undefined" && target instanceof MessagePort) {
|
|
58
|
+
return {
|
|
59
|
+
post(data, transfer) {
|
|
60
|
+
target.postMessage(data, transfer ?? []);
|
|
61
|
+
},
|
|
62
|
+
listen(handler) {
|
|
63
|
+
const h = (e) => handler(e.data);
|
|
64
|
+
target.addEventListener("message", h);
|
|
65
|
+
target.start();
|
|
66
|
+
return () => target.removeEventListener("message", h);
|
|
67
|
+
},
|
|
68
|
+
terminate() {
|
|
69
|
+
target.close();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (typeof SharedWorker !== "undefined" && target instanceof SharedWorker) {
|
|
74
|
+
return createTransport(target.port);
|
|
75
|
+
}
|
|
76
|
+
if (typeof Worker !== "undefined" && target instanceof Worker) {
|
|
77
|
+
return {
|
|
78
|
+
post(data, transfer) {
|
|
79
|
+
target.postMessage(data, transfer ?? []);
|
|
80
|
+
},
|
|
81
|
+
listen(handler) {
|
|
82
|
+
const h = (e) => handler(e.data);
|
|
83
|
+
target.addEventListener("message", h);
|
|
84
|
+
return () => target.removeEventListener("message", h);
|
|
85
|
+
},
|
|
86
|
+
terminate() {
|
|
87
|
+
target.terminate();
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (typeof BroadcastChannel !== "undefined" && target instanceof BroadcastChannel) {
|
|
92
|
+
return {
|
|
93
|
+
post(data, transfer) {
|
|
94
|
+
if (transfer && transfer.length > 0) {
|
|
95
|
+
console.warn(
|
|
96
|
+
"[graphrefly] WorkerTransport: BroadcastChannel does not support Transferable objects. The transfer argument is ignored and objects will be cloned instead."
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
target.postMessage(data);
|
|
100
|
+
},
|
|
101
|
+
listen(handler) {
|
|
102
|
+
const h = (e) => handler(e.data);
|
|
103
|
+
target.addEventListener("message", h);
|
|
104
|
+
return () => target.removeEventListener("message", h);
|
|
105
|
+
},
|
|
106
|
+
terminate() {
|
|
107
|
+
target.close();
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
if (typeof ServiceWorker !== "undefined" && target instanceof ServiceWorker) {
|
|
112
|
+
return {
|
|
113
|
+
post(data, transfer) {
|
|
114
|
+
target.postMessage(data, transfer ?? []);
|
|
115
|
+
},
|
|
116
|
+
listen(handler) {
|
|
117
|
+
const h = (e) => {
|
|
118
|
+
if (e.source === target) handler(e.data);
|
|
119
|
+
};
|
|
120
|
+
navigator.serviceWorker.addEventListener("message", h);
|
|
121
|
+
return () => navigator.serviceWorker.removeEventListener("message", h);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
throw new Error(
|
|
126
|
+
"createTransport: unsupported target type. Expected Worker, SharedWorker, ServiceWorker, BroadcastChannel, or MessagePort."
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// src/base/worker/bridge.ts
|
|
131
|
+
function isTransport(t) {
|
|
132
|
+
return typeof t === "object" && t !== null && typeof t.post === "function" && typeof t.listen === "function";
|
|
133
|
+
}
|
|
134
|
+
function workerBridge(target, opts) {
|
|
135
|
+
const transport = isTransport(target) ? target : createTransport(target);
|
|
136
|
+
const bridgeName = opts.name ?? "workerBridge";
|
|
137
|
+
const exposeEntries = Object.entries(opts.expose ?? {});
|
|
138
|
+
const importNames = opts.import ?? [];
|
|
139
|
+
const transferFns = opts.transfer ?? {};
|
|
140
|
+
const statusNode = node([], {
|
|
141
|
+
initial: "connecting",
|
|
142
|
+
name: `${bridgeName}::meta::status`
|
|
143
|
+
});
|
|
144
|
+
const errorNode = node([], {
|
|
145
|
+
initial: null,
|
|
146
|
+
name: `${bridgeName}::meta::error`
|
|
147
|
+
});
|
|
148
|
+
const proxyNodes = /* @__PURE__ */ new Map();
|
|
149
|
+
const lastSeenImportVersions = /* @__PURE__ */ new Map();
|
|
150
|
+
for (const name of importNames) {
|
|
151
|
+
const proxy = node([], { initial: void 0, name: `${bridgeName}::${name}` });
|
|
152
|
+
proxyNodes.set(name, proxy);
|
|
153
|
+
}
|
|
154
|
+
let effectUnsub;
|
|
155
|
+
if (exposeEntries.length > 0) {
|
|
156
|
+
const exposedNodes = exposeEntries.map(([, n]) => n);
|
|
157
|
+
const aggregated = node(
|
|
158
|
+
exposedNodes,
|
|
159
|
+
(data, a) => {
|
|
160
|
+
const updates = {};
|
|
161
|
+
for (let i = 0; i < exposeEntries.length; i++) {
|
|
162
|
+
const [name] = exposeEntries[i];
|
|
163
|
+
const batch0 = data[i];
|
|
164
|
+
if (batch0 != null && batch0.length > 0) {
|
|
165
|
+
updates[name] = batch0.at(-1);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (Object.keys(updates).length === 0) return;
|
|
169
|
+
a.emit(updates);
|
|
170
|
+
},
|
|
171
|
+
// Each `updates` object is a fresh allocation, so default reference
|
|
172
|
+
// equality correctly propagates every aggregation wave — no
|
|
173
|
+
// `equals: () => false` override needed. `partial: true` opts out
|
|
174
|
+
// of the §2.7 first-run gate so the aggregator can fire on
|
|
175
|
+
// any-dep-settles waves (the worker may not expose all sources at
|
|
176
|
+
// the same time).
|
|
177
|
+
{ name: `${bridgeName}::aggregated`, partial: true }
|
|
178
|
+
);
|
|
179
|
+
const effectNode = node(
|
|
180
|
+
[aggregated],
|
|
181
|
+
(batchData, _actions, ctx) => {
|
|
182
|
+
const batch0 = batchData[0];
|
|
183
|
+
const data0 = batch0 != null && batch0.length > 0 ? batch0.at(-1) : ctx.prevData[0];
|
|
184
|
+
const updates = data0;
|
|
185
|
+
if (updates == null || Object.keys(updates).length === 0) return void 0;
|
|
186
|
+
const transferList = [];
|
|
187
|
+
for (const name of Object.keys(updates)) {
|
|
188
|
+
const fn = transferFns[name];
|
|
189
|
+
if (fn) transferList.push(...fn(updates[name]));
|
|
190
|
+
}
|
|
191
|
+
let versions;
|
|
192
|
+
for (const [name, n] of exposeEntries) {
|
|
193
|
+
if (name in updates && n.v != null) {
|
|
194
|
+
if (versions == null) versions = {};
|
|
195
|
+
versions[name] = n.v.version;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const msg = { t: "b", u: updates, ...versions ? { v: versions } : {} };
|
|
199
|
+
try {
|
|
200
|
+
transport.post(msg, transferList.length > 0 ? transferList : void 0);
|
|
201
|
+
} catch (err) {
|
|
202
|
+
errorNode.down([[DATA, err instanceof Error ? err : new Error(String(err))]]);
|
|
203
|
+
}
|
|
204
|
+
return void 0;
|
|
205
|
+
},
|
|
206
|
+
{ describeKind: "effect" }
|
|
207
|
+
);
|
|
208
|
+
effectUnsub = effectNode.subscribe(() => {
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
let destroyed = false;
|
|
212
|
+
const unlisten = transport.listen((data) => {
|
|
213
|
+
if (destroyed) return;
|
|
214
|
+
const msg = data;
|
|
215
|
+
switch (msg.t) {
|
|
216
|
+
// Worker ready — set proxy nodes with initial values.
|
|
217
|
+
// The handshake deadline auto-cancels via the reactive race
|
|
218
|
+
// (`statusNode → "connected"` wins) — no explicit clearTimeout.
|
|
219
|
+
case "r": {
|
|
220
|
+
batch(() => {
|
|
221
|
+
for (const [name, value] of Object.entries(msg.stores)) {
|
|
222
|
+
const proxy = proxyNodes.get(name);
|
|
223
|
+
if (proxy) proxy.down([[DATA, value]]);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
statusNode.down([[DATA, "connected"]]);
|
|
227
|
+
const initValues = {};
|
|
228
|
+
for (const [name, n] of exposeEntries) {
|
|
229
|
+
initValues[name] = n.cache;
|
|
230
|
+
}
|
|
231
|
+
transport.post({ t: "i", stores: initValues });
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
// Single value update from worker
|
|
235
|
+
case "v": {
|
|
236
|
+
const proxy = proxyNodes.get(msg.s);
|
|
237
|
+
if (proxy) proxy.down([[DATA, msg.d]]);
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
// Batch value update from worker
|
|
241
|
+
case "b": {
|
|
242
|
+
batch(() => {
|
|
243
|
+
for (const [name, value] of Object.entries(msg.u)) {
|
|
244
|
+
const incomingVersion = msg.v?.[name];
|
|
245
|
+
if (incomingVersion != null) {
|
|
246
|
+
const lastSeen = lastSeenImportVersions.get(name);
|
|
247
|
+
if (lastSeen != null && incomingVersion <= lastSeen) continue;
|
|
248
|
+
lastSeenImportVersions.set(name, incomingVersion);
|
|
249
|
+
}
|
|
250
|
+
const proxy = proxyNodes.get(name);
|
|
251
|
+
if (proxy) proxy.down([[DATA, value]]);
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
// Error from worker node
|
|
257
|
+
case "e": {
|
|
258
|
+
const proxy = proxyNodes.get(msg.s);
|
|
259
|
+
if (proxy) proxy.down([[ERROR2, deserializeError(msg.err)]]);
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
// Lifecycle signal from worker
|
|
263
|
+
case "s": {
|
|
264
|
+
const sig = nameToSignal(msg.sig);
|
|
265
|
+
if (!sig) break;
|
|
266
|
+
const targets = msg.s === "*" ? [...proxyNodes.values()] : proxyNodes.has(msg.s) ? [proxyNodes.get(msg.s)] : [];
|
|
267
|
+
for (const proxy of targets) {
|
|
268
|
+
proxy.down(msg.d === void 0 ? [[sig]] : [[sig, msg.d]]);
|
|
269
|
+
}
|
|
270
|
+
break;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
const exposeUnsubs = [];
|
|
275
|
+
for (const [name, n] of exposeEntries) {
|
|
276
|
+
const unsub = n.subscribe(((msgs) => {
|
|
277
|
+
if (destroyed) return;
|
|
278
|
+
for (const m of msgs) {
|
|
279
|
+
const type = m[0];
|
|
280
|
+
if (type === DATA) continue;
|
|
281
|
+
if (defaultConfig.isLocalOnly(type)) continue;
|
|
282
|
+
if (type === ERROR2) {
|
|
283
|
+
transport.post({
|
|
284
|
+
t: "e",
|
|
285
|
+
s: name,
|
|
286
|
+
err: serializeError(m[1])
|
|
287
|
+
});
|
|
288
|
+
} else {
|
|
289
|
+
transport.post({
|
|
290
|
+
t: "s",
|
|
291
|
+
s: name,
|
|
292
|
+
sig: signalToName(type),
|
|
293
|
+
d: m.length > 1 ? m[1] : void 0
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}));
|
|
298
|
+
exposeUnsubs.push(unsub);
|
|
299
|
+
}
|
|
300
|
+
let handshakeUnsub;
|
|
301
|
+
if (opts.timeoutMs != null && opts.timeoutMs > 0) {
|
|
302
|
+
const deadline$ = fromTimer(opts.timeoutMs);
|
|
303
|
+
const ready$ = filter(statusNode, (s) => s === "connected");
|
|
304
|
+
const race$ = first(
|
|
305
|
+
merge(
|
|
306
|
+
map(deadline$, () => "timeout"),
|
|
307
|
+
map(ready$, () => "ready")
|
|
308
|
+
)
|
|
309
|
+
);
|
|
310
|
+
handshakeUnsub = race$.subscribe((msgs) => {
|
|
311
|
+
for (const m of msgs) {
|
|
312
|
+
if (m[0] === DATA && m[1] === "timeout") {
|
|
313
|
+
errorNode.down([[DATA, new Error("Worker bridge handshake timeout")]]);
|
|
314
|
+
destroy();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
function destroy() {
|
|
320
|
+
if (destroyed) return;
|
|
321
|
+
destroyed = true;
|
|
322
|
+
handshakeUnsub?.();
|
|
323
|
+
transport.post({
|
|
324
|
+
t: "s",
|
|
325
|
+
s: "*",
|
|
326
|
+
sig: signalToName(TEARDOWN2)
|
|
327
|
+
});
|
|
328
|
+
if (effectUnsub) effectUnsub();
|
|
329
|
+
for (const unsub of exposeUnsubs) unsub();
|
|
330
|
+
exposeUnsubs.length = 0;
|
|
331
|
+
unlisten();
|
|
332
|
+
statusNode.down([[DATA, "closed"]]);
|
|
333
|
+
lastSeenImportVersions.clear();
|
|
334
|
+
proxyNodes.clear();
|
|
335
|
+
}
|
|
336
|
+
const result = {
|
|
337
|
+
meta: { status: statusNode, error: errorNode },
|
|
338
|
+
destroy
|
|
339
|
+
};
|
|
340
|
+
for (const [name, proxy] of proxyNodes) {
|
|
341
|
+
result[name] = proxy;
|
|
342
|
+
}
|
|
343
|
+
return result;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// src/base/worker/self.ts
|
|
347
|
+
import {
|
|
348
|
+
batch as batch2,
|
|
349
|
+
DATA as DATA2,
|
|
350
|
+
defaultConfig as defaultConfig2,
|
|
351
|
+
ERROR as ERROR3,
|
|
352
|
+
node as node2,
|
|
353
|
+
TEARDOWN as TEARDOWN3
|
|
354
|
+
} from "@graphrefly/pure-ts/core";
|
|
355
|
+
function isTransport2(t) {
|
|
356
|
+
return typeof t === "object" && t !== null && typeof t.post === "function" && typeof t.listen === "function";
|
|
357
|
+
}
|
|
358
|
+
function workerSelf(target, opts) {
|
|
359
|
+
const transport = isTransport2(target) ? target : createTransport(target);
|
|
360
|
+
const importNames = opts.import ?? [];
|
|
361
|
+
const transferFns = opts.transfer ?? {};
|
|
362
|
+
const proxyNodes = /* @__PURE__ */ new Map();
|
|
363
|
+
const lastSeenImportVersions = /* @__PURE__ */ new Map();
|
|
364
|
+
const importedObj = {};
|
|
365
|
+
for (const name of importNames) {
|
|
366
|
+
const s = node2([], { initial: void 0, name: `worker::${name}` });
|
|
367
|
+
proxyNodes.set(name, s);
|
|
368
|
+
importedObj[name] = s;
|
|
369
|
+
}
|
|
370
|
+
const exposedNodes = opts.expose(importedObj);
|
|
371
|
+
const exposeEntries = Object.entries(exposedNodes);
|
|
372
|
+
let effectUnsub;
|
|
373
|
+
let destroyed = false;
|
|
374
|
+
if (exposeEntries.length > 0) {
|
|
375
|
+
const nodes = exposeEntries.map(([, n]) => n);
|
|
376
|
+
const aggregated = node2(
|
|
377
|
+
nodes,
|
|
378
|
+
(data, a) => {
|
|
379
|
+
const updates = {};
|
|
380
|
+
for (let i = 0; i < exposeEntries.length; i++) {
|
|
381
|
+
const [name] = exposeEntries[i];
|
|
382
|
+
const batch0 = data[i];
|
|
383
|
+
if (batch0 != null && batch0.length > 0) {
|
|
384
|
+
updates[name] = batch0.at(-1);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (Object.keys(updates).length === 0) return;
|
|
388
|
+
a.emit(updates);
|
|
389
|
+
},
|
|
390
|
+
// Fresh `updates` object per wave → default reference equality is
|
|
391
|
+
// correct; no `equals: () => false` override needed. `partial: true`
|
|
392
|
+
// opts out of the §2.7 first-run gate so the aggregator can fire on
|
|
393
|
+
// any-dep-settles waves (deps deliver asynchronously).
|
|
394
|
+
{ name: "workerSelf::aggregated", partial: true }
|
|
395
|
+
);
|
|
396
|
+
const effectNode = node2(
|
|
397
|
+
[aggregated],
|
|
398
|
+
(batchData, _actions, ctx) => {
|
|
399
|
+
const batch0 = batchData[0];
|
|
400
|
+
const data0 = batch0 != null && batch0.length > 0 ? batch0.at(-1) : ctx.prevData[0];
|
|
401
|
+
if (destroyed) return void 0;
|
|
402
|
+
const updates = data0;
|
|
403
|
+
if (updates == null || Object.keys(updates).length === 0) return void 0;
|
|
404
|
+
const transferList = [];
|
|
405
|
+
for (const name of Object.keys(updates)) {
|
|
406
|
+
const fn = transferFns[name];
|
|
407
|
+
if (fn) transferList.push(...fn(updates[name]));
|
|
408
|
+
}
|
|
409
|
+
let versions;
|
|
410
|
+
for (const [name, n] of exposeEntries) {
|
|
411
|
+
if (name in updates && n.v != null) {
|
|
412
|
+
if (versions == null) versions = {};
|
|
413
|
+
versions[name] = n.v.version;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
const msg = { t: "b", u: updates, ...versions ? { v: versions } : {} };
|
|
417
|
+
try {
|
|
418
|
+
transport.post(msg, transferList.length > 0 ? transferList : void 0);
|
|
419
|
+
} catch (_err) {
|
|
420
|
+
}
|
|
421
|
+
return void 0;
|
|
422
|
+
},
|
|
423
|
+
{ describeKind: "effect" }
|
|
424
|
+
);
|
|
425
|
+
effectUnsub = effectNode.subscribe(() => {
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
const exposeUnsubs = [];
|
|
429
|
+
for (const [name, n] of exposeEntries) {
|
|
430
|
+
const unsub = n.subscribe(((msgs) => {
|
|
431
|
+
if (destroyed) return;
|
|
432
|
+
for (const m of msgs) {
|
|
433
|
+
const type = m[0];
|
|
434
|
+
if (type === DATA2) continue;
|
|
435
|
+
if (defaultConfig2.isLocalOnly(type)) continue;
|
|
436
|
+
if (type === ERROR3) {
|
|
437
|
+
transport.post({
|
|
438
|
+
t: "e",
|
|
439
|
+
s: name,
|
|
440
|
+
err: serializeError(m[1])
|
|
441
|
+
});
|
|
442
|
+
} else {
|
|
443
|
+
transport.post({
|
|
444
|
+
t: "s",
|
|
445
|
+
s: name,
|
|
446
|
+
sig: signalToName(type),
|
|
447
|
+
d: m.length > 1 ? m[1] : void 0
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}));
|
|
452
|
+
exposeUnsubs.push(unsub);
|
|
453
|
+
}
|
|
454
|
+
const unlisten = transport.listen((data) => {
|
|
455
|
+
if (destroyed) return;
|
|
456
|
+
const msg = data;
|
|
457
|
+
switch (msg.t) {
|
|
458
|
+
// Init from main — set proxy node values
|
|
459
|
+
case "i": {
|
|
460
|
+
batch2(() => {
|
|
461
|
+
for (const [name, value] of Object.entries(msg.stores)) {
|
|
462
|
+
const proxy = proxyNodes.get(name);
|
|
463
|
+
if (proxy) proxy.down([[DATA2, value]]);
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
break;
|
|
467
|
+
}
|
|
468
|
+
// Single value update from main
|
|
469
|
+
case "v": {
|
|
470
|
+
const proxy = proxyNodes.get(msg.s);
|
|
471
|
+
if (proxy) proxy.down([[DATA2, msg.d]]);
|
|
472
|
+
break;
|
|
473
|
+
}
|
|
474
|
+
// Batch value update from main
|
|
475
|
+
case "b": {
|
|
476
|
+
batch2(() => {
|
|
477
|
+
for (const [name, value] of Object.entries(msg.u)) {
|
|
478
|
+
const incomingVersion = msg.v?.[name];
|
|
479
|
+
if (incomingVersion != null) {
|
|
480
|
+
const lastSeen = lastSeenImportVersions.get(name);
|
|
481
|
+
if (lastSeen != null && incomingVersion <= lastSeen) continue;
|
|
482
|
+
lastSeenImportVersions.set(name, incomingVersion);
|
|
483
|
+
}
|
|
484
|
+
const proxy = proxyNodes.get(name);
|
|
485
|
+
if (proxy) proxy.down([[DATA2, value]]);
|
|
486
|
+
}
|
|
487
|
+
});
|
|
488
|
+
break;
|
|
489
|
+
}
|
|
490
|
+
// Error from main node
|
|
491
|
+
case "e": {
|
|
492
|
+
const proxy = proxyNodes.get(msg.s);
|
|
493
|
+
if (proxy) proxy.down([[ERROR3, deserializeError(msg.err)]]);
|
|
494
|
+
break;
|
|
495
|
+
}
|
|
496
|
+
// Lifecycle signal from main
|
|
497
|
+
case "s": {
|
|
498
|
+
const sig = nameToSignal(msg.sig);
|
|
499
|
+
if (!sig) break;
|
|
500
|
+
if (sig === TEARDOWN3 && msg.s === "*") {
|
|
501
|
+
destroy();
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
const targets = msg.s === "*" ? [...proxyNodes.values()] : proxyNodes.has(msg.s) ? [proxyNodes.get(msg.s)] : [];
|
|
505
|
+
for (const proxy of targets) {
|
|
506
|
+
proxy.down(msg.d === void 0 ? [[sig]] : [[sig, msg.d]]);
|
|
507
|
+
}
|
|
508
|
+
break;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
});
|
|
512
|
+
const readyValues = {};
|
|
513
|
+
for (const [name, n] of exposeEntries) {
|
|
514
|
+
readyValues[name] = n.cache;
|
|
515
|
+
}
|
|
516
|
+
transport.post({ t: "r", stores: readyValues });
|
|
517
|
+
function destroy() {
|
|
518
|
+
if (destroyed) return;
|
|
519
|
+
destroyed = true;
|
|
520
|
+
if (effectUnsub) effectUnsub();
|
|
521
|
+
for (const unsub of exposeUnsubs) unsub();
|
|
522
|
+
exposeUnsubs.length = 0;
|
|
523
|
+
unlisten();
|
|
524
|
+
transport.terminate?.();
|
|
525
|
+
lastSeenImportVersions.clear();
|
|
526
|
+
proxyNodes.clear();
|
|
527
|
+
}
|
|
528
|
+
return { destroy };
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
export {
|
|
532
|
+
signalToName,
|
|
533
|
+
nameToSignal,
|
|
534
|
+
serializeError,
|
|
535
|
+
deserializeError,
|
|
536
|
+
createTransport,
|
|
537
|
+
workerBridge,
|
|
538
|
+
workerSelf
|
|
539
|
+
};
|
|
540
|
+
//# sourceMappingURL=chunk-NDUD3IMO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/base/worker/bridge.ts","../src/base/worker/protocol.ts","../src/base/worker/transport.ts","../src/base/worker/self.ts"],"sourcesContent":["/**\n * workerBridge — main-thread reactive node bridge to a worker.\n *\n * Creates proxy nodes for imported worker nodes, subscribes to exposed\n * nodes and sends values across the wire. Uses derived() + effect() for\n * natural batch coalescing via two-phase push + bitmask resolution.\n *\n * Wire filtering: graph-local signals ({@link isLocalOnly}) stay local;\n * DATA values go through the coalescing path; RESOLVED, COMPLETE, ERROR,\n * TEARDOWN, and unknown {@link Symbol.for} types go through the signal\n * subscription.\n *\n * Handshake:\n * 1. Main creates bridge, starts listening\n * 2. Worker sends { t: 'r', stores: { name: initialValue, ... } }\n * 3. Main creates proxy nodes, marks meta.status \"connected\"\n * 4. Main sends { t: 'i', stores: { name: currentValue, ... } }\n * 5. Bidirectional value flow begins\n */\n\nimport {\n\tbatch,\n\tDATA,\n\tdefaultConfig,\n\tERROR,\n\ttype Messages,\n\ttype Node,\n\ttype NodeSink,\n\tnode,\n\tTEARDOWN,\n} from \"@graphrefly/pure-ts/core\";\nimport { filter, first, fromTimer, map, merge } from \"@graphrefly/pure-ts/extra\";\nimport type { BatchMessage, BridgeMessage } from \"./protocol.js\";\nimport { deserializeError, nameToSignal, serializeError, signalToName } from \"./protocol.js\";\nimport type { WorkerTransport } from \"./transport.js\";\nimport { createTransport } from \"./transport.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface WorkerBridgeOptions<\n\tTExpose extends Record<string, Node<any>>,\n\tTImport extends readonly string[],\n> {\n\t/** Nodes to send to the worker. */\n\texpose?: TExpose;\n\t/** Node names the worker will provide. */\n\timport?: TImport;\n\t/** Per-node transferable extractors for zero-copy ArrayBuffer passing. */\n\ttransfer?: Partial<Record<keyof TExpose, (value: any) => Transferable[]>>;\n\t/** Debug name. */\n\tname?: string;\n\t/**\n\t * Handshake timeout in milliseconds. If the worker doesn't send READY\n\t * within this window, `meta.status` transitions to `\"closed\"` and\n\t * `meta.error` is set. Default: no timeout.\n\t */\n\ttimeoutMs?: number;\n}\n\n/** Proxy nodes created from imported worker node names. */\ntype ImportedNodes<T extends readonly string[]> = {\n\treadonly [K in T[number]]: Node<any>;\n};\n\nexport type WorkerBridge<\n\t_TExpose extends Record<string, Node<any>>,\n\tTImport extends readonly string[],\n> = ImportedNodes<TImport> & {\n\t/** Connection status meta node. */\n\tmeta: {\n\t\tstatus: Node<\"connecting\" | \"connected\" | \"closed\">;\n\t\terror: Node<Error | null>;\n\t};\n\t/** Destroy the bridge: sends TEARDOWN, disconnects, terminates worker. */\n\tdestroy(): void;\n};\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nfunction isTransport(t: unknown): t is WorkerTransport {\n\treturn (\n\t\ttypeof t === \"object\" &&\n\t\tt !== null &&\n\t\ttypeof (t as any).post === \"function\" &&\n\t\ttypeof (t as any).listen === \"function\"\n\t);\n}\n\nexport function workerBridge<\n\tTExpose extends Record<string, Node<any>>,\n\tTImport extends readonly string[],\n>(\n\ttarget: unknown | WorkerTransport,\n\topts: WorkerBridgeOptions<TExpose, TImport>,\n): WorkerBridge<TExpose, TImport> {\n\tconst transport = isTransport(target) ? target : createTransport(target);\n\tconst bridgeName = opts.name ?? \"workerBridge\";\n\tconst exposeEntries = Object.entries(opts.expose ?? {});\n\tconst importNames = (opts.import ?? []) as readonly string[];\n\tconst transferFns = opts.transfer ?? {};\n\n\t// -- Meta: connection status -----------------------------------------------\n\tconst statusNode = node<\"connecting\" | \"connected\" | \"closed\">([], {\n\t\tinitial: \"connecting\",\n\t\tname: `${bridgeName}::meta::status`,\n\t});\n\tconst errorNode = node<Error | null>([], {\n\t\tinitial: null,\n\t\tname: `${bridgeName}::meta::error`,\n\t});\n\n\t// -- Proxy nodes for imports (worker -> main) ------------------------------\n\tconst proxyNodes = new Map<string, Node<any>>();\n\tconst lastSeenImportVersions = new Map<string, number>();\n\tfor (const name of importNames) {\n\t\tconst proxy = node([], { initial: undefined, name: `${bridgeName}::${name}` });\n\t\tproxyNodes.set(name, proxy);\n\t}\n\n\t// -- Send coalescing via raw `node` + `effect` -----------------------------\n\t//\n\t// Aggregator uses raw `node([deps], (data, a) => ...)` so it can inspect\n\t// the full **wave-form** `data[i]`: a per-dep batch of DATA values emitted\n\t// this wave (or `undefined` if the dep was silent). Deps whose `equals`\n\t// absorb a repeat emission send `RESOLVED` instead of `DATA`, so silent\n\t// slots correctly mean \"no change\" and are omitted from the wire message.\n\t//\n\t// Net effect: no `.cache` reads inside fn, no `equals: () => false`, no\n\t// closure `lastSent` Map — Option B shape under v5 semantics.\n\tlet effectUnsub: (() => void) | undefined;\n\n\tif (exposeEntries.length > 0) {\n\t\tconst exposedNodes = exposeEntries.map(([, n]) => n) as Node[];\n\n\t\tconst aggregated = node<Record<string, unknown>>(\n\t\t\texposedNodes,\n\t\t\t(data, a) => {\n\t\t\t\tconst updates: Record<string, unknown> = {};\n\t\t\t\tfor (let i = 0; i < exposeEntries.length; i++) {\n\t\t\t\t\tconst [name] = exposeEntries[i];\n\t\t\t\t\tconst batch0 = data[i];\n\t\t\t\t\tif (batch0 != null && batch0.length > 0) {\n\t\t\t\t\t\tupdates[name] = batch0.at(-1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (Object.keys(updates).length === 0) return;\n\t\t\t\ta.emit(updates);\n\t\t\t},\n\t\t\t// Each `updates` object is a fresh allocation, so default reference\n\t\t\t// equality correctly propagates every aggregation wave — no\n\t\t\t// `equals: () => false` override needed. `partial: true` opts out\n\t\t\t// of the §2.7 first-run gate so the aggregator can fire on\n\t\t\t// any-dep-settles waves (the worker may not expose all sources at\n\t\t\t// the same time).\n\t\t\t{ name: `${bridgeName}::aggregated`, partial: true },\n\t\t);\n\n\t\tconst effectNode = node(\n\t\t\t[aggregated],\n\t\t\t(batchData, _actions, ctx) => {\n\t\t\t\tconst batch0 = batchData[0];\n\t\t\t\tconst data0 = batch0 != null && batch0.length > 0 ? batch0.at(-1) : ctx.prevData[0];\n\t\t\t\tconst updates = data0 as Record<string, unknown> | undefined;\n\t\t\t\tif (updates == null || Object.keys(updates).length === 0) return undefined;\n\n\t\t\t\tconst transferList: Transferable[] = [];\n\t\t\t\tfor (const name of Object.keys(updates)) {\n\t\t\t\t\tconst fn = (transferFns as any)[name];\n\t\t\t\t\tif (fn) transferList.push(...fn(updates[name]));\n\t\t\t\t}\n\n\t\t\t\t// V0 delta sync: include version counters when available (§6.0b).\n\t\t\t\tlet versions: Record<string, number> | undefined;\n\t\t\t\tfor (const [name, n] of exposeEntries) {\n\t\t\t\t\tif (name in updates && n.v != null) {\n\t\t\t\t\t\tif (versions == null) versions = {};\n\t\t\t\t\t\tversions[name] = n.v.version;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst msg: BatchMessage = { t: \"b\", u: updates, ...(versions ? { v: versions } : {}) };\n\t\t\t\ttry {\n\t\t\t\t\ttransport.post(msg, transferList.length > 0 ? transferList : undefined);\n\t\t\t\t} catch (err) {\n\t\t\t\t\terrorNode.down([[DATA, err instanceof Error ? err : new Error(String(err))]]);\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t\t{ describeKind: \"effect\" },\n\t\t);\n\t\t// Effect nodes are lazy — subscribe to activate the chain\n\t\teffectUnsub = effectNode.subscribe(() => {});\n\t}\n\n\t// -- Receive handler -------------------------------------------------------\n\tlet destroyed = false;\n\n\tconst unlisten = transport.listen((data) => {\n\t\tif (destroyed) return;\n\t\tconst msg = data as BridgeMessage;\n\n\t\tswitch (msg.t) {\n\t\t\t// Worker ready — set proxy nodes with initial values.\n\t\t\t// The handshake deadline auto-cancels via the reactive race\n\t\t\t// (`statusNode → \"connected\"` wins) — no explicit clearTimeout.\n\t\t\tcase \"r\": {\n\t\t\t\tbatch(() => {\n\t\t\t\t\tfor (const [name, value] of Object.entries(msg.stores)) {\n\t\t\t\t\t\tconst proxy = proxyNodes.get(name);\n\t\t\t\t\t\tif (proxy) proxy.down([[DATA, value]]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tstatusNode.down([[DATA, \"connected\"]]);\n\n\t\t\t\t// Send initial values of exposed nodes.\n\t\t\t\t// `.cache` here is a documented transport-boundary read: at the\n\t\t\t\t// worker's \"ready\" moment we need a point-in-time snapshot of\n\t\t\t\t// every exposed node, not a reactive wave. (§5.10 boundary.)\n\t\t\t\tconst initValues: Record<string, unknown> = {};\n\t\t\t\tfor (const [name, n] of exposeEntries) {\n\t\t\t\t\tinitValues[name] = n.cache;\n\t\t\t\t}\n\t\t\t\ttransport.post({ t: \"i\", stores: initValues } satisfies BridgeMessage);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Single value update from worker\n\t\t\tcase \"v\": {\n\t\t\t\tconst proxy = proxyNodes.get(msg.s);\n\t\t\t\tif (proxy) proxy.down([[DATA, msg.d]]);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Batch value update from worker\n\t\t\tcase \"b\": {\n\t\t\t\tbatch(() => {\n\t\t\t\t\tfor (const [name, value] of Object.entries(msg.u)) {\n\t\t\t\t\t\tconst incomingVersion = msg.v?.[name];\n\t\t\t\t\t\tif (incomingVersion != null) {\n\t\t\t\t\t\t\tconst lastSeen = lastSeenImportVersions.get(name);\n\t\t\t\t\t\t\tif (lastSeen != null && incomingVersion <= lastSeen) continue;\n\t\t\t\t\t\t\tlastSeenImportVersions.set(name, incomingVersion);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst proxy = proxyNodes.get(name);\n\t\t\t\t\t\tif (proxy) proxy.down([[DATA, value]]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Error from worker node\n\t\t\tcase \"e\": {\n\t\t\t\tconst proxy = proxyNodes.get(msg.s);\n\t\t\t\tif (proxy) proxy.down([[ERROR, deserializeError(msg.err)]]);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Lifecycle signal from worker\n\t\t\tcase \"s\": {\n\t\t\t\tconst sig = nameToSignal(msg.sig);\n\t\t\t\tif (!sig) break;\n\n\t\t\t\tconst targets: Node<any>[] =\n\t\t\t\t\tmsg.s === \"*\"\n\t\t\t\t\t\t? [...proxyNodes.values()]\n\t\t\t\t\t\t: proxyNodes.has(msg.s)\n\t\t\t\t\t\t\t? [proxyNodes.get(msg.s)!]\n\t\t\t\t\t\t\t: [];\n\n\t\t\t\tfor (const proxy of targets) {\n\t\t\t\t\tproxy.down((msg.d === undefined ? [[sig]] : [[sig, msg.d]]) as Messages);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\t// -- Subscribe to exposed nodes: forward tier >= 3 messages -----------------\n\tconst exposeUnsubs: Array<() => void> = [];\n\tfor (const [name, n] of exposeEntries) {\n\t\tconst unsub = n.subscribe(((msgs: Messages) => {\n\t\t\tif (destroyed) return;\n\t\t\tfor (const m of msgs) {\n\t\t\t\tconst type = m[0] as symbol;\n\t\t\t\t// DATA goes through the coalescing path — skip here\n\t\t\t\tif (type === DATA) continue;\n\t\t\t\t// Block graph-local signals (START, DIRTY, INVALIDATE, PAUSE, RESUME).\n\t\t\t\t// Unknown types forward (spec §1.3.6).\n\t\t\t\tif (defaultConfig.isLocalOnly(type)) continue;\n\t\t\t\t// ERROR: serialize payload\n\t\t\t\tif (type === ERROR) {\n\t\t\t\t\ttransport.post({\n\t\t\t\t\t\tt: \"e\",\n\t\t\t\t\t\ts: name,\n\t\t\t\t\t\terr: serializeError(m[1]),\n\t\t\t\t\t} satisfies BridgeMessage);\n\t\t\t\t} else {\n\t\t\t\t\t// RESOLVED, COMPLETE, TEARDOWN, and unknown Symbol.for types\n\t\t\t\t\ttransport.post({\n\t\t\t\t\t\tt: \"s\",\n\t\t\t\t\t\ts: name,\n\t\t\t\t\t\tsig: signalToName(type),\n\t\t\t\t\t\td: m.length > 1 ? m[1] : undefined,\n\t\t\t\t\t} satisfies BridgeMessage);\n\t\t\t\t}\n\t\t\t}\n\t\t}) as NodeSink);\n\t\texposeUnsubs.push(unsub);\n\t}\n\n\t// -- Handshake timeout — reactive race between status→\"connected\" and a\n\t// one-shot `fromTimer` deadline. Whichever fires first wins via `first()`,\n\t// which completes and auto-unsubs upstream (cancelling the deadline if\n\t// ready arrived first, or vice-versa).\n\tlet handshakeUnsub: (() => void) | undefined;\n\tif (opts.timeoutMs != null && opts.timeoutMs > 0) {\n\t\tconst deadline$ = fromTimer(opts.timeoutMs);\n\t\tconst ready$ = filter(statusNode, (s) => s === \"connected\");\n\t\tconst race$ = first(\n\t\t\tmerge(\n\t\t\t\tmap(deadline$, () => \"timeout\" as const),\n\t\t\t\tmap(ready$, () => \"ready\" as const),\n\t\t\t),\n\t\t);\n\t\thandshakeUnsub = race$.subscribe((msgs) => {\n\t\t\tfor (const m of msgs) {\n\t\t\t\tif (m[0] === DATA && m[1] === \"timeout\") {\n\t\t\t\t\terrorNode.down([[DATA, new Error(\"Worker bridge handshake timeout\")]]);\n\t\t\t\t\tdestroy();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t// -- Build result object ---------------------------------------------------\n\tfunction destroy() {\n\t\tif (destroyed) return;\n\t\tdestroyed = true;\n\n\t\thandshakeUnsub?.();\n\n\t\t// Send bridge-level TEARDOWN to worker\n\t\ttransport.post({\n\t\t\tt: \"s\",\n\t\t\ts: \"*\",\n\t\t\tsig: signalToName(TEARDOWN),\n\t\t} satisfies BridgeMessage);\n\n\t\t// Cleanup: unsub effect first (stops sending), then unsub expose\n\t\t// listeners, then unlisten on transport\n\t\tif (effectUnsub) effectUnsub();\n\t\tfor (const unsub of exposeUnsubs) unsub();\n\t\texposeUnsubs.length = 0;\n\t\tunlisten();\n\n\t\tstatusNode.down([[DATA, \"closed\"]]);\n\n\t\tlastSeenImportVersions.clear();\n\t\tproxyNodes.clear();\n\t}\n\n\tconst result: any = {\n\t\tmeta: { status: statusNode, error: errorNode },\n\t\tdestroy,\n\t};\n\n\t// Attach proxy nodes as properties\n\tfor (const [name, proxy] of proxyNodes) {\n\t\tresult[name] = proxy;\n\t}\n\n\treturn result as WorkerBridge<TExpose, TImport>;\n}\n","/**\n * Wire protocol for worker bridge communication.\n *\n * Graph-local signals ({@link isLocalOnly}) stay local to each side's\n * reactive graph. DATA values cross via coalescing; RESOLVED/COMPLETE/TEARDOWN\n * as signals; ERROR as serialized payloads.\n *\n * Lifecycle signals serialize as string names since Symbols can't survive\n * structured clone. Unknown {@link Symbol.for} symbols are round-tripped\n * via their registered key.\n */\n\nimport { COMPLETE, ERROR, INVALIDATE, PAUSE, RESUME, TEARDOWN } from \"@graphrefly/pure-ts/core\";\n\n// ---------------------------------------------------------------------------\n// Wire message types\n// ---------------------------------------------------------------------------\n\n/** Value update — one node changed. */\nexport interface ValueMessage {\n\tt: \"v\";\n\t/** Node name. */\n\ts: string;\n\t/** Serialized value. */\n\td: unknown;\n}\n\n/** Lifecycle signal — serialized symbol name. */\nexport interface SignalMessage {\n\tt: \"s\";\n\t/** Node name, or `\"*\"` for bridge-wide. */\n\ts: string;\n\t/** Signal name string (e.g. \"TEARDOWN\"). */\n\tsig: string;\n\t/** Optional payload for custom symbols (spec §1.3.6 forward unchanged). */\n\td?: unknown;\n}\n\n/** Ready — worker declares its exported nodes with initial values. */\nexport interface ReadyMessage {\n\tt: \"r\";\n\tstores: Record<string, unknown>;\n}\n\n/** Init — main sends initial values of its exposed nodes. */\nexport interface InitMessage {\n\tt: \"i\";\n\tstores: Record<string, unknown>;\n}\n\n/** Batch value update — multiple nodes changed in one reactive cycle. */\nexport interface BatchMessage {\n\tt: \"b\";\n\tu: Record<string, unknown>;\n\t/** V0 versions per node for delta sync — peer skips if version <= lastSeen (§6.0b). */\n\tv?: Record<string, number>;\n}\n\n/** Error payload — serialized since Error objects don't survive structured clone. */\nexport interface ErrorMessage {\n\tt: \"e\";\n\t/** Node name. */\n\ts: string;\n\t/** Serialized error. */\n\terr: { message: string; name: string; stack?: string };\n}\n\nexport type BridgeMessage =\n\t| ValueMessage\n\t| SignalMessage\n\t| ReadyMessage\n\t| InitMessage\n\t| BatchMessage\n\t| ErrorMessage;\n\n// ---------------------------------------------------------------------------\n// Signal serialization — Symbol <-> string for structured clone\n// ---------------------------------------------------------------------------\n\nconst signalToNameMap = new Map<symbol, string>([\n\t[INVALIDATE, \"INVALIDATE\"],\n\t[PAUSE, \"PAUSE\"],\n\t[RESUME, \"RESUME\"],\n\t[TEARDOWN, \"TEARDOWN\"],\n\t[COMPLETE, \"COMPLETE\"],\n\t[ERROR, \"ERROR\"],\n]);\n\nconst nameToSignalMap = new Map<string, symbol>([\n\t[\"INVALIDATE\", INVALIDATE],\n\t[\"PAUSE\", PAUSE],\n\t[\"RESUME\", RESUME],\n\t[\"TEARDOWN\", TEARDOWN],\n\t[\"COMPLETE\", COMPLETE],\n\t[\"ERROR\", ERROR],\n]);\n\n/**\n * Serialize a message type symbol to a string for structured clone transfer.\n *\n * Known GraphReFly symbols map to their canonical names. Unknown symbols\n * registered via {@link Symbol.for} use their registered key. Unregistered\n * symbols return `\"UNKNOWN\"`.\n */\nexport function signalToName(s: symbol): string {\n\tconst known = signalToNameMap.get(s);\n\tif (known) return known;\n\tconst key = Symbol.keyFor(s);\n\treturn key ?? \"UNKNOWN\";\n}\n\n/**\n * Deserialize a string back to a message type symbol.\n *\n * Known GraphReFly names map to their canonical symbols. Other non-empty\n * strings are reconstructed via {@link Symbol.for} (round-trip safe for\n * custom message types). Returns `undefined` for `\"UNKNOWN\"`.\n */\nexport function nameToSignal(name: string): symbol | undefined {\n\tconst known = nameToSignalMap.get(name);\n\tif (known) return known;\n\tif (name && name !== \"UNKNOWN\") return Symbol.for(name);\n\treturn undefined;\n}\n\n/** Serialize an error for structured clone transfer. */\nexport function serializeError(err: unknown): { message: string; name: string; stack?: string } {\n\tif (err instanceof Error) {\n\t\treturn { message: err.message, name: err.name, stack: err.stack };\n\t}\n\treturn { message: String(err), name: \"Error\" };\n}\n\n/** Deserialize an error payload back to an Error object. */\nexport function deserializeError(payload: {\n\tmessage: string;\n\tname: string;\n\tstack?: string;\n}): Error {\n\tconst err = new Error(payload.message);\n\terr.name = payload.name;\n\tif (payload.stack) err.stack = payload.stack;\n\treturn err;\n}\n","/**\n * WorkerTransport — normalized message channel for all worker types.\n *\n * Abstracts Worker, SharedWorker, ServiceWorker, BroadcastChannel, and\n * MessagePort behind a uniform post/listen/terminate interface.\n */\n\n/** Normalized bidirectional message channel. */\nexport interface WorkerTransport {\n\t/** Send data to the other side. Optional transferables for zero-copy. */\n\tpost(data: unknown, transfer?: Transferable[]): void;\n\t/** Listen for incoming messages. Returns unsubscribe function. */\n\tlisten(handler: (data: unknown) => void): () => void;\n\t/** Terminate the connection (if supported by the underlying transport). */\n\tterminate?(): void;\n}\n\n/**\n * Auto-detect transport type and create a normalized WorkerTransport.\n *\n * Supports:\n * - `Worker` — direct postMessage/onmessage\n * - `SharedWorker` — port-based postMessage/onmessage\n * - `ServiceWorker` — postMessage via controller, listen via navigator.serviceWorker\n * - `BroadcastChannel` — postMessage/onmessage (no Transferable support)\n * - `MessagePort` — direct postMessage/onmessage (worker-side SharedWorker port)\n */\nexport function createTransport(target: unknown): WorkerTransport {\n\t// MessagePort (SharedWorker port from inside the worker, or raw MessagePort)\n\tif (typeof MessagePort !== \"undefined\" && target instanceof MessagePort) {\n\t\treturn {\n\t\t\tpost(data, transfer) {\n\t\t\t\ttarget.postMessage(data, transfer ?? []);\n\t\t\t},\n\t\t\tlisten(handler) {\n\t\t\t\tconst h = (e: MessageEvent) => handler(e.data);\n\t\t\t\ttarget.addEventListener(\"message\", h);\n\t\t\t\ttarget.start();\n\t\t\t\treturn () => target.removeEventListener(\"message\", h);\n\t\t\t},\n\t\t\tterminate() {\n\t\t\t\ttarget.close();\n\t\t\t},\n\t\t};\n\t}\n\n\t// SharedWorker — use its port\n\tif (typeof SharedWorker !== \"undefined\" && target instanceof SharedWorker) {\n\t\treturn createTransport(target.port);\n\t}\n\n\t// Web Worker\n\tif (typeof Worker !== \"undefined\" && target instanceof Worker) {\n\t\treturn {\n\t\t\tpost(data, transfer) {\n\t\t\t\ttarget.postMessage(data, transfer ?? []);\n\t\t\t},\n\t\t\tlisten(handler) {\n\t\t\t\tconst h = (e: MessageEvent) => handler(e.data);\n\t\t\t\ttarget.addEventListener(\"message\", h);\n\t\t\t\treturn () => target.removeEventListener(\"message\", h);\n\t\t\t},\n\t\t\tterminate() {\n\t\t\t\ttarget.terminate();\n\t\t\t},\n\t\t};\n\t}\n\n\t// BroadcastChannel — no Transferable support\n\tif (typeof BroadcastChannel !== \"undefined\" && target instanceof BroadcastChannel) {\n\t\treturn {\n\t\t\tpost(data, transfer?) {\n\t\t\t\tif (transfer && transfer.length > 0) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\"[graphrefly] WorkerTransport: BroadcastChannel does not support Transferable objects. The transfer argument is ignored and objects will be cloned instead.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\ttarget.postMessage(data);\n\t\t\t},\n\t\t\tlisten(handler) {\n\t\t\t\tconst h = (e: MessageEvent) => handler(e.data);\n\t\t\t\ttarget.addEventListener(\"message\", h);\n\t\t\t\treturn () => target.removeEventListener(\"message\", h);\n\t\t\t},\n\t\t\tterminate() {\n\t\t\t\ttarget.close();\n\t\t\t},\n\t\t};\n\t}\n\n\t// ServiceWorker\n\tif (typeof ServiceWorker !== \"undefined\" && target instanceof ServiceWorker) {\n\t\treturn {\n\t\t\tpost(data, transfer) {\n\t\t\t\ttarget.postMessage(data, transfer ?? []);\n\t\t\t},\n\t\t\tlisten(handler) {\n\t\t\t\tconst h = (e: MessageEvent) => {\n\t\t\t\t\tif (e.source === target) handler(e.data);\n\t\t\t\t};\n\t\t\t\tnavigator.serviceWorker.addEventListener(\"message\", h);\n\t\t\t\treturn () => navigator.serviceWorker.removeEventListener(\"message\", h);\n\t\t\t},\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t\"createTransport: unsupported target type. Expected Worker, SharedWorker, ServiceWorker, BroadcastChannel, or MessagePort.\",\n\t);\n}\n","/**\n * workerSelf — worker-side reactive node bridge.\n *\n * Mirror of workerBridge() for the worker side. Creates proxy nodes for\n * imports from main thread, exposes local nodes via the same wire protocol.\n * Uses derived() + effect() for batch coalescing.\n *\n * Wire filtering: graph-local signals ({@link isLocalOnly}) stay local;\n * DATA values go through the coalescing path; RESOLVED, COMPLETE, ERROR,\n * TEARDOWN, and unknown {@link Symbol.for} types go through the signal\n * subscription.\n *\n * Handshake (worker perspective):\n * 1. workerSelf() called — creates proxy nodes for imports\n * 2. Runs expose factory with proxy nodes -> gets nodes to expose\n * 3. Sends { t: 'r', stores: { name: initialValue, ... } } to main\n * 4. Receives { t: 'i', stores: { name: value, ... } } from main\n * 5. Updates proxy nodes -> triggers local effects\n */\n\nimport {\n\tbatch,\n\tDATA,\n\tdefaultConfig,\n\tERROR,\n\ttype Messages,\n\ttype Node,\n\ttype NodeSink,\n\tnode,\n\tTEARDOWN,\n} from \"@graphrefly/pure-ts/core\";\nimport type { BatchMessage, BridgeMessage } from \"./protocol.js\";\nimport { deserializeError, nameToSignal, serializeError, signalToName } from \"./protocol.js\";\nimport type { WorkerTransport } from \"./transport.js\";\nimport { createTransport } from \"./transport.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface WorkerSelfOptions<TImport extends readonly string[]> {\n\t/** Node names that the main thread will provide. */\n\timport?: TImport;\n\t/** Factory that receives imported proxy nodes and returns nodes to expose. */\n\texpose: (imported: WorkerImported<TImport>) => Record<string, Node<any>>;\n\t/** Per-node transferable extractors for zero-copy ArrayBuffer passing. */\n\ttransfer?: Record<string, (value: any) => Transferable[]>;\n}\n\n/** Proxy nodes available inside the worker from main-thread exposed nodes. */\ntype WorkerImported<T extends readonly string[]> = {\n\treadonly [K in T[number]]: Node<any>;\n};\n\nexport interface WorkerSelfHandle {\n\t/** Dispose all subscriptions and stop the bridge. */\n\tdestroy(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nfunction isTransport(t: unknown): t is WorkerTransport {\n\treturn (\n\t\ttypeof t === \"object\" &&\n\t\tt !== null &&\n\t\ttypeof (t as any).post === \"function\" &&\n\t\ttypeof (t as any).listen === \"function\"\n\t);\n}\n\nexport function workerSelf<TImport extends readonly string[]>(\n\ttarget: unknown | WorkerTransport,\n\topts: WorkerSelfOptions<TImport>,\n): WorkerSelfHandle {\n\tconst transport = isTransport(target) ? target : createTransport(target);\n\tconst importNames = (opts.import ?? []) as readonly string[];\n\tconst transferFns = opts.transfer ?? {};\n\n\t// -- Proxy nodes for imports (main -> worker) ------------------------------\n\tconst proxyNodes = new Map<string, Node<any>>();\n\tconst lastSeenImportVersions = new Map<string, number>();\n\tconst importedObj: any = {};\n\tfor (const name of importNames) {\n\t\tconst s = node([], { initial: undefined, name: `worker::${name}` });\n\t\tproxyNodes.set(name, s);\n\t\timportedObj[name] = s;\n\t}\n\n\t// -- Run expose factory ----------------------------------------------------\n\tconst exposedNodes = opts.expose(importedObj as WorkerImported<TImport>);\n\tconst exposeEntries = Object.entries(exposedNodes);\n\n\t// -- Send coalescing via raw `node` + `effect` ----------------------------\n\t// See bridge.ts for the Option B rationale — raw `node([deps], fn)` with\n\t// wave-form `data[]` replaces the prior `lastSent` diff + `.cache` reads.\n\tlet effectUnsub: (() => void) | undefined;\n\tlet destroyed = false;\n\n\tif (exposeEntries.length > 0) {\n\t\tconst nodes = exposeEntries.map(([, n]) => n) as Node[];\n\n\t\tconst aggregated = node<Record<string, unknown>>(\n\t\t\tnodes,\n\t\t\t(data, a) => {\n\t\t\t\tconst updates: Record<string, unknown> = {};\n\t\t\t\tfor (let i = 0; i < exposeEntries.length; i++) {\n\t\t\t\t\tconst [name] = exposeEntries[i];\n\t\t\t\t\tconst batch0 = data[i];\n\t\t\t\t\tif (batch0 != null && batch0.length > 0) {\n\t\t\t\t\t\tupdates[name] = batch0.at(-1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (Object.keys(updates).length === 0) return;\n\t\t\t\ta.emit(updates);\n\t\t\t},\n\t\t\t// Fresh `updates` object per wave → default reference equality is\n\t\t\t// correct; no `equals: () => false` override needed. `partial: true`\n\t\t\t// opts out of the §2.7 first-run gate so the aggregator can fire on\n\t\t\t// any-dep-settles waves (deps deliver asynchronously).\n\t\t\t{ name: \"workerSelf::aggregated\", partial: true },\n\t\t);\n\n\t\tconst effectNode = node(\n\t\t\t[aggregated],\n\t\t\t(batchData, _actions, ctx) => {\n\t\t\t\tconst batch0 = batchData[0];\n\t\t\t\tconst data0 = batch0 != null && batch0.length > 0 ? batch0.at(-1) : ctx.prevData[0];\n\t\t\t\tif (destroyed) return undefined;\n\t\t\t\tconst updates = data0 as Record<string, unknown> | undefined;\n\t\t\t\tif (updates == null || Object.keys(updates).length === 0) return undefined;\n\n\t\t\t\tconst transferList: Transferable[] = [];\n\t\t\t\tfor (const name of Object.keys(updates)) {\n\t\t\t\t\tconst fn = (transferFns as any)[name];\n\t\t\t\t\tif (fn) transferList.push(...fn(updates[name]));\n\t\t\t\t}\n\n\t\t\t\t// V0 delta sync: include version counters when available (§6.0b).\n\t\t\t\tlet versions: Record<string, number> | undefined;\n\t\t\t\tfor (const [name, n] of exposeEntries) {\n\t\t\t\t\tif (name in updates && n.v != null) {\n\t\t\t\t\t\tif (versions == null) versions = {};\n\t\t\t\t\t\tversions[name] = n.v.version;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst msg: BatchMessage = { t: \"b\", u: updates, ...(versions ? { v: versions } : {}) };\n\t\t\t\ttry {\n\t\t\t\t\ttransport.post(msg, transferList.length > 0 ? transferList : undefined);\n\t\t\t\t} catch (_err) {\n\t\t\t\t\t// Transport failure — bridge is likely destroyed; swallow\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t\t{ describeKind: \"effect\" },\n\t\t);\n\t\t// Effect nodes are lazy — subscribe to activate the chain\n\t\teffectUnsub = effectNode.subscribe(() => {});\n\t}\n\n\t// -- Subscribe to exposed nodes: forward tier >= 3 messages -----------------\n\tconst exposeUnsubs: Array<() => void> = [];\n\tfor (const [name, n] of exposeEntries) {\n\t\tconst unsub = n.subscribe(((msgs: Messages) => {\n\t\t\tif (destroyed) return;\n\t\t\tfor (const m of msgs) {\n\t\t\t\tconst type = m[0] as symbol;\n\t\t\t\t// DATA goes through the coalescing path — skip here\n\t\t\t\tif (type === DATA) continue;\n\t\t\t\t// Block graph-local signals (START, DIRTY, INVALIDATE, PAUSE, RESUME).\n\t\t\t\t// Unknown types forward (spec §1.3.6).\n\t\t\t\tif (defaultConfig.isLocalOnly(type)) continue;\n\t\t\t\t// ERROR: serialize payload\n\t\t\t\tif (type === ERROR) {\n\t\t\t\t\ttransport.post({\n\t\t\t\t\t\tt: \"e\",\n\t\t\t\t\t\ts: name,\n\t\t\t\t\t\terr: serializeError(m[1]),\n\t\t\t\t\t} satisfies BridgeMessage);\n\t\t\t\t} else {\n\t\t\t\t\t// RESOLVED, COMPLETE, TEARDOWN, and unknown Symbol.for types\n\t\t\t\t\ttransport.post({\n\t\t\t\t\t\tt: \"s\",\n\t\t\t\t\t\ts: name,\n\t\t\t\t\t\tsig: signalToName(type),\n\t\t\t\t\t\td: m.length > 1 ? m[1] : undefined,\n\t\t\t\t\t} satisfies BridgeMessage);\n\t\t\t\t}\n\t\t\t}\n\t\t}) as NodeSink);\n\t\texposeUnsubs.push(unsub);\n\t}\n\n\t// -- Receive handler -------------------------------------------------------\n\tconst unlisten = transport.listen((data) => {\n\t\tif (destroyed) return;\n\t\tconst msg = data as BridgeMessage;\n\n\t\tswitch (msg.t) {\n\t\t\t// Init from main — set proxy node values\n\t\t\tcase \"i\": {\n\t\t\t\tbatch(() => {\n\t\t\t\t\tfor (const [name, value] of Object.entries(msg.stores)) {\n\t\t\t\t\t\tconst proxy = proxyNodes.get(name);\n\t\t\t\t\t\tif (proxy) proxy.down([[DATA, value]]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Single value update from main\n\t\t\tcase \"v\": {\n\t\t\t\tconst proxy = proxyNodes.get(msg.s);\n\t\t\t\tif (proxy) proxy.down([[DATA, msg.d]]);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Batch value update from main\n\t\t\tcase \"b\": {\n\t\t\t\tbatch(() => {\n\t\t\t\t\tfor (const [name, value] of Object.entries(msg.u)) {\n\t\t\t\t\t\tconst incomingVersion = msg.v?.[name];\n\t\t\t\t\t\tif (incomingVersion != null) {\n\t\t\t\t\t\t\tconst lastSeen = lastSeenImportVersions.get(name);\n\t\t\t\t\t\t\tif (lastSeen != null && incomingVersion <= lastSeen) continue;\n\t\t\t\t\t\t\tlastSeenImportVersions.set(name, incomingVersion);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst proxy = proxyNodes.get(name);\n\t\t\t\t\t\tif (proxy) proxy.down([[DATA, value]]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Error from main node\n\t\t\tcase \"e\": {\n\t\t\t\tconst proxy = proxyNodes.get(msg.s);\n\t\t\t\tif (proxy) proxy.down([[ERROR, deserializeError(msg.err)]]);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Lifecycle signal from main\n\t\t\tcase \"s\": {\n\t\t\t\tconst sig = nameToSignal(msg.sig);\n\t\t\t\tif (!sig) break;\n\n\t\t\t\tif (sig === TEARDOWN && msg.s === \"*\") {\n\t\t\t\t\tdestroy();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst targets: Node<any>[] =\n\t\t\t\t\tmsg.s === \"*\"\n\t\t\t\t\t\t? [...proxyNodes.values()]\n\t\t\t\t\t\t: proxyNodes.has(msg.s)\n\t\t\t\t\t\t\t? [proxyNodes.get(msg.s)!]\n\t\t\t\t\t\t\t: [];\n\n\t\t\t\tfor (const proxy of targets) {\n\t\t\t\t\tproxy.down((msg.d === undefined ? [[sig]] : [[sig, msg.d]]) as Messages);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\t// -- Send ready message ----------------------------------------------------\n\t// `.cache` is a documented transport-boundary snapshot read here — not a\n\t// reactive access (§5.10 boundary).\n\tconst readyValues: Record<string, unknown> = {};\n\tfor (const [name, n] of exposeEntries) {\n\t\treadyValues[name] = n.cache;\n\t}\n\ttransport.post({ t: \"r\", stores: readyValues } satisfies BridgeMessage);\n\n\t// -- Destroy ---------------------------------------------------------------\n\tfunction destroy() {\n\t\tif (destroyed) return;\n\t\tdestroyed = true;\n\n\t\t// Cleanup: unsub effect first (stops sending), then expose listeners,\n\t\t// then unlisten on transport\n\t\tif (effectUnsub) effectUnsub();\n\t\tfor (const unsub of exposeUnsubs) unsub();\n\t\texposeUnsubs.length = 0;\n\t\tunlisten();\n\t\ttransport.terminate?.();\n\n\t\tlastSeenImportVersions.clear();\n\t\tproxyNodes.clear();\n\t}\n\n\treturn { destroy };\n}\n"],"mappings":"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","names":["ERROR","TEARDOWN","ERROR","TEARDOWN","batch","DATA","defaultConfig","ERROR","node","TEARDOWN","isTransport","node","DATA","defaultConfig","ERROR","batch","TEARDOWN"]}
|