UNPKG

@pivanov/utils

Version:

A focused collection of TypeScript utilities for modern web development

8 lines (7 loc) 1.7 kB
/*! * @pivanov/utils v1.0.0 * (c) 2024-present Pavel Ivanov * Released under the MIT License. * https://github.com/pivanov/utils */ var{defineProperty:J,getOwnPropertyNames:Q,getOwnPropertyDescriptor:S}=Object,T=Object.prototype.hasOwnProperty;var O=new WeakMap,U=(z)=>{var q=O.get(z),C;if(q)return q;if(q=J({},"__esModule",{value:!0}),z&&typeof z==="object"||typeof z==="function")Q(z).map((B)=>!T.call(q,B)&&J(q,B,{get:()=>z[B],enumerable:!(C=S(z,B))||C.enumerable}));return O.set(z,q),q};var V=(z,q)=>{for(var C in q)J(z,C,{get:q[C],enumerable:!0,configurable:!0,set:(B)=>q[C]=()=>B})};var _={};V(_,{timeout:()=>W,sleep:()=>P,retry:()=>X,parallelLimit:()=>Z,defer:()=>Y});module.exports=U(_);var P=(z,q)=>{return new Promise((C,B)=>{if(q?.aborted){B(q.reason);return}let D=setTimeout(()=>{q?.removeEventListener("abort",G),C()},z),G=()=>{clearTimeout(D),B(q?.reason)};q?.addEventListener("abort",G,{once:!0})})},W=(z,q,C)=>{return new Promise((B,D)=>{let G=setTimeout(()=>{D(C??Error(`Operation timed out after ${q}ms`))},q);z.then((H)=>{clearTimeout(G),B(H)},(H)=>{clearTimeout(G),D(H)})})},X=async(z,q={})=>{let{attempts:C=3,backoff:B=0,signal:D,shouldRetry:G}=q,H;for(let F=1;F<=C;F++){if(D?.aborted)throw D.reason;try{return await z(F)}catch(K){if(H=K,F>=C)break;if(G&&!G(K,F))break;let N=typeof B==="function"?B(F):B;if(N>0)await P(N,D)}}throw H},Y=()=>{let z,q;return{promise:new Promise((B,D)=>{z=B,q=D}),resolve:z,reject:q}},Z=async(z,q,C)=>{if(q<1)throw Error("parallelLimit: concurrency must be >= 1");let B=Array(z.length),D=0,G=async()=>{while(!0){let F=D++;if(F>=z.length)return;B[F]=await C(z[F],F)}},H=Array.from({length:Math.min(q,z.length)},G);return await Promise.all(H),B};