{"version":3,"file":"debounce-BHqBzJ1a.mjs","sources":["../src/utils/debounce.ts"],"sourcesContent":["import {type MaybeRefOrGetter, toValue} from 'vue'\nimport type {\n  AnyFn,\n  ArgumentsType,\n  DebounceFilterOptions,\n  EventFilter,\n  FunctionArgs,\n  UseDebounceFnReturn,\n} from '@vueuse/core'\n\nexport const noop = () => {}\n\n/**\n * @internal\n */\nfunction createFilterWrapper<T extends AnyFn>(filter: EventFilter & {cancel: () => void}, fn: T) {\n  /* eslint-disable @typescript-eslint/no-explicit-any */\n  function wrapper(this: any, ...args: ArgumentsType<T>) {\n    return new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {\n      // make sure it's a promise\n      Promise.resolve(filter(() => fn.apply(this, args), {fn, thisArg: this, args}))\n        .then(resolve)\n        .catch(reject)\n    })\n  }\n\n  // https://github.com/vueuse/vueuse/pull/4561\n  wrapper.cancel = filter.cancel\n  return wrapper\n}\n\n/**\n * Create an EventFilter that debounce the events\n */\nfunction debounceFilter(ms: MaybeRefOrGetter<number>, options: DebounceFilterOptions = {}) {\n  let timer: ReturnType<typeof setTimeout> | undefined\n  let maxTimer: ReturnType<typeof setTimeout> | undefined | null\n  let lastRejector: AnyFn = noop\n\n  const _clearTimeout = (timer: ReturnType<typeof setTimeout>) => {\n    clearTimeout(timer)\n    lastRejector()\n    lastRejector = noop\n  }\n\n  let lastInvoker: () => void\n\n  const filter: EventFilter & {cancel: () => void} = (invoke) => {\n    const duration = toValue(ms)\n    const maxDuration = toValue(options.maxWait)\n\n    if (timer) _clearTimeout(timer)\n\n    if (duration <= 0 || (maxDuration !== undefined && maxDuration <= 0)) {\n      if (maxTimer) {\n        _clearTimeout(maxTimer)\n        maxTimer = null\n      }\n      return Promise.resolve(invoke())\n    }\n\n    return new Promise((resolve, reject) => {\n      lastRejector = options.rejectOnCancel ? reject : resolve\n      lastInvoker = invoke\n      // Create the maxTimer. Clears the regular timer on invoke\n      if (maxDuration && !maxTimer) {\n        maxTimer = setTimeout(() => {\n          if (timer) _clearTimeout(timer)\n          maxTimer = null\n          resolve(lastInvoker())\n        }, maxDuration)\n      }\n\n      // Create the regular timer. Clears the max timer on invoke\n      timer = setTimeout(() => {\n        if (maxTimer) _clearTimeout(maxTimer)\n        maxTimer = null\n        resolve(invoke())\n      }, duration)\n    })\n  }\n\n  // https://github.com/vueuse/vueuse/pull/4561\n  filter.cancel = () => {\n    if (timer) _clearTimeout(timer)\n    if (maxTimer) _clearTimeout(maxTimer)\n    maxTimer = null\n  }\n\n  return filter\n}\n\n/**\n * Debounce execution of a function.\n *\n * @see https://vueuse.org/useDebounceFn\n * @param  fn          A function to be executed after delay milliseconds debounced.\n * @param  ms          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  options     Options\n *\n * @return A new, debounce, function, provided with a cancel method.\n */\nexport function useDebounceFn<T extends FunctionArgs>(\n  fn: T,\n  ms: MaybeRefOrGetter<number> = 200,\n  options: DebounceFilterOptions = {}\n): UseDebounceFnReturn<T> & {cancel: () => void} {\n  return createFilterWrapper(debounceFilter(ms, options), fn)\n}\n"],"names":["timer"],"mappings":";AAUO,MAAM,OAAO,MAAM;AAAC;AAK3B,SAAS,oBAAqC,QAA4C,IAAO;AAE/F,WAAS,WAAsB,MAAwB;AACrD,WAAO,IAAI,QAAgC,CAAC,SAAS,WAAW;AAE9D,cAAQ,QAAQ,OAAO,MAAM,GAAG,MAAM,MAAM,IAAI,GAAG,EAAC,IAAI,SAAS,MAAM,KAAA,CAAK,CAAC,EAC1E,KAAK,OAAO,EACZ,MAAM,MAAM;AAAA,IACjB,CAAC;AAAA,EACH;AAGA,UAAQ,SAAS,OAAO;AACxB,SAAO;AACT;AAKA,SAAS,eAAe,IAA8B,UAAiC,IAAI;AACzF,MAAI;AACJ,MAAI;AACJ,MAAI,eAAsB;AAE1B,QAAM,gBAAgB,CAACA,WAAyC;AAC9D,iBAAaA,MAAK;AAClB,iBAAA;AACA,mBAAe;AAAA,EACjB;AAEA,MAAI;AAEJ,QAAM,SAA6C,CAAC,WAAW;AAC7D,UAAM,WAAW,QAAQ,EAAE;AAC3B,UAAM,cAAc,QAAQ,QAAQ,OAAO;AAE3C,QAAI,qBAAqB,KAAK;AAE9B,QAAI,YAAY,KAAM,gBAAgB,UAAa,eAAe,GAAI;AACpE,UAAI,UAAU;AACZ,sBAAc,QAAQ;AACtB,mBAAW;AAAA,MACb;AACA,aAAO,QAAQ,QAAQ,QAAQ;AAAA,IACjC;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,qBAAe,QAAQ,iBAAiB,SAAS;AACjD,oBAAc;AAEd,UAAI,eAAe,CAAC,UAAU;AAC5B,mBAAW,WAAW,MAAM;AAC1B,cAAI,qBAAqB,KAAK;AAC9B,qBAAW;AACX,kBAAQ,aAAa;AAAA,QACvB,GAAG,WAAW;AAAA,MAChB;AAGA,cAAQ,WAAW,MAAM;AACvB,YAAI,wBAAwB,QAAQ;AACpC,mBAAW;AACX,gBAAQ,QAAQ;AAAA,MAClB,GAAG,QAAQ;AAAA,IACb,CAAC;AAAA,EACH;AAGA,SAAO,SAAS,MAAM;AACpB,QAAI,qBAAqB,KAAK;AAC9B,QAAI,wBAAwB,QAAQ;AACpC,eAAW;AAAA,EACb;AAEA,SAAO;AACT;AAYO,SAAS,cACd,IACA,KAA+B,KAC/B,UAAiC,CAAA,GACc;AAC/C,SAAO,oBAAoB,eAAe,IAAI,OAAO,GAAG,EAAE;AAC5D;"}