decorio
Version:
First-class ECMAScript decorators for caching, binding, and concurrency patterns
2 lines (1 loc) • 825 B
JavaScript
import{decorate as h,emplace as v}from"../internal/index.js";n.signal=void 0;function n(i){return(u,a)=>h(u,a,d=>{const l=new Map;return function(...f){const e=v(l,this,()=>({callIndex:-1,resolvers:[],timeout:null,controller:null}));e.timeout!==null&&(clearTimeout(e.timeout),e.timeout=null),e.controller!==null&&(e.controller.abort(),e.controller=null);const s=++e.callIndex;return new Promise((m,p)=>{e.resolvers.push([m,p]),e.timeout=setTimeout(()=>{const c=new AbortController;e.controller=c,Promise.resolve().then(()=>{try{return n.signal=c.signal,d.apply(this,f)}finally{n.signal=void 0}}).then(t=>{if(e.callIndex>s)return;const r=[...e.resolvers];l.delete(this);for(const[o]of r)o(t)}).catch(t=>{if(e.callIndex>s)return;const r=[...e.resolvers];l.delete(this);for(const[,o]of r)o(t)})},i)})}})}export{n as debounced};