@vulppi/promise-lock
Version:
A promise-based lock library for Vulppi
2 lines (1 loc) • 893 B
JavaScript
;var i=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var m=(o,e)=>{for(var n in e)i(o,n,{get:e[n],enumerable:!0})},g=(o,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of f(e))!p.call(o,r)&&r!==n&&i(o,r,{get:()=>e[r],enumerable:!(t=d(e,r))||t.enumerable});return o};var b=o=>g(i({},"__esModule",{value:!0}),o);var k={};m(k,{createLocker:()=>h});module.exports=b(k);function h(o){let{timeout:e=2e4}=o||{},n,t=0;return{get length(){return t},async lock(){t++;let r=!0,s=n,{resolve:l,promise:c}=Promise.withResolvers();n=c;let u=()=>{l(!0),r=!1,t--,t===0&&(n=void 0)},a=()=>{l(!1),t--,t===0&&(n=void 0)};if(s&&!await s)throw a(),new Error("The propagation was interrupted");return e>0&&setTimeout(u,e),{get is_free(){return!r},get length(){return t},unlock:u,stopPropagation:a}}}}