{"version":3,"sources":["../../src/use-async-lock/index.ts"],"sourcesContent":["import { useGetterRef } from '../use-getter-ref'\nimport { useLatest } from '../use-latest'\nimport { useStableFn } from '../use-stable-fn'\n\nimport type { AnyFunc } from '../utils/basic'\n\nexport type UseAsyncLockReturns<T extends AnyFunc, R extends AnyFunc> = (\n  ...args: Parameters<T>\n) => R extends undefined\n  ? Promise<Awaited<ReturnType<T>> | undefined>\n  : Promise<Awaited<ReturnType<T>> | Awaited<ReturnType<R>>>\n\n/**\n * A React Hook to create a function that can be used to ensure that **only one is running at a time**, and provides an additional invalid operation callback function.\n *\n * @param {AnyFunc} asyncFn - `AnyFunc`, the async function to run, see {@link AnyFunc}\n * @param {AnyFunc} [onMeetLock] - `AnyFunc`, the callback function to run when the lock is met, see {@link AnyFunc}\n * @returns {UseAsyncLockReturns} `UseAsyncLockReturns`, see {@link UseAsyncLockReturns}\n */\nexport function useAsyncLock<T extends AnyFunc, R extends AnyFunc>(\n  asyncFn: T,\n  onMeetLock?: R,\n): UseAsyncLockReturns<T, R> {\n  const [isLockedRef, isLocked] = useGetterRef(false)\n  const latest = useLatest({ asyncFn, onMeetLock })\n\n  const lockedAsync = useStableFn(async (...args: Parameters<T>) => {\n    const { asyncFn, onMeetLock } = latest.current\n\n    if (isLocked()) {\n      return onMeetLock?.()\n    }\n\n    isLockedRef.current = true\n\n    try {\n      return await asyncFn(...args)\n    } finally {\n      isLockedRef.current = false\n    }\n  })\n\n  return lockedAsync as UseAsyncLockReturns<T, R>\n}\n"],"names":["useAsyncLock","asyncFn","onMeetLock","useGetterRef","isLockedRef","isLocked","latest","useLatest","lockedAsync","useStableFn","args","current"],"mappings":";;;;+BAmBgBA;;;eAAAA;;;4BAnBa;yBACH;2BACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBrB,SAASA,aACdC,OAAU,EACVC,UAAc;IAEd,IAAgCC,iCAAAA,IAAAA,0BAAY,EAAC,YAAtCC,cAAyBD,kBAAZE,WAAYF;IAChC,IAAMG,SAASC,IAAAA,oBAAS,EAAC;QAAEN,SAAAA;QAASC,YAAAA;IAAW;IAE/C,IAAMM,cAAcC,IAAAA,wBAAW,EAAC;yCAAUC;YAAAA;;;gBACRJ,iBAAxBL,WAASC;;;;wBAAeI,kBAAAA,OAAOK,OAAO,EAAtCV,YAAwBK,gBAAxBL,SAASC,eAAeI,gBAAfJ;wBAEjB,IAAIG,YAAY;4BACd;;gCAAOH,yBAAAA,mCAAAA;;wBACT;wBAEAE,YAAYO,OAAO,GAAG;;;;;;;;;wBAGb;;4BAAMV,gBAAAA,KAAAA,GAAQ,qBAAGS;;;wBAAxB;;4BAAO;;;wBAEPN,YAAYO,OAAO,GAAG;;;;;;;;;;QAE1B;;IAEA,OAAOH;AACT"}