decorio
Version:
First-class ECMAScript decorators for caching, binding, and concurrency patterns
2 lines (1 loc) • 466 B
JavaScript
import{decorate as h,emplace as f,resolvers as m}from"../internal/index.js";function g(i,l){return h(i,l,o=>{const a=new Map;return function(...c){const e=f(a,this,()=>({pending:0,tail:null}));++e.pending;const{promise:s,resolve:p,reject:t}=m(),n=()=>{--e.pending||(e.tail=null)},r=()=>{try{return o.apply(this,c).then(p).catch(t).finally(n)}catch(u){return Promise.resolve().then(()=>t(u)).then(n)}};return e.tail=e.tail?e.tail.then(r):r(),s}})}export{g as mutex};