@jagreehal/workflow 1.10.0 → 1.11.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/batch.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var Y=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var pe=Object.prototype.hasOwnProperty;var Ee=(e,u)=>{for(var m in u)Y(e,m,{get:u[m],enumerable:!0})},ye=(e,u,m,x)=>{if(u&&typeof u=="object"||typeof u=="function")for(let d of le(u))!pe.call(e,d)&&d!==m&&Y(e,d,{get:()=>u[d],enumerable:!(x=ce(u,d))||x.enumerable});return e};var me=e=>ye(Y({},"__esModule",{value:!0}),e);var Pe={};Ee(Pe,{batchPresets:()=>Ae,isBatchProcessingError:()=>ae,isInvalidBatchConfigError:()=>Se,processInBatches:()=>be});module.exports=me(Pe);var V=e=>({ok:!0,value:e}),b=(e,u)=>({ok:!1,error:e,...u?.cause!==void 0?{cause:u.cause}:{}});var we=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",z=Symbol.for("step_timeout_marker");function te(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:z in e}function Te(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let u=e;return{timeoutMs:u.timeoutMs,stepName:u.stepName,stepKey:u.stepKey,attempt:u.attempt}}if(z in e)return e[z]}}var oe=Symbol("early-exit");function fe(e,u){return{[oe]:!0,error:e,meta:u}}function de(e){return typeof e=="object"&&e!==null&&e[oe]===!0}var se=Symbol("mapper-exception");function ke(e){return{[se]:!0,thrown:e}}function Re(e){return typeof e=="object"&&e!==null&&e[se]===!0}function Ce(e){return typeof e=="string"?{name:e}:e??{}}function J(e,u){let{backoff:m,initialDelay:x,maxDelay:d,jitter:g}=u,l;switch(m){case"fixed":l=x;break;case"linear":l=x*e;break;case"exponential":l=x*Math.pow(2,e-1);break}if(l=Math.min(l,d),g){let t=l*.25*Math.random();l=l+t}return Math.floor(l)}function Z(e){return new Promise(u=>setTimeout(u,e))}var ne=Symbol("timeout");async function xe(e,u,m){let x=new AbortController,d=u.error??{type:"STEP_TIMEOUT",stepName:m.name,stepKey:m.key,timeoutMs:u.ms,attempt:m.attempt},g,l=new Promise((v,a)=>{g=setTimeout(()=>{x.abort(),a({[ne]:!0,error:d})},u.ms)}),t;u.signal?t=Promise.resolve(e(x.signal)):t=Promise.resolve(e());try{return await Promise.race([t,l])}catch(v){if(typeof v=="object"&&v!==null&&v[ne]===!0){let a=v.error;if(typeof a=="object"&&a!==null&&a.type!=="STEP_TIMEOUT"){let h={timeoutMs:u.ms,stepName:m.name,stepKey:m.key,attempt:m.attempt};z in a?a[z]=h:Object.defineProperty(a,z,{value:h,enumerable:!1,writable:!0,configurable:!1})}throw a}throw v}finally{clearTimeout(g)}}var B={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function re(e,u){let{onError:m,onEvent:x,catchUnexpected:d,workflowId:g,context:l}=u&&typeof u=="object"?u:{},t=g??crypto.randomUUID(),v=!m&&!d,a=[],h=0,U=n=>n??`step_${++h}`,o=n=>{let S=n.context!==void 0||l===void 0?n:{...n,context:l};if(S.type==="step_success"){let P=S.stepId;for(let K=a.length-1;K>=0;K--){let q=a[K];if(q.type==="race"&&!q.winnerId){q.winnerId=P;break}}}x?.(S,l)},A=fe,F=n=>de(n),N=(n,S)=>v?S?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:n,...S.resultCause!==void 0?{cause:S.resultCause}:{}}}:S?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:n,thrown:S.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:n}}:n,X=n=>({type:"UNEXPECTED_ERROR",cause:n.meta.origin==="result"?{type:"STEP_FAILURE",origin:"result",error:n.error,...n.meta.resultCause!==void 0?{cause:n.meta.resultCause}:{}}:{type:"STEP_FAILURE",origin:"throw",error:n.error,thrown:n.meta.thrown}});try{let S=function(w,c){let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),s=!1;a.push({scopeId:i,type:"parallel"});let R=()=>{if(s)return;s=!0;let E=a.findIndex(p=>p.scopeId===i);E!==-1&&a.splice(E,1),o({type:"scope_end",workflowId:t,scopeId:i,ts:Date.now(),durationMs:performance.now()-r})};o({type:"scope_start",workflowId:t,scopeId:i,scopeType:"parallel",name:w,ts:Date.now()});try{let E=await c();if(R(),!E.ok)throw m?.(E.error,w,l),A(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw R(),E}})()},P=function(w,c){let i=Object.keys(w),r=c.name??`Parallel(${i.join(", ")})`,s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let R=performance.now(),E=!1;a.push({scopeId:s,type:"parallel"});let p=()=>{if(E)return;E=!0;let T=a.findIndex(k=>k.scopeId===s);T!==-1&&a.splice(T,1),o({type:"scope_end",workflowId:t,scopeId:s,ts:Date.now(),durationMs:performance.now()-R})};o({type:"scope_start",workflowId:t,scopeId:s,scopeType:"parallel",name:r,ts:Date.now()});try{let T=await new Promise(I=>{if(i.length===0){I([]);return}let M=!1,C=i.length,Q=new Array(i.length);for(let O=0;O<i.length;O++){let j=i[O],G=O;Promise.resolve(w[j]()).catch(f=>b({type:"PROMISE_REJECTED",cause:f},{cause:{type:"PROMISE_REJECTION",reason:f}})).then(f=>{if(!M){if(!f.ok){M=!0,I([{key:j,result:f}]);return}Q[G]={key:j,result:f},C--,C===0&&I(Q)}})}});p();let k={};for(let{key:I,result:M}of T){if(!M.ok)throw m?.(M.error,I,l),A(M.error,{origin:"result",resultCause:M.cause});k[I]=M.value}return k}catch(T){throw p(),T}})()};var ee=S,D=P;let n=(w,c)=>(async()=>{let i=Ce(c),{name:r,key:s,retry:R,timeout:E}=i,p=U(s),T=x,k=T?performance.now():0;if(!(typeof w=="function")){if(R&&R.attempts>1)throw new Error("step: retry options require a function operation. Direct Promise/Result values cannot be re-executed on retry. Wrap your operation in a function: step(() => yourOperation, { retry: {...} })");if(E)throw new Error("step: timeout options require a function operation. Direct Promise/Result values cannot be wrapped with timeout after they've started. Wrap your operation in a function: step(() => yourOperation, { timeout: {...} })")}let C={attempts:Math.max(1,R?.attempts??1),backoff:R?.backoff??B.backoff,initialDelay:R?.initialDelay??B.initialDelay,maxDelay:R?.maxDelay??B.maxDelay,jitter:R?.jitter??B.jitter,retryOn:R?.retryOn??B.retryOn,onRetry:R?.onRetry??B.onRetry};x&&o({type:"step_start",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now()});let Q;for(let f=1;f<=C.attempts;f++){let ie=T?performance.now():0;try{let y;if(typeof w=="function"?E?y=await xe(w,E,{name:r,key:s,attempt:f}):y=await w():y=await w,y.ok){let L=performance.now()-k;return o({type:"step_success",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:L}),s&&o({type:"step_complete",workflowId:t,stepKey:s,name:r,ts:Date.now(),durationMs:L,result:y}),y.value}if(Q=y,f<C.attempts&&C.retryOn(y.error,f)){let L=J(f,C);o({type:"step_retry",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),attempt:f+1,maxAttempts:C.attempts,delayMs:L,error:y.error}),C.onRetry(y.error,f,L),await Z(L);continue}C.attempts>1&&o({type:"step_retries_exhausted",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:performance.now()-k,attempts:f,lastError:y.error});break}catch(y){let L=performance.now()-ie;if(F(y))throw o({type:"step_aborted",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:L}),y;if(te(y)){let _=Te(y),$=E?.ms??_?.timeoutMs??0;if(o({type:"step_timeout",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),timeoutMs:$,attempt:f}),f<C.attempts&&C.retryOn(y,f)){let H=J(f,C);o({type:"step_retry",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),attempt:f+1,maxAttempts:C.attempts,delayMs:H,error:y}),C.onRetry(y,f,H),await Z(H);continue}C.attempts>1&&o({type:"step_retries_exhausted",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:performance.now()-k,attempts:f,lastError:y})}if(f<C.attempts&&C.retryOn(y,f)){let _=J(f,C);o({type:"step_retry",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),attempt:f+1,maxAttempts:C.attempts,delayMs:_,error:y}),C.onRetry(y,f,_),await Z(_);continue}C.attempts>1&&!te(y)&&o({type:"step_retries_exhausted",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:performance.now()-k,attempts:f,lastError:y});let W=performance.now()-k;if(d){let _;try{_=d(y)}catch($){throw ke($)}throw o({type:"step_error",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:W,error:_}),s&&o({type:"step_complete",workflowId:t,stepKey:s,name:r,ts:Date.now(),durationMs:W,result:b(_,{cause:y}),meta:{origin:"throw",thrown:y}}),m?.(_,r,l),A(_,{origin:"throw",thrown:y})}else{let _={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:y}};throw o({type:"step_error",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:W,error:_}),s&&o({type:"step_complete",workflowId:t,stepKey:s,name:r,ts:Date.now(),durationMs:W,result:b(_,{cause:y}),meta:{origin:"throw",thrown:y}}),y}}}let O=Q,j=performance.now()-k,G=N(O.error,{origin:"result",resultCause:O.cause});throw o({type:"step_error",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:j,error:G}),s&&o({type:"step_complete",workflowId:t,stepKey:s,name:r,ts:Date.now(),durationMs:j,result:O,meta:{origin:"result",resultCause:O.cause}}),m?.(O.error,r,l),A(O.error,{origin:"result",resultCause:O.cause})})();n.try=(w,c)=>{let i=c.name,r=c.key,s=U(r),R="error"in c?()=>c.error:c.onError,E=x;return(async()=>{let p=E?performance.now():0;x&&o({type:"step_start",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now()});try{let T=await w(),k=performance.now()-p;return o({type:"step_success",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now(),durationMs:k}),r&&o({type:"step_complete",workflowId:t,stepKey:r,name:i,ts:Date.now(),durationMs:k,result:V(T)}),T}catch(T){let k=R(T),I=performance.now()-p,M=N(k,{origin:"throw",thrown:T});throw o({type:"step_error",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now(),durationMs:I,error:M}),r&&o({type:"step_complete",workflowId:t,stepKey:r,name:i,ts:Date.now(),durationMs:I,result:b(k,{cause:T}),meta:{origin:"throw",thrown:T}}),m?.(k,i,l),A(k,{origin:"throw",thrown:T})}})()},n.fromResult=(w,c)=>{let i=c.name,r=c.key,s=U(r),R="error"in c?()=>c.error:c.onError,E=x;return(async()=>{let p=E?performance.now():0;x&&o({type:"step_start",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now()});let T=await w();if(T.ok){let k=performance.now()-p;return o({type:"step_success",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now(),durationMs:k}),r&&o({type:"step_complete",workflowId:t,stepKey:r,name:i,ts:Date.now(),durationMs:k,result:V(T.value)}),T.value}else{let k=R(T.error),I=performance.now()-p,M=N(k,{origin:"result",resultCause:T.error});throw o({type:"step_error",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now(),durationMs:I,error:M}),r&&o({type:"step_complete",workflowId:t,stepKey:r,name:i,ts:Date.now(),durationMs:I,result:b(k,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),m?.(k,i,l),A(k,{origin:"result",resultCause:T.error})}})()},n.retry=(w,c)=>n(w,{name:c.name,key:c.key,retry:{attempts:c.attempts,backoff:c.backoff,initialDelay:c.initialDelay,maxDelay:c.maxDelay,jitter:c.jitter,retryOn:c.retryOn,onRetry:c.onRetry},timeout:c.timeout}),n.withTimeout=(w,c)=>n(w,{name:c.name,key:c.key,timeout:c}),n.parallel=((...w)=>{if(typeof w[0]=="string"){let c=w[0],i=w[1];return S(c,i)}else{let c=w[0],i=w[1]??{};return P(c,i)}}),n.race=(w,c)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),s=!1,R={scopeId:i,type:"race",winnerId:void 0};a.push(R);let E=()=>{if(s)return;s=!0;let p=a.findIndex(T=>T.scopeId===i);p!==-1&&a.splice(p,1),o({type:"scope_end",workflowId:t,scopeId:i,ts:Date.now(),durationMs:performance.now()-r,winnerId:R.winnerId})};o({type:"scope_start",workflowId:t,scopeId:i,scopeType:"race",name:w,ts:Date.now()});try{let p=await c();if(E(),!p.ok)throw m?.(p.error,w,l),A(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw E(),p}})()},n.allSettled=(w,c)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),s=!1;a.push({scopeId:i,type:"allSettled"});let R=()=>{if(s)return;s=!0;let E=a.findIndex(p=>p.scopeId===i);E!==-1&&a.splice(E,1),o({type:"scope_end",workflowId:t,scopeId:i,ts:Date.now(),durationMs:performance.now()-r})};o({type:"scope_start",workflowId:t,scopeId:i,scopeType:"allSettled",name:w,ts:Date.now()});try{let E=await c();if(R(),!E.ok)throw m?.(E.error,w,l),A(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw R(),E}})()};let q=await e(n);return V(q)}catch(n){if(Re(n))throw n.thrown;if(F(n)){let P=n.meta.origin==="throw"?n.meta.thrown:n.meta.resultCause;if(d||m)return b(n.error,{cause:P});if(we(n.error))return b(n.error,{cause:P});let K=X(n);return b(K,{cause:P})}if(d){let P=d(n);return m?.(P,"unexpected",l),b(P,{cause:n})}let S={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:n}};return m?.(S,"unexpected",l),b(S,{cause:n})}}re.strict=(e,u)=>re(e,u);function ge(e){return typeof e=="object"&&e!==null&&e.type==="QUEUE_FULL"}function ue(e,u){let{maxConcurrent:m,strategy:x="queue",maxQueueSize:d=1/0}=u,g=0,l=[];async function t(){if(g<m){g++;return}if(x==="reject")throw{type:"QUEUE_FULL",limiterName:e,queueSize:l.length,maxQueueSize:d};if(l.length>=d)throw{type:"QUEUE_FULL",limiterName:e,queueSize:l.length,maxQueueSize:d};return new Promise((a,h)=>{l.push({resolve:a,reject:h})})}function v(){g--,l.length>0&&g<m&&(g++,l.shift()?.resolve())}return{async execute(a){await t();try{return await a()}finally{v()}},async executeAll(a){let h=new Array(a.length),U=[];for(let o=0;o<a.length;o++){let A=o,F=this.execute(a[A]).then(N=>{h[A]=N});U.push(F)}return await Promise.all(U),h},async executeResult(a){try{await t()}catch(h){if(ge(h))return b(h);throw h}try{return await a()}finally{v()}},getStats(){return{activeCount:g,maxConcurrent:m,queueSize:l.length,maxQueueSize:d}},reset(){for(g=0;l.length>0;)l.shift()?.reject(new Error("Limiter reset"))}}}function ae(e){return typeof e=="object"&&e!==null&&e.type==="BATCH_PROCESSING_ERROR"}function Se(e){return typeof e=="object"&&e!==null&&e.type==="INVALID_BATCH_CONFIG"}var he=e=>new Promise(u=>setTimeout(u,e));async function be(e,u,m,x){let{batchSize:d,concurrency:g,batchDelayMs:l=0}=m,{afterBatch:t,onProgress:v}=x??{};if(!Number.isInteger(d)||d<1)return b({type:"INVALID_BATCH_CONFIG",reason:"batchSize must be a positive integer",field:"batchSize",value:d});if(!Number.isInteger(g)||g<1)return b({type:"INVALID_BATCH_CONFIG",reason:"concurrency must be a positive integer",field:"concurrency",value:g});if(e.length===0)return V([]);let a=[],h=Math.ceil(e.length/d),U=ue("batch-processor",{maxConcurrent:g});for(let o=0;o<h;o++){let A=o*d,F=Math.min(A+d,e.length),N=e.slice(A,F),X=o+1,ee=N.map((D,n)=>async()=>{let S=A+n,P=await u(D,S);if(!P.ok)throw{type:"BATCH_PROCESSING_ERROR",error:P.error,itemIndex:S,batchNumber:X};return P.value});try{let D=await U.executeAll(ee);a.push(...D)}catch(D){if(ae(D))return b(D);throw D}if(v?.({batch:X,totalBatches:h,processed:a.length,total:e.length,percent:Math.round(a.length/e.length*100)}),t){let D=await t();if(!D.ok)return b({type:"BATCH_PROCESSING_ERROR",error:D.error,batchNumber:X})}l>0&&o<h-1&&await he(l)}return V(a)}var Ae={conservative:{batchSize:20,concurrency:3,batchDelayMs:50},balanced:{batchSize:50,concurrency:5,batchDelayMs:10},aggressive:{batchSize:100,concurrency:10,batchDelayMs:0}};0&&(module.exports={batchPresets,isBatchProcessingError,isInvalidBatchConfigError,processInBatches});
1
+ "use strict";var Y=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var pe=Object.prototype.hasOwnProperty;var Ee=(e,u)=>{for(var m in u)Y(e,m,{get:u[m],enumerable:!0})},ye=(e,u,m,x)=>{if(u&&typeof u=="object"||typeof u=="function")for(let d of le(u))!pe.call(e,d)&&d!==m&&Y(e,d,{get:()=>u[d],enumerable:!(x=ce(u,d))||x.enumerable});return e};var me=e=>ye(Y({},"__esModule",{value:!0}),e);var Pe={};Ee(Pe,{batchPresets:()=>Ae,isBatchProcessingError:()=>ae,isInvalidBatchConfigError:()=>Se,processInBatches:()=>be});module.exports=me(Pe);var V=e=>({ok:!0,value:e}),b=(e,u)=>({ok:!1,error:e,...u?.cause!==void 0?{cause:u.cause}:{}});var we=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",z=Symbol.for("step_timeout_marker");function te(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:z in e}function Te(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let u=e;return{timeoutMs:u.timeoutMs,stepName:u.stepName,stepKey:u.stepKey,attempt:u.attempt}}if(z in e)return e[z]}}var oe=Symbol("early-exit");function fe(e,u){return{[oe]:!0,error:e,meta:u}}function de(e){return typeof e=="object"&&e!==null&&e[oe]===!0}var se=Symbol("mapper-exception");function ke(e){return{[se]:!0,thrown:e}}function Re(e){return typeof e=="object"&&e!==null&&e[se]===!0}function Ce(e){return typeof e=="string"?{name:e}:e??{}}function J(e,u){let{backoff:m,initialDelay:x,maxDelay:d,jitter:g}=u,l;switch(m){case"fixed":l=x;break;case"linear":l=x*e;break;case"exponential":l=x*Math.pow(2,e-1);break}if(l=Math.min(l,d),g){let t=l*.25*Math.random();l=l+t}return Math.floor(l)}function Z(e){return new Promise(u=>setTimeout(u,e))}var ne=Symbol("timeout");async function xe(e,u,m){let x=new AbortController,d=u.error??{type:"STEP_TIMEOUT",stepName:m.name,stepKey:m.key,timeoutMs:u.ms,attempt:m.attempt},g,l=new Promise((_,a)=>{g=setTimeout(()=>{x.abort(),a({[ne]:!0,error:d})},u.ms)}),t;u.signal?t=Promise.resolve(e(x.signal)):t=Promise.resolve(e());try{return await Promise.race([t,l])}catch(_){if(typeof _=="object"&&_!==null&&_[ne]===!0){let a=_.error;if(typeof a=="object"&&a!==null&&a.type!=="STEP_TIMEOUT"){let h={timeoutMs:u.ms,stepName:m.name,stepKey:m.key,attempt:m.attempt};z in a?a[z]=h:Object.defineProperty(a,z,{value:h,enumerable:!1,writable:!0,configurable:!1})}throw a}throw _}finally{clearTimeout(g)}}var B={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function re(e,u){let{onError:m,onEvent:x,catchUnexpected:d,workflowId:g,context:l}=u&&typeof u=="object"?u:{},t=g??crypto.randomUUID(),_=!m&&!d,a=[],h=0,U=n=>n??`step_${++h}`,o=n=>{let S=n.context!==void 0||l===void 0?n:{...n,context:l};if(S.type==="step_success"){let P=S.stepId;for(let K=a.length-1;K>=0;K--){let q=a[K];if(q.type==="race"&&!q.winnerId){q.winnerId=P;break}}}x?.(S,l)},A=fe,F=n=>de(n),N=(n,S)=>_?S?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:n,...S.resultCause!==void 0?{cause:S.resultCause}:{}}}:S?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:n,thrown:S.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:n}}:n,X=n=>({type:"UNEXPECTED_ERROR",cause:n.meta.origin==="result"?{type:"STEP_FAILURE",origin:"result",error:n.error,...n.meta.resultCause!==void 0?{cause:n.meta.resultCause}:{}}:{type:"STEP_FAILURE",origin:"throw",error:n.error,thrown:n.meta.thrown}});try{let S=function(w,c){let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),s=!1;a.push({scopeId:i,type:"parallel"});let R=()=>{if(s)return;s=!0;let E=a.findIndex(p=>p.scopeId===i);E!==-1&&a.splice(E,1),o({type:"scope_end",workflowId:t,scopeId:i,ts:Date.now(),durationMs:performance.now()-r})};o({type:"scope_start",workflowId:t,scopeId:i,scopeType:"parallel",name:w,ts:Date.now()});try{let E=await c();if(R(),!E.ok)throw m?.(E.error,w,l),A(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw R(),E}})()},P=function(w,c){let i=Object.keys(w),r=c.name??`Parallel(${i.join(", ")})`,s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let R=performance.now(),E=!1;a.push({scopeId:s,type:"parallel"});let p=()=>{if(E)return;E=!0;let T=a.findIndex(k=>k.scopeId===s);T!==-1&&a.splice(T,1),o({type:"scope_end",workflowId:t,scopeId:s,ts:Date.now(),durationMs:performance.now()-R})};o({type:"scope_start",workflowId:t,scopeId:s,scopeType:"parallel",name:r,ts:Date.now()});try{let T=await new Promise(I=>{if(i.length===0){I([]);return}let M=!1,C=i.length,Q=new Array(i.length);for(let O=0;O<i.length;O++){let j=i[O],G=O;Promise.resolve(w[j]()).catch(f=>b({type:"PROMISE_REJECTED",cause:f},{cause:{type:"PROMISE_REJECTION",reason:f}})).then(f=>{if(!M){if(!f.ok){M=!0,I([{key:j,result:f}]);return}Q[G]={key:j,result:f},C--,C===0&&I(Q)}})}});p();let k={};for(let{key:I,result:M}of T){if(!M.ok)throw m?.(M.error,I,l),A(M.error,{origin:"result",resultCause:M.cause});k[I]=M.value}return k}catch(T){throw p(),T}})()};var ee=S,D=P;let n=(w,c)=>(async()=>{let i=Ce(c),{name:r,key:s,retry:R,timeout:E}=i,p=U(s),T=x,k=T?performance.now():0;if(!(typeof w=="function")){if(R&&R.attempts>1)throw new Error("step: retry options require a function operation. Direct Promise/Result values cannot be re-executed on retry. Wrap your operation in a function: step(() => yourOperation, { retry: {...} })");if(E)throw new Error("step: timeout options require a function operation. Direct Promise/Result values cannot be wrapped with timeout after they've started. Wrap your operation in a function: step(() => yourOperation, { timeout: {...} })")}let C={attempts:Math.max(1,R?.attempts??1),backoff:R?.backoff??B.backoff,initialDelay:R?.initialDelay??B.initialDelay,maxDelay:R?.maxDelay??B.maxDelay,jitter:R?.jitter??B.jitter,retryOn:R?.retryOn??B.retryOn,onRetry:R?.onRetry??B.onRetry};x&&o({type:"step_start",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now()});let Q;for(let f=1;f<=C.attempts;f++){let ie=T?performance.now():0;try{let y;if(typeof w=="function"?E?y=await xe(w,E,{name:r,key:s,attempt:f}):y=await w():y=await w,y.ok){let L=performance.now()-k;return o({type:"step_success",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:L}),s&&o({type:"step_complete",workflowId:t,stepKey:s,name:r,ts:Date.now(),durationMs:L,result:y}),y.value}if(Q=y,f<C.attempts&&C.retryOn(y.error,f)){let L=J(f,C);o({type:"step_retry",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),attempt:f+1,maxAttempts:C.attempts,delayMs:L,error:y.error}),C.onRetry(y.error,f,L),await Z(L);continue}C.attempts>1&&o({type:"step_retries_exhausted",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:performance.now()-k,attempts:f,lastError:y.error});break}catch(y){let L=performance.now()-ie;if(F(y))throw o({type:"step_aborted",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:L}),y;if(te(y)){let v=Te(y),$=E?.ms??v?.timeoutMs??0;if(o({type:"step_timeout",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),timeoutMs:$,attempt:f}),f<C.attempts&&C.retryOn(y,f)){let H=J(f,C);o({type:"step_retry",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),attempt:f+1,maxAttempts:C.attempts,delayMs:H,error:y}),C.onRetry(y,f,H),await Z(H);continue}C.attempts>1&&o({type:"step_retries_exhausted",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:performance.now()-k,attempts:f,lastError:y})}if(f<C.attempts&&C.retryOn(y,f)){let v=J(f,C);o({type:"step_retry",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),attempt:f+1,maxAttempts:C.attempts,delayMs:v,error:y}),C.onRetry(y,f,v),await Z(v);continue}C.attempts>1&&!te(y)&&o({type:"step_retries_exhausted",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:performance.now()-k,attempts:f,lastError:y});let W=performance.now()-k;if(d){let v;try{v=d(y)}catch($){throw ke($)}throw o({type:"step_error",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:W,error:v}),s&&o({type:"step_complete",workflowId:t,stepKey:s,name:r,ts:Date.now(),durationMs:W,result:b(v,{cause:y}),meta:{origin:"throw",thrown:y}}),m?.(v,r,l),A(v,{origin:"throw",thrown:y})}else{let v={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:y}};throw o({type:"step_error",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:W,error:v}),s&&o({type:"step_complete",workflowId:t,stepKey:s,name:r,ts:Date.now(),durationMs:W,result:b(v,{cause:y}),meta:{origin:"throw",thrown:y}}),y}}}let O=Q,j=performance.now()-k,G=N(O.error,{origin:"result",resultCause:O.cause});throw o({type:"step_error",workflowId:t,stepId:p,stepKey:s,name:r,ts:Date.now(),durationMs:j,error:G}),s&&o({type:"step_complete",workflowId:t,stepKey:s,name:r,ts:Date.now(),durationMs:j,result:O,meta:{origin:"result",resultCause:O.cause}}),m?.(O.error,r,l),A(O.error,{origin:"result",resultCause:O.cause})})();n.try=(w,c)=>{let i=c.name,r=c.key,s=U(r),R="error"in c?()=>c.error:c.onError,E=x;return(async()=>{let p=E?performance.now():0;x&&o({type:"step_start",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now()});try{let T=await w(),k=performance.now()-p;return o({type:"step_success",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now(),durationMs:k}),r&&o({type:"step_complete",workflowId:t,stepKey:r,name:i,ts:Date.now(),durationMs:k,result:V(T)}),T}catch(T){let k=R(T),I=performance.now()-p,M=N(k,{origin:"throw",thrown:T});throw o({type:"step_error",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now(),durationMs:I,error:M}),r&&o({type:"step_complete",workflowId:t,stepKey:r,name:i,ts:Date.now(),durationMs:I,result:b(k,{cause:T}),meta:{origin:"throw",thrown:T}}),m?.(k,i,l),A(k,{origin:"throw",thrown:T})}})()},n.fromResult=(w,c)=>{let i=c.name,r=c.key,s=U(r),R="error"in c?()=>c.error:c.onError,E=x;return(async()=>{let p=E?performance.now():0;x&&o({type:"step_start",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now()});let T=await w();if(T.ok){let k=performance.now()-p;return o({type:"step_success",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now(),durationMs:k}),r&&o({type:"step_complete",workflowId:t,stepKey:r,name:i,ts:Date.now(),durationMs:k,result:V(T.value)}),T.value}else{let k=R(T.error),I=performance.now()-p,M=N(k,{origin:"result",resultCause:T.error});throw o({type:"step_error",workflowId:t,stepId:s,stepKey:r,name:i,ts:Date.now(),durationMs:I,error:M}),r&&o({type:"step_complete",workflowId:t,stepKey:r,name:i,ts:Date.now(),durationMs:I,result:b(k,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),m?.(k,i,l),A(k,{origin:"result",resultCause:T.error})}})()},n.retry=(w,c)=>n(w,{name:c.name,key:c.key,retry:{attempts:c.attempts,backoff:c.backoff,initialDelay:c.initialDelay,maxDelay:c.maxDelay,jitter:c.jitter,retryOn:c.retryOn,onRetry:c.onRetry},timeout:c.timeout}),n.withTimeout=(w,c)=>n(w,{name:c.name,key:c.key,timeout:c}),n.parallel=((...w)=>{if(typeof w[0]=="string"){let c=w[0],i=w[1];return S(c,i)}else{let c=w[0],i=w[1]??{};return P(c,i)}}),n.race=(w,c)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),s=!1,R={scopeId:i,type:"race",winnerId:void 0};a.push(R);let E=()=>{if(s)return;s=!0;let p=a.findIndex(T=>T.scopeId===i);p!==-1&&a.splice(p,1),o({type:"scope_end",workflowId:t,scopeId:i,ts:Date.now(),durationMs:performance.now()-r,winnerId:R.winnerId})};o({type:"scope_start",workflowId:t,scopeId:i,scopeType:"race",name:w,ts:Date.now()});try{let p=await c();if(E(),!p.ok)throw m?.(p.error,w,l),A(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw E(),p}})()},n.allSettled=(w,c)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),s=!1;a.push({scopeId:i,type:"allSettled"});let R=()=>{if(s)return;s=!0;let E=a.findIndex(p=>p.scopeId===i);E!==-1&&a.splice(E,1),o({type:"scope_end",workflowId:t,scopeId:i,ts:Date.now(),durationMs:performance.now()-r})};o({type:"scope_start",workflowId:t,scopeId:i,scopeType:"allSettled",name:w,ts:Date.now()});try{let E=await c();if(R(),!E.ok)throw m?.(E.error,w,l),A(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw R(),E}})()};let q=await e(n);return V(q)}catch(n){if(Re(n))throw n.thrown;if(F(n)){let P=n.meta.origin==="throw"?n.meta.thrown:n.meta.resultCause;if(d||m)return b(n.error,{cause:P});if(we(n.error))return b(n.error,{cause:P});let K=X(n);return b(K,{cause:P})}if(d){let P=d(n);return m?.(P,"unexpected",l),b(P,{cause:n})}let S={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:n}};return m?.(S,"unexpected",l),b(S,{cause:n})}}re.strict=(e,u)=>re(e,u);function ge(e){return typeof e=="object"&&e!==null&&e.type==="QUEUE_FULL"}function ue(e,u){let{maxConcurrent:m,strategy:x="queue",maxQueueSize:d=1/0}=u,g=0,l=[];async function t(){if(g<m){g++;return}if(x==="reject")throw{type:"QUEUE_FULL",limiterName:e,queueSize:l.length,maxQueueSize:d};if(l.length>=d)throw{type:"QUEUE_FULL",limiterName:e,queueSize:l.length,maxQueueSize:d};return new Promise((a,h)=>{l.push({resolve:a,reject:h})})}function _(){g--,l.length>0&&g<m&&(g++,l.shift()?.resolve())}return{async execute(a){await t();try{return await a()}finally{_()}},async executeAll(a){let h=new Array(a.length),U=[];for(let o=0;o<a.length;o++){let A=o,F=this.execute(a[A]).then(N=>{h[A]=N});U.push(F)}return await Promise.all(U),h},async executeResult(a){try{await t()}catch(h){if(ge(h))return b(h);throw h}try{return await a()}finally{_()}},getStats(){return{activeCount:g,maxConcurrent:m,queueSize:l.length,maxQueueSize:d}},reset(){for(g=0;l.length>0;)l.shift()?.reject(new Error("Limiter reset"))}}}function ae(e){return typeof e=="object"&&e!==null&&e.type==="BATCH_PROCESSING_ERROR"}function Se(e){return typeof e=="object"&&e!==null&&e.type==="INVALID_BATCH_CONFIG"}var he=e=>new Promise(u=>setTimeout(u,e));async function be(e,u,m,x){let{batchSize:d,concurrency:g,batchDelayMs:l=0}=m,{afterBatch:t,onProgress:_}=x??{};if(!Number.isInteger(d)||d<1)return b({type:"INVALID_BATCH_CONFIG",reason:"batchSize must be a positive integer",field:"batchSize",value:d});if(!Number.isInteger(g)||g<1)return b({type:"INVALID_BATCH_CONFIG",reason:"concurrency must be a positive integer",field:"concurrency",value:g});if(e.length===0)return V([]);let a=[],h=Math.ceil(e.length/d),U=ue("batch-processor",{maxConcurrent:g});for(let o=0;o<h;o++){let A=o*d,F=Math.min(A+d,e.length),N=e.slice(A,F),X=o+1,ee=N.map((D,n)=>async()=>{let S=A+n,P=await u(D,S);if(!P.ok)throw{type:"BATCH_PROCESSING_ERROR",error:P.error,itemIndex:S,batchNumber:X};return P.value});try{let D=await U.executeAll(ee);a.push(...D)}catch(D){if(ae(D))return b(D);throw D}if(_?.({batch:X,totalBatches:h,processed:a.length,total:e.length,percent:Math.round(a.length/e.length*100)}),t){let D=await t();if(!D.ok)return b({type:"BATCH_PROCESSING_ERROR",error:D.error,batchNumber:X})}l>0&&o<h-1&&await he(l)}return V(a)}var Ae={conservative:{batchSize:20,concurrency:3,batchDelayMs:50},balanced:{batchSize:50,concurrency:5,batchDelayMs:10},aggressive:{batchSize:100,concurrency:10,batchDelayMs:0}};0&&(module.exports={batchPresets,isBatchProcessingError,isInvalidBatchConfigError,processInBatches});
2
2
  //# sourceMappingURL=batch.cjs.map