@taraflex/debounce
Advanced tools
+3
-3
@@ -1,4 +0,4 @@ | ||
| declare function trottle<Args extends any[], R, P extends PromiseLike<R>>(f: (...args: Args) => P, timeout: number, trottleAfterError?: boolean): (...rest: Args) => P | Promise<R>; | ||
| declare function trottleAbortable<Args extends any[], R, P extends PromiseLike<R>>(f: (signal: AbortSignal, ...args: Args) => P, timeout: number, trottleAfterError?: boolean): ((...rest: Args) => P | Promise<R>) & { | ||
| now: (...rest: Args) => P | Promise<R>; | ||
| declare function trottle<Args extends any[], P extends PromiseLike<any>>(f: (...args: Args) => P, timeout: number, trottleAfterError?: boolean): (...rest: Args) => P | Promise<Awaited<P>>; | ||
| declare function trottleAbortable<Args extends any[], P extends PromiseLike<any>>(f: (signal: AbortSignal, ...args: Args) => P, timeout: number, trottleAfterError?: boolean): ((...rest: Args) => P | Promise<Awaited<P>>) & { | ||
| now: (...rest: Args) => P | Promise<Awaited<P>>; | ||
| }; | ||
@@ -5,0 +5,0 @@ declare function debounceSync<Args extends any[], R>(f: (...args: Args) => R, time: number): ((...args: Args) => void) & { |
+3
-3
@@ -21,4 +21,4 @@ "use strict"; | ||
| // index.ts | ||
| var dbounce_exports = {}; | ||
| __export(dbounce_exports, { | ||
| var debounce_exports = {}; | ||
| __export(debounce_exports, { | ||
| debounceSync: () => debounceSync, | ||
@@ -28,3 +28,3 @@ trottle: () => trottle, | ||
| }); | ||
| module.exports = __toCommonJS(dbounce_exports); | ||
| module.exports = __toCommonJS(debounce_exports); | ||
| function trottle(f, timeout, trottleAfterError) { | ||
@@ -31,0 +31,0 @@ let started = 0; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../index.ts"],"sourcesContent":["export function trottle<Args extends any[], R, P extends PromiseLike<R>>(f: (...args: Args) => P, timeout: number, trottleAfterError?: boolean) {\r\n let started = 0;\r\n let lastArgs: null | Args = null;\r\n let lastPromise: P | Promise<R> = null;\r\n\r\n const pause = (resolve: () => void) => {\r\n const diff = Date.now() - started;\r\n if (timeout <= diff) {\r\n resolve();\r\n } else {\r\n setTimeout(resolve, timeout - diff);\r\n }\r\n }\r\n\r\n async function process() {\r\n while (lastArgs) {\r\n started = Date.now();\r\n const args = lastArgs;\r\n lastArgs = null;\r\n try {\r\n lastPromise = f.apply(this, args);\r\n try {\r\n await lastPromise;\r\n } catch {\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n } catch (e) {\r\n lastPromise = Promise.reject(e);\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n await new Promise<void>(pause);\r\n }\r\n started = 0;\r\n }\r\n\r\n return {\r\n [f.name](...rest: Args) {\r\n lastArgs = rest;\r\n if (!started) {\r\n process();\r\n }\r\n return lastPromise;\r\n }\r\n }[f.name];\r\n}\r\n\r\nexport function trottleAbortable<Args extends any[], R, P extends PromiseLike<R>>(f: (signal: AbortSignal, ...args: Args) => P, timeout: number, trottleAfterError?: boolean) {\r\n let started = 0;\r\n let lastArgs: null | Args = null;\r\n let lastPromise: P | Promise<R> = null;\r\n\r\n async function process(signal: AbortSignal) {\r\n let timer: ReturnType<typeof setTimeout> = null;\r\n let fulfill: () => void = null;\r\n function clearTimer(_: Event) {\r\n if (fulfill) {\r\n clearTimeout(timer);\r\n fulfill();\r\n fulfill = null;\r\n }\r\n }\r\n try {\r\n signal.addEventListener('abort', clearTimer);\r\n\r\n const pause = (resolve: () => void) => {\r\n if (signal.aborted) {\r\n return resolve();\r\n }\r\n const diff = Date.now() - started;\r\n if (timeout <= diff) {\r\n return resolve();\r\n }\r\n fulfill = resolve;\r\n timer = setTimeout(resolve, timeout - diff);\r\n }\r\n\r\n while (lastArgs) {\r\n if (signal.aborted) return;\r\n\r\n started = Date.now();\r\n const args = lastArgs;\r\n lastArgs = null;\r\n\r\n try {\r\n lastPromise = f.call(this, signal, ...args)\r\n try {\r\n await lastPromise;\r\n } catch {\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n } catch (e) {\r\n lastPromise = Promise.reject(e);\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n\r\n await new Promise<void>(pause);\r\n }\r\n } finally {\r\n signal.removeEventListener('abort', clearTimer);\r\n if (!signal.aborted) {\r\n started = 0;\r\n }\r\n }\r\n }\r\n\r\n let ctrl = new AbortController();\r\n\r\n return Object.assign(\r\n {\r\n [f.name](...rest: Args) {\r\n lastArgs = rest;\r\n if (!started) {\r\n process(ctrl.signal);\r\n }\r\n return lastPromise;\r\n }\r\n }[f.name],\r\n {\r\n now: {\r\n [f.name](...rest: Args) {\r\n ctrl.abort();\r\n ctrl = new AbortController();\r\n\r\n lastArgs = rest;\r\n process(ctrl.signal);\r\n return lastPromise;\r\n }\r\n }[f.name]\r\n }\r\n );\r\n}\r\n\r\nexport function debounceSync<Args extends any[], R>(f: (...args: Args) => R, time: number) {\r\n let t: any;\r\n return Object.assign({\r\n [f.name](...args: Args) {\r\n clearTimeout(t);\r\n t = setTimeout(f, time, ...args)\r\n }\r\n }[f.name], {\r\n dispose() {\r\n clearTimeout(t);\r\n },\r\n now(...args: Args) {\r\n clearTimeout(t);\r\n return f(...args);\r\n }\r\n });\r\n}\r\n"],"mappings":"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","names":[]} | ||
| {"version":3,"sources":["../index.ts"],"sourcesContent":["export function trottle<Args extends any[], P extends PromiseLike<any>>(f: (...args: Args) => P, timeout: number, trottleAfterError?: boolean) {\r\n let started = 0;\r\n let lastArgs: null | Args = null;\r\n let lastPromise: P | Promise<Awaited<P>> = null;\r\n\r\n const pause = (resolve: () => void) => {\r\n const diff = Date.now() - started;\r\n if (timeout <= diff) {\r\n resolve();\r\n } else {\r\n setTimeout(resolve, timeout - diff);\r\n }\r\n }\r\n\r\n async function process() {\r\n while (lastArgs) {\r\n started = Date.now();\r\n const args = lastArgs;\r\n lastArgs = null;\r\n try {\r\n lastPromise = f.apply(this, args);\r\n try {\r\n await lastPromise;\r\n } catch {\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n } catch (e) {\r\n lastPromise = Promise.reject(e);\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n await new Promise<void>(pause);\r\n }\r\n started = 0;\r\n }\r\n\r\n return {\r\n [f.name](...rest: Args) {\r\n lastArgs = rest;\r\n if (!started) {\r\n process();\r\n }\r\n return lastPromise;\r\n }\r\n }[f.name];\r\n}\r\n\r\nexport function trottleAbortable<Args extends any[], P extends PromiseLike<any>>(f: (signal: AbortSignal, ...args: Args) => P, timeout: number, trottleAfterError?: boolean) {\r\n let started = 0;\r\n let lastArgs: null | Args = null;\r\n let lastPromise: P | Promise<Awaited<P>> = null;\r\n\r\n async function process(signal: AbortSignal) {\r\n let timer: ReturnType<typeof setTimeout> = null;\r\n let fulfill: () => void = null;\r\n function clearTimer(_: Event) {\r\n if (fulfill) {\r\n clearTimeout(timer);\r\n fulfill();\r\n fulfill = null;\r\n }\r\n }\r\n try {\r\n signal.addEventListener('abort', clearTimer);\r\n\r\n const pause = (resolve: () => void) => {\r\n if (signal.aborted) {\r\n return resolve();\r\n }\r\n const diff = Date.now() - started;\r\n if (timeout <= diff) {\r\n return resolve();\r\n }\r\n fulfill = resolve;\r\n timer = setTimeout(resolve, timeout - diff);\r\n }\r\n\r\n while (lastArgs) {\r\n if (signal.aborted) return;\r\n\r\n started = Date.now();\r\n const args = lastArgs;\r\n lastArgs = null;\r\n\r\n try {\r\n lastPromise = f.call(this, signal, ...args)\r\n try {\r\n await lastPromise;\r\n } catch {\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n } catch (e) {\r\n lastPromise = Promise.reject(e);\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n\r\n await new Promise<void>(pause);\r\n }\r\n } finally {\r\n signal.removeEventListener('abort', clearTimer);\r\n if (!signal.aborted) {\r\n started = 0;\r\n }\r\n }\r\n }\r\n\r\n let ctrl = new AbortController();\r\n\r\n return Object.assign(\r\n {\r\n [f.name](...rest: Args) {\r\n lastArgs = rest;\r\n if (!started) {\r\n process(ctrl.signal);\r\n }\r\n return lastPromise;\r\n }\r\n }[f.name],\r\n {\r\n now: {\r\n [f.name](...rest: Args) {\r\n ctrl.abort();\r\n ctrl = new AbortController();\r\n\r\n lastArgs = rest;\r\n process(ctrl.signal);\r\n return lastPromise;\r\n }\r\n }[f.name]\r\n }\r\n );\r\n}\r\n\r\nexport function debounceSync<Args extends any[], R>(f: (...args: Args) => R, time: number) {\r\n let t: any;\r\n return Object.assign({\r\n [f.name](...args: Args) {\r\n clearTimeout(t);\r\n t = setTimeout(f, time, ...args)\r\n }\r\n }[f.name], {\r\n dispose() {\r\n clearTimeout(t);\r\n },\r\n now(...args: Args) {\r\n clearTimeout(t);\r\n return f(...args);\r\n }\r\n });\r\n}\r\n"],"mappings":"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","names":[]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../index.ts"],"sourcesContent":["export function trottle<Args extends any[], R, P extends PromiseLike<R>>(f: (...args: Args) => P, timeout: number, trottleAfterError?: boolean) {\r\n let started = 0;\r\n let lastArgs: null | Args = null;\r\n let lastPromise: P | Promise<R> = null;\r\n\r\n const pause = (resolve: () => void) => {\r\n const diff = Date.now() - started;\r\n if (timeout <= diff) {\r\n resolve();\r\n } else {\r\n setTimeout(resolve, timeout - diff);\r\n }\r\n }\r\n\r\n async function process() {\r\n while (lastArgs) {\r\n started = Date.now();\r\n const args = lastArgs;\r\n lastArgs = null;\r\n try {\r\n lastPromise = f.apply(this, args);\r\n try {\r\n await lastPromise;\r\n } catch {\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n } catch (e) {\r\n lastPromise = Promise.reject(e);\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n await new Promise<void>(pause);\r\n }\r\n started = 0;\r\n }\r\n\r\n return {\r\n [f.name](...rest: Args) {\r\n lastArgs = rest;\r\n if (!started) {\r\n process();\r\n }\r\n return lastPromise;\r\n }\r\n }[f.name];\r\n}\r\n\r\nexport function trottleAbortable<Args extends any[], R, P extends PromiseLike<R>>(f: (signal: AbortSignal, ...args: Args) => P, timeout: number, trottleAfterError?: boolean) {\r\n let started = 0;\r\n let lastArgs: null | Args = null;\r\n let lastPromise: P | Promise<R> = null;\r\n\r\n async function process(signal: AbortSignal) {\r\n let timer: ReturnType<typeof setTimeout> = null;\r\n let fulfill: () => void = null;\r\n function clearTimer(_: Event) {\r\n if (fulfill) {\r\n clearTimeout(timer);\r\n fulfill();\r\n fulfill = null;\r\n }\r\n }\r\n try {\r\n signal.addEventListener('abort', clearTimer);\r\n\r\n const pause = (resolve: () => void) => {\r\n if (signal.aborted) {\r\n return resolve();\r\n }\r\n const diff = Date.now() - started;\r\n if (timeout <= diff) {\r\n return resolve();\r\n }\r\n fulfill = resolve;\r\n timer = setTimeout(resolve, timeout - diff);\r\n }\r\n\r\n while (lastArgs) {\r\n if (signal.aborted) return;\r\n\r\n started = Date.now();\r\n const args = lastArgs;\r\n lastArgs = null;\r\n\r\n try {\r\n lastPromise = f.call(this, signal, ...args)\r\n try {\r\n await lastPromise;\r\n } catch {\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n } catch (e) {\r\n lastPromise = Promise.reject(e);\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n\r\n await new Promise<void>(pause);\r\n }\r\n } finally {\r\n signal.removeEventListener('abort', clearTimer);\r\n if (!signal.aborted) {\r\n started = 0;\r\n }\r\n }\r\n }\r\n\r\n let ctrl = new AbortController();\r\n\r\n return Object.assign(\r\n {\r\n [f.name](...rest: Args) {\r\n lastArgs = rest;\r\n if (!started) {\r\n process(ctrl.signal);\r\n }\r\n return lastPromise;\r\n }\r\n }[f.name],\r\n {\r\n now: {\r\n [f.name](...rest: Args) {\r\n ctrl.abort();\r\n ctrl = new AbortController();\r\n\r\n lastArgs = rest;\r\n process(ctrl.signal);\r\n return lastPromise;\r\n }\r\n }[f.name]\r\n }\r\n );\r\n}\r\n\r\nexport function debounceSync<Args extends any[], R>(f: (...args: Args) => R, time: number) {\r\n let t: any;\r\n return Object.assign({\r\n [f.name](...args: Args) {\r\n clearTimeout(t);\r\n t = setTimeout(f, time, ...args)\r\n }\r\n }[f.name], {\r\n dispose() {\r\n clearTimeout(t);\r\n },\r\n now(...args: Args) {\r\n clearTimeout(t);\r\n return f(...args);\r\n }\r\n });\r\n}\r\n"],"mappings":"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","names":[]} | ||
| {"version":3,"sources":["../index.ts"],"sourcesContent":["export function trottle<Args extends any[], P extends PromiseLike<any>>(f: (...args: Args) => P, timeout: number, trottleAfterError?: boolean) {\r\n let started = 0;\r\n let lastArgs: null | Args = null;\r\n let lastPromise: P | Promise<Awaited<P>> = null;\r\n\r\n const pause = (resolve: () => void) => {\r\n const diff = Date.now() - started;\r\n if (timeout <= diff) {\r\n resolve();\r\n } else {\r\n setTimeout(resolve, timeout - diff);\r\n }\r\n }\r\n\r\n async function process() {\r\n while (lastArgs) {\r\n started = Date.now();\r\n const args = lastArgs;\r\n lastArgs = null;\r\n try {\r\n lastPromise = f.apply(this, args);\r\n try {\r\n await lastPromise;\r\n } catch {\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n } catch (e) {\r\n lastPromise = Promise.reject(e);\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n await new Promise<void>(pause);\r\n }\r\n started = 0;\r\n }\r\n\r\n return {\r\n [f.name](...rest: Args) {\r\n lastArgs = rest;\r\n if (!started) {\r\n process();\r\n }\r\n return lastPromise;\r\n }\r\n }[f.name];\r\n}\r\n\r\nexport function trottleAbortable<Args extends any[], P extends PromiseLike<any>>(f: (signal: AbortSignal, ...args: Args) => P, timeout: number, trottleAfterError?: boolean) {\r\n let started = 0;\r\n let lastArgs: null | Args = null;\r\n let lastPromise: P | Promise<Awaited<P>> = null;\r\n\r\n async function process(signal: AbortSignal) {\r\n let timer: ReturnType<typeof setTimeout> = null;\r\n let fulfill: () => void = null;\r\n function clearTimer(_: Event) {\r\n if (fulfill) {\r\n clearTimeout(timer);\r\n fulfill();\r\n fulfill = null;\r\n }\r\n }\r\n try {\r\n signal.addEventListener('abort', clearTimer);\r\n\r\n const pause = (resolve: () => void) => {\r\n if (signal.aborted) {\r\n return resolve();\r\n }\r\n const diff = Date.now() - started;\r\n if (timeout <= diff) {\r\n return resolve();\r\n }\r\n fulfill = resolve;\r\n timer = setTimeout(resolve, timeout - diff);\r\n }\r\n\r\n while (lastArgs) {\r\n if (signal.aborted) return;\r\n\r\n started = Date.now();\r\n const args = lastArgs;\r\n lastArgs = null;\r\n\r\n try {\r\n lastPromise = f.call(this, signal, ...args)\r\n try {\r\n await lastPromise;\r\n } catch {\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n } catch (e) {\r\n lastPromise = Promise.reject(e);\r\n if (!trottleAfterError) {\r\n continue;\r\n }\r\n }\r\n\r\n await new Promise<void>(pause);\r\n }\r\n } finally {\r\n signal.removeEventListener('abort', clearTimer);\r\n if (!signal.aborted) {\r\n started = 0;\r\n }\r\n }\r\n }\r\n\r\n let ctrl = new AbortController();\r\n\r\n return Object.assign(\r\n {\r\n [f.name](...rest: Args) {\r\n lastArgs = rest;\r\n if (!started) {\r\n process(ctrl.signal);\r\n }\r\n return lastPromise;\r\n }\r\n }[f.name],\r\n {\r\n now: {\r\n [f.name](...rest: Args) {\r\n ctrl.abort();\r\n ctrl = new AbortController();\r\n\r\n lastArgs = rest;\r\n process(ctrl.signal);\r\n return lastPromise;\r\n }\r\n }[f.name]\r\n }\r\n );\r\n}\r\n\r\nexport function debounceSync<Args extends any[], R>(f: (...args: Args) => R, time: number) {\r\n let t: any;\r\n return Object.assign({\r\n [f.name](...args: Args) {\r\n clearTimeout(t);\r\n t = setTimeout(f, time, ...args)\r\n }\r\n }[f.name], {\r\n dispose() {\r\n clearTimeout(t);\r\n },\r\n now(...args: Args) {\r\n clearTimeout(t);\r\n return f(...args);\r\n }\r\n });\r\n}\r\n"],"mappings":"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","names":[]} |
+1
-1
| { | ||
| "name": "@taraflex/debounce", | ||
| "version": "0.2.0", | ||
| "version": "0.2.1", | ||
| "description": "", | ||
@@ -5,0 +5,0 @@ "license": "ISC", |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
24025
0.25%0
-100%