{"version":3,"file":"mutex.cjs","names":["isPromise"],"sources":["../../../src/common/exec/mutex.ts"],"sourcesContent":["import { isPromise } from './promise'\n\nexport type Mutex = (fn: (() => void), elseFn?: (() => void)) => boolean\nexport type AsyncMutex = (fn: (() => void), elseFn?: (() => void)) => Promise<boolean>\n\nexport function useMutex(): Mutex {\n  let token = true\n  return (fn, elseFn) => {\n    let executed = false\n    if (token) {\n      token = false\n      try {\n        fn()\n        executed = true\n      }\n      finally {\n        token = true\n      }\n    }\n    else if (elseFn !== undefined) {\n      elseFn()\n    }\n    return executed\n  }\n}\n\nexport function useAsyncMutex(): AsyncMutex {\n  let token = true\n  return async (fn, elseFn) => {\n    let executed = false\n    if (token) {\n      token = false\n      try {\n        const result = fn()\n        if (isPromise(result))\n          await result\n        executed = true\n      }\n      finally {\n        token = true\n      }\n    }\n    else if (elseFn !== undefined) {\n      const result = elseFn()\n      if (isPromise(result))\n        await result\n    }\n    return executed\n  }\n}\n\n// export type Lock = ({lock: () => Promise<void>, unlock: () => void})\n\n// export function createLock() {\n//   let lockCtr = []\n//   return {\n//     lock() {\n\n//     },\n//     unlock() {\n\n//     }\n//   }\n// }\n"],"mappings":";;;;AAKA,SAAgB,WAAkB;CAChC,IAAI,QAAQ;AACZ,SAAQ,IAAI,WAAW;EACrB,IAAI,WAAW;AACf,MAAI,OAAO;AACT,WAAQ;AACR,OAAI;AACF,QAAI;AACJ,eAAW;aAEL;AACN,YAAQ;;aAGH,WAAW,OAClB,SAAQ;AAEV,SAAO;;;AAIX,SAAgB,gBAA4B;CAC1C,IAAI,QAAQ;AACZ,QAAO,OAAO,IAAI,WAAW;EAC3B,IAAI,WAAW;AACf,MAAI,OAAO;AACT,WAAQ;AACR,OAAI;IACF,MAAM,SAAS,IAAI;AACnB,QAAIA,sCAAU,OAAO,CACnB,OAAM;AACR,eAAW;aAEL;AACN,YAAQ;;aAGH,WAAW,QAAW;GAC7B,MAAM,SAAS,QAAQ;AACvB,OAAIA,sCAAU,OAAO,CACnB,OAAM;;AAEV,SAAO"}