awaitly 1.31.1 → 1.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters.cjs +2 -2
- package/dist/adapters.cjs.map +1 -1
- package/dist/adapters.d.cts +3 -1
- package/dist/adapters.d.ts +3 -1
- package/dist/adapters.js +2 -2
- package/dist/adapters.js.map +1 -1
- package/dist/batch.cjs +2 -2
- package/dist/batch.cjs.map +1 -1
- package/dist/batch.d.cts +3 -1
- package/dist/batch.d.ts +3 -1
- package/dist/batch.js +2 -2
- package/dist/batch.js.map +1 -1
- package/dist/circuit-breaker.cjs +2 -2
- package/dist/circuit-breaker.cjs.map +1 -1
- package/dist/circuit-breaker.d.cts +3 -1
- package/dist/circuit-breaker.d.ts +3 -1
- package/dist/circuit-breaker.js +2 -2
- package/dist/circuit-breaker.js.map +1 -1
- package/dist/conditional.d.cts +3 -1
- package/dist/conditional.d.ts +3 -1
- package/dist/core.cjs +2 -2
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +2 -1
- package/dist/core.d.ts +2 -1
- package/dist/core.js +2 -2
- package/dist/core.js.map +1 -1
- package/dist/diagnostics.cjs +3 -3
- package/dist/diagnostics.cjs.map +1 -1
- package/dist/diagnostics.d.cts +3 -1
- package/dist/diagnostics.d.ts +3 -1
- package/dist/diagnostics.js +3 -3
- package/dist/diagnostics.js.map +1 -1
- package/dist/durable.cjs +3 -3
- package/dist/durable.cjs.map +1 -1
- package/dist/durable.d.cts +8 -361
- package/dist/durable.d.ts +8 -361
- package/dist/durable.js +3 -3
- package/dist/durable.js.map +1 -1
- package/dist/engine.cjs +11 -0
- package/dist/engine.cjs.map +1 -0
- package/dist/engine.d.cts +114 -0
- package/dist/engine.d.ts +114 -0
- package/dist/engine.js +11 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors-entry-CMH73Eym.d.cts +339 -0
- package/dist/errors-entry-DOt5UUl4.d.ts +339 -0
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +2 -318
- package/dist/errors.d.ts +2 -318
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/fetch.cjs +2 -2
- package/dist/fetch.cjs.map +1 -1
- package/dist/fetch.d.cts +3 -1
- package/dist/fetch.d.ts +3 -1
- package/dist/fetch.js +2 -2
- package/dist/fetch.js.map +1 -1
- package/dist/functional.cjs +1 -1
- package/dist/functional.cjs.map +1 -1
- package/dist/functional.d.cts +2 -0
- package/dist/functional.d.ts +2 -0
- package/dist/functional.js +1 -1
- package/dist/functional.js.map +1 -1
- package/dist/{guards-PU64_GKv.d.cts → guards-B79mP5Q8.d.cts} +3 -3
- package/dist/{guards-B5lgMJq0.d.ts → guards-BUq6NJCM.d.ts} +3 -3
- package/dist/{hitl-Dyiy0R1v.d.cts → hitl-BCqkMAHw.d.cts} +2 -2
- package/dist/{hitl-BjeSm1sJ.d.ts → hitl-BZtPx0aU.d.ts} +2 -2
- package/dist/hitl.cjs +2 -2
- package/dist/hitl.cjs.map +1 -1
- package/dist/hitl.d.cts +9 -6
- package/dist/hitl.d.ts +9 -6
- package/dist/hitl.js +2 -2
- package/dist/hitl.js.map +1 -1
- package/dist/index-BVUAOWGG.d.ts +417 -0
- package/dist/index-CQnpmUcC.d.cts +417 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/otel.d.cts +3 -1
- package/dist/otel.d.ts +3 -1
- package/dist/{persistence-entry-B3ukwbb5.d.ts → persistence-entry-ClFhxd2Q.d.ts} +11 -5
- package/dist/{persistence-entry-CgVzswbg.d.cts → persistence-entry-jflY61az.d.cts} +11 -5
- package/dist/persistence.d.cts +6 -3
- package/dist/persistence.d.ts +6 -3
- package/dist/policies.d.cts +3 -1
- package/dist/policies.d.ts +3 -1
- package/dist/ratelimit.cjs +2 -2
- package/dist/ratelimit.cjs.map +1 -1
- package/dist/ratelimit.d.cts +3 -1
- package/dist/ratelimit.d.ts +3 -1
- package/dist/ratelimit.js +2 -2
- package/dist/ratelimit.js.map +1 -1
- package/dist/reliability.cjs +2 -2
- package/dist/reliability.cjs.map +1 -1
- package/dist/reliability.d.cts +3 -1
- package/dist/reliability.d.ts +3 -1
- package/dist/reliability.js +2 -2
- package/dist/reliability.js.map +1 -1
- package/dist/resolver.cjs +2 -2
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.d.cts +5 -3
- package/dist/resolver.d.ts +5 -3
- package/dist/resolver.js +2 -2
- package/dist/resolver.js.map +1 -1
- package/dist/resource.cjs +2 -2
- package/dist/resource.cjs.map +1 -1
- package/dist/resource.d.cts +3 -1
- package/dist/resource.d.ts +3 -1
- package/dist/resource.js +2 -2
- package/dist/resource.js.map +1 -1
- package/dist/result/retry.cjs +1 -1
- package/dist/result/retry.cjs.map +1 -1
- package/dist/result/retry.d.cts +2 -0
- package/dist/result/retry.d.ts +2 -0
- package/dist/result/retry.js +1 -1
- package/dist/result/retry.js.map +1 -1
- package/dist/result.cjs +1 -1
- package/dist/result.cjs.map +1 -1
- package/dist/result.d.cts +8 -23
- package/dist/result.d.ts +8 -23
- package/dist/result.js +1 -1
- package/dist/result.js.map +1 -1
- package/dist/{run-entry-C1uFytM6.d.cts → run-entry-rw7zll_G.d.ts} +16 -45
- package/dist/{run-entry-C1uFytM6.d.ts → run-entry-yQu63Yj9.d.cts} +16 -45
- package/dist/run.cjs +2 -2
- package/dist/run.cjs.map +1 -1
- package/dist/run.d.cts +3 -1
- package/dist/run.d.ts +3 -1
- package/dist/run.js +2 -2
- package/dist/run.js.map +1 -1
- package/dist/saga.cjs +2 -2
- package/dist/saga.cjs.map +1 -1
- package/dist/saga.d.cts +3 -1
- package/dist/saga.d.ts +3 -1
- package/dist/saga.js +2 -2
- package/dist/saga.js.map +1 -1
- package/dist/singleflight.d.cts +3 -1
- package/dist/singleflight.d.ts +3 -1
- package/dist/streaming.cjs +4 -4
- package/dist/streaming.cjs.map +1 -1
- package/dist/streaming.d.cts +5 -3
- package/dist/streaming.d.ts +5 -3
- package/dist/streaming.js +4 -4
- package/dist/streaming.js.map +1 -1
- package/dist/testing.cjs +8 -4
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +87 -4
- package/dist/testing.d.ts +87 -4
- package/dist/testing.js +8 -4
- package/dist/testing.js.map +1 -1
- package/dist/{types-wa_wTOn3.d.ts → types-CuWK5AlK.d.ts} +1 -1
- package/dist/{types-DUWrNIJu.d.cts → types-uR3JpwvF.d.cts} +1 -1
- package/dist/webhook.cjs +2 -2
- package/dist/webhook.cjs.map +1 -1
- package/dist/webhook.d.cts +7 -4
- package/dist/webhook.d.ts +7 -4
- package/dist/webhook.js +2 -2
- package/dist/webhook.js.map +1 -1
- package/dist/workflow.cjs +3 -3
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +47 -11
- package/dist/workflow.d.ts +47 -11
- package/dist/workflow.js +3 -3
- package/dist/workflow.js.map +1 -1
- package/package.json +15 -1
package/dist/streaming.d.cts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { S as StreamStore, a as StreamReader } from './types-
|
|
2
|
-
export { b as STREAM_BACKPRESSURE_ERROR, c as STREAM_CLOSE_ERROR, d as STREAM_ENDED, e as STREAM_READ_ERROR, f as STREAM_STORE_ERROR, g as STREAM_WRITE_ERROR, h as StreamBackpressureError, i as StreamCloseError, j as StreamEndedMarker, k as StreamError, l as StreamForEachOptions, m as StreamForEachResult, n as StreamItem, o as StreamMetadata, p as StreamOptions, q as StreamReadError, r as StreamReadOptions, s as StreamStoreError, t as StreamWriteError, u as StreamWriter, U as Unsubscribe, v as isStreamBackpressureError, w as isStreamEnded, x as isStreamReadError, y as isStreamStoreError, z as isStreamWriteError, A as streamBackpressureError, B as streamCloseError, C as streamEnded, D as streamReadError, E as streamStoreError, F as streamWriteError } from './types-
|
|
3
|
-
import { c as AsyncResult, R as Result } from './run-entry-
|
|
1
|
+
import { S as StreamStore, a as StreamReader } from './types-uR3JpwvF.cjs';
|
|
2
|
+
export { b as STREAM_BACKPRESSURE_ERROR, c as STREAM_CLOSE_ERROR, d as STREAM_ENDED, e as STREAM_READ_ERROR, f as STREAM_STORE_ERROR, g as STREAM_WRITE_ERROR, h as StreamBackpressureError, i as StreamCloseError, j as StreamEndedMarker, k as StreamError, l as StreamForEachOptions, m as StreamForEachResult, n as StreamItem, o as StreamMetadata, p as StreamOptions, q as StreamReadError, r as StreamReadOptions, s as StreamStoreError, t as StreamWriteError, u as StreamWriter, U as Unsubscribe, v as isStreamBackpressureError, w as isStreamEnded, x as isStreamReadError, y as isStreamStoreError, z as isStreamWriteError, A as streamBackpressureError, B as streamCloseError, C as streamEnded, D as streamReadError, E as streamStoreError, F as streamWriteError } from './types-uR3JpwvF.cjs';
|
|
3
|
+
import { c as AsyncResult, R as Result } from './run-entry-yQu63Yj9.cjs';
|
|
4
|
+
import './errors-entry-CMH73Eym.cjs';
|
|
5
|
+
import './tagged-error.cjs';
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* awaitly/streaming - Backpressure Controller
|
package/dist/streaming.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { S as StreamStore, a as StreamReader } from './types-
|
|
2
|
-
export { b as STREAM_BACKPRESSURE_ERROR, c as STREAM_CLOSE_ERROR, d as STREAM_ENDED, e as STREAM_READ_ERROR, f as STREAM_STORE_ERROR, g as STREAM_WRITE_ERROR, h as StreamBackpressureError, i as StreamCloseError, j as StreamEndedMarker, k as StreamError, l as StreamForEachOptions, m as StreamForEachResult, n as StreamItem, o as StreamMetadata, p as StreamOptions, q as StreamReadError, r as StreamReadOptions, s as StreamStoreError, t as StreamWriteError, u as StreamWriter, U as Unsubscribe, v as isStreamBackpressureError, w as isStreamEnded, x as isStreamReadError, y as isStreamStoreError, z as isStreamWriteError, A as streamBackpressureError, B as streamCloseError, C as streamEnded, D as streamReadError, E as streamStoreError, F as streamWriteError } from './types-
|
|
3
|
-
import { c as AsyncResult, R as Result } from './run-entry-
|
|
1
|
+
import { S as StreamStore, a as StreamReader } from './types-CuWK5AlK.js';
|
|
2
|
+
export { b as STREAM_BACKPRESSURE_ERROR, c as STREAM_CLOSE_ERROR, d as STREAM_ENDED, e as STREAM_READ_ERROR, f as STREAM_STORE_ERROR, g as STREAM_WRITE_ERROR, h as StreamBackpressureError, i as StreamCloseError, j as StreamEndedMarker, k as StreamError, l as StreamForEachOptions, m as StreamForEachResult, n as StreamItem, o as StreamMetadata, p as StreamOptions, q as StreamReadError, r as StreamReadOptions, s as StreamStoreError, t as StreamWriteError, u as StreamWriter, U as Unsubscribe, v as isStreamBackpressureError, w as isStreamEnded, x as isStreamReadError, y as isStreamStoreError, z as isStreamWriteError, A as streamBackpressureError, B as streamCloseError, C as streamEnded, D as streamReadError, E as streamStoreError, F as streamWriteError } from './types-CuWK5AlK.js';
|
|
3
|
+
import { c as AsyncResult, R as Result } from './run-entry-rw7zll_G.js';
|
|
4
|
+
import './errors-entry-DOt5UUl4.js';
|
|
5
|
+
import './tagged-error.js';
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* awaitly/streaming - Backpressure Controller
|
package/dist/streaming.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
var ye="STREAM_WRITE_ERROR",fe="STREAM_READ_ERROR",xe="STREAM_CLOSE_ERROR",we="STREAM_STORE_ERROR",Te="STREAM_ENDED",ke="STREAM_BACKPRESSURE_ERROR";function Re(e){return typeof e=="object"&&e!==null&&e.type===Te}function De(e){return typeof e=="object"&&e!==null&&e.type===ye}function Ue(e){return typeof e=="object"&&e!==null&&e.type===fe}function Fe(e){return typeof e=="object"&&e!==null&&e.type===we}function Ne(e){return typeof e=="object"&&e!==null&&e.type===ke}function Ke(e,o,n){return{type:ye,reason:e,message:o,...n!==void 0?{cause:n}:{}}}function ie(e,o,n){return{type:fe,reason:e,message:o,...n!==void 0?{cause:n}:{}}}function Be(e,o,n){return{type:xe,reason:e,message:o,...n!==void 0?{cause:n}:{}}}function j(e,o,n){return{type:we,reason:e,message:o,...n!==void 0?{cause:n}:{}}}function ue(e){return{type:Te,finalPosition:e}}function je(e,o){return{type:ke,bufferedCount:e,highWaterMark:o}}function We(e={}){let o=e.highWaterMark??16,n=e.lowWaterMark??Math.floor(o/2),c=e.onStateChange,T="flowing",w=0,p=[];function u(r){if(T!==r&&(T=r,c?.(r),r==="flowing"&&p.length>0)){let O=p;p=[];for(let _ of O)_()}}function m(){T==="flowing"&&w>=o?u("paused"):T==="paused"&&w<=n&&u("flowing")}return{get state(){return T},get bufferedCount(){return w},get highWaterMark(){return o},get lowWaterMark(){return n},increment(){w++,m()},decrement(){w>0&&(w--,m())},setCount(r){w=Math.max(0,r),m()},waitForDrain(){return T==="flowing"?Promise.resolve():new Promise(r=>{p.push(r)})},reset(){w=0,p=[],u("flowing")}}}function Le(e){return e.state==="paused"}function Ve(e){let o=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!o)return;let n=parseFloat(o[1]),c=o[2].toLowerCase();return{_tag:"Duration",millis:n*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[c]??1)}}var $e="UNEXPECTED_ERROR";function qe(e){return $e}function U(e){return{ok:!0,value:e}}function M(e,o){let n=o?.cause;return{ok:!1,error:e,...n!==void 0?{cause:n}:{}}}function Xe(e){if(e==null)return"unknown";if(typeof e=="string")return e.trim()||"unknown";if(typeof e=="object"){let o=e;if(typeof o._tag=="string"){let n=o._tag.trim();if(n)return n}if(typeof o.tag=="string"){let n=o.tag.trim();if(n)return n}if(typeof o.code=="string"){let n=o.code.trim();if(n)return n}else if(typeof o.code=="number")return String(o.code);if(e instanceof Error&&e.name){let n=e.name.trim();if(n)return n}}return"unknown"}function Ye(e,o){if(!(!o||!e))return o[e]}function Je(e){let{intent:o,domain:n,owner:c,tags:T,stateChanges:w,emits:p,calls:u}=e;if(!o&&!n&&!c&&!T?.length&&!w?.length&&!p?.length&&!u?.length)return;let m={};return o&&(m.intent=o),n&&(m.domain=n),c&&(m.owner=c),T?.length&&(m.tags=T),w?.length&&(m.stateChanges=w),p?.length&&(m.emits=p),u?.length&&(m.calls=u),m}function q(e,o,n,c,T){let w=Xe(e),p=Ye(w,o),u={tag:w,origin:n};return p!==void 0&&(u.classification=p),c!==void 0&&(u.attempt=c),T!==void 0&&(u.cumulativeDurationMs=T),u}var ne=Symbol.for("step_timeout_marker");function Ce(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:ne in e}function ze(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let o=e;return{timeoutMs:o.timeoutMs,stepName:o.stepName,stepKey:o.stepKey,attempt:o.attempt}}if(ne in e)return e[ne]}}var _e=Symbol("early-exit");function He(e,o){return{[_e]:!0,error:e,meta:o}}function Ge(e){return typeof e=="object"&&e!==null&&e[_e]===!0}var Me=Symbol("mapper-exception");function te(e){return{[Me]:!0,thrown:e}}function Qe(e){return typeof e=="object"&&e!==null&&e[Me]===!0}function ge(e,o){let{backoff:n,initialDelay:c,maxDelay:T,jitter:w}=o,p;switch(n){case"fixed":p=c;break;case"linear":p=c*e;break;case"exponential":p=c*Math.pow(2,e-1);break}if(p=Math.min(p,T),w){let u=p*.25*Math.random();p=p+u}return Math.floor(p)}function Se(e){return new Promise(o=>setTimeout(o,e))}var he=Symbol("timeout"),ce=Symbol("timeout-option");function Ze(e){return typeof e=="object"&&e!==null&&e[ce]===!0}async function et(e,o,n,c){let T=new AbortController,w=o.onTimeout??"error",p=()=>typeof w=="function"?w({name:n.name,key:n.key,ms:o.ms}):o.error??{type:"STEP_TIMEOUT",stepName:n.name,stepKey:n.key,timeoutMs:o.ms,attempt:n.attempt},u;c?.aborted&&T.abort(c.reason);let m;c&&!c.aborted&&(m=()=>T.abort(c.reason),c.addEventListener("abort",m,{once:!0}));let r=new Promise((_,W)=>{u=setTimeout(()=>{if(w!=="disconnect"&&T.abort(),w==="option"){W({[ce]:!0,ms:o.ms});return}W({[he]:!0,error:p()})},o.ms)}),O;o.signal?O=Promise.resolve(e(T.signal)):O=Promise.resolve(e());try{return await Promise.race([O,r])}catch(_){if(typeof _=="object"&&_!==null&&_[ce]===!0)throw{[ce]:!0,ms:o.ms};if(typeof _=="object"&&_!==null&&_[he]===!0){w==="disconnect"&&O.catch(()=>{});let W=_.error;if(typeof W=="object"&&W!==null&&W.type!=="STEP_TIMEOUT"){let x={timeoutMs:o.ms,stepName:n.name,stepKey:n.key,attempt:n.attempt};ne in W?W[ne]=x:Object.defineProperty(W,ne,{value:x,enumerable:!1,writable:!0,configurable:!1})}throw W}throw _}finally{clearTimeout(u),m&&c&&c.removeEventListener("abort",m)}}var re={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Ae(e,o){let{onError:n,onEvent:c,catchUnexpected:T,workflowId:w,workflowName:p,context:u,_workflowSignal:m}=o&&typeof o=="object"?o:{},r=w??crypto.randomUUID(),O=T??qe,_=[],W=0,x=y=>y??`step_${++W}`,s=y=>{let X=y.context!==void 0||u===void 0?y:{...y,context:u},H=p!==void 0&&X.workflowName===void 0?{...X,workflowName:p}:X;if(H.type==="step_success"){let se=H.stepId;for(let ae=_.length-1;ae>=0;ae--){let Y=_[ae];if(Y.type==="race"&&!Y.winnerId){Y.winnerId=se;break}}}c?.(H,u)},k=He,v=y=>Ge(y),N=(y,X)=>y,$=y=>typeof y=="function"?!1:!!(y&&typeof y=="object"&&"ok"in y||y&&typeof y=="object"&&"then"in y&&typeof y.then=="function");try{let X=function(l){let f={};for(let[i,a]of Object.entries(l))if(typeof a=="function")f[i]=a;else if(a&&typeof a=="object"&&"fn"in a)f[i]=a.fn;else throw new TypeError(`step.parallel: operation "${i}" must be a function or { fn, errors? } object`);return f},H=function(l,f){let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let a=performance.now(),t=!1;_.push({scopeId:i,type:"parallel"});let d=()=>{if(t)return;t=!0;let E=_.findIndex(R=>R.scopeId===i);E!==-1&&_.splice(E,1),s({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-a})};s({type:"scope_start",workflowId:r,scopeId:i,scopeType:"parallel",name:l,ts:Date.now()});try{let E=await f();if(d(),!E.ok)throw n?.(E.error,l,u),k(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw d(),E}})()},se=function(l,f){let i=Object.keys(l),a=f.name??`Parallel(${i.join(", ")})`,t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let d=performance.now(),E=!1;_.push({scopeId:t,type:"parallel"});let R=()=>{if(E)return;E=!0;let g=_.findIndex(S=>S.scopeId===t);g!==-1&&_.splice(g,1),s({type:"scope_end",workflowId:r,scopeId:t,ts:Date.now(),durationMs:performance.now()-d})};s({type:"scope_start",workflowId:r,scopeId:t,scopeType:"parallel",name:a,ts:Date.now()});try{let g=await new Promise(C=>{if(i.length===0){C([]);return}let D=!1,B=i.length,h=new Array(i.length);for(let K=0;K<i.length;K++){let A=i[K],P=K;Promise.resolve(l[A]()).catch(I=>M({type:"PROMISE_REJECTED",cause:I},{cause:{type:"PROMISE_REJECTION",reason:I}})).then(I=>{if(!D){if(!I.ok){D=!0,C([{key:A,result:I}]);return}h[P]={key:A,result:I},B--,B===0&&C(h)}})}});R();let S={};for(let{key:C,result:D}of g){if(!D.ok)throw n?.(D.error,C,u),k(D.error,{origin:"result",resultCause:D.cause});S[C]=D.value}return S}catch(g){throw R(),g}})()};var J=X,ee=H,be=se;let y=(l,f,i)=>(async()=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let a=i??{},t=Je(a),d=l,E=a.key??l,R=a.key??l,{description:g,retry:S,timeout:C}=a,D=x(E),B=c,h=B?performance.now():0,A=$(f)?()=>f:f,I={attempts:Math.max(1,S?.attempts??1),backoff:S?.backoff??re.backoff,initialDelay:S?.initialDelay??re.initialDelay,maxDelay:S?.maxDelay??re.maxDelay,jitter:S?.jitter??re.jitter,retryOn:S?.retryOn??re.retryOn,onRetry:S?.onRetry??re.onRetry};c&&s({type:"step_start",workflowId:r,stepId:D,stepKey:E,name:d,description:g,ts:Date.now(),...t&&{metadata:t}});let Z;for(let F=1;F<=I.attempts;F++){let Oe=B?performance.now():0;try{let b;if(C?b=await et(A,C,{name:d,key:E,attempt:F},m):b=await A(),b.ok){let Q=performance.now()-h;return s({type:"step_success",workflowId:r,stepId:D,stepKey:E,name:d,description:g,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),R&&s({type:"step_complete",workflowId:r,stepKey:R,name:d,description:g,ts:Date.now(),durationMs:Q,result:b,...t&&{metadata:t}}),b.value}if(Z=b,F<I.attempts&&I.retryOn(b.error,F)){let Q=ge(F,I);s({type:"step_retry",workflowId:r,stepId:D,stepKey:E,name:d,ts:Date.now(),attempt:F+1,maxAttempts:I.attempts,delayMs:Q,error:b.error,...t&&{metadata:t},diagnostics:q(b.error,a.errorMeta,"result",F,performance.now()-h)}),I.onRetry(b.error,F,Q),await Se(Q);continue}I.attempts>1&&s({type:"step_retries_exhausted",workflowId:r,stepId:D,stepKey:E,name:d,ts:Date.now(),durationMs:performance.now()-h,attempts:F,lastError:b.error,...t&&{metadata:t},diagnostics:q(b.error,a.errorMeta,"result",F,performance.now()-h)});break}catch(b){let Q=performance.now()-Oe;if(Ze(b)){let z=b.ms;s({type:"step_timeout",workflowId:r,stepId:D,stepKey:E,name:d,ts:Date.now(),timeoutMs:z,attempt:F,...t&&{metadata:t},diagnostics:q(b,a.errorMeta,"timeout",F)}),s({type:"step_success",workflowId:r,stepId:D,stepKey:E,name:d,description:g,ts:Date.now(),durationMs:performance.now()-h,...t&&{metadata:t}}),R&&s({type:"step_complete",workflowId:r,stepKey:R,name:d,description:g,ts:Date.now(),durationMs:performance.now()-h,result:U(void 0),...t&&{metadata:t}});return}if(v(b))throw s({type:"step_aborted",workflowId:r,stepId:D,stepKey:E,name:d,description:g,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),b;if(Ce(b)){let z=ze(b),ve=C?.ms??z?.timeoutMs??0;if(s({type:"step_timeout",workflowId:r,stepId:D,stepKey:E,name:d,ts:Date.now(),timeoutMs:ve,attempt:F,...t&&{metadata:t},diagnostics:q(b,a.errorMeta,"timeout",F)}),F<I.attempts&&I.retryOn(b,F)){let Ee=ge(F,I);s({type:"step_retry",workflowId:r,stepId:D,stepKey:E,name:d,ts:Date.now(),attempt:F+1,maxAttempts:I.attempts,delayMs:Ee,error:b,...t&&{metadata:t},diagnostics:q(b,a.errorMeta,"timeout",F,performance.now()-h)}),I.onRetry(b,F,Ee),await Se(Ee);continue}I.attempts>1&&s({type:"step_retries_exhausted",workflowId:r,stepId:D,stepKey:E,name:d,ts:Date.now(),durationMs:performance.now()-h,attempts:F,lastError:b,...t&&{metadata:t},diagnostics:q(b,a.errorMeta,"timeout",F,performance.now()-h)});let de=performance.now()-h;throw s({type:"step_error",workflowId:r,stepId:D,stepKey:E,name:d,description:g,ts:Date.now(),durationMs:de,error:b,...t&&{metadata:t},diagnostics:q(b,a.errorMeta,"timeout",F,de)}),R&&s({type:"step_complete",workflowId:r,stepKey:R,name:d,description:g,ts:Date.now(),durationMs:de,result:M(b,{cause:b}),meta:{origin:"throw",thrown:b},...t&&{metadata:t}}),n?.(b,d,u),k(b,{origin:"throw",thrown:b})}if(F<I.attempts&&I.retryOn(b,F)){let z=ge(F,I);s({type:"step_retry",workflowId:r,stepId:D,stepKey:E,name:d,ts:Date.now(),attempt:F+1,maxAttempts:I.attempts,delayMs:z,error:b,...t&&{metadata:t},diagnostics:q(b,a.errorMeta,"throw",F,performance.now()-h)}),I.onRetry(b,F,z),await Se(z);continue}I.attempts>1&&!Ce(b)&&s({type:"step_retries_exhausted",workflowId:r,stepId:D,stepKey:E,name:d,ts:Date.now(),durationMs:performance.now()-h,attempts:F,lastError:b,...t&&{metadata:t},diagnostics:q(b,a.errorMeta,"throw",F,performance.now()-h)});let me=performance.now()-h,oe;try{oe=O(b)}catch(z){throw te(z)}throw s({type:"step_error",workflowId:r,stepId:D,stepKey:E,name:d,description:g,ts:Date.now(),durationMs:me,error:oe,...t&&{metadata:t},diagnostics:q(b,a.errorMeta,"throw",F,me)}),R&&s({type:"step_complete",workflowId:r,stepKey:R,name:d,description:g,ts:Date.now(),durationMs:me,result:M(oe,{cause:b}),meta:{origin:"throw",thrown:b},...t&&{metadata:t}}),n?.(oe,d,u),k(oe,{origin:"throw",thrown:b})}}let G=Z,le=performance.now()-h,pe=N(G.error,{origin:"result",resultCause:G.cause});throw s({type:"step_error",workflowId:r,stepId:D,stepKey:E,name:d,description:g,ts:Date.now(),durationMs:le,error:pe,...t&&{metadata:t},diagnostics:q(G.error,a.errorMeta,"result",I.attempts,le)}),R&&s({type:"step_complete",workflowId:r,stepKey:R,name:d,description:g,ts:Date.now(),durationMs:le,result:G,meta:{origin:"result",resultCause:G.cause},...t&&{metadata:t}}),n?.(pe,d,u),k(pe,{origin:"result",resultCause:G.cause})})();y.try=(l,f,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let a=i.key??l,t=l,d=l,E="error"in i?()=>i.error:i.onError,R=c;return(async()=>{let g=R?performance.now():0;c&&s({type:"step_start",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now()});try{let S=await f(),C=performance.now()-g;return s({type:"step_success",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:C}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:C,result:U(S)}),S}catch(S){let C=E(S),D=performance.now()-g,B=N(C,{origin:"throw",thrown:S});throw s({type:"step_error",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:D,error:B}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:D,result:M(C,{cause:S}),meta:{origin:"throw",thrown:S}}),n?.(B,t,u),k(B,{origin:"throw",thrown:S})}})()},y.fromResult=(l,f,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let a=i.key??l,t=l,d=l,E="error"in i?()=>i.error:i.onError,R=c;return(async()=>{let g=R?performance.now():0;c&&s({type:"step_start",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now()});let S=await f();if(S.ok){let C=performance.now()-g;return s({type:"step_success",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:C}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:C,result:U(S.value)}),S.value}else{let C=E(S.error),D=performance.now()-g,B=N(C,{origin:"result",resultCause:S.error});throw s({type:"step_error",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:D,error:B}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:D,result:M(C,{cause:S.error}),meta:{origin:"result",resultCause:S.error}}),n?.(B,t,u),k(B,{origin:"result",resultCause:S.error})}})()},y.fromNullable=(l,f,i,a)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return y(l,async()=>{let t=await f();return t!=null?U(t):M(i())},a)},y.retry=(l,f,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return y(l,f,{key:i.key??l,retry:{attempts:i.attempts,backoff:i.backoff,initialDelay:i.initialDelay,maxDelay:i.maxDelay,jitter:i.jitter,retryOn:i.retryOn,onRetry:i.onRetry},timeout:i.timeout})},y.withTimeout=(l,f,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return y(l,f,{key:i.key??l,timeout:i})},y.sleep=(l,f,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let a=typeof f=="string"?Ve(f):f;if(!a)throw new Error(`step.sleep: invalid duration '${f}'`);let t=a.millis,d=i?.signal;return y(l,async()=>{if(m?.aborted||d?.aborted){let E=new Error("Sleep aborted");throw E.name="AbortError",E}return new Promise((E,R)=>{let g={timeoutId:void 0},S=()=>{g.timeoutId&&clearTimeout(g.timeoutId);let C=new Error("Sleep aborted");C.name="AbortError",R(C)};m?.addEventListener("abort",S,{once:!0}),d?.addEventListener("abort",S,{once:!0}),g.timeoutId=setTimeout(()=>{m?.removeEventListener("abort",S),d?.removeEventListener("abort",S),E(U(void 0))},t)})},{key:i?.key??l,description:i?.description})},y.parallel=((...l)=>{if(typeof l[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let f=l[0],i=l[1];if(typeof i=="function")return H(f,i);if(i&&typeof i=="object"&&!Array.isArray(i)){let t=X(i);return se(t,{name:f})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),y.race=(l,f)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let a=performance.now(),t=!1,d={scopeId:i,type:"race",winnerId:void 0};_.push(d);let E=()=>{if(t)return;t=!0;let R=_.findIndex(g=>g.scopeId===i);R!==-1&&_.splice(R,1),s({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-a,winnerId:d.winnerId})};s({type:"scope_start",workflowId:r,scopeId:i,scopeType:"race",name:l,ts:Date.now()});try{let R=await f();if(E(),!R.ok)throw n?.(R.error,l,u),k(R.error,{origin:"result",resultCause:R.cause});return R.value}catch(R){throw E(),R}})()},y.allSettled=(l,f)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let a=performance.now(),t=!1;_.push({scopeId:i,type:"allSettled"});let d=()=>{if(t)return;t=!0;let E=_.findIndex(R=>R.scopeId===i);E!==-1&&_.splice(E,1),s({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-a})};s({type:"scope_start",workflowId:r,scopeId:i,scopeType:"allSettled",name:l,ts:Date.now()});try{let E=await f();if(d(),!E.ok)throw n?.(E.error,l,u),k(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw d(),E}})()},y.if=(l,f,i)=>i(),y.label=y.if,y.branch=async(l,f)=>{let{condition:i,then:a,else:t}=f;if(i())return await a();if(t)return await t()},y.arm=(l,f)=>({fn:l,errors:f}),y.forEach=async(l,f,i)=>{let a=[],t=i.maxIterations,d=0,E="run"in i,R=Symbol.asyncIterator in f?f:(async function*(){yield*f})();for await(let g of R){if(t!==void 0&&d>=t)break;let S;E?S=await i.run(g,d):S=await i.item.handler(g,d,y),a.push(S),d++}return a},y.item=l=>({__forEachItemHandler:!0,handler:l}),y.dep=(l,f)=>f,y.run=(l,f,i)=>y(l,()=>f,i),y.workflow=(l,f,i)=>y(l,f,i),y.andThen=(l,f,i,a)=>y(l,()=>i(f),a),y.match=async(l,f,i,a)=>y(l,async()=>{let t=await f;return t.ok?U(await i.ok(t.value)):U(await i.err(t.error,t.cause))},a),y.all=y.parallel,y.map=async(l,f,i,a)=>{let t=a?.concurrency??f.length;return y(l,()=>t>=f.length?Ie(f.map((d,E)=>i(d,E))):(async()=>{let d=[];for(let E=0;E<f.length;E+=t){let R=f.slice(E,E+t),g=await Ie(R.map((S,C)=>i(S,E+C)));if(!g.ok)return g;d.push(...g.value)}return U(d)})(),{key:a?.key})},y.withFallback=(l,f,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let a=i.key??l,t=l,d=x(a),E=c;return(async()=>{let R=E?performance.now():0;c&&s({type:"step_start",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now()});let g;try{g=await f()}catch(h){if(v(h))throw s({type:"step_aborted",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:performance.now()-R}),h;let K;try{K=O(h)}catch(P){throw te(P)}if(i.on!==void 0&&i.on!==K){let P=performance.now()-R;throw s({type:"step_error",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:P,error:K}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:P,result:M(K,{cause:h}),meta:{origin:"throw",thrown:h}}),n?.(K,t,u),k(K,{origin:"throw",thrown:h})}let A;try{A=await i.fallback()}catch(P){if(v(P))throw s({type:"step_aborted",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:performance.now()-R}),P;let I;try{I=O(P)}catch(G){throw te(G)}let Z=performance.now()-R;throw s({type:"step_error",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:Z,error:I}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:Z,result:M(I,{cause:P}),meta:{origin:"throw",thrown:P}}),n?.(I,t,u),k(I,{origin:"throw",thrown:P})}if(A.ok){let P=performance.now()-R;return s({type:"step_success",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:P}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:P,result:A,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(K)}}),A.value}else{let P=performance.now()-R,I=N(A.error,{origin:"result",resultCause:A.cause});throw s({type:"step_error",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:P,error:I}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:P,result:A,meta:{origin:"result",resultCause:A.cause}}),n?.(I,t,u),k(I,{origin:"result",resultCause:A.cause})}}if(g.ok){let h=performance.now()-R;return s({type:"step_success",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:h}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:h,result:g}),g.value}let S=g.error;if(i.on!==void 0&&i.on!==S){let h=performance.now()-R,K=N(S,{origin:"result",resultCause:g.cause});throw s({type:"step_error",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:h,error:K}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:h,result:g,meta:{origin:"result",resultCause:g.cause}}),n?.(K,t,u),k(K,{origin:"result",resultCause:g.cause})}let C;try{C=await i.fallback()}catch(h){if(v(h))throw s({type:"step_aborted",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:performance.now()-R}),h;let K;try{K=O(h)}catch(P){throw te(P)}let A=performance.now()-R;throw s({type:"step_error",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:A,error:K}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:A,result:M(K,{cause:h}),meta:{origin:"throw",thrown:h}}),n?.(K,t,u),k(K,{origin:"throw",thrown:h})}if(C.ok){let h=performance.now()-R;return s({type:"step_success",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:h}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:h,result:C,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(S)}}),C.value}let D=performance.now()-R,B=N(C.error,{origin:"result",resultCause:C.cause});throw s({type:"step_error",workflowId:r,stepId:d,stepKey:a,name:t,ts:Date.now(),durationMs:D,error:B}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:t,ts:Date.now(),durationMs:D,result:C,meta:{origin:"result",resultCause:C.cause}}),n?.(B,t,u),k(B,{origin:"result",resultCause:C.cause})})()},y.withResource=(l,f)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let i=l,a=l,t=x(i),d=c;return(async()=>{let E=d?performance.now():0;c&&s({type:"step_start",workflowId:r,stepId:t,stepKey:i,name:a,ts:Date.now()});let R;try{R=await f.acquire()}catch(A){if(v(A))throw s({type:"step_aborted",workflowId:r,stepId:t,stepKey:i,name:a,ts:Date.now(),durationMs:performance.now()-E}),A;let P;try{P=O(A)}catch(Z){throw te(Z)}let I=performance.now()-E;throw s({type:"step_error",workflowId:r,stepId:t,stepKey:i,name:a,ts:Date.now(),durationMs:I,error:P}),i&&s({type:"step_complete",workflowId:r,stepKey:i,name:a,ts:Date.now(),durationMs:I,result:M(P,{cause:A}),meta:{origin:"throw",thrown:A}}),n?.(P,a,u),k(P,{origin:"throw",thrown:A})}if(!R.ok){let A=performance.now()-E,P=N(R.error,{origin:"result",resultCause:R.cause});throw s({type:"step_error",workflowId:r,stepId:t,stepKey:i,name:a,ts:Date.now(),durationMs:A,error:P}),i&&s({type:"step_complete",workflowId:r,stepKey:i,name:a,ts:Date.now(),durationMs:A,result:R,meta:{origin:"result",resultCause:R.cause}}),n?.(P,a,u),k(P,{origin:"result",resultCause:R.cause})}let g=R.value,S,C,D=!1;try{S=await f.use(g)}catch(A){if(v(A)){try{await f.release(g)}catch(P){console.warn(`[awaitly] step.withResource("${l}"): release threw after earlyExit:`,P)}throw A}C=A,D=!0}try{await f.release(g)}catch(A){console.warn(`[awaitly] step.withResource("${l}"): release threw:`,A)}if(D){let A;try{A=O(C)}catch(I){throw te(I)}let P=performance.now()-E;throw s({type:"step_error",workflowId:r,stepId:t,stepKey:i,name:a,ts:Date.now(),durationMs:P,error:A}),i&&s({type:"step_complete",workflowId:r,stepKey:i,name:a,ts:Date.now(),durationMs:P,result:M(A,{cause:C}),meta:{origin:"throw",thrown:C}}),n?.(A,a,u),k(A,{origin:"throw",thrown:C})}let B=S;if(B.ok){let A=performance.now()-E;return s({type:"step_success",workflowId:r,stepId:t,stepKey:i,name:a,ts:Date.now(),durationMs:A}),i&&s({type:"step_complete",workflowId:r,stepKey:i,name:a,ts:Date.now(),durationMs:A,result:B}),B.value}let h=performance.now()-E,K=N(B.error,{origin:"result",resultCause:B.cause});throw s({type:"step_error",workflowId:r,stepId:t,stepKey:i,name:a,ts:Date.now(),durationMs:h,error:K}),i&&s({type:"step_complete",workflowId:r,stepKey:i,name:a,ts:Date.now(),durationMs:h,result:B,meta:{origin:"result",resultCause:B.cause}}),n?.(K,a,u),k(K,{origin:"result",resultCause:B.cause})})()};let Y=await e({step:y});if(process.env.NODE_ENV!=="production"&&Y!==null&&typeof Y=="object"&&"ok"in Y&&typeof Y.ok=="boolean"){let l=Y;(l.ok===!0&&"value"in l||l.ok===!1&&"error"in l)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
1
|
+
var Te="STREAM_WRITE_ERROR",ge="STREAM_READ_ERROR",Ae="STREAM_CLOSE_ERROR",ke="STREAM_STORE_ERROR",Re="STREAM_ENDED",Se="STREAM_BACKPRESSURE_ERROR";function xe(e){return typeof e=="object"&&e!==null&&e.type===Re}function qe(e){return typeof e=="object"&&e!==null&&e.type===Te}function ze(e){return typeof e=="object"&&e!==null&&e.type===ge}function Ye(e){return typeof e=="object"&&e!==null&&e.type===ke}function Je(e){return typeof e=="object"&&e!==null&&e.type===Se}function Ge(e,t,n){return{type:Te,reason:e,message:t,...n!==void 0?{cause:n}:{}}}function ce(e,t,n){return{type:ge,reason:e,message:t,...n!==void 0?{cause:n}:{}}}function Xe(e,t,n){return{type:Ae,reason:e,message:t,...n!==void 0?{cause:n}:{}}}function W(e,t,n){return{type:ke,reason:e,message:t,...n!==void 0?{cause:n}:{}}}function le(e){return{type:Re,finalPosition:e}}function Qe(e,t){return{type:Se,bufferedCount:e,highWaterMark:t}}function Ze(e={}){let t=e.highWaterMark??16,n=e.lowWaterMark??Math.floor(t/2),c=e.onStateChange,w="flowing",d=0,p=[];function u(r){if(w!==r&&(w=r,c?.(r),r==="flowing"&&p.length>0)){let M=p;p=[];for(let I of M)I()}}function m(){w==="flowing"&&d>=t?u("paused"):w==="paused"&&d<=n&&u("flowing")}return{get state(){return w},get bufferedCount(){return d},get highWaterMark(){return t},get lowWaterMark(){return n},increment(){d++,m()},decrement(){d>0&&(d--,m())},setCount(r){d=Math.max(0,r),m()},waitForDrain(){return w==="flowing"?Promise.resolve():new Promise(r=>{p.push(r)})},reset(){d=0,p=[],u("flowing")}}}function et(e){return e.state==="paused"}var ae=class extends Error{_tag};function $(e,t){return class extends ae{_tag=e;constructor(n,c){let w=t?.message?t.message(n??{}):e;if(super(w),this.name=e,Object.setPrototypeOf(this,new.target.prototype),n&&typeof n=="object"){let{_tag:d,name:p,message:u,stack:m,...r}=n,M=Object.prototype.hasOwnProperty.call(r,"cause"),I=M?r.cause:void 0;M&&delete r.cause;let j=c?.cause!==void 0;if(M&&j)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,r),M&&(this.cause=I),j&&(this.cause=c?.cause)}else c?.cause!==void 0&&(this.cause=c.cause)}}}Object.defineProperty($,Symbol.hasInstance,{value:e=>e instanceof ae});(w=>{function e(d){return d instanceof Error}w.isError=e;function t(d){return d instanceof ae}w.isTaggedError=t;function n(d,p){let u=d._tag,m=p[u];return m(d)}w.match=n;function c(d,p,u){let m=d._tag,r=p[m];return r?r(d):u(d)}w.matchPartial=c})($||={});var Ie=class extends $("TimeoutError",{message:t=>t.operation?`TimeoutError: ${t.operation} timed out after ${t.ms}ms`:`TimeoutError: Operation timed out after ${t.ms}ms`}){},_e=class extends $("RetryExhaustedError",{message:t=>t.operation?`RetryExhaustedError: ${t.operation} failed after ${t.attempts} attempts`:`RetryExhaustedError: Operation failed after ${t.attempts} attempts`}){},Me=class extends $("RateLimitError",{message:t=>t.limiterName?`RateLimitError: Rate limit exceeded for ${t.limiterName}${t.retryAfterMs?`, retry after ${t.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${t.retryAfterMs?`, retry after ${t.retryAfterMs}ms`:""}`}){},Pe=class extends $("CircuitBreakerOpenError",{message:t=>`CircuitBreakerOpenError: Circuit ${t.circuitName} is ${t.state??"OPEN"}${t.retryAfterMs?`, retry after ${Math.ceil(t.retryAfterMs/1e3)}s`:""}`}){},Oe=class extends $("ValidationError",{message:t=>`ValidationError: Invalid ${t.field} - ${t.reason}`}){},ve=class extends $("NotFoundError",{message:t=>t.id?`NotFoundError: ${t.resource} with id ${t.id} not found`:`NotFoundError: ${t.resource} not found`}){},De=class extends $("UnauthorizedError",{message:t=>t.reason?`UnauthorizedError: ${t.reason}`:t.action&&t.resource?`UnauthorizedError: Not authorized to ${t.action} ${t.resource}`:"UnauthorizedError: Access denied"}){},Ue=class extends $("NetworkError",{message:t=>t.url?`NetworkError: ${t.reason} (${t.url})`:`NetworkError: ${t.reason}`}){},Fe=class extends $("CompensationError",{message:t=>`CompensationError: Failed to compensate step ${t.step}`}){},pe=class extends $("UnexpectedError",{message:t=>`UnexpectedError: ${t.cause instanceof Error?t.cause.message:String(t.cause??"unknown")}`}){};function tt(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let n=parseFloat(t[1]),c=t[2].toLowerCase();return{_tag:"Duration",millis:n*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[c]??1)}}function rt(e){return new pe({cause:e})}function U(e){return{ok:!0,value:e}}function P(e,t){let n=t?.cause;return{ok:!1,error:e,...n!==void 0?{cause:n}:{}}}function nt(e){if(e==null)return"unknown";if(typeof e=="string")return e.trim()||"unknown";if(typeof e=="object"){let t=e;if(typeof t._tag=="string"){let n=t._tag.trim();if(n)return n}if(typeof t.tag=="string"){let n=t.tag.trim();if(n)return n}if(typeof t.code=="string"){let n=t.code.trim();if(n)return n}else if(typeof t.code=="number")return String(t.code);if(e instanceof Error&&e.name){let n=e.name.trim();if(n)return n}}return"unknown"}function ot(e,t){if(!(!t||!e))return t[e]}function st(e){let{intent:t,domain:n,owner:c,tags:w,stateChanges:d,emits:p,calls:u}=e;if(!t&&!n&&!c&&!w?.length&&!d?.length&&!p?.length&&!u?.length)return;let m={};return t&&(m.intent=t),n&&(m.domain=n),c&&(m.owner=c),w?.length&&(m.tags=w),d?.length&&(m.stateChanges=d),p?.length&&(m.emits=p),u?.length&&(m.calls=u),m}function q(e,t,n,c,w){let d=nt(e),p=ot(d,t),u={tag:d,origin:n};return p!==void 0&&(u.classification=p),c!==void 0&&(u.attempt=c),w!==void 0&&(u.cumulativeDurationMs=w),u}var oe=Symbol.for("step_timeout_marker");function Ne(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:oe in e}function at(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let t=e;return{timeoutMs:t.timeoutMs,stepName:t.stepName,stepKey:t.stepKey,attempt:t.attempt}}if(oe in e)return e[oe]}}var We=Symbol("early-exit");function it(e,t){return{[We]:!0,error:e,meta:t}}function ut(e){return typeof e=="object"&&e!==null&&e[We]===!0}var $e=Symbol("mapper-exception");function re(e){return{[$e]:!0,thrown:e}}function ct(e){return typeof e=="object"&&e!==null&&e[$e]===!0}function be(e,t){let{backoff:n,initialDelay:c,maxDelay:w,jitter:d}=t,p;switch(n){case"fixed":p=c;break;case"linear":p=c*e;break;case"exponential":p=c*Math.pow(2,e-1);break}if(p=Math.min(p,w),d){let u=p*.25*Math.random();p=p+u}return Math.floor(p)}function Ce(e){return new Promise(t=>setTimeout(t,e))}var Be=Symbol("timeout"),me=Symbol("timeout-option");function lt(e){return typeof e=="object"&&e!==null&&e[me]===!0}async function pt(e,t,n,c){let w=new AbortController,d=t.onTimeout??"error",p=()=>typeof d=="function"?d({name:n.name,key:n.key,ms:t.ms}):t.error??{type:"STEP_TIMEOUT",stepName:n.name,stepKey:n.key,timeoutMs:t.ms,attempt:n.attempt},u;c?.aborted&&w.abort(c.reason);let m;c&&!c.aborted&&(m=()=>w.abort(c.reason),c.addEventListener("abort",m,{once:!0}));let r=new Promise((I,j)=>{u=setTimeout(()=>{if(d!=="disconnect"&&w.abort(),d==="option"){j({[me]:!0,ms:t.ms});return}j({[Be]:!0,error:p()})},t.ms)}),M;t.signal?M=Promise.resolve(e(w.signal)):M=Promise.resolve(e());try{return await Promise.race([M,r])}catch(I){if(typeof I=="object"&&I!==null&&I[me]===!0)throw{[me]:!0,ms:t.ms};if(typeof I=="object"&&I!==null&&I[Be]===!0){d==="disconnect"&&M.catch(()=>{});let j=I.error;if(typeof j=="object"&&j!==null&&j.type!=="STEP_TIMEOUT"){let b={timeoutMs:t.ms,stepName:n.name,stepKey:n.key,attempt:n.attempt};oe in j?j[oe]=b:Object.defineProperty(j,oe,{value:b,enumerable:!1,writable:!0,configurable:!1})}throw j}throw I}finally{clearTimeout(u),m&&c&&c.removeEventListener("abort",m)}}var ne={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Ke(e,t){let{onError:n,onEvent:c,catchUnexpected:w,workflowId:d,workflowName:p,context:u,_workflowSignal:m}=t&&typeof t=="object"?t:{},r=d??crypto.randomUUID(),M=w??rt,I=[],j=0,b=f=>f??`step_${++j}`,s=f=>{let z=f.context!==void 0||u===void 0?f:{...f,context:u},X=p!==void 0&&z.workflowName===void 0?{...z,workflowName:p}:z;if(X.type==="step_success"){let ie=X.stepId;for(let ue=I.length-1;ue>=0;ue--){let Y=I[ue];if(Y.type==="race"&&!Y.winnerId){Y.winnerId=ie;break}}}c?.(X,u)},g=it,v=f=>ut(f),N=(f,z)=>f,H=f=>typeof f=="function"?!1:!!(f&&typeof f=="object"&&"ok"in f||f&&typeof f=="object"&&"then"in f&&typeof f.then=="function");try{let z=function(l){let T={};for(let[i,a]of Object.entries(l))if(typeof a=="function")T[i]=a;else if(a&&typeof a=="object"&&"fn"in a)T[i]=a.fn;else throw new TypeError(`step.parallel: operation "${i}" must be a function or { fn, errors? } object`);return T},X=function(l,T){let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let a=performance.now(),o=!1;I.push({scopeId:i,type:"parallel"});let E=()=>{if(o)return;o=!0;let y=I.findIndex(k=>k.scopeId===i);y!==-1&&I.splice(y,1),s({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-a})};s({type:"scope_start",workflowId:r,scopeId:i,scopeType:"parallel",name:l,ts:Date.now()});try{let y=await T();if(E(),!y.ok)throw n?.(y.error,l,u),g(y.error,{origin:"result",resultCause:y.cause});return y.value}catch(y){throw E(),y}})()},ie=function(l,T){let i=Object.keys(l),a=T.name??`Parallel(${i.join(", ")})`,o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let E=performance.now(),y=!1;I.push({scopeId:o,type:"parallel"});let k=()=>{if(y)return;y=!0;let R=I.findIndex(S=>S.scopeId===o);R!==-1&&I.splice(R,1),s({type:"scope_end",workflowId:r,scopeId:o,ts:Date.now(),durationMs:performance.now()-E})};s({type:"scope_start",workflowId:r,scopeId:o,scopeType:"parallel",name:a,ts:Date.now()});try{let R=await new Promise(C=>{if(i.length===0){C([]);return}let D=!1,K=i.length,h=new Array(i.length);for(let B=0;B<i.length;B++){let A=i[B],O=B;Promise.resolve(l[A]()).catch(_=>P({type:"PROMISE_REJECTED",cause:_},{cause:{type:"PROMISE_REJECTION",reason:_}})).then(_=>{if(!D){if(!_.ok){D=!0,C([{key:A,result:_}]);return}h[O]={key:A,result:_},K--,K===0&&C(h)}})}});k();let S={};for(let{key:C,result:D}of R){if(!D.ok)throw n?.(D.error,C,u),g(D.error,{origin:"result",resultCause:D.cause});S[C]=D.value}return S}catch(R){throw k(),R}})()};var J=z,te=X,he=ie;let f=(l,T,i)=>(async()=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let a=i??{},o=st(a),E=l,y=a.key??l,k=a.key??l,{description:R,retry:S,timeout:C}=a,D=b(y),K=c,h=K?performance.now():0,A=H(T)?()=>T:T,_={attempts:Math.max(1,S?.attempts??1),backoff:S?.backoff??ne.backoff,initialDelay:S?.initialDelay??ne.initialDelay,maxDelay:S?.maxDelay??ne.maxDelay,jitter:S?.jitter??ne.jitter,retryOn:S?.retryOn??ne.retryOn,onRetry:S?.onRetry??ne.onRetry};c&&s({type:"step_start",workflowId:r,stepId:D,stepKey:y,name:E,description:R,ts:Date.now(),...o&&{metadata:o}});let ee;for(let F=1;F<=_.attempts;F++){let Ve=K?performance.now():0;try{let x;if(C?x=await pt(A,C,{name:E,key:y,attempt:F},m):x=await A(),x.ok){let Z=performance.now()-h;return s({type:"step_success",workflowId:r,stepId:D,stepKey:y,name:E,description:R,ts:Date.now(),durationMs:Z,...o&&{metadata:o}}),k&&s({type:"step_complete",workflowId:r,stepKey:k,name:E,description:R,ts:Date.now(),durationMs:Z,result:x,...o&&{metadata:o}}),x.value}if(ee=x,F<_.attempts&&_.retryOn(x.error,F)){let Z=be(F,_);s({type:"step_retry",workflowId:r,stepId:D,stepKey:y,name:E,ts:Date.now(),attempt:F+1,maxAttempts:_.attempts,delayMs:Z,error:x.error,...o&&{metadata:o},diagnostics:q(x.error,a.errorMeta,"result",F,performance.now()-h)}),_.onRetry(x.error,F,Z),await Ce(Z);continue}_.attempts>1&&s({type:"step_retries_exhausted",workflowId:r,stepId:D,stepKey:y,name:E,ts:Date.now(),durationMs:performance.now()-h,attempts:F,lastError:x.error,...o&&{metadata:o},diagnostics:q(x.error,a.errorMeta,"result",F,performance.now()-h)});break}catch(x){let Z=performance.now()-Ve;if(lt(x)){let G=x.ms;s({type:"step_timeout",workflowId:r,stepId:D,stepKey:y,name:E,ts:Date.now(),timeoutMs:G,attempt:F,...o&&{metadata:o},diagnostics:q(x,a.errorMeta,"timeout",F)}),s({type:"step_success",workflowId:r,stepId:D,stepKey:y,name:E,description:R,ts:Date.now(),durationMs:performance.now()-h,...o&&{metadata:o}}),k&&s({type:"step_complete",workflowId:r,stepKey:k,name:E,description:R,ts:Date.now(),durationMs:performance.now()-h,result:U(void 0),...o&&{metadata:o}});return}if(v(x))throw s({type:"step_aborted",workflowId:r,stepId:D,stepKey:y,name:E,description:R,ts:Date.now(),durationMs:Z,...o&&{metadata:o}}),x;if(Ne(x)){let G=at(x),He=C?.ms??G?.timeoutMs??0;if(s({type:"step_timeout",workflowId:r,stepId:D,stepKey:y,name:E,ts:Date.now(),timeoutMs:He,attempt:F,...o&&{metadata:o},diagnostics:q(x,a.errorMeta,"timeout",F)}),F<_.attempts&&_.retryOn(x,F)){let we=be(F,_);s({type:"step_retry",workflowId:r,stepId:D,stepKey:y,name:E,ts:Date.now(),attempt:F+1,maxAttempts:_.attempts,delayMs:we,error:x,...o&&{metadata:o},diagnostics:q(x,a.errorMeta,"timeout",F,performance.now()-h)}),_.onRetry(x,F,we),await Ce(we);continue}_.attempts>1&&s({type:"step_retries_exhausted",workflowId:r,stepId:D,stepKey:y,name:E,ts:Date.now(),durationMs:performance.now()-h,attempts:F,lastError:x,...o&&{metadata:o},diagnostics:q(x,a.errorMeta,"timeout",F,performance.now()-h)});let fe=performance.now()-h;throw s({type:"step_error",workflowId:r,stepId:D,stepKey:y,name:E,description:R,ts:Date.now(),durationMs:fe,error:x,...o&&{metadata:o},diagnostics:q(x,a.errorMeta,"timeout",F,fe)}),k&&s({type:"step_complete",workflowId:r,stepKey:k,name:E,description:R,ts:Date.now(),durationMs:fe,result:P(x,{cause:x}),meta:{origin:"throw",thrown:x},...o&&{metadata:o}}),n?.(x,E,u),g(x,{origin:"throw",thrown:x})}if(F<_.attempts&&_.retryOn(x,F)){let G=be(F,_);s({type:"step_retry",workflowId:r,stepId:D,stepKey:y,name:E,ts:Date.now(),attempt:F+1,maxAttempts:_.attempts,delayMs:G,error:x,...o&&{metadata:o},diagnostics:q(x,a.errorMeta,"throw",F,performance.now()-h)}),_.onRetry(x,F,G),await Ce(G);continue}_.attempts>1&&!Ne(x)&&s({type:"step_retries_exhausted",workflowId:r,stepId:D,stepKey:y,name:E,ts:Date.now(),durationMs:performance.now()-h,attempts:F,lastError:x,...o&&{metadata:o},diagnostics:q(x,a.errorMeta,"throw",F,performance.now()-h)});let ye=performance.now()-h,se;try{se=M(x)}catch(G){throw re(G)}throw s({type:"step_error",workflowId:r,stepId:D,stepKey:y,name:E,description:R,ts:Date.now(),durationMs:ye,error:se,...o&&{metadata:o},diagnostics:q(x,a.errorMeta,"throw",F,ye)}),k&&s({type:"step_complete",workflowId:r,stepKey:k,name:E,description:R,ts:Date.now(),durationMs:ye,result:P(se,{cause:x}),meta:{origin:"throw",thrown:x},...o&&{metadata:o}}),n?.(se,E,u),g(se,{origin:"throw",thrown:x})}}let Q=ee,de=performance.now()-h,Ee=N(Q.error,{origin:"result",resultCause:Q.cause});throw s({type:"step_error",workflowId:r,stepId:D,stepKey:y,name:E,description:R,ts:Date.now(),durationMs:de,error:Ee,...o&&{metadata:o},diagnostics:q(Q.error,a.errorMeta,"result",_.attempts,de)}),k&&s({type:"step_complete",workflowId:r,stepKey:k,name:E,description:R,ts:Date.now(),durationMs:de,result:Q,meta:{origin:"result",resultCause:Q.cause},...o&&{metadata:o}}),n?.(Ee,E,u),g(Ee,{origin:"result",resultCause:Q.cause})})();f.try=(l,T,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let a=i.key??l,o=l,E=l,y="error"in i?()=>i.error:i.onError,k=c;return(async()=>{let R=k?performance.now():0;c&&s({type:"step_start",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now()});try{let S=await T(),C=performance.now()-R;return s({type:"step_success",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:C}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:C,result:U(S)}),S}catch(S){let C=y(S),D=performance.now()-R,K=N(C,{origin:"throw",thrown:S});throw s({type:"step_error",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:D,error:K}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:D,result:P(C,{cause:S}),meta:{origin:"throw",thrown:S}}),n?.(K,o,u),g(K,{origin:"throw",thrown:S})}})()},f.fromResult=(l,T,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let a=i.key??l,o=l,E=l,y="error"in i?()=>i.error:i.onError,k=c;return(async()=>{let R=k?performance.now():0;c&&s({type:"step_start",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now()});let S=await T();if(S.ok){let C=performance.now()-R;return s({type:"step_success",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:C}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:C,result:U(S.value)}),S.value}else{let C=y(S.error),D=performance.now()-R,K=N(C,{origin:"result",resultCause:S.error});throw s({type:"step_error",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:D,error:K}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:D,result:P(C,{cause:S.error}),meta:{origin:"result",resultCause:S.error}}),n?.(K,o,u),g(K,{origin:"result",resultCause:S.error})}})()},f.fromNullable=(l,T,i,a)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return f(l,async()=>{let o=await T();return o!=null?U(o):P(i())},a)},f.retry=(l,T,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return f(l,T,{key:i.key??l,retry:{attempts:i.attempts,backoff:i.backoff,initialDelay:i.initialDelay,maxDelay:i.maxDelay,jitter:i.jitter,retryOn:i.retryOn,onRetry:i.onRetry},timeout:i.timeout})},f.withTimeout=(l,T,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return f(l,T,{key:i.key??l,timeout:i})},f.sleep=(l,T,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let a=typeof T=="string"?tt(T):T;if(!a)throw new Error(`step.sleep: invalid duration '${T}'`);let o=a.millis,E=i?.signal;return f(l,async()=>{if(m?.aborted||E?.aborted){let y=new Error("Sleep aborted");throw y.name="AbortError",y}return new Promise((y,k)=>{let R={timeoutId:void 0},S=()=>{R.timeoutId&&clearTimeout(R.timeoutId);let C=new Error("Sleep aborted");C.name="AbortError",k(C)};m?.addEventListener("abort",S,{once:!0}),E?.addEventListener("abort",S,{once:!0}),R.timeoutId=setTimeout(()=>{m?.removeEventListener("abort",S),E?.removeEventListener("abort",S),y(U(void 0))},o)})},{key:i?.key??l,description:i?.description})},f.parallel=((...l)=>{if(typeof l[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let T=l[0],i=l[1];if(typeof i=="function")return X(T,i);if(i&&typeof i=="object"&&!Array.isArray(i)){let o=z(i);return ie(o,{name:T})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),f.race=(l,T)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let a=performance.now(),o=!1,E={scopeId:i,type:"race",winnerId:void 0};I.push(E);let y=()=>{if(o)return;o=!0;let k=I.findIndex(R=>R.scopeId===i);k!==-1&&I.splice(k,1),s({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-a,winnerId:E.winnerId})};s({type:"scope_start",workflowId:r,scopeId:i,scopeType:"race",name:l,ts:Date.now()});try{let k=await T();if(y(),!k.ok)throw n?.(k.error,l,u),g(k.error,{origin:"result",resultCause:k.cause});return k.value}catch(k){throw y(),k}})()},f.allSettled=(l,T)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let a=performance.now(),o=!1;I.push({scopeId:i,type:"allSettled"});let E=()=>{if(o)return;o=!0;let y=I.findIndex(k=>k.scopeId===i);y!==-1&&I.splice(y,1),s({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-a})};s({type:"scope_start",workflowId:r,scopeId:i,scopeType:"allSettled",name:l,ts:Date.now()});try{let y=await T();if(E(),!y.ok)throw n?.(y.error,l,u),g(y.error,{origin:"result",resultCause:y.cause});return y.value}catch(y){throw E(),y}})()},f.if=(l,T,i)=>i(),f.label=f.if,f.branch=async(l,T)=>{let{condition:i,then:a,else:o}=T;if(i())return await a();if(o)return await o()},f.arm=(l,T)=>({fn:l,errors:T}),f.forEach=async(l,T,i)=>{let a=[],o=i.maxIterations,E=0,y="run"in i,k=Symbol.asyncIterator in T?T:(async function*(){yield*T})();for await(let R of k){if(o!==void 0&&E>=o)break;let S;y?S=await i.run(R,E):S=await i.item.handler(R,E,f),a.push(S),E++}return a},f.item=l=>({__forEachItemHandler:!0,handler:l}),f.dep=(l,T)=>T,f.run=(l,T,i)=>f(l,()=>T,i),f.workflow=(l,T,i)=>f(l,T,i),f.andThen=(l,T,i,a)=>f(l,()=>i(T),a),f.match=async(l,T,i,a)=>f(l,async()=>{let o=await T;return o.ok?U(await i.ok(o.value)):U(await i.err(o.error,o.cause))},a),f.all=f.parallel,f.map=async(l,T,i,a)=>{let o=a?.concurrency??T.length;return f(l,()=>o>=T.length?je(T.map((E,y)=>i(E,y))):(async()=>{let E=[];for(let y=0;y<T.length;y+=o){let k=T.slice(y,y+o),R=await je(k.map((S,C)=>i(S,y+C)));if(!R.ok)return R;E.push(...R.value)}return U(E)})(),{key:a?.key})},f.withFallback=(l,T,i)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let a=i.key??l,o=l,E=b(a),y=c;return(async()=>{let k=y?performance.now():0;c&&s({type:"step_start",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now()});let R;try{R=await T()}catch(h){if(v(h))throw s({type:"step_aborted",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:performance.now()-k}),h;let B;try{B=M(h)}catch(O){throw re(O)}if(i.on!==void 0&&i.on!==B){let O=performance.now()-k;throw s({type:"step_error",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:O,error:B}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:O,result:P(B,{cause:h}),meta:{origin:"throw",thrown:h}}),n?.(B,o,u),g(B,{origin:"throw",thrown:h})}let A;try{A=await i.fallback()}catch(O){if(v(O))throw s({type:"step_aborted",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:performance.now()-k}),O;let _;try{_=M(O)}catch(Q){throw re(Q)}let ee=performance.now()-k;throw s({type:"step_error",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:ee,error:_}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:ee,result:P(_,{cause:O}),meta:{origin:"throw",thrown:O}}),n?.(_,o,u),g(_,{origin:"throw",thrown:O})}if(A.ok){let O=performance.now()-k;return s({type:"step_success",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:O}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:O,result:A,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(B)}}),A.value}else{let O=performance.now()-k,_=N(A.error,{origin:"result",resultCause:A.cause});throw s({type:"step_error",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:O,error:_}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:O,result:A,meta:{origin:"result",resultCause:A.cause}}),n?.(_,o,u),g(_,{origin:"result",resultCause:A.cause})}}if(R.ok){let h=performance.now()-k;return s({type:"step_success",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:h}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:h,result:R}),R.value}let S=R.error;if(i.on!==void 0&&i.on!==S){let h=performance.now()-k,B=N(S,{origin:"result",resultCause:R.cause});throw s({type:"step_error",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:h,error:B}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:h,result:R,meta:{origin:"result",resultCause:R.cause}}),n?.(B,o,u),g(B,{origin:"result",resultCause:R.cause})}let C;try{C=await i.fallback()}catch(h){if(v(h))throw s({type:"step_aborted",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:performance.now()-k}),h;let B;try{B=M(h)}catch(O){throw re(O)}let A=performance.now()-k;throw s({type:"step_error",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:A,error:B}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:A,result:P(B,{cause:h}),meta:{origin:"throw",thrown:h}}),n?.(B,o,u),g(B,{origin:"throw",thrown:h})}if(C.ok){let h=performance.now()-k;return s({type:"step_success",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:h}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:h,result:C,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(S)}}),C.value}let D=performance.now()-k,K=N(C.error,{origin:"result",resultCause:C.cause});throw s({type:"step_error",workflowId:r,stepId:E,stepKey:a,name:o,ts:Date.now(),durationMs:D,error:K}),a&&s({type:"step_complete",workflowId:r,stepKey:a,name:o,ts:Date.now(),durationMs:D,result:C,meta:{origin:"result",resultCause:C.cause}}),n?.(K,o,u),g(K,{origin:"result",resultCause:C.cause})})()},f.withResource=(l,T)=>{if(typeof l!="string"||l.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let i=l,a=l,o=b(i),E=c;return(async()=>{let y=E?performance.now():0;c&&s({type:"step_start",workflowId:r,stepId:o,stepKey:i,name:a,ts:Date.now()});let k;try{k=await T.acquire()}catch(A){if(v(A))throw s({type:"step_aborted",workflowId:r,stepId:o,stepKey:i,name:a,ts:Date.now(),durationMs:performance.now()-y}),A;let O;try{O=M(A)}catch(ee){throw re(ee)}let _=performance.now()-y;throw s({type:"step_error",workflowId:r,stepId:o,stepKey:i,name:a,ts:Date.now(),durationMs:_,error:O}),i&&s({type:"step_complete",workflowId:r,stepKey:i,name:a,ts:Date.now(),durationMs:_,result:P(O,{cause:A}),meta:{origin:"throw",thrown:A}}),n?.(O,a,u),g(O,{origin:"throw",thrown:A})}if(!k.ok){let A=performance.now()-y,O=N(k.error,{origin:"result",resultCause:k.cause});throw s({type:"step_error",workflowId:r,stepId:o,stepKey:i,name:a,ts:Date.now(),durationMs:A,error:O}),i&&s({type:"step_complete",workflowId:r,stepKey:i,name:a,ts:Date.now(),durationMs:A,result:k,meta:{origin:"result",resultCause:k.cause}}),n?.(O,a,u),g(O,{origin:"result",resultCause:k.cause})}let R=k.value,S,C,D=!1;try{S=await T.use(R)}catch(A){if(v(A)){try{await T.release(R)}catch(O){console.warn(`[awaitly] step.withResource("${l}"): release threw after earlyExit:`,O)}throw A}C=A,D=!0}try{await T.release(R)}catch(A){console.warn(`[awaitly] step.withResource("${l}"): release threw:`,A)}if(D){let A;try{A=M(C)}catch(_){throw re(_)}let O=performance.now()-y;throw s({type:"step_error",workflowId:r,stepId:o,stepKey:i,name:a,ts:Date.now(),durationMs:O,error:A}),i&&s({type:"step_complete",workflowId:r,stepKey:i,name:a,ts:Date.now(),durationMs:O,result:P(A,{cause:C}),meta:{origin:"throw",thrown:C}}),n?.(A,a,u),g(A,{origin:"throw",thrown:C})}let K=S;if(K.ok){let A=performance.now()-y;return s({type:"step_success",workflowId:r,stepId:o,stepKey:i,name:a,ts:Date.now(),durationMs:A}),i&&s({type:"step_complete",workflowId:r,stepKey:i,name:a,ts:Date.now(),durationMs:A,result:K}),K.value}let h=performance.now()-y,B=N(K.error,{origin:"result",resultCause:K.cause});throw s({type:"step_error",workflowId:r,stepId:o,stepKey:i,name:a,ts:Date.now(),durationMs:h,error:B}),i&&s({type:"step_complete",workflowId:r,stepKey:i,name:a,ts:Date.now(),durationMs:h,result:K,meta:{origin:"result",resultCause:K.cause}}),n?.(B,a,u),g(B,{origin:"result",resultCause:K.cause})})()};let Y=await e({step:f});if(process.env.NODE_ENV!=="production"&&Y!==null&&typeof Y=="object"&&"ok"in Y&&typeof Y.ok=="boolean"){let l=Y;(l.ok===!0&&"value"in l||l.ok===!1&&"error"in l)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
2
2
|
|
|
3
3
|
Incorrect: return ok({ data });
|
|
4
4
|
Correct: return { data };
|
|
5
5
|
|
|
6
|
-
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return U(Y)}catch(
|
|
7
|
-
|
|
8
|
-
`).filter(Boolean),
|
|
6
|
+
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return U(Y)}catch(f){if(ct(f))throw f.thrown;if(v(f)){let X=f.meta.origin==="throw"?f.meta.thrown:f.meta.origin==="result"?f.meta.resultCause:void 0;return P(f.error,{cause:X})}let z=M(f);return n?.(z,"unexpected",u),P(z,{cause:f})}}Ke.strict=(e,t)=>Ke(e,t);async function je(e){return e.length===0?U([]):new Promise(t=>{let n=!1,c=e.length,w=new Array(e.length);for(let d=0;d<e.length;d++){let p=d;Promise.resolve(e[p]).catch(u=>P({type:"PROMISE_REJECTED",cause:u},{cause:{type:"PROMISE_REJECTION",reason:u}})).then(u=>{if(!n){if(!u.ok){n=!0,t(u);return}w[p]=u.value,c--,c===0&&t(U(w))}})}})}function Le(e={}){let t=e.maxItemsPerStream??1/0,n=new Map;function c(d,p){return`${d}:${p}`}function w(d,p){let u=c(d,p),m=n.get(u);return m||(m={metadata:{id:u,namespace:p,workflowId:d,length:0,closed:!1,createdAt:Date.now()},items:[],subscribers:new Set},n.set(u,m)),m}return{async append(d,p,u){try{let m=w(d,p);if(m.metadata.closed)return P(W("write_error","Cannot write to closed stream"));if(m.items.length>=t)return P(W("write_error",`Stream exceeded max items limit (${t})`));m.items.push(u),m.metadata.length=m.items.length,m.metadata.lastWriteAt=Date.now();for(let r of m.subscribers)try{r(u)}catch{}return U(void 0)}catch(m){return P(W("write_error","Failed to append item",m))}},async read(d,p,u,m){try{let r=c(d,p),M=n.get(r);if(!M)return U([]);let I=m!==void 0?Math.min(u+m,M.items.length):M.items.length,j=M.items.slice(u,I);return U(j)}catch(r){return P(W("read_error","Failed to read items",r))}},async getMetadata(d,p){try{let u=c(d,p),m=n.get(u);return U(m?.metadata)}catch(u){return P(W("metadata_error","Failed to get metadata",u))}},async closeStream(d,p){try{let u=c(d,p),m=n.get(u);return m&&(m.metadata.closed=!0,m.metadata.closedAt=Date.now()),U(void 0)}catch(u){return P(W("close_error","Failed to close stream",u))}},subscribe(d,p,u){let m=w(d,p),r=u;return m.subscribers.add(r),()=>{m.subscribers.delete(r)}}}}function mt(e={}){let t=new Map,n=e.maxItemsPerStream??1/0;function c(p,u){return`${p}:${u}`}function w(p,u){let m=c(p,u),r=t.get(m);return r||(r={metadata:{id:m,namespace:u,workflowId:p,length:0,closed:!1,createdAt:Date.now()},items:[],subscribers:new Set},t.set(m,r)),r}return{...Le(e),async append(p,u,m){try{let r=w(p,u);if(r.metadata.closed)return P(W("write_error","Cannot write to closed stream"));if(r.items.length>=n)return P(W("write_error",`Stream exceeded max items limit (${n})`));r.items.push(m),r.metadata.length=r.items.length,r.metadata.lastWriteAt=Date.now();for(let M of r.subscribers)try{M(m)}catch{}return U(void 0)}catch(r){return P(W("write_error","Failed to append item",r))}},async read(p,u,m,r){try{let M=c(p,u),I=t.get(M);if(!I)return U([]);let j=r!==void 0?Math.min(m+r,I.items.length):I.items.length,b=I.items.slice(m,j);return U(b)}catch(M){return P(W("read_error","Failed to read items",M))}},async getMetadata(p,u){try{let m=c(p,u),r=t.get(m);return U(r?.metadata)}catch(m){return P(W("metadata_error","Failed to get metadata",m))}},async closeStream(p,u){try{let m=c(p,u),r=t.get(m);return r&&(r.metadata.closed=!0,r.metadata.closedAt=Date.now()),U(void 0)}catch(m){return P(W("close_error","Failed to close stream",m))}},subscribe(p,u,m){let r=w(p,u),M=m;return r.subscribers.add(M),()=>{r.subscribers.delete(M)}},clear(){t.clear()},keys(){return Array.from(t.keys())},has(p,u){return t.has(c(p,u))},delete(p,u){return t.delete(c(p,u))}}}function dt(e){let{directory:t,fs:n}=e,c=new Map;function w(b,s){return`${t}/${b}/${s}`}function d(b,s){return`${w(b,s)}/metadata.json`}function p(b,s){return`${w(b,s)}/items.jsonl`}function u(b,s){return`${b}:${s}`}async function m(b,s){let g=w(b,s);await n.mkdir(g,{recursive:!0})}async function r(b,s){let g=d(b,s);if(!await n.exists(g))return;let v=await n.readFile(g);return JSON.parse(v)}async function M(b,s,g){await m(b,s);let v=d(b,s);await n.writeFile(v,JSON.stringify(g,null,2))}async function I(b,s,g){await m(b,s);let v=p(b,s),N=JSON.stringify(g)+`
|
|
7
|
+
`,H="";await n.exists(v)&&(H=await n.readFile(v)),await n.writeFile(v,H+N)}async function j(b,s,g,v){let N=p(b,s);if(!await n.exists(N))return[];let J=(await n.readFile(N)).trim().split(`
|
|
8
|
+
`).filter(Boolean),te=[];for(let he of J){let f=JSON.parse(he);if(f.position>=g&&(te.push(f),v!==void 0&&te.length>=v))break}return te}return{async append(b,s,g){try{let v=await r(b,s);if(v||(v={id:`${b}:${s}`,namespace:s,workflowId:b,length:0,closed:!1,createdAt:Date.now()}),v.closed)return P(W("write_error","Cannot write to closed stream"));let N={value:g.value,position:g.position,ts:g.ts};await I(b,s,N),v.length++,v.lastWriteAt=Date.now(),await M(b,s,v);let H=u(b,s),J=c.get(H);if(J)for(let te of J)try{te(g)}catch{}return U(void 0)}catch(v){return P(W("write_error","Failed to append item",v))}},async read(b,s,g,v){try{let H=(await j(b,s,g,v)).map(J=>({value:J.value,position:J.position,ts:J.ts}));return U(H)}catch(N){return P(W("read_error","Failed to read items",N))}},async getMetadata(b,s){try{let g=await r(b,s);return g?U({id:g.id,namespace:g.namespace,workflowId:g.workflowId,length:g.length,closed:g.closed,createdAt:g.createdAt,lastWriteAt:g.lastWriteAt,closedAt:g.closedAt}):U(void 0)}catch(g){return P(W("metadata_error","Failed to get metadata",g))}},async closeStream(b,s){try{let g=await r(b,s);return g&&(g.closed=!0,g.closedAt=Date.now(),await M(b,s,g)),U(void 0)}catch(g){return P(W("close_error","Failed to close stream",g))}},subscribe(b,s,g){let v=u(b,s),N=c.get(v);N||(N=new Set,c.set(v,N));let H=g;return N.add(H),()=>{N?.delete(H),N?.size===0&&c.delete(v)}}}}async function*L(e){for(;e.readable;){let t=await e.read();if(!t.ok){if(xe(t.error))break;throw t.error}yield t.value}}async function*Et(e,t){let n=V(e)?L(e):e,c=0;for await(let w of n)yield await t(w,c++)}async function*yt(e,t){let n=V(e)?L(e):e,c=0;for await(let w of n)await t(w,c++)&&(yield w)}async function*ft(e,t){if(t<1)throw new Error("Chunk size must be at least 1");let n=V(e)?L(e):e,c=[];for await(let w of n)c.push(w),c.length>=t&&(yield c,c=[]);c.length>0&&(yield c)}async function*wt(e,t){let n=V(e)?L(e):e,c=0;for await(let w of n){let d=t(w,c++);if(Symbol.asyncIterator in d)for await(let p of d)yield p;else for(let p of d)yield p}}async function*Tt(e,t){let n=V(e)?L(e):e,c=0;for await(let w of n){let d=await t(w,c++);if(!d.ok){yield P(d.error);return}let p=d.value;if(Symbol.asyncIterator in p)for await(let u of p)yield U(u);else for(let u of p)yield U(u)}}async function*gt(e,t){let n=V(e)?L(e):e,c=0;for await(let w of n)yield await t(w,c++)}async function*kt(e,t){if(t<=0)return;let n=V(e)?L(e):e,c=0;for await(let w of n)if(yield w,c++,c>=t)break}async function*Rt(e,t){let n=V(e)?L(e):e,c=0;for await(let w of n){if(c<t){c++;continue}yield w}}async function*St(e,t){let n=V(e)?L(e):e,c=0;for await(let w of n){if(!await t(w,c++))break;yield w}}async function*xt(e,t){let n=V(e)?L(e):e,c=!0,w=0;for await(let d of n)c&&await t(d,w++)||(c=!1,yield d)}async function bt(e){let t=[],n=V(e)?L(e):e;for await(let c of n)t.push(c);return t}async function Ct(e,t,n){let c=n,w=V(e)?L(e):e,d=0;for await(let p of w)c=await t(c,p,d++);return c}function V(e){return typeof e=="object"&&e!==null&&"read"in e&&typeof e.read=="function"&&"readable"in e}function ht(e,...t){let n=V(e)?L(e):e;for(let c of t)n=c(n);return n}function qt(e){let{store:t,workflowId:n,namespace:c="default",startIndex:w=0,pollInterval:d=100,pollTimeout:p=3e4}=e,u=w,m=!0,r=!1,M=[],I=0;return{async read(){if(r)return P(ce("closed","Reader is closed"));if(I<M.length){let s=M[I++];return u=s.position+1,U(s.value)}let b=Date.now();for(;Date.now()-b<p;){let s=await t.read(n,c,u,100);if(!s.ok)return P(ce("store_error",s.error.message,s.error));let g=s.value;if(g.length>0){M=g,I=1;let N=g[0];return u=N.position+1,U(N.value)}let v=await t.getMetadata(n,c);if(v.ok&&v.value?.closed)return m=!1,P(le(u));await new Promise(N=>setTimeout(N,d))}return m=!1,P(le(u))},close(){r=!0,m=!1,M=[]},get readable(){return m},get position(){return u},get namespace(){return c}}}export{Se as STREAM_BACKPRESSURE_ERROR,Ae as STREAM_CLOSE_ERROR,Re as STREAM_ENDED,ge as STREAM_READ_ERROR,ke as STREAM_STORE_ERROR,Te as STREAM_WRITE_ERROR,ft as chunk,bt as collect,Ze as createBackpressureController,dt as createFileStreamStore,Le as createMemoryStreamStore,mt as createTestableMemoryStreamStore,yt as filter,wt as flatMap,Tt as flatMapAsync,qt as getStreamReader,Je as isStreamBackpressureError,xe as isStreamEnded,ze as isStreamReadError,Ye as isStreamStoreError,qe as isStreamWriteError,Et as map,gt as mapAsync,ht as pipe,Ct as reduce,et as shouldApplyBackpressure,Rt as skip,xt as skipWhile,Qe as streamBackpressureError,Xe as streamCloseError,le as streamEnded,ce as streamReadError,W as streamStoreError,Ge as streamWriteError,kt as take,St as takeWhile,L as toAsyncIterable};
|
|
9
9
|
//# sourceMappingURL=streaming.js.map
|