@demlik/tea 0.12.0 → 0.14.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 +11 -9
- package/dist/agent/index.d.ts +638 -45
- package/dist/agent/index.js +9 -19
- package/dist/{chunk-25LBDCBC.js → chunk-6IQPODUF.js} +2 -2
- package/dist/{chunk-25LBDCBC.js.map → chunk-6IQPODUF.js.map} +1 -1
- package/dist/chunk-AQ6ZIMEA.js +421 -0
- package/dist/chunk-AQ6ZIMEA.js.map +1 -0
- package/dist/{chunk-MUUROGIH.js → chunk-BLJ2JQSH.js} +62 -12
- package/dist/chunk-BLJ2JQSH.js.map +1 -0
- package/dist/{chunk-7SVIRMC6.js → chunk-F2US5BW6.js} +25 -5
- package/dist/chunk-F2US5BW6.js.map +1 -0
- package/dist/{batch-window/index.js → chunk-F7FMAWLA.js} +4 -8
- package/dist/chunk-F7FMAWLA.js.map +1 -0
- package/dist/{chunk-7V4EVLZA.js → chunk-HUKZQX6U.js} +20 -16
- package/dist/chunk-HUKZQX6U.js.map +1 -0
- package/dist/{chunk-EWJP3YYP.js → chunk-HWVW4AXC.js} +3 -3
- package/dist/chunk-HWVW4AXC.js.map +1 -0
- package/dist/{chunk-WLGO64WC.js → chunk-HYDWG35Q.js} +23 -6
- package/dist/chunk-HYDWG35Q.js.map +1 -0
- package/dist/{chunk-I5OV65MS.js → chunk-I5MQMJDW.js} +57 -7
- package/dist/chunk-I5MQMJDW.js.map +1 -0
- package/dist/{chunk-J6527VRQ.js → chunk-LFZUK6J2.js} +3 -3
- package/dist/chunk-LFZUK6J2.js.map +1 -0
- package/dist/{chunk-ZVJZ72HY.js → chunk-LYLTKJWM.js} +25 -11
- package/dist/chunk-LYLTKJWM.js.map +1 -0
- package/dist/{chunk-D736QUGF.js → chunk-MYXFNWAJ.js} +4 -5
- package/dist/chunk-MYXFNWAJ.js.map +1 -0
- package/dist/{chunk-K575PT4S.js → chunk-PR6TB3BL.js} +15 -4
- package/dist/chunk-PR6TB3BL.js.map +1 -0
- package/dist/chunk-RQULHGYH.js +1804 -0
- package/dist/chunk-RQULHGYH.js.map +1 -0
- package/dist/{chunk-FV3Z5MBE.js → chunk-TXN2KFHF.js} +14 -4
- package/dist/chunk-TXN2KFHF.js.map +1 -0
- package/dist/{chunk-Q2UM7BXU.js → chunk-VBDU4JL6.js} +2 -2
- package/dist/chunk-VBDU4JL6.js.map +1 -0
- package/dist/chunk-Z2L3LSNV.js +1470 -0
- package/dist/chunk-Z2L3LSNV.js.map +1 -0
- package/dist/core-CTzMJ82M.d.ts +562 -0
- package/dist/devtools/index.d.ts +2 -2
- package/dist/devtools/index.js +207 -2
- package/dist/devtools/index.js.map +1 -1
- package/dist/do/index.d.ts +48 -31
- package/dist/do/index.js +36 -25
- package/dist/do/index.js.map +1 -1
- package/dist/{durable-effects-D8SqU_if.d.ts → durable-effects-B0-qGQDy.d.ts} +2 -2
- package/dist/extension/index.d.ts +301 -3
- package/dist/extension/index.js +596 -5
- package/dist/extension/index.js.map +1 -1
- package/dist/flow/index.d.ts +1295 -0
- package/dist/flow/index.js +732 -0
- package/dist/flow/index.js.map +1 -0
- package/dist/idempotency/index.d.ts +90 -116
- package/dist/idempotency/index.js +4 -1
- package/dist/{batch-window/index.d.ts → index-4vZzljCD.d.ts} +7 -11
- package/dist/{fan-out/index.d.ts → index-6A7dB8f6.d.ts} +7 -8
- package/dist/index-B5BZ-_cT.d.ts +616 -0
- package/dist/index-Bc40JWVl.d.ts +131 -0
- package/dist/{debounce/index.d.ts → index-DHSUmQTR.d.ts} +7 -7
- package/dist/index-DJWIER_3.d.ts +69 -0
- package/dist/{snapshot/index.d.ts → index-DMCeMPMJ.d.ts} +15 -77
- package/dist/{monitored-run/index.d.ts → index-NjrT3fL2.d.ts} +37 -12
- package/dist/{recorder/index.d.ts → index-TvRb1KVf.d.ts} +4 -6
- package/dist/{deadline/index.d.ts → index-q0hXFeZ0.d.ts} +155 -8
- package/dist/index.d.ts +719 -6
- package/dist/index.js +1 -2
- package/dist/jev/index.d.ts +634 -0
- package/dist/jev/index.js +433 -0
- package/dist/jev/index.js.map +1 -0
- package/dist/machine-CdIcN2Xm.d.ts +1773 -0
- package/dist/machine-viz/index.d.ts +2 -1
- package/dist/machine-viz/index.js +12 -5
- package/dist/machine-viz/index.js.map +1 -1
- package/dist/mem/index.d.ts +19 -3
- package/dist/mem/index.js +22 -2
- package/dist/mem/index.js.map +1 -1
- package/dist/node/index.d.ts +130 -4
- package/dist/node/index.js +222 -10
- package/dist/node/index.js.map +1 -1
- package/dist/{paginator → paginate}/index.d.ts +151 -6
- package/dist/paginate/index.js +7 -0
- package/dist/parity/index.d.ts +5 -10
- package/dist/parity/index.js +4 -7
- package/dist/parity/index.js.map +1 -1
- package/dist/pbt/index.d.ts +248 -5
- package/dist/pbt/index.js +124 -5
- package/dist/pbt/index.js.map +1 -1
- package/dist/{trace-replay → persistence}/index.d.ts +7 -4
- package/dist/persistence/index.js +6 -0
- package/dist/react/index.d.ts +4 -3
- package/dist/react/index.js +1 -2
- package/dist/react/index.js.map +1 -1
- package/dist/resilience/index.d.ts +743 -0
- package/dist/resilience/index.js +657 -0
- package/dist/resilience/index.js.map +1 -0
- package/dist/retry-backoff/index.d.ts +3 -2
- package/dist/retry-backoff/index.js +1 -1
- package/dist/runtime-types-LWDoi943.d.ts +998 -0
- package/dist/testing/index.d.ts +3 -2
- package/dist/testing/index.js +1 -2
- package/dist/testing/index.js.map +1 -1
- package/dist/{throttled-input → timing}/index.d.ts +144 -12
- package/dist/{throttled-input → timing}/index.js +57 -12
- package/dist/timing/index.js.map +1 -0
- package/dist/{types-D7u9DkH7.d.ts → types-DP3f5NIl.d.ts} +1 -1
- package/dist/work-queue/index.d.ts +131 -54
- package/dist/work-queue/index.js +3 -2
- package/dist/work-queue/index.js.map +1 -1
- package/package.json +50 -216
- package/dist/authed-call/index.d.ts +0 -119
- package/dist/authed-call/index.js +0 -134
- package/dist/authed-call/index.js.map +0 -1
- package/dist/await-terminal/index.d.ts +0 -100
- package/dist/await-terminal/index.js +0 -76
- package/dist/await-terminal/index.js.map +0 -1
- package/dist/batch-window/index.js.map +0 -1
- package/dist/cache/index.d.ts +0 -151
- package/dist/cache/index.js +0 -8
- package/dist/chart/index.d.ts +0 -217
- package/dist/chart/index.js +0 -16
- package/dist/chart/index.js.map +0 -1
- package/dist/chart/inspect/index.d.ts +0 -85
- package/dist/chart/inspect/index.js +0 -5
- package/dist/chart/inspect/react.d.ts +0 -112
- package/dist/chart/inspect/react.js +0 -11
- package/dist/chart/inspect/react.js.map +0 -1
- package/dist/chart/inspect/styles.css +0 -286
- package/dist/chart/lane/index.d.ts +0 -361
- package/dist/chart/lane/index.js +0 -9
- package/dist/chart/lane/index.js.map +0 -1
- package/dist/chart/lane/react.d.ts +0 -83
- package/dist/chart/lane/react.js +0 -559
- package/dist/chart/lane/react.js.map +0 -1
- package/dist/chart/lane/server.d.ts +0 -148
- package/dist/chart/lane/server.js +0 -209
- package/dist/chart/lane/server.js.map +0 -1
- package/dist/chart/lane/styles.css +0 -498
- package/dist/chart/lane/viewer/assets/abnfDiagram-N423BO3Z-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/architectureDiagram-T3A2C74G-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/blockDiagram-VBNYF7ZC-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/c4Diagram-5PPSVZJV-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/chunk-2GRJ4B5K-HdDf8SI3.js +0 -1
- package/dist/chart/lane/viewer/assets/chunk-5RXB4S5H-CcNtpUd7.js +0 -231
- package/dist/chart/lane/viewer/assets/chunk-5VM5RSS4-BP4fRS_5.js +0 -15
- package/dist/chart/lane/viewer/assets/chunk-KBJHAD2P-DZOw7xU6.js +0 -1
- package/dist/chart/lane/viewer/assets/chunk-NSK5VX7P-CBCyTZMs.js +0 -128
- package/dist/chart/lane/viewer/assets/classDiagram-JCYQIIEL-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/classDiagram-v2-OCEON4UE-D4uAiFr8.js +0 -206
- package/dist/chart/lane/viewer/assets/cose-bilkent-JH36ORCC-DOwCrGXH.js +0 -1
- package/dist/chart/lane/viewer/assets/cynefinDiagram-MW4NZA55-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/dagre-K_PewWfS.js +0 -1
- package/dist/chart/lane/viewer/assets/dagre-VZM6K2ZE-831qZcA8.js +0 -4
- package/dist/chart/lane/viewer/assets/diagram-7IWD3JNH-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/diagram-B4RE2ZJO-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/diagram-LBJQPF4R-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/diagram-Q27KOJAE-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/diagram-UB23O5K3-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/ebnfDiagram-BXEA7PRR-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/erDiagram-JOGREHBK-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/flowDiagram-UKHOOZJN-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/ganttDiagram-PKOTCBZU-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/gitGraphDiagram-DS77QQ5N-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/index-9SkH5NA3.css +0 -1
- package/dist/chart/lane/viewer/assets/index-Bgt4sXpW.js +0 -195
- package/dist/chart/lane/viewer/assets/infoDiagram-6WML65LV-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/ishikawaDiagram-WSZJBQD7-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/journeyDiagram-NVQOT4AX-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/kanban-definition-27J2QSJJ-G7PaPzy-.js +0 -89
- package/dist/chart/lane/viewer/assets/katex-DOwCrGXH.js +0 -1
- package/dist/chart/lane/viewer/assets/mindmap-definition-FAOFIHXS-CGj9nrVk.js +0 -96
- package/dist/chart/lane/viewer/assets/path-fybaL0A-.js +0 -1
- package/dist/chart/lane/viewer/assets/pegDiagram-VL7TDLO6-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/pieDiagram-7S7Q4E2Y-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/quadrantDiagram-CIZ2JOQS-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/railroadDiagram-AXF67PYL-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/requirementDiagram-LRYGKXZP-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/sankeyDiagram-W5VNT64P-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/sequenceDiagram-SI44F4Z6-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/stateDiagram-OKZ733FA-B_88AzBS.js +0 -1
- package/dist/chart/lane/viewer/assets/stateDiagram-v2-UEYNNEHI-CR5gcgq6.js +0 -1
- package/dist/chart/lane/viewer/assets/swimlanes-SLNWSIFB-B4xK-rwg.js +0 -1
- package/dist/chart/lane/viewer/assets/swimlanesDiagram-ULZ7WXOC-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/timeline-definition-Z64GVDOM-CCv52MfY.js +0 -120
- package/dist/chart/lane/viewer/assets/vennDiagram-T6HMQDX7-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/wardleyDiagram-T6FBY63Y-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/assets/xychartDiagram-ELKLHX3M-C729LI31.js +0 -1
- package/dist/chart/lane/viewer/index.html +0 -15
- package/dist/chart/report/index.d.ts +0 -116
- package/dist/chart/report/index.js +0 -32
- package/dist/chart/report/index.js.map +0 -1
- package/dist/chunk-2YFLOCWX.js +0 -15
- package/dist/chunk-2YFLOCWX.js.map +0 -1
- package/dist/chunk-3JU6657S.js +0 -372
- package/dist/chunk-3JU6657S.js.map +0 -1
- package/dist/chunk-4KTWLPL5.js +0 -33
- package/dist/chunk-4KTWLPL5.js.map +0 -1
- package/dist/chunk-5EHLEUTL.js +0 -686
- package/dist/chunk-5EHLEUTL.js.map +0 -1
- package/dist/chunk-5KJKJOFC.js +0 -758
- package/dist/chunk-5KJKJOFC.js.map +0 -1
- package/dist/chunk-7SVIRMC6.js.map +0 -1
- package/dist/chunk-7V4EVLZA.js.map +0 -1
- package/dist/chunk-A56OR5RF.js +0 -184
- package/dist/chunk-A56OR5RF.js.map +0 -1
- package/dist/chunk-AZZLE7XR.js +0 -62
- package/dist/chunk-AZZLE7XR.js.map +0 -1
- package/dist/chunk-B5VXOFMZ.js +0 -266
- package/dist/chunk-B5VXOFMZ.js.map +0 -1
- package/dist/chunk-BYQUGDD3.js +0 -16
- package/dist/chunk-BYQUGDD3.js.map +0 -1
- package/dist/chunk-D736QUGF.js.map +0 -1
- package/dist/chunk-E6GEDSF4.js +0 -307
- package/dist/chunk-E6GEDSF4.js.map +0 -1
- package/dist/chunk-EUF7XOEE.js +0 -223
- package/dist/chunk-EUF7XOEE.js.map +0 -1
- package/dist/chunk-EWJP3YYP.js.map +0 -1
- package/dist/chunk-FV3Z5MBE.js.map +0 -1
- package/dist/chunk-HCEVHFJ7.js +0 -54
- package/dist/chunk-HCEVHFJ7.js.map +0 -1
- package/dist/chunk-I5OV65MS.js.map +0 -1
- package/dist/chunk-J6527VRQ.js.map +0 -1
- package/dist/chunk-JELSZN25.js +0 -47
- package/dist/chunk-JELSZN25.js.map +0 -1
- package/dist/chunk-JER5O7PQ.js +0 -416
- package/dist/chunk-JER5O7PQ.js.map +0 -1
- package/dist/chunk-JGVL3WPL.js +0 -26
- package/dist/chunk-JGVL3WPL.js.map +0 -1
- package/dist/chunk-JP5D6GSL.js +0 -71
- package/dist/chunk-JP5D6GSL.js.map +0 -1
- package/dist/chunk-K575PT4S.js.map +0 -1
- package/dist/chunk-MU6MCIAC.js +0 -15
- package/dist/chunk-MU6MCIAC.js.map +0 -1
- package/dist/chunk-MUUROGIH.js.map +0 -1
- package/dist/chunk-ND3DH6KM.js +0 -88
- package/dist/chunk-ND3DH6KM.js.map +0 -1
- package/dist/chunk-Q2UM7BXU.js.map +0 -1
- package/dist/chunk-S2EGRPCM.js +0 -47
- package/dist/chunk-S2EGRPCM.js.map +0 -1
- package/dist/chunk-SINXE47Y.js +0 -55
- package/dist/chunk-SINXE47Y.js.map +0 -1
- package/dist/chunk-SUST46KO.js +0 -53
- package/dist/chunk-SUST46KO.js.map +0 -1
- package/dist/chunk-TP5UPGLY.js +0 -61
- package/dist/chunk-TP5UPGLY.js.map +0 -1
- package/dist/chunk-UF4MZSLT.js +0 -53
- package/dist/chunk-UF4MZSLT.js.map +0 -1
- package/dist/chunk-UOC2PL46.js +0 -13
- package/dist/chunk-UOC2PL46.js.map +0 -1
- package/dist/chunk-WLGO64WC.js.map +0 -1
- package/dist/chunk-WRAA7GVZ.js +0 -209
- package/dist/chunk-WRAA7GVZ.js.map +0 -1
- package/dist/chunk-ZCL7SCBK.js +0 -685
- package/dist/chunk-ZCL7SCBK.js.map +0 -1
- package/dist/chunk-ZD6PNZBK.js +0 -457
- package/dist/chunk-ZD6PNZBK.js.map +0 -1
- package/dist/chunk-ZF6WDK2D.js +0 -519
- package/dist/chunk-ZF6WDK2D.js.map +0 -1
- package/dist/chunk-ZJ5AOYBH.js +0 -8
- package/dist/chunk-ZJ5AOYBH.js.map +0 -1
- package/dist/chunk-ZVJZ72HY.js.map +0 -1
- package/dist/circuit-breaker/index.d.ts +0 -197
- package/dist/circuit-breaker/index.js +0 -3
- package/dist/circuit-breaker/index.js.map +0 -1
- package/dist/core-Bjc0bS8j.d.ts +0 -326
- package/dist/deadline/index.js +0 -6
- package/dist/deadline/index.js.map +0 -1
- package/dist/debounce/index.js +0 -3
- package/dist/debounce/index.js.map +0 -1
- package/dist/extension/react.d.ts +0 -121
- package/dist/extension/react.js +0 -75
- package/dist/extension/react.js.map +0 -1
- package/dist/extension/subs/index.d.ts +0 -44
- package/dist/extension/subs/index.js +0 -80
- package/dist/extension/subs/index.js.map +0 -1
- package/dist/extension/test-utils.d.ts +0 -128
- package/dist/extension/test-utils.js +0 -277
- package/dist/extension/test-utils.js.map +0 -1
- package/dist/fan-out/index.js +0 -5
- package/dist/fan-out/index.js.map +0 -1
- package/dist/fold-Blbhru48.d.ts +0 -435
- package/dist/graph-CcjWZVrd.d.ts +0 -923
- package/dist/idempotency/adapter.d.ts +0 -62
- package/dist/idempotency/adapter.js +0 -4
- package/dist/idempotency/adapter.js.map +0 -1
- package/dist/idempotent-intake/index.d.ts +0 -187
- package/dist/idempotent-intake/index.js +0 -7
- package/dist/idempotent-intake/index.js.map +0 -1
- package/dist/llm-call/index.d.ts +0 -310
- package/dist/llm-call/index.js +0 -16
- package/dist/llm-call/index.js.map +0 -1
- package/dist/machine-0OmPvsy_.d.ts +0 -804
- package/dist/monitored-run/index.js +0 -10
- package/dist/monitored-run/index.js.map +0 -1
- package/dist/paginated-walk/index.d.ts +0 -234
- package/dist/paginated-walk/index.js +0 -16
- package/dist/paginated-walk/index.js.map +0 -1
- package/dist/paginator/index.js +0 -3
- package/dist/paginator/index.js.map +0 -1
- package/dist/pbt/arbitraries/index.d.ts +0 -135
- package/dist/pbt/arbitraries/index.js +0 -3
- package/dist/pbt/arbitraries/index.js.map +0 -1
- package/dist/pbt/runners/index.d.ts +0 -117
- package/dist/pbt/runners/index.js +0 -5
- package/dist/pbt/runners/index.js.map +0 -1
- package/dist/poller/index.d.ts +0 -351
- package/dist/poller/index.js +0 -115
- package/dist/poller/index.js.map +0 -1
- package/dist/prediction/index.d.ts +0 -130
- package/dist/prediction/index.js +0 -4
- package/dist/prediction/index.js.map +0 -1
- package/dist/protocol-B5YmJr0d.d.ts +0 -45
- package/dist/pure/index.d.ts +0 -2
- package/dist/pure/index.js +0 -4
- package/dist/pure/index.js.map +0 -1
- package/dist/rate-limit/index.d.ts +0 -115
- package/dist/rate-limit/index.js +0 -3
- package/dist/rate-limit/index.js.map +0 -1
- package/dist/reconciler/index.d.ts +0 -192
- package/dist/reconciler/index.js +0 -164
- package/dist/reconciler/index.js.map +0 -1
- package/dist/recorder/index.js +0 -3
- package/dist/recorder/index.js.map +0 -1
- package/dist/reducer-BqyoVyBG.d.ts +0 -447
- package/dist/resilient-call/index.d.ts +0 -319
- package/dist/resilient-call/index.js +0 -14
- package/dist/resilient-call/index.js.map +0 -1
- package/dist/retry-to-success/index.d.ts +0 -109
- package/dist/retry-to-success/index.js +0 -37
- package/dist/retry-to-success/index.js.map +0 -1
- package/dist/run-BVeqJDBF.d.ts +0 -713
- package/dist/runtime-types-Bxc637bp.d.ts +0 -502
- package/dist/saga/index.d.ts +0 -240
- package/dist/saga/index.js +0 -150
- package/dist/saga/index.js.map +0 -1
- package/dist/samples-DCt6nF8H.d.ts +0 -59
- package/dist/snapshot/index.js +0 -5
- package/dist/snapshot/index.js.map +0 -1
- package/dist/subs/index.d.ts +0 -471
- package/dist/subs/index.js +0 -7
- package/dist/subs/index.js.map +0 -1
- package/dist/throttle/index.d.ts +0 -134
- package/dist/throttle/index.js +0 -3
- package/dist/throttle/index.js.map +0 -1
- package/dist/throttled-input/index.js.map +0 -1
- package/dist/token-refresh/index.d.ts +0 -215
- package/dist/token-refresh/index.js +0 -6
- package/dist/token-refresh/index.js.map +0 -1
- package/dist/trace-replay/index.js +0 -6
- package/dist/trace-replay/index.js.map +0 -1
- package/dist/with-deadline/index.d.ts +0 -196
- package/dist/with-deadline/index.js +0 -111
- package/dist/with-deadline/index.js.map +0 -1
- package/dist/with-resilience/index.d.ts +0 -224
- package/dist/with-resilience/index.js +0 -240
- package/dist/with-resilience/index.js.map +0 -1
- package/dist/with-telemetry/index.d.ts +0 -149
- package/dist/with-telemetry/index.js +0 -70
- package/dist/with-telemetry/index.js.map +0 -1
- package/dist/work-queue/adapter.d.ts +0 -83
- package/dist/work-queue/adapter.js +0 -4
- package/dist/work-queue/adapter.js.map +0 -1
- package/dist/work-queue/ops.d.ts +0 -70
- package/dist/work-queue/ops.js +0 -3
- package/dist/work-queue/ops.js.map +0 -1
- package/dist/workflow/index.d.ts +0 -484
- package/dist/workflow/index.js +0 -244
- package/dist/workflow/index.js.map +0 -1
- /package/dist/{cache → paginate}/index.js.map +0 -0
- /package/dist/{chart/inspect → persistence}/index.js.map +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* internal/idempotency/idempotency — dedupe-by-key + last-result cache as pure state + ops.
|
|
3
|
+
*
|
|
4
|
+
* Same shape as `../../work-queue`'s `ops.ts` and `../../resilience/rate-limit`:
|
|
5
|
+
* a state type plus pure transition functions. Host-agnostic by construction —
|
|
6
|
+
* no `Date.now()`, no timers, no I/O. The caller injects the clock (`nowMs`)
|
|
7
|
+
* and wires the result into its own reducer / interpret. This keeps the store
|
|
8
|
+
* inside TEA's invariant 2 (transitions are pure: same inputs → same outputs,
|
|
9
|
+
* no `Date.now`) so a consumer can fold it through `update` and exercise it
|
|
10
|
+
* with `replay` / the pbt fold without a fake clock.
|
|
11
|
+
*
|
|
12
|
+
* Every op returns a NEW store value and never mutates its input (invariant 1 —
|
|
13
|
+
* state is a value, not a place). `seen` / `recall` are read-shaped predicates;
|
|
14
|
+
* `remember` / `evictExpired` return a new store.
|
|
15
|
+
*
|
|
16
|
+
* The use case: a webhook receiver, a retried queue message, or a repeated user
|
|
17
|
+
* action arrives carrying an idempotency key. `seen(store, key, now)` answers
|
|
18
|
+
* "did I already process this?"; `recall(store, key, now)` returns the cached
|
|
19
|
+
* result so the duplicate request gets the SAME response the original produced
|
|
20
|
+
* rather than re-running the side effect. `remember(store, key, value, now)`
|
|
21
|
+
* records the key + its result after the first run.
|
|
22
|
+
*
|
|
23
|
+
* Two eviction policies keep the store bounded, both injected at `initStore`:
|
|
24
|
+
*
|
|
25
|
+
* - **`ttlMs`** — an entry expires `ttlMs` after the `atMs` it was remembered
|
|
26
|
+
* at. `seen` / `recall` treat an expired entry as absent; `evictExpired`
|
|
27
|
+
* (and every `remember`) physically drops it. Without a TTL, entries live
|
|
28
|
+
* until evicted by capacity. The cutoff is half-open: an entry exactly
|
|
29
|
+
* `ttlMs` old is expired (`age >= ttlMs` drops it), matching `rate-limit`'s
|
|
30
|
+
* window edge — a key remembered at `t` no longer counts at `t + ttlMs`.
|
|
31
|
+
* - **`capacity`** — at most `capacity` entries are retained. When a
|
|
32
|
+
* `remember` would push the count past `capacity` (after expiry eviction),
|
|
33
|
+
* the OLDEST entries by insertion `order` are dropped until the count fits.
|
|
34
|
+
* Without a capacity, the store grows unbounded (TTL alone bounds it).
|
|
35
|
+
*
|
|
36
|
+
* `order` is the insertion-order index that capacity eviction reads — the keys
|
|
37
|
+
* oldest-first. It is the store's own LRU-by-insertion ledger, kept in lockstep
|
|
38
|
+
* with `entries` so `entries` never needs to be sorted to find the oldest.
|
|
39
|
+
*
|
|
40
|
+
* **Overwrite semantics** (decided + pinned by tests): re-`remember`ing an
|
|
41
|
+
* existing key is an UPDATE, not a no-op. It (1) overwrites `value`, (2)
|
|
42
|
+
* refreshes `atMs` to the new `nowMs` — so the TTL clock restarts and a
|
|
43
|
+
* frequently-seen key never expires — and (3) moves the key to the NEWEST
|
|
44
|
+
* position in `order` — so capacity eviction treats a re-remembered key as
|
|
45
|
+
* fresh, not as a stale candidate for eviction. This makes `remember` behave
|
|
46
|
+
* like "touch": a key actively being re-seen is kept alive on both the TTL and
|
|
47
|
+
* capacity axes.
|
|
48
|
+
*
|
|
49
|
+
* Internal since #47 — not published on any subpath; reached from inside the
|
|
50
|
+
* package as `internal/idempotency/idempotency`. Same one-shape-per-package rule
|
|
51
|
+
* as `work-queue`, `rate-limit`, and `do`.
|
|
52
|
+
*/
|
|
53
|
+
/**
|
|
54
|
+
* A cached entry: the result `value` the original request produced and the
|
|
55
|
+
* clock reading `atMs` it was remembered at. `atMs` is the TTL anchor — expiry
|
|
56
|
+
* is measured from here, and a re-`remember` refreshes it. Both fields are
|
|
57
|
+
* plain data so the whole store is trivially JSON-serializable into a
|
|
58
|
+
* consumer's `Store<S>`.
|
|
59
|
+
*/
|
|
60
|
+
interface IdempotencyEntry<V> {
|
|
61
|
+
readonly value: V;
|
|
62
|
+
readonly atMs: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The dedupe store: a map of `key → entry`, an insertion-`order` ledger
|
|
66
|
+
* (oldest-first) that capacity eviction reads, and the two optional bounds.
|
|
67
|
+
*
|
|
68
|
+
* `entries` and `order` are kept in lockstep — every key in `order` has an
|
|
69
|
+
* entry and vice versa. `capacity` / `ttlMs` are carried on the store (not
|
|
70
|
+
* passed per-op) so a single value fully describes the policy; a consumer
|
|
71
|
+
* persists the store and rehydrates the same bounds without re-deriving them.
|
|
72
|
+
*/
|
|
73
|
+
interface IdempotencyStore<V> {
|
|
74
|
+
readonly entries: Readonly<Record<string, IdempotencyEntry<V>>>;
|
|
75
|
+
readonly order: readonly string[];
|
|
76
|
+
readonly capacity?: number;
|
|
77
|
+
readonly ttlMs?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create an empty store. `capacity` and `ttlMs` are both optional — omit both
|
|
81
|
+
* for an unbounded cache, supply either or both to bound by count, age, or
|
|
82
|
+
* both. Stored on the returned value so every later op reads the policy off
|
|
83
|
+
* the store rather than from a re-passed argument.
|
|
84
|
+
*/
|
|
85
|
+
declare function initStore<V>(opts?: {
|
|
86
|
+
capacity?: number;
|
|
87
|
+
ttlMs?: number;
|
|
88
|
+
}): IdempotencyStore<V>;
|
|
89
|
+
/**
|
|
90
|
+
* True iff `key` is present AND not expired at `nowMs`. This is the dedupe
|
|
91
|
+
* predicate: a webhook / retried message / repeated action whose key returns
|
|
92
|
+
* `true` has already been processed and should be short-circuited (paired with
|
|
93
|
+
* `recall` to return the original result). PURE — reads only, never mutates.
|
|
94
|
+
*/
|
|
95
|
+
declare function seen<V>(store: IdempotencyStore<V>, key: string, nowMs: number): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* The cached `value` for `key` if present and unexpired at `nowMs`, else
|
|
98
|
+
* `undefined`. Use after `seen` returns `true` to replay the original result to
|
|
99
|
+
* a duplicate request. An expired entry reads as absent (returns `undefined`)
|
|
100
|
+
* even though it is physically still in `entries` until the next `remember` /
|
|
101
|
+
* `evictExpired` drops it. PURE — reads only, never mutates.
|
|
102
|
+
*/
|
|
103
|
+
declare function recall<V>(store: IdempotencyStore<V>, key: string, nowMs: number): V | undefined;
|
|
104
|
+
/**
|
|
105
|
+
* Drop every entry expired at `nowMs` (older than `ttlMs`). Returns a NEW store
|
|
106
|
+
* with the survivors; `order` is rebuilt to drop the same keys, preserving the
|
|
107
|
+
* relative insertion order of the survivors. A no-TTL store returns an
|
|
108
|
+
* equivalent store (nothing ages out). PURE — the input store is never mutated.
|
|
109
|
+
*/
|
|
110
|
+
declare function evictExpired<V>(store: IdempotencyStore<V>, nowMs: number): IdempotencyStore<V>;
|
|
111
|
+
/**
|
|
112
|
+
* Record `key → value` at `nowMs`, then enforce both bounds. PURE — returns a
|
|
113
|
+
* new store; the input is untouched.
|
|
114
|
+
*
|
|
115
|
+
* Order of operations (each step matters):
|
|
116
|
+
* 1. **Expiry eviction** — drop everything older than `ttlMs` first, so an
|
|
117
|
+
* expired key never occupies a capacity slot the new entry could take, and
|
|
118
|
+
* a stale entry under the same `key` is cleared before the overwrite.
|
|
119
|
+
* 2. **Insert / overwrite** — write the new entry. If `key` already exists,
|
|
120
|
+
* this is an UPDATE: `value` is overwritten, `atMs` is refreshed to
|
|
121
|
+
* `nowMs` (restarting the TTL clock), and the key is moved to the NEWEST
|
|
122
|
+
* position in `order` (removed from wherever it sat, appended at the end).
|
|
123
|
+
* See the module-level "Overwrite semantics" note.
|
|
124
|
+
* 3. **Capacity eviction** — if the entry count now exceeds `capacity`, drop
|
|
125
|
+
* the OLDEST keys by `order` until the count fits. Because step 2 moves a
|
|
126
|
+
* re-remembered key to the newest position, an actively re-seen key is
|
|
127
|
+
* never the eviction victim.
|
|
128
|
+
*/
|
|
129
|
+
declare function remember<V>(store: IdempotencyStore<V>, key: string, value: V, nowMs: number): IdempotencyStore<V>;
|
|
130
|
+
|
|
131
|
+
export { type IdempotencyStore as I, type IdempotencyEntry as a, remember as b, evictExpired as e, initStore as i, recall as r, seen as s };
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* internal/timing/debounce — a timer-based call transformer that coalesces a burst
|
|
3
3
|
* of calls into a single fire.
|
|
4
4
|
*
|
|
5
|
-
* Sibling of
|
|
5
|
+
* Sibling of `../throttle` — the two share a SYMMETRIC surface
|
|
6
6
|
* (`Debounced<A>` / `Throttled<A>`, both callable + `.cancel()` + `.flush()`,
|
|
7
7
|
* both `{ leading?, trailing? }`) so they read as a pair. They are kept in
|
|
8
8
|
* separate files with NO cross-import: each is a self-contained timer, and the
|
|
9
9
|
* coalesce-vs-drop policies are different enough that sharing code would hide
|
|
10
10
|
* the distinction. Read one to understand the other; do not couple them.
|
|
11
11
|
*
|
|
12
|
-
* Layering with
|
|
12
|
+
* Layering with `../throttled-input`: `debounce` and `throttle` are
|
|
13
13
|
* the two host-boundary PRIMITIVES — two distinct algorithms (collapse-a-burst
|
|
14
14
|
* vs at-most-once-per-window) behind one signature shape. `throttled-input` is
|
|
15
15
|
* NOT a third primitive: it is a TEA machine composed OVER them that
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
* window.addEventListener("resize", onResized);
|
|
40
40
|
* // cleanup: onResized.cancel(); window.removeEventListener("resize", onResized);
|
|
41
41
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* `work-queue`.
|
|
42
|
+
* Internal since #47 — not published on any subpath; reached from inside the
|
|
43
|
+
* package as `internal/timing/debounce`. Same one-shape-per-package rule as
|
|
44
|
+
* `rate-limit`, `deadline`, and `work-queue`.
|
|
45
45
|
*
|
|
46
46
|
* Uses the universal `setTimeout` / `clearTimeout` timer idiom (same discipline
|
|
47
47
|
* as `subs/from-timeout.ts`): exactly one live handle at a time, every arm
|
|
@@ -117,4 +117,4 @@ declare function debounce<A extends readonly unknown[]>(fn: (...args: A) => void
|
|
|
117
117
|
trailing?: boolean;
|
|
118
118
|
}): Debounced<A>;
|
|
119
119
|
|
|
120
|
-
export { type Debounced, debounce };
|
|
120
|
+
export { type Debounced as D, debounce as d };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { S as Store } from './runtime-types-LWDoi943.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* internal/work-queue — substrate-agnostic work-queue lifecycle on `Store<S>`.
|
|
5
|
+
*
|
|
6
|
+
* Two public surfaces, one shape:
|
|
7
|
+
* - `createQueue(store)` (this file) is the in-process adapter — it binds the
|
|
8
|
+
* pure ops to an injected `Store` and runs `load → mutate → save`.
|
|
9
|
+
* - `internal/work-queue/ops` (`./ops`) is the BLESSED, importable surface
|
|
10
|
+
* of those same pure ops. L2 compositions that own their own Model slice
|
|
11
|
+
* (`monitored-run`, `idempotent-intake`, …) import the ops directly and
|
|
12
|
+
* delegate status flips to them instead of re-rolling the transitions.
|
|
13
|
+
* Both routes call the identical ops, so the lifecycle rules live in exactly
|
|
14
|
+
* one place. This mirrors `@demlik/tea/do`'s one-shape-per-package rule.
|
|
15
|
+
*
|
|
16
|
+
* The package is generic in the input payload `I` (audit-specific fields go
|
|
17
|
+
* here in the extension host). `output` is a free-form side-channel correlation
|
|
18
|
+
* token (a backend id, URL, trace id) — typed as `string` because that's its
|
|
19
|
+
* only honest type. Consumers that need structured per-item data persist it in
|
|
20
|
+
* their own store and put the foreign-key string in `output`.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
type QueueItemStatus = "pending" | "running" | "done" | "failed" | "cancelled";
|
|
24
|
+
/**
|
|
25
|
+
* A single queue entry. Every field is `readonly`: a persisted slice is
|
|
26
|
+
* immutable, so a transition returns a NEW item (the ops always spread —
|
|
27
|
+
* `{ ...item, status: … }`) rather than mutating in place. This type-enforces
|
|
28
|
+
* the durability invariant the consumers already honor by convention, and
|
|
29
|
+
* keeps a slice round-trippable through JSON unchanged across a reload.
|
|
30
|
+
*/
|
|
31
|
+
interface QueueItem<I> {
|
|
32
|
+
readonly id: string;
|
|
33
|
+
readonly status: QueueItemStatus;
|
|
34
|
+
readonly input: I;
|
|
35
|
+
readonly enqueuedAt: number;
|
|
36
|
+
readonly startedAt?: number;
|
|
37
|
+
readonly finishedAt?: number;
|
|
38
|
+
readonly output?: string;
|
|
39
|
+
readonly error?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Caller-facing enqueue payload. Just `I` today — kept named so future
|
|
43
|
+
* variants (priority, deferUntil, …) can grow without breaking callers.
|
|
44
|
+
*/
|
|
45
|
+
type EnqueueInput<I> = I;
|
|
46
|
+
/**
|
|
47
|
+
* Adapter that binds the pure ops to an injected `Store<QueueItem<I>[]>`.
|
|
48
|
+
*
|
|
49
|
+
* `load → mutate → save` is the only durability discipline this package
|
|
50
|
+
* imposes. The store decides what "save" means (chrome.storage, KV, DO
|
|
51
|
+
* storage, in-memory) — that decision belongs at the caller.
|
|
52
|
+
*
|
|
53
|
+
* Ops that don't change the queue (e.g. `markDone` on an unknown id) skip the
|
|
54
|
+
* save call so the underlying store doesn't observe a write churn.
|
|
55
|
+
*/
|
|
56
|
+
declare function createQueue<I>(store: Store<QueueItem<I>[]>): {
|
|
57
|
+
enqueue: (input: EnqueueInput<I>) => Promise<QueueItem<I>>;
|
|
58
|
+
claimNext: () => Promise<QueueItem<I> | null>;
|
|
59
|
+
markDone: (id: string) => Promise<void>;
|
|
60
|
+
markFailed: (id: string, error: string) => Promise<void>;
|
|
61
|
+
markCancelled: (id: string) => Promise<void>;
|
|
62
|
+
resetRunningToPending: () => Promise<void>;
|
|
63
|
+
removeItem: (id: string) => Promise<void>;
|
|
64
|
+
retryItem: (id: string) => Promise<void>;
|
|
65
|
+
bindOutput: (id: string, value: string) => Promise<void>;
|
|
66
|
+
list: () => Promise<QueueItem<I>[]>;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export { type EnqueueInput as E, type QueueItem as Q, type QueueItemStatus as a, createQueue as c };
|
|
@@ -1,74 +1,4 @@
|
|
|
1
|
-
import { C as Cmd, I as Interpret } from '
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @demlik/tea/snapshot — periodic state checkpoint to a host store (R2/KV-shaped).
|
|
5
|
-
*
|
|
6
|
-
* The problem it solves: a long-running machine (a multi-stage run, a paginated
|
|
7
|
-
* crawl, a saga) lives in TEA's in-memory `State` and is persisted as ONE blob
|
|
8
|
-
* by the substrate's `Store<S>` on every transition. That blob is fine for
|
|
9
|
-
* crash recovery of the *runtime* — but it is NOT a coarse, named checkpoint a
|
|
10
|
-
* human (or a separate recovery job) can point a restart at. `snapshot` adds
|
|
11
|
-
* the "every N units of progress, write a durable checkpoint to R2/KV"
|
|
12
|
-
* discipline on top, so a crashed long run restarts from the last checkpoint
|
|
13
|
-
* instead of from zero (the field-guide pain row).
|
|
14
|
-
*
|
|
15
|
-
* Shape: this is the same knob contract every L2 composition follows —
|
|
16
|
-
* `createSnapshot(config)` hands back a `{ init, <verbs>, handlers }` bundle you
|
|
17
|
-
* splice into your machine. The state it owns is a Model slice (durable +
|
|
18
|
-
* replayable, the two non-negotiables); the verbs are PURE decisions; the I/O
|
|
19
|
-
* (the actual `put` to the store) lives only in `handlers`.
|
|
20
|
-
*
|
|
21
|
-
* It is a LEAF module: it imports only the core substrate (`../index`, for
|
|
22
|
-
* `Cmd` / `Interpret`) and no sibling subpath. (It does NOT reuse
|
|
23
|
-
* `@demlik/tea/retry-backoff` — that is an even-leafier utility that depends on
|
|
24
|
-
* nothing at all, not even the core; the kinship here is "leaf with injected
|
|
25
|
-
* time", not a shared dependency.)
|
|
26
|
-
* Nothing here reads the clock or the RNG on its own behalf — time enters as an
|
|
27
|
-
* `at`/`now` parameter at the verb boundary and the store I/O is realized only
|
|
28
|
-
* when the runtime performs the emitted `Cmd`. That keeps every verb
|
|
29
|
-
* deterministic (invariant 2) and the checkpoint write a `Cmd` the runtime
|
|
30
|
-
* interprets (invariant 3).
|
|
31
|
-
*
|
|
32
|
-
* The Store port is deliberately ABSTRACT — `{ get, put }`, the lowest common
|
|
33
|
-
* shape of R2 and KV — so this module never imports `@cloudflare/workers-types`
|
|
34
|
-
* and can be checkpointed to anything (R2, KV, a DO sub-key, an in-memory map in
|
|
35
|
-
* tests). The host binds the concrete adapter at `handlers({ store })`.
|
|
36
|
-
*
|
|
37
|
-
* Typical wiring:
|
|
38
|
-
*
|
|
39
|
-
* const snap = createSnapshot<RunState>({ every: 25, key: "run/checkpoint" });
|
|
40
|
-
*
|
|
41
|
-
* // machine state:
|
|
42
|
-
* type State = { run: RunState; snapshot: SnapshotState };
|
|
43
|
-
* init: (loaded) => loaded ? [loaded, []] : [{ run: initRun(), snapshot: snap.init() }, []],
|
|
44
|
-
*
|
|
45
|
-
* // in `update`, on each progress Msg, fold the snapshot slice:
|
|
46
|
-
* progress: (s, msg) => {
|
|
47
|
-
* const run = advance(s.run, msg);
|
|
48
|
-
* const [snapshot, cmds] = snap.record(s.snapshot, run, msg.at);
|
|
49
|
-
* return [{ ...s, run, snapshot }, cmds];
|
|
50
|
-
* },
|
|
51
|
-
* // the write completed → durable ack folds back through update:
|
|
52
|
-
* snapshot_saved: (s, msg) => {
|
|
53
|
-
* const [snapshot, cmds] = snap.confirm(s.snapshot, msg);
|
|
54
|
-
* return [{ ...s, snapshot }, cmds];
|
|
55
|
-
* },
|
|
56
|
-
*
|
|
57
|
-
* // RECOVERY — the half that makes a checkpoint a restart point, not just a
|
|
58
|
-
* // backup. A `boot` Msg the host dispatches once after `run(...)` asks the
|
|
59
|
-
* // store for the durable checkpoint; the answer folds the recovered payload
|
|
60
|
-
* // back into the run slice:
|
|
61
|
-
* boot: (s) => snap.requestLoad(s), // emits snapshot_load Cmd
|
|
62
|
-
* snapshot_loaded: (s, msg) => {
|
|
63
|
-
* if (msg.payload === null) return [s, []]; // no checkpoint → keep fresh init
|
|
64
|
-
* const [snapshot, cmds] = snap.boot(s.snapshot);
|
|
65
|
-
* return [{ ...s, run: msg.payload, snapshot }, cmds];
|
|
66
|
-
* },
|
|
67
|
-
* snapshot_load_failed: (s) => [s, []], // errors are data — decide here
|
|
68
|
-
*
|
|
69
|
-
* // splice the I/O — both effect cells (write + load):
|
|
70
|
-
* interpret: { ...snap.handlers({ store: r2Adapter }) },
|
|
71
|
-
*/
|
|
1
|
+
import { a as CmdOf, b as CmdDef, C as Cmd, I as Interpret } from './core-CTzMJ82M.js';
|
|
72
2
|
|
|
73
3
|
/**
|
|
74
4
|
* The snapshot knob.
|
|
@@ -162,13 +92,20 @@ interface SnapshotPorts<V> {
|
|
|
162
92
|
* state, the cursor, whatever the machine wants restartable). The verb takes it
|
|
163
93
|
* as an argument so the snapshot slice never has to hold a copy of the
|
|
164
94
|
* machine's domain state.
|
|
95
|
+
*
|
|
96
|
+
* `Cmd.define`d (ADR 0014), minted per `V` by a factory the way
|
|
97
|
+
* `workflowActivityDef<A>()` is, since the payload type is the knob's own
|
|
98
|
+
* parameter. The handler answers through this module's OWN Msgs
|
|
99
|
+
* (`snapshot_saved` / `snapshot_failed`), never the minted `_ok` / `_err`,
|
|
100
|
+
* hence `ok: z.void()` and an empty `err` list.
|
|
165
101
|
*/
|
|
166
|
-
|
|
102
|
+
declare function snapshotWriteDef<V>(): CmdDef<"snapshot_write", {
|
|
167
103
|
readonly key: string;
|
|
168
104
|
readonly seq: number;
|
|
169
105
|
readonly at: number;
|
|
170
106
|
readonly payload: V;
|
|
171
|
-
}
|
|
107
|
+
}, void, never, unknown>;
|
|
108
|
+
type SnapshotWriteCmd<V> = CmdOf<ReturnType<typeof snapshotWriteDef<V>>>;
|
|
172
109
|
/**
|
|
173
110
|
* The Msg the write handler dispatches on a SUCCESSFUL `put`. Fold it back
|
|
174
111
|
* through `confirm(state, msg)` to advance `lastSavedSeq` / `lastSavedAt`. The
|
|
@@ -203,9 +140,10 @@ type SnapshotFailedMsg = {
|
|
|
203
140
|
* triggering Msg once on resume (a `boot` Msg, never `init`'s rehydrate branch —
|
|
204
141
|
* invariant 2), folds the recovered payload into its run slice, then continues.
|
|
205
142
|
*/
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}
|
|
143
|
+
declare const snapshotLoad: CmdDef<"snapshot_load", {
|
|
144
|
+
key: string;
|
|
145
|
+
}, void, never, unknown>;
|
|
146
|
+
type SnapshotLoadCmd = CmdOf<typeof snapshotLoad>;
|
|
209
147
|
/**
|
|
210
148
|
* The Msg the load handler dispatches when `store.get` RESOLVES. `payload` is
|
|
211
149
|
* the recovered checkpoint value, or `null` when the store has no checkpoint
|
|
@@ -331,4 +269,4 @@ interface SnapshotKnob<V> {
|
|
|
331
269
|
*/
|
|
332
270
|
declare function createSnapshot<V>(config: SnapshotConfig): SnapshotKnob<V>;
|
|
333
271
|
|
|
334
|
-
export { type
|
|
272
|
+
export { type SnapshotWriteCmd as S, type SnapshotState as a, type SnapshotStore as b, type SnapshotSavedMsg as c, type SnapshotFailedMsg as d, type SnapshotLoadedMsg as e, type SnapshotLoadFailedMsg as f, type SnapshotLoadCmd as g, type SnapshotConfig as h, type SnapshotKnob as i, type SnapshotPorts as j, createSnapshot as k, snapshotLoad as l, snapshotLoadFailed as m, snapshotLoaded as n, snapshotSaved as o, snapshotWriteDef as p, snapshotFailed as s };
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { QueueItem } from '../work-queue/index.js';
|
|
6
|
-
import '../types-D7u9DkH7.js';
|
|
7
|
-
import '../runtime-types-Bxc637bp.js';
|
|
8
|
-
import 'better-result';
|
|
1
|
+
import { I as Interpret, C as Cmd } from './core-CTzMJ82M.js';
|
|
2
|
+
import { S as SnapshotWriteCmd, a as SnapshotState, b as SnapshotStore, c as SnapshotSavedMsg, d as SnapshotFailedMsg, e as SnapshotLoadedMsg, f as SnapshotLoadFailedMsg, g as SnapshotLoadCmd } from './index-DMCeMPMJ.js';
|
|
3
|
+
import { D as DeadlineExceeded, a as DeadlineSub } from './index-q0hXFeZ0.js';
|
|
4
|
+
import { Q as QueueItem } from './index-DJWIER_3.js';
|
|
9
5
|
|
|
10
6
|
/**
|
|
11
|
-
*
|
|
7
|
+
* internal/flow/monitored-run — a long-running operation that is BOTH staged and
|
|
12
8
|
* watched: an ordered stage pipeline whose POSITION survives eviction, wrapped
|
|
13
9
|
* by a no-progress safety deadline and (optionally) a periodic durable
|
|
14
10
|
* checkpoint.
|
|
@@ -45,7 +41,7 @@ import 'better-result';
|
|
|
45
41
|
*
|
|
46
42
|
* ## Why the run lifecycle is INLINE (run-tracker not extracted)
|
|
47
43
|
*
|
|
48
|
-
* The phase union (`idle` / `running` / `stale` / `done` / `failed`, a
|
|
44
|
+
* The phase union (`idle` / `running` / `stale` / `done` / `failed` / `cancelled`, a
|
|
49
45
|
* discriminated union carrying only each phase's own data) and its bookkeeping
|
|
50
46
|
* (`runId`, `startedAt`, `lastProgressAt`, `progressSeq`) live directly on this
|
|
51
47
|
* slice rather than behind a `run-tracker` sub-knob.
|
|
@@ -202,10 +198,19 @@ interface RunCore<Stage> {
|
|
|
202
198
|
* - `failed` — terminal failure; the typed `failure` reason rides ONLY this
|
|
203
199
|
* arm, so it is present iff `phase === "failed"` BY CONSTRUCTION —
|
|
204
200
|
* there is no nullable side field to keep in sync.
|
|
201
|
+
* - `cancelled` — the consumer stopped the run from outside (`cancel`). Its own
|
|
202
|
+
* phase rather than a `RunFailure` reason, on the same argument
|
|
203
|
+
* that keeps `stale` a phase: a caller who asked for the stop did
|
|
204
|
+
* not suffer a failure, and every "did this fail?" reader would
|
|
205
|
+
* otherwise have to except one reason. Terminal, so it re-enters
|
|
206
|
+
* no verb and arms no watchdog.
|
|
205
207
|
*
|
|
206
208
|
* `runId` is the host-minted run identity, stamped at `start` (the machine never
|
|
207
209
|
* mints — see the audit seed's "run identity is host-minted"). It rides every
|
|
208
|
-
* started phase, but not `idle`.
|
|
210
|
+
* started phase, but not `idle`. `cancelled` is the one phase reachable from BOTH
|
|
211
|
+
* sides of that line, so its `runId` is `string | null`: `null` says the run was
|
|
212
|
+
* cancelled before it ever started and there was no identity to mint, which is a
|
|
213
|
+
* different fact from a cancelled live run and stays a different value.
|
|
209
214
|
*/
|
|
210
215
|
type MonitoredRunState<Stage> = (RunCore<Stage> & {
|
|
211
216
|
readonly phase: "idle";
|
|
@@ -222,7 +227,26 @@ type MonitoredRunState<Stage> = (RunCore<Stage> & {
|
|
|
222
227
|
readonly phase: "failed";
|
|
223
228
|
readonly runId: string;
|
|
224
229
|
readonly failure: RunFailure<Stage>;
|
|
230
|
+
}) | (RunCore<Stage> & {
|
|
231
|
+
readonly phase: "cancelled";
|
|
232
|
+
readonly runId: string | null;
|
|
233
|
+
readonly at: number;
|
|
225
234
|
});
|
|
235
|
+
/**
|
|
236
|
+
* The ENDED phases — a run that finished (`done`) or was stopped from outside
|
|
237
|
+
* (`cancelled`). Every arm here was started or explicitly stopped, so `idle` is
|
|
238
|
+
* out and `runId` is present on the whole union: a consumer holding one of these
|
|
239
|
+
* reads the run identity without a `phase` guard the value can never fail.
|
|
240
|
+
*
|
|
241
|
+
* It is the resolved half of a drive: a promise that resolves only on an ended
|
|
242
|
+
* run should say so in its type rather than resolve `MonitoredRunState` and
|
|
243
|
+
* leave every reader to re-prove the `idle` arm impossible (#155). `cancelled`
|
|
244
|
+
* keeps its `string | null` `runId` unchanged — a run cancelled before it ever
|
|
245
|
+
* started genuinely has no identity, and that stays a different value here.
|
|
246
|
+
*/
|
|
247
|
+
type EndedRun<Stage> = Extract<MonitoredRunState<Stage>, {
|
|
248
|
+
readonly phase: "done" | "cancelled";
|
|
249
|
+
}>;
|
|
226
250
|
/**
|
|
227
251
|
* The outcome a consumer reports to `advance`: the current stage either
|
|
228
252
|
* succeeded (retire it, claim the next) or failed (terminate the run). Plain
|
|
@@ -258,6 +282,7 @@ declare function createMonitoredRun<Stage, V = unknown>(config?: MonitoredRunCon
|
|
|
258
282
|
start: (s: MonitoredRunState<Stage>, runId: string, at: number) => readonly [MonitoredRunState<Stage>, readonly MonitoredRunCmd<V>[]];
|
|
259
283
|
progress: (s: MonitoredRunState<Stage>, payload: V, at: number) => readonly [MonitoredRunState<Stage>, readonly MonitoredRunCmd<V>[]];
|
|
260
284
|
markStale: (s: MonitoredRunState<Stage>) => readonly [MonitoredRunState<Stage>, readonly MonitoredRunCmd<V>[]];
|
|
285
|
+
cancel: (s: MonitoredRunState<Stage>, at: number) => readonly [MonitoredRunState<Stage>, readonly MonitoredRunCmd<V>[]];
|
|
261
286
|
advance: (s: MonitoredRunState<Stage>, payload: V, result: StageResult, at: number) => readonly [MonitoredRunState<Stage>, readonly MonitoredRunCmd<V>[]];
|
|
262
287
|
onDeadline: (s: MonitoredRunState<Stage>, msg: MonitoredRunTimerMsg) => readonly [MonitoredRunState<Stage>, readonly MonitoredRunCmd<V>[]];
|
|
263
288
|
boot: (s: MonitoredRunState<Stage>, at: number) => readonly [MonitoredRunState<Stage>, readonly MonitoredRunCmd<V>[]];
|
|
@@ -275,4 +300,4 @@ declare function liftRun<S extends {
|
|
|
275
300
|
run: MonitoredRunState<Stage>;
|
|
276
301
|
}, Stage, C extends Cmd>(state: S, [slice, cmds]: readonly [MonitoredRunState<Stage>, readonly C[]]): readonly [S, readonly C[]];
|
|
277
302
|
|
|
278
|
-
export {
|
|
303
|
+
export { type EndedRun as E, type MonitoredRunCmd as M, type RunFailure as R, type StageResult as S, type MonitoredRunState as a, type MonitoredRunConfig as b, type MonitoredRunPorts as c, type MonitoredRunTimerMsg as d, createMonitoredRun as e, liftRun as l };
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { B as BootingRuntime } from '
|
|
2
|
-
import 'better-result';
|
|
3
|
-
import '../core-Bjc0bS8j.js';
|
|
1
|
+
import { B as BootingRuntime } from './runtime-types-LWDoi943.js';
|
|
4
2
|
|
|
5
3
|
/**
|
|
6
4
|
* A recorded run, sufficient to reproduce it via `../trace-replay`.
|
|
@@ -220,7 +218,7 @@ interface TraceAttachment {
|
|
|
220
218
|
*
|
|
221
219
|
* ```ts
|
|
222
220
|
* import * as Sentry from "@sentry/browser"; // or "@sentry/node"
|
|
223
|
-
* import { traceAttachment } from "
|
|
221
|
+
* import { traceAttachment } from "./internal/persistence/recorder"; // internal module
|
|
224
222
|
* Sentry.getCurrentScope().addAttachment(traceAttachment(rec.dump()));
|
|
225
223
|
* ```
|
|
226
224
|
*
|
|
@@ -278,7 +276,7 @@ interface BreadcrumbsOptions<M> {
|
|
|
278
276
|
*
|
|
279
277
|
* ```ts
|
|
280
278
|
* import * as Sentry from "@sentry/browser"; // or "@sentry/node"
|
|
281
|
-
* import { breadcrumbsFromTrace } from "
|
|
279
|
+
* import { breadcrumbsFromTrace } from "./internal/persistence/recorder"; // internal module
|
|
282
280
|
* for (const b of breadcrumbsFromTrace(rec.dump())) Sentry.addBreadcrumb(b);
|
|
283
281
|
* ```
|
|
284
282
|
*
|
|
@@ -289,4 +287,4 @@ declare function breadcrumbsFromTrace<S, M extends {
|
|
|
289
287
|
type: string;
|
|
290
288
|
}>(trace: Trace<S, M>, opts?: BreadcrumbsOptions<M>): TraceBreadcrumb[];
|
|
291
289
|
|
|
292
|
-
export { type BreadcrumbsOptions
|
|
290
|
+
export { type BreadcrumbsOptions as B, type RecorderOptions as R, type Trace as T, type Recorder as a, type TraceAttachment as b, type TraceBreadcrumb as c, breadcrumbsFromTrace as d, parseJSONL as p, recorder as r, traceAttachment as t };
|