bootstrap-vue-next
Version:
Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development
1 lines • 4.51 kB
Source Map (JSON)
{"version":3,"file":"debounce-C_wjWVGH.mjs","names":[],"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'\nimport {noop} from './functions'\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"],"mappings":";;;;;;AAcA,SAAS,oBAAqC,QAA4C,IAAO;CAE/F,SAAS,QAAmB,GAAG,MAAwB;AACrD,SAAO,IAAI,SAAiC,SAAS,WAAW;AAE9D,WAAQ,QAAQ,aAAa,GAAG,MAAM,MAAM,KAAK,EAAE;IAAC;IAAI,SAAS;IAAM;IAAK,CAAC,CAAC,CAC3E,KAAK,QAAQ,CACb,MAAM,OAAO;IAChB;;AAIJ,SAAQ,SAAS,OAAO;AACxB,QAAO;;;;;AAMT,SAAS,eAAe,IAA8B,UAAiC,EAAE,EAAE;CACzF,IAAI;CACJ,IAAI;CACJ,IAAI,eAAsB;CAE1B,MAAM,iBAAiB,UAAyC;AAC9D,eAAa,MAAM;AACnB,gBAAc;AACd,iBAAe;;CAGjB,IAAI;CAEJ,MAAM,UAA8C,WAAW;EAC7D,MAAM,WAAW,QAAQ,GAAG;EAC5B,MAAM,cAAc,QAAQ,QAAQ,QAAQ;AAE5C,MAAI,MAAO,eAAc,MAAM;AAE/B,MAAI,YAAY,KAAM,gBAAgB,KAAA,KAAa,eAAe,GAAI;AACpE,OAAI,UAAU;AACZ,kBAAc,SAAS;AACvB,eAAW;;AAEb,UAAO,QAAQ,QAAQ,QAAQ,CAAC;;AAGlC,SAAO,IAAI,SAAS,SAAS,WAAW;AACtC,kBAAe,QAAQ,iBAAiB,SAAS;AACjD,iBAAc;AAEd,OAAI,eAAe,CAAC,SAClB,YAAW,iBAAiB;AAC1B,QAAI,MAAO,eAAc,MAAM;AAC/B,eAAW;AACX,YAAQ,aAAa,CAAC;MACrB,YAAY;AAIjB,WAAQ,iBAAiB;AACvB,QAAI,SAAU,eAAc,SAAS;AACrC,eAAW;AACX,YAAQ,QAAQ,CAAC;MAChB,SAAS;IACZ;;AAIJ,QAAO,eAAe;AACpB,MAAI,MAAO,eAAc,MAAM;AAC/B,MAAI,SAAU,eAAc,SAAS;AACrC,aAAW;;AAGb,QAAO;;;;;;;;;;;;AAaT,SAAgB,cACd,IACA,KAA+B,KAC/B,UAAiC,EAAE,EACY;AAC/C,QAAO,oBAAoB,eAAe,IAAI,QAAQ,EAAE,GAAG"}