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