@vulppi/promise-lock
Version:
A promise-based lock library for Vulppi
2 lines (1 loc) • 439 B
JavaScript
function d(u){let{timeout:o=2e4}=u||{},t,e=0;return{get length(){return e},async lock(){e++;let n=!0,r=t,{resolve:i,promise:a}=Promise.withResolvers();t=a;let s=()=>{i(!0),n=!1,e--,e===0&&(t=void 0)},l=()=>{i(!1),e--,e===0&&(t=void 0)};if(r&&!await r)throw l(),new Error("The propagation was interrupted");return o>0&&setTimeout(s,o),{get is_free(){return!n},get length(){return e},unlock:s,stopPropagation:l}}}}export{d as createLocker};