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