awaitly 1.35.0 → 2.0.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/{duration.d.ts → di-BDlT7InM.d.cts} +15 -1
- package/dist/{duration.d.cts → di-BbFFfO8y.d.ts} +15 -1
- package/dist/errors-DtXvrCiO.d.cts +708 -0
- package/dist/errors-DtXvrCiO.d.ts +708 -0
- package/dist/index.cjs +4594 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1970 -141
- package/dist/index.d.ts +1970 -141
- package/dist/index.js +4398 -1
- package/dist/index.js.map +1 -1
- package/dist/result.cjs +641 -1
- package/dist/result.cjs.map +1 -1
- package/dist/result.d.cts +29 -4
- package/dist/result.d.ts +29 -4
- package/dist/result.js +561 -1
- package/dist/result.js.map +1 -1
- package/dist/testing.cjs +4202 -8
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +2 -6
- package/dist/testing.d.ts +2 -6
- package/dist/testing.js +4154 -8
- package/dist/testing.js.map +1 -1
- package/dist/{run-entry-DGs0tySr.d.cts → types-B8NfNRGX.d.ts} +1078 -1502
- package/dist/{run-entry-BOuNyVoO.d.ts → types-BZ2f4MRR.d.cts} +1078 -1502
- package/dist/workflow.cjs +7096 -6
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +3346 -22
- package/dist/workflow.d.ts +3346 -22
- package/dist/workflow.js +6929 -6
- package/dist/workflow.js.map +1 -1
- package/package.json +3 -168
- package/dist/adapters.cjs +0 -7
- package/dist/adapters.cjs.map +0 -1
- package/dist/adapters.d.cts +0 -179
- package/dist/adapters.d.ts +0 -179
- package/dist/adapters.js +0 -7
- package/dist/adapters.js.map +0 -1
- package/dist/batch.cjs +0 -7
- package/dist/batch.cjs.map +0 -1
- package/dist/batch.d.cts +0 -200
- package/dist/batch.d.ts +0 -200
- package/dist/batch.js +0 -7
- package/dist/batch.js.map +0 -1
- package/dist/bind-deps.cjs +0 -2
- package/dist/bind-deps.cjs.map +0 -1
- package/dist/bind-deps.d.cts +0 -28
- package/dist/bind-deps.d.ts +0 -28
- package/dist/bind-deps.js +0 -2
- package/dist/bind-deps.js.map +0 -1
- package/dist/cache.cjs +0 -2
- package/dist/cache.cjs.map +0 -1
- package/dist/cache.d.cts +0 -269
- package/dist/cache.d.ts +0 -269
- package/dist/cache.js +0 -2
- package/dist/cache.js.map +0 -1
- package/dist/circuit-breaker.cjs +0 -7
- package/dist/circuit-breaker.cjs.map +0 -1
- package/dist/circuit-breaker.d.cts +0 -211
- package/dist/circuit-breaker.d.ts +0 -211
- package/dist/circuit-breaker.js +0 -7
- package/dist/circuit-breaker.js.map +0 -1
- package/dist/conditional.cjs +0 -2
- package/dist/conditional.cjs.map +0 -1
- package/dist/conditional.d.cts +0 -252
- package/dist/conditional.d.ts +0 -252
- package/dist/conditional.js +0 -2
- package/dist/conditional.js.map +0 -1
- package/dist/core.cjs +0 -7
- package/dist/core.cjs.map +0 -1
- package/dist/core.d.cts +0 -5
- package/dist/core.d.ts +0 -5
- package/dist/core.js +0 -7
- package/dist/core.js.map +0 -1
- package/dist/di-By77n4Fa.d.ts +0 -15
- package/dist/di-OJfsohf-.d.cts +0 -15
- package/dist/diagnostics.cjs +0 -8
- package/dist/diagnostics.cjs.map +0 -1
- package/dist/diagnostics.d.cts +0 -68
- package/dist/diagnostics.d.ts +0 -68
- package/dist/diagnostics.js +0 -8
- package/dist/diagnostics.js.map +0 -1
- package/dist/durable.cjs +0 -11
- package/dist/durable.cjs.map +0 -1
- package/dist/durable.d.cts +0 -9
- package/dist/durable.d.ts +0 -9
- package/dist/durable.js +0 -11
- package/dist/durable.js.map +0 -1
- package/dist/duration.cjs +0 -2
- package/dist/duration.cjs.map +0 -1
- package/dist/duration.js +0 -2
- package/dist/duration.js.map +0 -1
- package/dist/engine.cjs +0 -11
- package/dist/engine.cjs.map +0 -1
- package/dist/engine.d.cts +0 -115
- package/dist/engine.d.ts +0 -115
- package/dist/engine.js +0 -11
- package/dist/engine.js.map +0 -1
- package/dist/errors.cjs +0 -2
- package/dist/errors.cjs.map +0 -1
- package/dist/errors.d.cts +0 -361
- package/dist/errors.d.ts +0 -361
- package/dist/errors.js +0 -2
- package/dist/errors.js.map +0 -1
- package/dist/fetch.cjs +0 -7
- package/dist/fetch.cjs.map +0 -1
- package/dist/fetch.d.cts +0 -86
- package/dist/fetch.d.ts +0 -86
- package/dist/fetch.js +0 -7
- package/dist/fetch.js.map +0 -1
- package/dist/flow.cjs +0 -7
- package/dist/flow.cjs.map +0 -1
- package/dist/flow.d.cts +0 -163
- package/dist/flow.d.ts +0 -163
- package/dist/flow.js +0 -7
- package/dist/flow.js.map +0 -1
- package/dist/functional.cjs +0 -2
- package/dist/functional.cjs.map +0 -1
- package/dist/functional.d.cts +0 -444
- package/dist/functional.d.ts +0 -444
- package/dist/functional.js +0 -2
- package/dist/functional.js.map +0 -1
- package/dist/guards-4sV7mTqj.d.cts +0 -72
- package/dist/guards-BIX05ALH.d.ts +0 -72
- package/dist/hitl-DFn4Xa_l.d.cts +0 -468
- package/dist/hitl-DU5VpKq7.d.ts +0 -468
- package/dist/hitl.cjs +0 -7
- package/dist/hitl.cjs.map +0 -1
- package/dist/hitl.d.cts +0 -442
- package/dist/hitl.d.ts +0 -442
- package/dist/hitl.js +0 -7
- package/dist/hitl.js.map +0 -1
- package/dist/index-CnvBryQB.d.ts +0 -417
- package/dist/index-DEZEf8Fs.d.cts +0 -417
- package/dist/match-entry-DjI2bLpD.d.cts +0 -209
- package/dist/match-entry-DjI2bLpD.d.ts +0 -209
- package/dist/match.cjs +0 -2
- package/dist/match.cjs.map +0 -1
- package/dist/match.d.cts +0 -1
- package/dist/match.d.ts +0 -1
- package/dist/match.js +0 -2
- package/dist/match.js.map +0 -1
- package/dist/otel.cjs +0 -2
- package/dist/otel.cjs.map +0 -1
- package/dist/otel.d.cts +0 -188
- package/dist/otel.d.ts +0 -188
- package/dist/otel.js +0 -2
- package/dist/otel.js.map +0 -1
- package/dist/persistence-entry-B-8PjnSR.d.cts +0 -831
- package/dist/persistence-entry-D8zRkLiT.d.ts +0 -831
- package/dist/persistence.cjs +0 -2
- package/dist/persistence.cjs.map +0 -1
- package/dist/persistence.d.cts +0 -7
- package/dist/persistence.d.ts +0 -7
- package/dist/persistence.js +0 -2
- package/dist/persistence.js.map +0 -1
- package/dist/policies.cjs +0 -2
- package/dist/policies.cjs.map +0 -1
- package/dist/policies.d.cts +0 -379
- package/dist/policies.d.ts +0 -379
- package/dist/policies.js +0 -2
- package/dist/policies.js.map +0 -1
- package/dist/ratelimit.cjs +0 -7
- package/dist/ratelimit.cjs.map +0 -1
- package/dist/ratelimit.d.cts +0 -458
- package/dist/ratelimit.d.ts +0 -458
- package/dist/ratelimit.js +0 -7
- package/dist/ratelimit.js.map +0 -1
- package/dist/reliability.cjs +0 -11
- package/dist/reliability.cjs.map +0 -1
- package/dist/reliability.d.cts +0 -11
- package/dist/reliability.d.ts +0 -11
- package/dist/reliability.js +0 -11
- package/dist/reliability.js.map +0 -1
- package/dist/resolver.cjs +0 -7
- package/dist/resolver.cjs.map +0 -1
- package/dist/resolver.d.cts +0 -68
- package/dist/resolver.d.ts +0 -68
- package/dist/resolver.js +0 -7
- package/dist/resolver.js.map +0 -1
- package/dist/resource.cjs +0 -7
- package/dist/resource.cjs.map +0 -1
- package/dist/resource.d.cts +0 -174
- package/dist/resource.d.ts +0 -174
- package/dist/resource.js +0 -7
- package/dist/resource.js.map +0 -1
- package/dist/result/retry.cjs +0 -2
- package/dist/result/retry.cjs.map +0 -1
- package/dist/result/retry.d.cts +0 -70
- package/dist/result/retry.d.ts +0 -70
- package/dist/result/retry.js +0 -2
- package/dist/result/retry.js.map +0 -1
- package/dist/retry.cjs +0 -2
- package/dist/retry.cjs.map +0 -1
- package/dist/retry.d.cts +0 -388
- package/dist/retry.d.ts +0 -388
- package/dist/retry.js +0 -2
- package/dist/retry.js.map +0 -1
- package/dist/run.cjs +0 -7
- package/dist/run.cjs.map +0 -1
- package/dist/run.d.cts +0 -4
- package/dist/run.d.ts +0 -4
- package/dist/run.js +0 -7
- package/dist/run.js.map +0 -1
- package/dist/saga.cjs +0 -11
- package/dist/saga.cjs.map +0 -1
- package/dist/saga.d.cts +0 -164
- package/dist/saga.d.ts +0 -164
- package/dist/saga.js +0 -11
- package/dist/saga.js.map +0 -1
- package/dist/singleflight.cjs +0 -2
- package/dist/singleflight.cjs.map +0 -1
- package/dist/singleflight.d.cts +0 -145
- package/dist/singleflight.d.ts +0 -145
- package/dist/singleflight.js +0 -2
- package/dist/singleflight.js.map +0 -1
- package/dist/slugs.cjs +0 -2
- package/dist/slugs.cjs.map +0 -1
- package/dist/slugs.d.cts +0 -67
- package/dist/slugs.d.ts +0 -67
- package/dist/slugs.js +0 -2
- package/dist/slugs.js.map +0 -1
- package/dist/streaming.cjs +0 -9
- package/dist/streaming.cjs.map +0 -1
- package/dist/streaming.d.cts +0 -596
- package/dist/streaming.d.ts +0 -596
- package/dist/streaming.js +0 -9
- package/dist/streaming.js.map +0 -1
- package/dist/tagged-error.cjs +0 -2
- package/dist/tagged-error.cjs.map +0 -1
- package/dist/tagged-error.d.cts +0 -275
- package/dist/tagged-error.d.ts +0 -275
- package/dist/tagged-error.js +0 -2
- package/dist/tagged-error.js.map +0 -1
- package/dist/types-BziYHFkD.d.ts +0 -323
- package/dist/types-C5jLEUqY.d.cts +0 -323
- package/dist/webhook.cjs +0 -7
- package/dist/webhook.cjs.map +0 -1
- package/dist/webhook.d.cts +0 -499
- package/dist/webhook.d.ts +0 -499
- package/dist/webhook.js +0 -7
- package/dist/webhook.js.map +0 -1
package/dist/saga.cjs
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";var $e=Object.defineProperty;var At=Object.getOwnPropertyDescriptor;var vt=Object.getOwnPropertyNames;var Pt=Object.prototype.hasOwnProperty;var _t=(e,t)=>{for(var l in t)$e(e,l,{get:t[l],enumerable:!0})},Ot=(e,t,l,b)=>{if(t&&typeof t=="object"||typeof t=="function")for(let E of vt(t))!Pt.call(e,E)&&E!==l&&$e(e,E,{get:()=>t[E],enumerable:!(b=At(t,E))||b.enumerable});return e};var Dt=e=>Ot($e({},"__esModule",{value:!0}),e);var Zt={};_t(Zt,{createSagaWorkflow:()=>St,isSagaCompensationError:()=>Ct,runSaga:()=>bt});module.exports=Dt(Zt);var Mt={"step-require-id":"step-require-id","step-no-immediate-execution":"step-no-immediate-execution","step-require-thunk-for-key":"step-require-thunk-for-key","step-no-bare-await":"step-no-bare-await","step-no-try-catch-wrap":"step-no-try-catch-wrap","step-stable-cache-keys":"step-stable-cache-keys","workflow-no-floating":"workflow-no-floating","workflow-options-position":"workflow-options-position","workflow-callback-shape":"workflow-callback-shape","workflow-no-callable-form":"workflow-no-callable-form","workflow-no-dynamic-import":"workflow-no-dynamic-import","result-no-floating":"result-no-floating","result-require-handling":"result-require-handling","result-no-double-wrap":"result-no-double-wrap","result-no-manual-propagation":"result-no-manual-propagation","result-no-direct-ok-err":"result-no-direct-ok-err","error-check-unexpected-first":"error-check-unexpected-first","error-access-cause":"error-access-cause","error-normalize":"error-normalize","error-no-throw-in-deps":"error-no-throw-in-deps","concurrency-no-promise-all":"concurrency-no-promise-all","concurrency-no-promise-race":"concurrency-no-promise-race","concurrency-no-promise-allsettled":"concurrency-no-promise-allsettled","runtime-step-timeout":"runtime-step-timeout","runtime-step-aborted":"runtime-step-aborted","runtime-retry-exhausted":"runtime-retry-exhausted","runtime-rate-limit":"runtime-rate-limit","runtime-circuit-open":"runtime-circuit-open","runtime-unexpected":"runtime-unexpected","runtime-resolver-not-found":"runtime-resolver-not-found","runtime-saga-compensation":"runtime-saga-compensation"};function et(e){return`https://jagreehal.github.io/awaitly/rules/#${e}`}var er=Object.keys(Mt);var Ue=class extends Error{_tag};function de(e,t){return class extends Ue{_tag=e;constructor(l,b){let E=t?.message?t.message(l??{}):e;if(super(E),this.name=e,t?.slug!==void 0){if(!t.hint)throw new TypeError(`TaggedError: 'hint' is required when 'slug' is set (slug: "${t.slug}")`);Object.defineProperty(this,"code",{value:t.slug,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"hint",{value:t.hint,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"docsUrl",{value:et(t.slug),enumerable:!0,writable:!1,configurable:!1})}if(Object.setPrototypeOf(this,new.target.prototype),l&&typeof l=="object"){let p;if(t?.slug!==void 0){let{_tag:P,name:W,message:D,stack:r,code:J,hint:z,docsUrl:ce,...se}=l;p=se}else{let{_tag:P,name:W,message:D,stack:r,...J}=l;p=J}let v=Object.prototype.hasOwnProperty.call(p,"cause"),F=v?p.cause:void 0;v&&delete p.cause;let Y=b?.cause!==void 0;if(v&&Y)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,p),v&&(this.cause=F),Y&&(this.cause=b?.cause)}else b?.cause!==void 0&&(this.cause=b.cause)}}}Object.defineProperty(de,Symbol.hasInstance,{value:e=>e instanceof Ue});(E=>{function e(p){return p instanceof Error}E.isError=e;function t(p){return p instanceof Ue}E.isTaggedError=t;function l(p,v){let F=p._tag,Y=v[F];return Y(p)}E.match=l;function b(p,v,F){let Y=p._tag,P=v[Y];return P?P(p):F(p)}E.matchPartial=b})(de||={});var tt=class extends de("TimeoutError",{slug:"runtime-step-timeout",hint:"Increase the step's timeout option, or check why the upstream operation is slow.",message:t=>t.operation?`TimeoutError: ${t.operation} timed out after ${t.ms}ms`:`TimeoutError: Operation timed out after ${t.ms}ms`}){},rt=class extends de("RetryExhaustedError",{slug:"runtime-retry-exhausted",hint:"All retry attempts failed. Inspect lastError and decide whether to surface it or compensate.",message:t=>t.operation?`RetryExhaustedError: ${t.operation} failed after ${t.attempts} attempts`:`RetryExhaustedError: Operation failed after ${t.attempts} attempts`}){},nt=class extends de("RateLimitError",{slug:"runtime-rate-limit",hint:"Wait retryAfterMs before retrying, or apply step.cache to deduplicate calls.",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`:""}`}){},ot=class extends de("CircuitBreakerOpenError",{slug:"runtime-circuit-open",hint:"The circuit is open. Wait for it to half-open or fall back to a degraded path.",message:t=>`CircuitBreakerOpenError: Circuit ${t.circuitName} is ${t.state??"OPEN"}${t.retryAfterMs?`, retry after ${Math.ceil(t.retryAfterMs/1e3)}s`:""}`}){},st=class extends de("ValidationError",{message:t=>`ValidationError: Invalid ${t.field} - ${t.reason}`}){},at=class extends de("NotFoundError",{message:t=>t.id?`NotFoundError: ${t.resource} with id ${t.id} not found`:`NotFoundError: ${t.resource} not found`}){},it=class extends de("UnauthorizedError",{message:t=>t.reason?`UnauthorizedError: ${t.reason}`:t.action&&t.resource?`UnauthorizedError: Not authorized to ${t.action} ${t.resource}`:"UnauthorizedError: Access denied"}){},ut=class extends de("NetworkError",{message:t=>t.url?`NetworkError: ${t.reason} (${t.url})`:`NetworkError: ${t.reason}`}){},lt=class extends de("CompensationError",{slug:"runtime-saga-compensation",hint:"A saga compensation step failed. Inspect compensationError and ensure compensation is idempotent.",message:t=>`CompensationError: Failed to compensate step ${t.step}`}){},ve=class extends de("UnexpectedError",{slug:"runtime-unexpected",hint:"An unexpected exception escaped a step. Inspect cause; consider returning a typed Result instead of throwing.",message:t=>`UnexpectedError: ${t.cause instanceof Error?t.cause.message:String(t.cause??"unknown")}`}){};function ct(e){return{ok:!0,value:e}}var It=e=>typeof e=="object"&&e!==null&&"ok"in e&&typeof e.ok=="boolean"&&(e.ok?"value"in e:"error"in e),We=(e,t)=>{let l={},b=new Map;for(let E of Object.keys(e)){let p=e[E];typeof p=="function"&&(l[E]=(...v)=>{let F=(b.get(E)??0)+1;b.set(E,F);let Y=F===1?E:`${E}#${F}`;return t(Y,async()=>{let P=await p(...v);return It(P)?P:ct(P)})})}return l};function Ut(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let l=parseFloat(t[1]),b=t[2].toLowerCase();return{_tag:"Duration",millis:l*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[b]??1)}}function Fe(e){return new ve({cause:e})}function Z(e){return{ok:!0,value:e}}function j(e,t){let l=t?.cause;return{ok:!1,error:e,...l!==void 0?{cause:l}:{}}}var Et=e=>e instanceof ve||typeof e=="object"&&e!==null&&"_tag"in e&&e._tag==="UnexpectedError";function Wt(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 l=t._tag.trim();if(l)return l}if(typeof t.tag=="string"){let l=t.tag.trim();if(l)return l}if(typeof t.code=="string"){let l=t.code.trim();if(l)return l}else if(typeof t.code=="number")return String(t.code);if(e instanceof Error&&e.name){let l=e.name.trim();if(l)return l}}return"unknown"}function Nt(e,t){if(!(!t||!e))return t[e]}function ze(e){let{intent:t,domain:l,owner:b,tags:E,stateChanges:p,emits:v,calls:F}=e;if(!t&&!l&&!b&&!E?.length&&!p?.length&&!v?.length&&!F?.length)return;let Y={};return t&&(Y.intent=t),l&&(Y.domain=l),b&&(Y.owner=b),E?.length&&(Y.tags=E),p?.length&&(Y.stateChanges=p),v?.length&&(Y.emits=v),F?.length&&(Y.calls=F),Y}function we(e,t,l,b,E){let p=Wt(e),v=Nt(p,t),F={tag:p,origin:l};return v!==void 0&&(F.classification=v),b!==void 0&&(F.attempt=b),E!==void 0&&(F.cumulativeDurationMs=E),F}var Oe=Symbol.for("step_timeout_marker");function pt(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:Oe in e}function Kt(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 ft=Symbol("early-exit");function Re(e,t){return{[ft]:!0,error:e,meta:t}}function ge(e){return typeof e=="object"&&e!==null&&e[ft]===!0}var wt=Symbol("mapper-exception");function Pe(e){return{[wt]:!0,thrown:e}}function jt(e){return typeof e=="object"&&e!==null&&e[wt]===!0}function He(e,t){let{backoff:l,initialDelay:b,maxDelay:E,jitter:p}=t,v;switch(l){case"fixed":v=b;break;case"linear":v=b*e;break;case"exponential":v=b*Math.pow(2,e-1);break}if(v=Math.min(v,E),p){let F=v*.25*Math.random();v=v+F}return Math.floor(v)}function qe(e){return new Promise(t=>setTimeout(t,e))}var dt=Symbol("timeout"),je=Symbol("timeout-option");function Ft(e){return typeof e=="object"&&e!==null&&e[je]===!0}async function Bt(e,t,l,b){let E=new AbortController,p=t.onTimeout??"error",v=()=>typeof p=="function"?p({name:l.name,key:l.key,ms:t.ms}):t.error??{type:"STEP_TIMEOUT",stepName:l.name,stepKey:l.key,timeoutMs:t.ms,attempt:l.attempt},F;b?.aborted&&E.abort(b.reason);let Y;b&&!b.aborted&&(Y=()=>E.abort(b.reason),b.addEventListener("abort",Y,{once:!0}));let P=new Promise((D,r)=>{F=setTimeout(()=>{if(p!=="disconnect"&&E.abort(),p==="option"){r({[je]:!0,ms:t.ms});return}r({[dt]:!0,error:v()})},t.ms)}),W;t.signal?W=Promise.resolve(e(E.signal)):W=Promise.resolve(e());try{return await Promise.race([W,P])}catch(D){if(typeof D=="object"&&D!==null&&D[je]===!0)throw{[je]:!0,ms:t.ms};if(typeof D=="object"&&D!==null&&D[dt]===!0){p==="disconnect"&&W.catch(()=>{});let r=D.error;if(typeof r=="object"&&r!==null&&r.type!=="STEP_TIMEOUT"){let J={timeoutMs:t.ms,stepName:l.name,stepKey:l.key,attempt:l.attempt};Oe in r?r[Oe]=J:Object.defineProperty(r,Oe,{value:J,enumerable:!1,writable:!0,configurable:!1})}throw r}throw D}finally{clearTimeout(F),Y&&b&&b.removeEventListener("abort",Y)}}var _e={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,shouldRetry:()=>!0,onRetry:()=>{}};async function Ne(e,t,l){if(typeof e!="function"){let k=e,le=t;if(typeof le!="function")throw new TypeError("[awaitly] run(deps, fn) requires a callback as the second argument. Example: run({ getUser }, async (s) => s.getUser(id))");return Ne(({step:ke})=>le(We(k,ke),{step:ke}),l)}let b=e,E=t,{onError:p,onEvent:v,catchUnexpected:F,workflowId:Y,workflowName:P,context:W,_workflowSignal:D}=E&&typeof E=="object"?E:{},r=Y??crypto.randomUUID(),J=F??Fe,z=[],ce=0,se=k=>k??`step_${++ce}`,i=k=>{let le=k.context!==void 0||W===void 0?k:{...k,context:W},Ee=P!==void 0&&le.workflowName===void 0?{...le,workflowName:P}:le;if(Ee.type==="step_success"){let ke=Ee.stepId;for(let he=z.length-1;he>=0;he--){let L=z[he];if(L.type==="race"&&!L.winnerId){L.winnerId=ke;break}}}v?.(Ee,W)},ne=Re,me=k=>ge(k),pe=(k,le)=>k,ye=k=>typeof k=="function"?!1:!!(k&&typeof k=="object"&&"ok"in k||k&&typeof k=="object"&&"then"in k&&typeof k.then=="function");try{let le=function(m){let R={};for(let[s,a]of Object.entries(m))if(typeof a=="function")R[s]=a;else if(a&&typeof a=="object"&&"fn"in a)R[s]=a.fn;else throw new TypeError(`step.all: operation "${s}" must be a function or { fn, errors? } object`);return R},Ee=function(m,R){let s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let a=performance.now(),n=!1;z.push({scopeId:s,type:"parallel"});let o=()=>{if(n)return;n=!0;let y=z.findIndex(x=>x.scopeId===s);y!==-1&&z.splice(y,1),i({type:"scope_end",workflowId:r,scopeId:s,ts:Date.now(),durationMs:performance.now()-a})};i({type:"scope_start",workflowId:r,scopeId:s,scopeType:"parallel",name:m,ts:Date.now()});try{let y=await R();if(o(),!y.ok)throw p?.(y.error,m,W),ne(y.error,{origin:"result",resultCause:y.cause});return y.value}catch(y){throw o(),y}})()},ke=function(m,R){let s=Object.keys(m),a=R.name??`Parallel(${s.join(", ")})`,n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),y=!1;z.push({scopeId:n,type:"parallel"});let x=()=>{if(y)return;y=!0;let A=z.findIndex(O=>O.scopeId===n);A!==-1&&z.splice(A,1),i({type:"scope_end",workflowId:r,scopeId:n,ts:Date.now(),durationMs:performance.now()-o})};i({type:"scope_start",workflowId:r,scopeId:n,scopeType:"parallel",name:a,ts:Date.now()});try{let A=await new Promise(I=>{if(s.length===0){I([]);return}let B=!1,ee=s.length,N=new Array(s.length);for(let H=0;H<s.length;H++){let K=s[H],$=H;Promise.resolve(m[K]()).catch(h=>j({type:"PROMISE_REJECTED",cause:h},{cause:{type:"PROMISE_REJECTION",reason:h}})).then(h=>{if(!B){if(!h.ok){B=!0,I([{key:K,result:h}]);return}N[$]={key:K,result:h},ee--,ee===0&&I(N)}})}});x();let O={};for(let{key:I,result:B}of A){if(!B.ok)throw p?.(B.error,I,W),ne(B.error,{origin:"result",resultCause:B.cause});O[I]=B.value}return O}catch(A){throw x(),A}})()};var be=le,Ae=Ee,xe=ke;let k=(m,R,s)=>(async()=>{if(typeof m!="string"||m.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let a=s??{},n=ze(a),o=m,y=a.key??m,x=a.key??m,{description:A,retry:O,timeout:I}=a,B=se(y),ee=v,N=ee?performance.now():0,K=ye(R)?()=>R:R,h={attempts:Math.max(1,O?.attempts??1),backoff:O?.backoff??_e.backoff,initialDelay:O?.initialDelay??_e.initialDelay,maxDelay:O?.maxDelay??_e.maxDelay,jitter:O?.jitter??_e.jitter,shouldRetry:O?.shouldRetry??_e.shouldRetry,onRetry:O?.onRetry??_e.onRetry};v&&i({type:"step_start",workflowId:r,stepId:B,stepKey:y,name:o,description:A,ts:Date.now(),...n&&{metadata:n}});let fe;for(let T=1;T<=h.attempts;T++){let w=ee?performance.now():0;try{let u;if(I?u=await Bt(K,I,{name:o,key:y,attempt:T},D):u=await K(),u.ok){let g=performance.now()-N;return i({type:"step_success",workflowId:r,stepId:B,stepKey:y,name:o,description:A,ts:Date.now(),durationMs:g,...n&&{metadata:n}}),x&&i({type:"step_complete",workflowId:r,stepKey:x,name:o,description:A,ts:Date.now(),durationMs:g,result:u,...n&&{metadata:n}}),u.value}if(fe=u,T<h.attempts&&h.shouldRetry(u.error,T)){let g=He(T,h);i({type:"step_retry",workflowId:r,stepId:B,stepKey:y,name:o,ts:Date.now(),attempt:T+1,maxAttempts:h.attempts,delayMs:g,error:u.error,...n&&{metadata:n},diagnostics:we(u.error,a.errorMeta,"result",T,performance.now()-N)}),h.onRetry(u.error,T,g),await qe(g);continue}h.attempts>1&&i({type:"step_retries_exhausted",workflowId:r,stepId:B,stepKey:y,name:o,ts:Date.now(),durationMs:performance.now()-N,attempts:T,lastError:u.error,...n&&{metadata:n},diagnostics:we(u.error,a.errorMeta,"result",T,performance.now()-N)});break}catch(u){let g=performance.now()-w;if(Ft(u)){let _=u.ms;i({type:"step_timeout",workflowId:r,stepId:B,stepKey:y,name:o,ts:Date.now(),timeoutMs:_,attempt:T,...n&&{metadata:n},diagnostics:we(u,a.errorMeta,"timeout",T)}),i({type:"step_success",workflowId:r,stepId:B,stepKey:y,name:o,description:A,ts:Date.now(),durationMs:performance.now()-N,...n&&{metadata:n}}),x&&i({type:"step_complete",workflowId:r,stepKey:x,name:o,description:A,ts:Date.now(),durationMs:performance.now()-N,result:Z(void 0),...n&&{metadata:n}});return}if(me(u))throw i({type:"step_aborted",workflowId:r,stepId:B,stepKey:y,name:o,description:A,ts:Date.now(),durationMs:g,...n&&{metadata:n}}),u;if(pt(u)){let _=Kt(u),f=I?.ms??_?.timeoutMs??0;if(i({type:"step_timeout",workflowId:r,stepId:B,stepKey:y,name:o,ts:Date.now(),timeoutMs:f,attempt:T,...n&&{metadata:n},diagnostics:we(u,a.errorMeta,"timeout",T)}),T<h.attempts&&h.shouldRetry(u,T)){let G=He(T,h);i({type:"step_retry",workflowId:r,stepId:B,stepKey:y,name:o,ts:Date.now(),attempt:T+1,maxAttempts:h.attempts,delayMs:G,error:u,...n&&{metadata:n},diagnostics:we(u,a.errorMeta,"timeout",T,performance.now()-N)}),h.onRetry(u,T,G),await qe(G);continue}h.attempts>1&&i({type:"step_retries_exhausted",workflowId:r,stepId:B,stepKey:y,name:o,ts:Date.now(),durationMs:performance.now()-N,attempts:T,lastError:u,...n&&{metadata:n},diagnostics:we(u,a.errorMeta,"timeout",T,performance.now()-N)});let U=performance.now()-N;throw i({type:"step_error",workflowId:r,stepId:B,stepKey:y,name:o,description:A,ts:Date.now(),durationMs:U,error:u,...n&&{metadata:n},diagnostics:we(u,a.errorMeta,"timeout",T,U)}),x&&i({type:"step_complete",workflowId:r,stepKey:x,name:o,description:A,ts:Date.now(),durationMs:U,result:j(u,{cause:u}),meta:{origin:"throw",thrown:u},...n&&{metadata:n}}),p?.(u,o,W),ne(u,{origin:"throw",thrown:u})}if(T<h.attempts&&h.shouldRetry(u,T)){let _=He(T,h);i({type:"step_retry",workflowId:r,stepId:B,stepKey:y,name:o,ts:Date.now(),attempt:T+1,maxAttempts:h.attempts,delayMs:_,error:u,...n&&{metadata:n},diagnostics:we(u,a.errorMeta,"throw",T,performance.now()-N)}),h.onRetry(u,T,_),await qe(_);continue}h.attempts>1&&!pt(u)&&i({type:"step_retries_exhausted",workflowId:r,stepId:B,stepKey:y,name:o,ts:Date.now(),durationMs:performance.now()-N,attempts:T,lastError:u,...n&&{metadata:n},diagnostics:we(u,a.errorMeta,"throw",T,performance.now()-N)});let S=performance.now()-N,C;try{C=J(u)}catch(_){throw Pe(_)}throw i({type:"step_error",workflowId:r,stepId:B,stepKey:y,name:o,description:A,ts:Date.now(),durationMs:S,error:C,...n&&{metadata:n},diagnostics:we(u,a.errorMeta,"throw",T,S)}),x&&i({type:"step_complete",workflowId:r,stepKey:x,name:o,description:A,ts:Date.now(),durationMs:S,result:j(C,{cause:u}),meta:{origin:"throw",thrown:u},...n&&{metadata:n}}),p?.(C,o,W),ne(C,{origin:"throw",thrown:u})}}let c=fe,d=performance.now()-N,q=pe(c.error,{origin:"result",resultCause:c.cause});throw i({type:"step_error",workflowId:r,stepId:B,stepKey:y,name:o,description:A,ts:Date.now(),durationMs:d,error:q,...n&&{metadata:n},diagnostics:we(c.error,a.errorMeta,"result",h.attempts,d)}),x&&i({type:"step_complete",workflowId:r,stepKey:x,name:o,description:A,ts:Date.now(),durationMs:d,result:c,meta:{origin:"result",resultCause:c.cause},...n&&{metadata:n}}),p?.(q,o,W),ne(q,{origin:"result",resultCause:c.cause})})();k.try=(m,R,s)=>{if(typeof m!="string"||m.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="error"in s?()=>s.error:s.onError;if(s.retry||s.timeout)return k.retry(m,async()=>{try{return Z(await R())}catch(A){return j(a(A),{cause:A})}},{attempts:s.retry?.attempts??1,...s.retry??{},key:s.key,timeout:s.timeout});let n=s.key??m,o=m,y=m,x=v;return(async()=>{let A=x?performance.now():0;v&&i({type:"step_start",workflowId:r,stepId:y,stepKey:n,name:o,ts:Date.now()});try{let O=await R(),I=performance.now()-A;return i({type:"step_success",workflowId:r,stepId:y,stepKey:n,name:o,ts:Date.now(),durationMs:I}),n&&i({type:"step_complete",workflowId:r,stepKey:n,name:o,ts:Date.now(),durationMs:I,result:Z(O)}),O}catch(O){let I=a(O),B=performance.now()-A,ee=pe(I,{origin:"throw",thrown:O});throw i({type:"step_error",workflowId:r,stepId:y,stepKey:n,name:o,ts:Date.now(),durationMs:B,error:ee}),n&&i({type:"step_complete",workflowId:r,stepKey:n,name:o,ts:Date.now(),durationMs:B,result:j(I,{cause:O}),meta:{origin:"throw",thrown:O}}),p?.(ee,o,W),ne(ee,{origin:"throw",thrown:O})}})()},k.fromResult=(m,R,s)=>{if(typeof m!="string"||m.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=s.key??m,n=m,o=m,y="error"in s?()=>s.error:s.onError,x=v;return(async()=>{let A=x?performance.now():0;v&&i({type:"step_start",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now()});let O=await R();if(O.ok){let I=performance.now()-A;return i({type:"step_success",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:I}),a&&i({type:"step_complete",workflowId:r,stepKey:a,name:n,ts:Date.now(),durationMs:I,result:Z(O.value)}),O.value}else{let I=y(O.error),B=performance.now()-A,ee=pe(I,{origin:"result",resultCause:O.error});throw i({type:"step_error",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:B,error:ee}),a&&i({type:"step_complete",workflowId:r,stepKey:a,name:n,ts:Date.now(),durationMs:B,result:j(I,{cause:O.error}),meta:{origin:"result",resultCause:O.error}}),p?.(ee,n,W),ne(ee,{origin:"result",resultCause:O.error})}})()},k.fromNullable=(m,R,s,a)=>{if(typeof m!="string"||m.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 k(m,async()=>{let n=await R();return n!=null?Z(n):j(s())},a)},k.retry=(m,R,s)=>{if(typeof m!="string"||m.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 k(m,R,{key:s.key??m,retry:{attempts:s.attempts,backoff:s.backoff,initialDelay:s.initialDelay,maxDelay:s.maxDelay,jitter:s.jitter,shouldRetry:s.shouldRetry,onRetry:s.onRetry},timeout:s.timeout})},k.withTimeout=(m,R,s)=>{if(typeof m!="string"||m.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 k(m,R,{key:s.key??m,timeout:s})},k.sleep=(m,R,s)=>{if(typeof m!="string"||m.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 R=="string"?Ut(R):R;if(!a)throw new Error(`step.sleep: invalid duration '${R}'`);let n=a.millis,o=s?.signal;return k(m,async()=>{if(D?.aborted||o?.aborted){let y=new Error("Sleep aborted");throw y.name="AbortError",y}return new Promise((y,x)=>{let A={timeoutId:void 0},O=()=>{A.timeoutId&&clearTimeout(A.timeoutId);let I=new Error("Sleep aborted");I.name="AbortError",x(I)};D?.addEventListener("abort",O,{once:!0}),o?.addEventListener("abort",O,{once:!0}),A.timeoutId=setTimeout(()=>{D?.removeEventListener("abort",O),o?.removeEventListener("abort",O),y(Z(void 0))},n)})},{key:s?.key??m,description:s?.description})},k.all=((...m)=>{if(typeof m[0]!="string")throw new TypeError("step.all(name, ...): first argument must be a string (step name). Example: step.all('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let R=m[0],s=m[1];if(typeof s=="function")return Ee(R,s);if(s&&typeof s=="object"&&!Array.isArray(s)){let n=le(s);return ke(n,{name:R})}throw new TypeError("step.all(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),k.race=(m,R)=>{let s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let a=performance.now(),n=!1,o={scopeId:s,type:"race",winnerId:void 0};z.push(o);let y=()=>{if(n)return;n=!0;let x=z.findIndex(A=>A.scopeId===s);x!==-1&&z.splice(x,1),i({type:"scope_end",workflowId:r,scopeId:s,ts:Date.now(),durationMs:performance.now()-a,winnerId:o.winnerId})};i({type:"scope_start",workflowId:r,scopeId:s,scopeType:"race",name:m,ts:Date.now()});try{let x=await R();if(y(),!x.ok)throw p?.(x.error,m,W),ne(x.error,{origin:"result",resultCause:x.cause});return x.value}catch(x){throw y(),x}})()},k.if=(m,R,s)=>s(),k.label=k.if,k.branch=async(m,R)=>{let{condition:s,then:a,else:n}=R;if(s())return await a();if(n)return await n()},k.arm=(m,R)=>({fn:m,errors:R}),k.forEach=async(m,R,s)=>{let a=[],n=s.maxIterations,o=0,y="run"in s,x=Symbol.asyncIterator in R?R:(async function*(){yield*R})();for await(let A of x){if(n!==void 0&&o>=n)break;let O;y?O=await s.run(A,o):O=await s.item.handler(A,o,k),a.push(O),o++}return a},k.item=m=>({__forEachItemHandler:!0,handler:m}),k.dep=(m,R)=>R,k.workflow=(m,R,s)=>k(m,R,s),k.map=async(m,R,s,a)=>{let n=a?.concurrency??R.length;return k(m,()=>n>=R.length?mt(R.map((o,y)=>s(o,y))):(async()=>{let o=[];for(let y=0;y<R.length;y+=n){let x=R.slice(y,y+n),A=await mt(x.map((O,I)=>s(O,y+I)));if(!A.ok)return A;o.push(...A.value)}return Z(o)})(),{key:a?.key})},k.withFallback=(m,R,s)=>{if(typeof m!="string"||m.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=s.key??m,n=m,o=se(a),y=v;return(async()=>{let x=y?performance.now():0;v&&i({type:"step_start",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now()});let A;try{A=await R()}catch(N){if(me(N))throw i({type:"step_aborted",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:performance.now()-x}),N;let H;try{H=J(N)}catch($){throw Pe($)}if(s.on!==void 0&&s.on!==H){let $=performance.now()-x;throw i({type:"step_error",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:$,error:H}),a&&i({type:"step_complete",workflowId:r,stepKey:a,name:n,ts:Date.now(),durationMs:$,result:j(H,{cause:N}),meta:{origin:"throw",thrown:N}}),p?.(H,n,W),ne(H,{origin:"throw",thrown:N})}let K;try{K=await s.fallback()}catch($){if(me($))throw i({type:"step_aborted",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:performance.now()-x}),$;let h;try{h=J($)}catch(c){throw Pe(c)}let fe=performance.now()-x;throw i({type:"step_error",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:fe,error:h}),a&&i({type:"step_complete",workflowId:r,stepKey:a,name:n,ts:Date.now(),durationMs:fe,result:j(h,{cause:$}),meta:{origin:"throw",thrown:$}}),p?.(h,n,W),ne(h,{origin:"throw",thrown:$})}if(K.ok){let $=performance.now()-x;return i({type:"step_success",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:$}),a&&i({type:"step_complete",workflowId:r,stepKey:a,name:n,ts:Date.now(),durationMs:$,result:K,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(H)}}),K.value}else{let $=performance.now()-x,h=pe(K.error,{origin:"result",resultCause:K.cause});throw i({type:"step_error",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:$,error:h}),a&&i({type:"step_complete",workflowId:r,stepKey:a,name:n,ts:Date.now(),durationMs:$,result:K,meta:{origin:"result",resultCause:K.cause}}),p?.(h,n,W),ne(h,{origin:"result",resultCause:K.cause})}}if(A.ok){let N=performance.now()-x;return i({type:"step_success",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:N}),a&&i({type:"step_complete",workflowId:r,stepKey:a,name:n,ts:Date.now(),durationMs:N,result:A}),A.value}let O=A.error;if(s.on!==void 0&&s.on!==O){let N=performance.now()-x,H=pe(O,{origin:"result",resultCause:A.cause});throw i({type:"step_error",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:N,error:H}),a&&i({type:"step_complete",workflowId:r,stepKey:a,name:n,ts:Date.now(),durationMs:N,result:A,meta:{origin:"result",resultCause:A.cause}}),p?.(H,n,W),ne(H,{origin:"result",resultCause:A.cause})}let I;try{I=await s.fallback()}catch(N){if(me(N))throw i({type:"step_aborted",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:performance.now()-x}),N;let H;try{H=J(N)}catch($){throw Pe($)}let K=performance.now()-x;throw i({type:"step_error",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:K,error:H}),a&&i({type:"step_complete",workflowId:r,stepKey:a,name:n,ts:Date.now(),durationMs:K,result:j(H,{cause:N}),meta:{origin:"throw",thrown:N}}),p?.(H,n,W),ne(H,{origin:"throw",thrown:N})}if(I.ok){let N=performance.now()-x;return i({type:"step_success",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:N}),a&&i({type:"step_complete",workflowId:r,stepKey:a,name:n,ts:Date.now(),durationMs:N,result:I,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(O)}}),I.value}let B=performance.now()-x,ee=pe(I.error,{origin:"result",resultCause:I.cause});throw i({type:"step_error",workflowId:r,stepId:o,stepKey:a,name:n,ts:Date.now(),durationMs:B,error:ee}),a&&i({type:"step_complete",workflowId:r,stepKey:a,name:n,ts:Date.now(),durationMs:B,result:I,meta:{origin:"result",resultCause:I.cause}}),p?.(ee,n,W),ne(ee,{origin:"result",resultCause:I.cause})})()},k.withResource=(m,R)=>{if(typeof m!="string"||m.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 s=m,a=m,n=se(s),o=v;return(async()=>{let y=o?performance.now():0;v&&i({type:"step_start",workflowId:r,stepId:n,stepKey:s,name:a,ts:Date.now()});let x;try{x=await R.acquire()}catch(K){if(me(K))throw i({type:"step_aborted",workflowId:r,stepId:n,stepKey:s,name:a,ts:Date.now(),durationMs:performance.now()-y}),K;let $;try{$=J(K)}catch(fe){throw Pe(fe)}let h=performance.now()-y;throw i({type:"step_error",workflowId:r,stepId:n,stepKey:s,name:a,ts:Date.now(),durationMs:h,error:$}),s&&i({type:"step_complete",workflowId:r,stepKey:s,name:a,ts:Date.now(),durationMs:h,result:j($,{cause:K}),meta:{origin:"throw",thrown:K}}),p?.($,a,W),ne($,{origin:"throw",thrown:K})}if(!x.ok){let K=performance.now()-y,$=pe(x.error,{origin:"result",resultCause:x.cause});throw i({type:"step_error",workflowId:r,stepId:n,stepKey:s,name:a,ts:Date.now(),durationMs:K,error:$}),s&&i({type:"step_complete",workflowId:r,stepKey:s,name:a,ts:Date.now(),durationMs:K,result:x,meta:{origin:"result",resultCause:x.cause}}),p?.($,a,W),ne($,{origin:"result",resultCause:x.cause})}let A=x.value,O,I,B=!1;try{O=await R.use(A)}catch(K){if(me(K)){try{await R.release(A)}catch($){console.warn(`[awaitly] step.withResource("${m}"): release threw after earlyExit:`,$)}throw K}I=K,B=!0}try{await R.release(A)}catch(K){console.warn(`[awaitly] step.withResource("${m}"): release threw:`,K)}if(B){let K;try{K=J(I)}catch(h){throw Pe(h)}let $=performance.now()-y;throw i({type:"step_error",workflowId:r,stepId:n,stepKey:s,name:a,ts:Date.now(),durationMs:$,error:K}),s&&i({type:"step_complete",workflowId:r,stepKey:s,name:a,ts:Date.now(),durationMs:$,result:j(K,{cause:I}),meta:{origin:"throw",thrown:I}}),p?.(K,a,W),ne(K,{origin:"throw",thrown:I})}let ee=O;if(ee.ok){let K=performance.now()-y;return i({type:"step_success",workflowId:r,stepId:n,stepKey:s,name:a,ts:Date.now(),durationMs:K}),s&&i({type:"step_complete",workflowId:r,stepKey:s,name:a,ts:Date.now(),durationMs:K,result:ee}),ee.value}let N=performance.now()-y,H=pe(ee.error,{origin:"result",resultCause:ee.cause});throw i({type:"step_error",workflowId:r,stepId:n,stepKey:s,name:a,ts:Date.now(),durationMs:N,error:H}),s&&i({type:"step_complete",workflowId:r,stepKey:s,name:a,ts:Date.now(),durationMs:N,result:ee,meta:{origin:"result",resultCause:ee.cause}}),p?.(H,a,W),ne(H,{origin:"result",resultCause:ee.cause})})()};let L=await b({step:k});if(process.env.NODE_ENV!=="production"&&L!==null&&typeof L=="object"&&"ok"in L&&typeof L.ok=="boolean"){let m=L;(m.ok===!0&&"value"in m||m.ok===!1&&"error"in m)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
2
|
-
|
|
3
|
-
Incorrect: return ok({ data });
|
|
4
|
-
Correct: return { data };
|
|
5
|
-
|
|
6
|
-
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return Z(L)}catch(k){if(jt(k))throw k.thrown;if(me(k)){let Ee=k.meta.origin==="throw"?k.meta.thrown:k.meta.origin==="result"?k.meta.resultCause:void 0;return j(k.error,{cause:Ee})}let le=J(k);return p?.(le,"unexpected",W),j(le,{cause:k})}}Ne.strict=(e,t)=>Ne(e,t);async function mt(e){return e.length===0?Z([]):new Promise(t=>{let l=!1,b=e.length,E=new Array(e.length);for(let p=0;p<e.length;p++){let v=p;Promise.resolve(e[v]).catch(F=>j({type:"PROMISE_REJECTED",cause:F},{cause:{type:"PROMISE_REJECTION",reason:F}})).then(F=>{if(!l){if(!F.ok){l=!0,t(F);return}E[v]=F.value,b--,b===0&&t(Z(E))}})}})}var Vt="STREAM_WRITE_ERROR",Lt="STREAM_READ_ERROR",$t="STREAM_CLOSE_ERROR";var Ht="STREAM_ENDED";function Be(e,t,l){return{type:Vt,reason:e,message:t,...l!==void 0?{cause:l}:{}}}function Je(e,t,l){return{type:Lt,reason:e,message:t,...l!==void 0?{cause:l}:{}}}function Ye(e,t,l){return{type:$t,reason:e,message:t,...l!==void 0?{cause:l}:{}}}function Ve(e){return{type:Ht,finalPosition:e}}function yt(e={}){let t=e.highWaterMark??16,l=e.lowWaterMark??Math.floor(t/2),b=e.onStateChange,E="flowing",p=0,v=[];function F(P){if(E!==P&&(E=P,b?.(P),P==="flowing"&&v.length>0)){let W=v;v=[];for(let D of W)D()}}function Y(){E==="flowing"&&p>=t?F("paused"):E==="paused"&&p<=l&&F("flowing")}return{get state(){return E},get bufferedCount(){return p},get highWaterMark(){return t},get lowWaterMark(){return l},increment(){p++,Y()},decrement(){p>0&&(p--,Y())},setCount(P){p=Math.max(0,P),Y()},waitForDrain(){return E==="flowing"?Promise.resolve():new Promise(P=>{v.push(P)})},reset(){p=0,v=[],F("flowing")}}}function qt(e){return{_tag:"Duration",millis:e}}function zt(e){return{_tag:"Duration",millis:e*1e3}}function Jt(e){return{_tag:"Duration",millis:e*60*1e3}}function Yt(e){return{_tag:"Duration",millis:e*60*60*1e3}}function Gt(e){return{_tag:"Duration",millis:e*24*60*60*1e3}}function kt(e){return e.millis}function gt(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let l=parseFloat(t[1]);switch(t[2].toLowerCase()){case"ms":return qt(l);case"s":return zt(l);case"m":return Jt(l);case"h":return Yt(l);case"d":return Gt(l);default:return}}function Tt(e){return e.type==="step_complete"}function Ge(e){return typeof e=="object"&&e!==null&&e.type==="WORKFLOW_CANCELLED"}function Rt(){let e=new Map;return{handleEvent:t=>{Tt(t)&&e.set(t.stepKey,{result:t.result,meta:t.meta})},getResumeState:()=>({steps:new Map(e)}),clear:()=>e.clear()}}function Xt(e){return typeof e=="object"&&e!==null&&e.__cachedMeta===!0}function Se(e,t,l){return j(e,{cause:{__cachedMeta:!0,originalCause:l,meta:t}})}function Ke(e){return Xt(e)?e.meta:{origin:"result",resultCause:e}}async function xt(e,t){let l=e["~standard"].validate(t),b=l instanceof Promise?await l:l;return b.issues?j({type:"INPUT_VALIDATION_ERROR",issues:b.issues.map(E=>({message:E.message,path:E.path?.map(p=>typeof p=="object"?p.key:p)})),message:`Input validation failed: ${b.issues.map(E=>E.message).join(", ")}`}):Z(b.value)}function Xe(e,t){let l=b=>((...E)=>{let p=E.at(-1),v=E.length>0&&typeof p=="object"&&p!==null&&!Array.isArray(p)&&typeof p!="function",F=v?p:void 0,Y=v?E.slice(0,-1):E,P={...t,...F?.deps??{}},W=F?{...F,deps:P}:{deps:P};return e[b](...Y,W)});return{run:l("run"),runWithState:l("runWithState"),withDeps(b){return Xe(e,{...t,...b})}}}var Le=class extends Error{constructor(l,b,E){super(l);this.stepId=b;this.originalError=E;this.name="SnapshotDecodeError"}stepId;originalError};function Ze(e){if(e.type==="error"){let t=new Error(e.message);return t.name=e.name,e.stack&&(t.stack=e.stack),e.cause&&(t.cause=Ze(e.cause)),t}return e.value!==void 0?e.value:e.stringRepresentation}function ht(e,t,l){if(typeof e!="string"||e.length===0)throw new TypeError("createWorkflow(workflowName, deps, options?): first argument must be a non-empty string. Example: createWorkflow('checkout', { chargeCard, sendEmail })");let b=t??{},E=l;async function p(P,W,D){let r=P??crypto.randomUUID(),J=D?.deps?{...b,...D.deps}:b,z=[],ce=D?.createContext??E?.createContext,se=ce?await ce():void 0,i=D?.signal??E?.signal,ne=D?.onEvent??E?.onEvent,me=D?.onError??E?.onError,pe=D?.shouldRun??E?.shouldRun,ye=D?.onBeforeStart??E?.onBeforeStart,be=D?.onAfterStep??E?.onAfterStep,Ae=D?.resumeState??E?.resumeState,xe=E?.catchUnexpected??Fe,k={},le=(D?.devWarnings??E?.devWarnings)===!0&&process.env.NODE_ENV!=="production",Ee=new Set,ke=new Set,he={workflowId:r,onEvent:ne,context:se!==void 0?se:void 0,signal:i,input:{},ref:c=>k[c],set:(c,d)=>{le&&!Ee.has(c)&&(Ee.add(c),console.warn(`awaitly: ctx.set('${c}', ...) is deprecated for static analysis. Use step('id', fn, { out: '${c}' }) instead.`)),k[c]=d},get:c=>(le&&!ke.has(c)&&(ke.add(c),console.warn(`awaitly: ctx.get('${c}') is deprecated for static analysis. Use ctx.ref('${c}') instead for tracked dependencies.`)),k[c])},L=c=>{let d=c.context!==void 0||se===void 0?c:{...c,context:se},q=d.workflowName===void 0?{...d,workflowName:e}:d;ne?.(q,se)},m=(c,d)=>{let q={type:"WORKFLOW_CANCELLED",reason:c,lastStepKey:d};return j(xe(q),{cause:q})};if(i?.aborted){let c=typeof i.reason=="string"?i.reason:i.reason instanceof Error?i.reason.message:void 0;return L({type:"workflow_cancelled",workflowId:r,ts:Date.now(),durationMs:0,reason:c}),m(c)}if(pe){let c=performance.now();try{let d=await pe(r,se),q=performance.now()-c;if(L({type:"hook_should_run",workflowId:r,ts:Date.now(),durationMs:q,result:d,skipped:!d}),!d){let T=new Error("Workflow skipped by shouldRun hook");return j(xe(T),{cause:T})}}catch(d){let q=performance.now()-c;return L({type:"hook_should_run_error",workflowId:r,ts:Date.now(),durationMs:q,error:d}),j(xe(d),{cause:d})}}if(ye){let c=performance.now();try{let d=await ye(r,se),q=performance.now()-c;if(L({type:"hook_before_start",workflowId:r,ts:Date.now(),durationMs:q,result:d,skipped:!d}),!d){let T=new Error("Workflow skipped by onBeforeStart hook");return j(xe(T),{cause:T})}}catch(d){let q=performance.now()-c;return L({type:"hook_before_start_error",workflowId:r,ts:Date.now(),durationMs:q,error:d}),j(xe(d),{cause:d})}}let R=E?.inputSchema,s=E?.input;if(R){let c=await xt(R,s);if(!c.ok)return j(c.error);he.input=c.value}else s!==void 0&&(he.input=s);let a=Date.now(),n=performance.now();L({type:"workflow_start",workflowId:r,ts:a});let o=D?.cache??E?.cache,y=D?.streamStore??E?.streamStore;if(Ae&&!o&&(o=new Map),Ae&&o){let c=typeof Ae=="function"?await Ae():Ae;c.steps instanceof Map||(console.warn(`awaitly: resumeState.steps is not a Map (got ${typeof c.steps}). This usually happens when state is serialized with JSON.stringify() directly.
|
|
7
|
-
Use stringifyState() and parseState() from 'awaitly/persistence' instead:
|
|
8
|
-
import { stringifyState, parseState } from 'awaitly/persistence';
|
|
9
|
-
const json = stringifyState(state); // Save this
|
|
10
|
-
const restored = parseState(json); // Load this`),typeof c.steps=="object"&&c.steps!==null&&(c.steps=new Map(Object.entries(c.steps))));for(let[d,q]of c.steps){let{result:T,meta:w}=q;if(T.ok)o.set(d,T);else{let u=w??{origin:"result",resultCause:T.cause};o.set(d,Se(T.error,u,T.cause))}}}let x=D?.snapshot??E?.snapshot,A=E?.serialization;if(x&&!Ae){o||(o=new Map);let c=x,d=A?.decode;for(let[q,T]of Object.entries(c.steps))if(Object.prototype.hasOwnProperty.call(c.steps,q))try{if(T.ok){let w=d?d(T.value):T.value;o.set(q,Z(w))}else{let w=d?d(T.error):T.error,u=Ze(T.cause),g=T.meta?.origin==="throw"?{origin:"throw",thrown:u}:{origin:"result",resultCause:u};o.set(q,Se(w,g,u))}}catch(w){throw new Le(`Failed to decode step "${q}": ${w instanceof Error?w.message:String(w)}`,q,w instanceof Error?w:void 0)}}let O=!1,I,B,ee=()=>{O=!0,I=typeof i?.reason=="string"?i.reason:i?.reason instanceof Error?i.reason.message:void 0};i&&!i.aborted&&i.addEventListener("abort",ee,{once:!0});let N=()=>{if(O||i?.aborted)throw{type:"WORKFLOW_CANCELLED",reason:I??(typeof i?.reason=="string"?i.reason:i?.reason instanceof Error?i.reason.message:void 0),lastStepKey:B}},H=async(c,d,q)=>{if(!be)return;let T=performance.now();try{await be(c,d,r,se);let w=performance.now()-T;L({type:"hook_after_step",workflowId:r,stepKey:c,ts:Date.now(),durationMs:w})}catch(w){let u=performance.now()-T;throw L({type:"hook_after_step_error",workflowId:r,stepKey:c,ts:Date.now(),durationMs:u,error:w}),w}},K=c=>{let d=async(w,u,g)=>{if(typeof w!="string")throw new Error('[awaitly] step() requires a string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let S=w,C=g??{},_=S,f=Object.prototype.hasOwnProperty.call(C,"key")?C.key:S,{ttl:U,out:G}=C;N();let Q=ze(C);if(f&&o&&o.has(f)){L({type:"step_cache_hit",workflowId:r,stepKey:f,name:_,ts:Date.now(),...Q&&{metadata:Q}});let M=o.get(f);if(M.ok)return B=f,G&&(k[G]=M.value),M.value;let V=Ke(M.cause);throw Re(M.error,V)}f&&o&&L({type:"step_cache_miss",workflowId:r,stepKey:f,name:_,ts:Date.now(),...Q&&{metadata:Q}});try{let M=await c(S,u,C);return G&&(k[G]=M),C.compensate&&z.push({stepName:_,value:M,compensate:C.compensate}),f&&(B=f,o&&o.set(f,Z(M),U?{ttl:U}:void 0),await H(f,Z(M))),M}catch(M){if(f&&ge(M)){let V=M,oe=V.meta.origin==="result"?V.meta.resultCause:V.meta.origin==="throw"?V.meta.thrown:void 0,X=Se(V.error,V.meta,oe);o&&o.set(f,X,U?{ttl:U}:void 0),await H(f,X,V.meta)}throw M}};d.try=async(w,u,g)=>{let{ttl:S}=g,C=g.key??w,_=w;if(o&&o.has(C)){L({type:"step_cache_hit",workflowId:r,stepKey:C,name:_,ts:Date.now()});let f=o.get(C);if(f.ok)return f.value;let U=Ke(f.cause);throw Re(f.error,U)}o&&L({type:"step_cache_miss",workflowId:r,stepKey:C,name:_,ts:Date.now()});try{let f=await c.try(w,u,{...g,key:C});return g.compensate&&z.push({stepName:_,value:f,compensate:g.compensate}),o&&o.set(C,Z(f),S?{ttl:S}:void 0),await H(C,Z(f)),f}catch(f){if(ge(f)){let U=f,G=U.meta.origin==="result"?U.meta.resultCause:U.meta.origin==="throw"?U.meta.thrown:void 0,Q=Se(U.error,U.meta,G);o&&o.set(C,Q,S?{ttl:S}:void 0),await H(C,Q,U.meta)}throw f}},d.fromResult=async(w,u,g)=>{let{ttl:S}=g,C=g.key??w,_=w;if(o&&o.has(C)){L({type:"step_cache_hit",workflowId:r,stepKey:C,name:_,ts:Date.now()});let f=o.get(C);if(f.ok)return f.value;let U=Ke(f.cause);throw Re(f.error,U)}o&&L({type:"step_cache_miss",workflowId:r,stepKey:C,name:_,ts:Date.now()});try{let f=await c.fromResult(w,u,{...g,key:C});return o&&o.set(C,Z(f),S?{ttl:S}:void 0),await H(C,Z(f)),f}catch(f){if(ge(f)){let U=f,G=U.meta.origin==="result"?U.meta.resultCause:U.meta.origin==="throw"?U.meta.thrown:void 0,Q=Se(U.error,U.meta,G);o&&o.set(C,Q,S?{ttl:S}:void 0),await H(C,Q,U.meta)}throw f}},d.race=c.race,d.withFallback=async(w,u,g)=>{let S=g.key??w,C=w;if(o&&o.has(S)){L({type:"step_cache_hit",workflowId:r,stepKey:S,name:C,ts:Date.now()});let _=o.get(S);if(_.ok)return _.value;let f=Ke(_.cause);throw Re(_.error,f)}o&&L({type:"step_cache_miss",workflowId:r,stepKey:S,name:C,ts:Date.now()});try{let _=await c.withFallback(w,u,g);return o&&o.set(S,Z(_)),await H(S,Z(_)),_}catch(_){if(ge(_)){let f=_,U=f.meta.origin==="result"?f.meta.resultCause:f.meta.origin==="throw"?f.meta.thrown:void 0,G=Se(f.error,f.meta,U);o&&o.set(S,G),await H(S,G,f.meta)}throw _}},d.withResource=async(w,u)=>{let g=w;try{let S=await c.withResource(w,u);return await H(g,Z(S)),S}catch(S){if(ge(S)){let C=S,_=C.meta.origin==="result"?C.meta.resultCause:C.meta.origin==="throw"?C.meta.thrown:void 0,f=Se(C.error,C.meta,_);await H(g,f,C.meta)}throw S}},d.retry=(w,u,g)=>{let S={key:g.key,retry:{attempts:g.attempts,backoff:g.backoff,initialDelay:g.initialDelay,maxDelay:g.maxDelay,jitter:g.jitter,shouldRetry:g.shouldRetry,onRetry:g.onRetry},timeout:g.timeout,ttl:g.ttl};return d(w,u,S)},d.withTimeout=(w,u,g)=>{let S={key:g.key,timeout:g,ttl:g.ttl};return d(w,u,S)},d.sleep=(w,u,g)=>{if(typeof w!="string"||w.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let S=typeof u=="string"?gt(u):u;if(!S)throw new Error(`step.sleep: invalid duration '${u}'`);let C=kt(S),_=g?.signal;return d(w,async()=>{if(i?.aborted||_?.aborted){let U=new Error("Sleep aborted");throw U.name="AbortError",U}return new Promise((U,G)=>{let Q={timeoutId:void 0},M=()=>{Q.timeoutId&&clearTimeout(Q.timeoutId);let V=new Error("Sleep aborted");V.name="AbortError",G(V)};i?.addEventListener("abort",M,{once:!0}),_?.addEventListener("abort",M,{once:!0}),Q.timeoutId=setTimeout(()=>{i?.removeEventListener("abort",M),_?.removeEventListener("abort",M),U(Z(void 0))},C)})},{key:g?.key,ttl:g?.ttl,description:g?.description})};let q=new Map,T=new Map;return d.getWritable=w=>{let u=w?.namespace??"default",g=w?.highWaterMark??16;if(!y)throw new Error("streamStore is required to use getWritable(). Pass a streamStore to createWorkflow options.");let S=`${r}:${u}`,C=q.get(S);if(C&&!C.closed&&!C.aborted)return C.writer;let _=yt({highWaterMark:g,onStateChange:V=>{L({type:"stream_backpressure",workflowId:r,namespace:u,bufferedCount:_.bufferedCount,state:V,ts:Date.now()})}}),f=0,U=!0,G=!1,Q=!1;L({type:"stream_created",workflowId:r,namespace:u,ts:Date.now()});let M={async write(V){if(Q)return j(Be("closed","Stream is closed"));if(G)return j(Be("aborted","Stream was aborted"));_.state==="paused"&&await _.waitForDrain();let oe={value:V,position:f,ts:Date.now()},X=await y.append(r,u,oe);return X.ok?(L({type:"stream_write",workflowId:r,namespace:u,position:f,ts:Date.now()}),f++,_.increment(),Z(void 0)):(L({type:"stream_error",workflowId:r,namespace:u,error:X.error,position:f,ts:Date.now()}),j(Be("store_error",X.error.message,X.error)))},async close(){if(Q)return j(Ye("already_closed","Stream is already closed"));let V=await y.closeStream(r,u);return V.ok?(Q=!0,U=!1,L({type:"stream_close",workflowId:r,namespace:u,finalPosition:f,ts:Date.now()}),q.delete(S),Z(void 0)):j(Ye("store_error",V.error.message,V.error))},abort(V){G=!0,U=!1,Q=!0,L({type:"stream_error",workflowId:r,namespace:u,error:V,position:f,ts:Date.now()}),q.delete(S)},get writable(){return U},get position(){return f},get namespace(){return u}};return q.set(S,{writer:M,backpressure:_,aborted:G,closed:Q}),M},d.getReadable=w=>{let u=w?.namespace??"default",g=w?.startIndex??0,S=w?.pollInterval??10,C=w?.pollTimeout??3e4;if(!y)throw new Error("streamStore is required to use getReadable(). Pass a streamStore to createWorkflow options.");let _=`${r}:${u}:${g}`,f=T.get(_);if(f&&!f.closed)return f.reader;let U=()=>{let Te=`${r}:${u}`,re=q.get(Te);re&&re.backpressure.decrement()},G=g,Q=!0,M=!1,V=[],oe=0,X={async read(){if(M)return j(Je("closed","Reader is closed"));if(oe<V.length){let ue=V[oe++];return G=ue.position+1,U(),L({type:"stream_read",workflowId:r,namespace:u,position:ue.position,ts:Date.now()}),Z(ue.value)}let Te=`${r}:${u}`,re=Date.now(),ie=q.has(Te),te=await y.getMetadata(r,u),ae=te.ok&&te.value!==void 0;for(;Date.now()-re<C;){let ue=await y.read(r,u,G,100);if(!ue.ok)return j(Je("store_error",ue.error.message,ue.error));let De=ue.value;if(De.length>0){V=De,oe=1;let Ie=De[0];return G=Ie.position+1,U(),L({type:"stream_read",workflowId:r,namespace:u,position:Ie.position,ts:Date.now()}),Z(Ie.value)}let Me=q.has(Te),Ce=await y.getMetadata(r,u),Qe=Ce.ok&&Ce.value!==void 0;if(Me&&(ie=!0),Qe&&(ae=!0),Ce.ok&&Ce.value?.closed)return Q=!1,j(Ve(G));if(ie&&!Me&&!Qe)return Q=!1,j(Ve(G));ae&&!Me&&Ce.ok&&Ce.value?.closed,await new Promise(Ie=>setTimeout(Ie,S))}return Q=!1,j(Ve(G))},close(){M=!0,Q=!1,V=[],T.delete(_)},get readable(){return Q},get position(){return G},get namespace(){return u}};return T.set(_,{reader:X,position:G,closed:M}),X},d.streamForEach=async(w,u,g)=>{let S=g?.checkpointInterval??1,C=g?.concurrency??1,_=[],f=0,U=-1,G=M=>typeof M=="object"&&M!==null&&"read"in M&&typeof M.read=="function",Q=async(M,V,oe,X)=>{let re=S>0&&V%S===0?`stream-foreach:${X}:pos-${oe}`:void 0,ie=re??`stream-item-${oe}`,te=await d(ie,()=>u(M,V),{key:re});return{index:V,position:oe,result:te}};if(G(w))if(C<=1){let M=w.position,V=await w.read();for(;V.ok;){let oe=V.value,{result:X}=await Q(oe,f,M,w.namespace);_.push(X),U=M,f++,M=w.position,V=await w.read()}}else{let M=new Map,V=0,oe=0,X=new Array(C).fill(null),Te=async()=>{for(let ue=0;ue<X.length;ue++)if(X[ue]===null)return ue;let te=X.filter(ue=>ue!==null),ae=await Promise.race(te);return M.set(ae.index,{position:ae.position,result:ae.result}),X[ae.slotIndex]=null,ae.slotIndex},re=w.position,ie=await w.read();for(;ie.ok;){let te=await Te(),ae=V,ue=re,De=ie.value,Me=te;X[te]=Q(De,ae,ue,w.namespace).then(Ce=>({slotIndex:Me,...Ce})),oe++,V++,re=w.position,ie=await w.read()}for(let te=0;te<X.length;te++)if(X[te]!==null){let ae=await X[te];M.set(ae.index,{position:ae.position,result:ae.result})}for(let te=0;te<oe;te++){let ae=M.get(te);ae&&(_.push(ae.result),U=ae.position,f++)}}else if(C<=1){let M=0;for await(let V of w){let{result:oe}=await Q(V,M,M,"async-iterable");_.push(oe),U=M,f++,M++}}else{let M=new Map,V=0,oe=0,X=new Array(C).fill(null),Te=async()=>{for(let te=0;te<X.length;te++)if(X[te]===null)return te;let re=X.filter(te=>te!==null),ie=await Promise.race(re);return M.set(ie.index,ie.result),X[ie.slotIndex]=null,ie.slotIndex};for await(let re of w){let ie=await Te(),te=V,ae=ie;X[ie]=Q(re,te,te,"async-iterable").then(ue=>({slotIndex:ae,...ue})),oe++,V++}for(let re=0;re<X.length;re++)if(X[re]!==null){let ie=await X[re];M.set(ie.index,ie.result)}for(let re=0;re<oe;re++)M.has(re)&&(_.push(M.get(re)),U=re,f++)}return{results:_,processedCount:f,lastPosition:U}},d.if=c.if,d.label=c.label,d.branch=c.branch,d.arm=c.arm,d.forEach=c.forEach,d.item=c.item,d.dep=c.dep,d.workflow=(w,u,g)=>d(w,u,g),d.all=(w,u,g)=>{let S=g!==void 0&&Object.prototype.hasOwnProperty.call(g,"key")?g:{...g,key:void 0};return d(w,async()=>Z(await c.all(w,u)),S)},d.map=(w,u,g,S)=>{let C=S!==void 0&&Object.prototype.hasOwnProperty.call(S,"key")?S:{...S,key:void 0};return d(w,async()=>Z(await c.map(w,u,g,S)),C)},d},$=({step:c})=>{let d=K(c);return W({step:d,steps:We(J??{},d),deps:J,ctx:he})},h;try{h=await Ne($,{onError:me,onEvent:ne,catchUnexpected:xe,workflowId:r,workflowName:e,context:se,_workflowSignal:i})}finally{i&&i.removeEventListener("abort",ee)}if(!h.ok&&z.length>0){let c=[];for(let d=z.length-1;d>=0;d--){let q=z[d];try{await q.compensate(q.value)}catch(T){c.push({stepName:q.stepName,error:T})}}if(c.length>0){let d={type:"SAGA_COMPENSATION_ERROR",originalError:h.error,compensationErrors:c};h=j(d,{cause:h.cause})}}let fe=performance.now()-n;if(!h.ok){let c;if(Ge(h.cause)&&(c=h.cause),!c&&O&&Et(h.error)){let d=h.cause;d!=null&&typeof d=="object"&&"name"in d&&d.name==="AbortError"&&(c={type:"WORKFLOW_CANCELLED",reason:I??(typeof i?.reason=="string"?i.reason:i?.reason instanceof Error?i.reason.message:void 0),lastStepKey:B})}if(c)return L({type:"workflow_cancelled",workflowId:r,ts:Date.now(),durationMs:fe,reason:c.reason,lastStepKey:c.lastStepKey}),c&&!Ge(h.cause)?j(h.error,{cause:c}):h}if(h.ok&&O){let c=I??(typeof i?.reason=="string"?i.reason:i?.reason instanceof Error?i.reason.message:void 0);L({type:"workflow_cancelled",workflowId:r,ts:Date.now(),durationMs:fe,reason:c,lastStepKey:B});let d={type:"WORKFLOW_CANCELLED",reason:c,lastStepKey:B};return j(xe(d),{cause:d})}return h.ok?L({type:"workflow_success",workflowId:r,ts:Date.now(),durationMs:fe}):L({type:"workflow_error",workflowId:r,ts:Date.now(),durationMs:fe,error:h.error}),h}function v(P,W,D){let r,J,z;return typeof P=="string"?(r=P,J=W,z=D):(J=P,z=W),p(r,J,z)}async function F(P,W,D){let r,J,z;typeof P=="string"?(r=P,J=W,z=D):(J=P,z=W);let ce=Rt(),se=z?.onEvent,ne={...z,onEvent:(ye,be)=>{ce.handleEvent(ye);try{se?.(ye,be)}catch{}}},me,pe;try{me=await p(r,J,ne)}catch(ye){let be=E?.catchUnexpected??Fe;me=j(be(ye),{cause:ye})}finally{pe=ce.getResumeState()}return{result:me,resumeState:pe}}let Y={withDeps:P=>Xe(Y,P),run:v,runWithState:F};return Y}function Ct(e){return typeof e=="object"&&e!==null&&e.type==="SAGA_COMPENSATION_ERROR"}function St(e,t,l){return ht(e,t,l)}async function bt(e,t){let l=crypto.randomUUID(),b=performance.now(),E=[],p=P=>t?.onEvent?.(P);p({type:"saga_start",sagaId:l,ts:Date.now()});let Y=Object.assign(async(P,W,D)=>{if(typeof P!="string"||P.length===0)throw new TypeError("step(name, operation, options?): first argument must be a string.");let r=await W();if(r.ok)return D?.compensate&&E.push({name:P,value:r.value,compensate:D.compensate}),r.value;throw Re(r.error,{origin:"result",resultCause:r.cause})},{try:async(P,W,D)=>{if(typeof P!="string"||P.length===0)throw new TypeError("step.try(name, operation, options): first argument must be a string.");let r="error"in D?()=>D.error:D.onError;try{let J=await W();return D.compensate&&E.push({name:P,value:J,compensate:D.compensate}),J}catch(J){let z=r(J);throw Re(z,{origin:"throw",thrown:J})}}});try{let P=await e({step:Y});return p({type:"saga_success",sagaId:l,ts:Date.now(),durationMs:performance.now()-b}),Z(P)}catch(P){let W=performance.now()-b,D=ge(P)?P.error:P;p({type:"saga_error",sagaId:l,ts:Date.now(),durationMs:W,error:D}),p({type:"saga_compensation_start",sagaId:l,ts:Date.now(),stepCount:E.length});let r=performance.now(),J=[];for(let z=E.length-1;z>=0;z--){let ce=E[z];try{await ce.compensate(ce.value),p({type:"saga_compensation_step",sagaId:l,stepName:ce.name,ts:Date.now(),success:!0})}catch(se){J.push({stepName:ce.name,error:se}),p({type:"saga_compensation_step",sagaId:l,stepName:ce.name,ts:Date.now(),success:!1,error:se})}}if(p({type:"saga_compensation_end",sagaId:l,ts:Date.now(),durationMs:performance.now()-r,success:J.length===0,failedCount:J.length}),J.length>0){let z={type:"SAGA_COMPENSATION_ERROR",originalError:D,compensationErrors:J};if(t?.onError?.(z),t?.throwOnCompensationFailure)throw z;return j(z)}return t?.onError?.(D),ge(P)?j(D):j(new ve({cause:P}))}}0&&(module.exports={createSagaWorkflow,isSagaCompensationError,runSaga});
|
|
11
|
-
//# sourceMappingURL=saga.cjs.map
|