📄 filters.ts
¶
📊 Analysis Summary¶
Metric | Count |
---|---|
🔧 Functions | 14 |
📦 Imports | 11 |
📊 Variables & Constants | 14 |
⚡ Async/Await Patterns | 5 |
📐 Interfaces | 5 |
📑 Type Aliases | 2 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/shared/utils/filters.ts
📦 Imports¶
Name | Source |
---|---|
MaybeRefOrGetter |
vue |
AnyFn |
./types |
ArgumentsType |
./types |
Awaited |
./types |
Pausable |
./types |
Promisify |
./types |
isRef |
vue |
readonly |
vue |
toValue |
vue |
toRef |
../toRef |
noop |
./is |
Variables & Constants¶
Name | Type | Kind | Value | Exported |
---|---|---|---|---|
timer |
ReturnType<typeof setTimeout> | undefined |
let/var | *not shown* |
✗ |
maxTimer |
ReturnType<typeof setTimeout> | undefined | null |
let/var | *not shown* |
✗ |
lastRejector |
AnyFn |
let/var | noop |
✗ |
lastInvoker |
() => void |
let/var | *not shown* |
✗ |
lastExec |
number |
let/var | 0 |
✗ |
timer |
ReturnType<typeof setTimeout> | undefined |
let/var | *not shown* |
✗ |
isLeading |
boolean |
let/var | true |
✗ |
lastRejector |
AnyFn |
let/var | noop |
✗ |
lastValue |
any |
let/var | *not shown* |
✗ |
ms |
MaybeRefOrGetter<number> |
let/var | *not shown* |
✗ |
trailing |
boolean |
let/var | *not shown* |
✗ |
leading |
boolean |
let/var | *not shown* |
✗ |
rejectOnCancel |
boolean |
let/var | *not shown* |
✗ |
elapsed |
number |
const | Date.now() - lastExec |
✗ |
Async/Await Patterns¶
Type | Function | Await Expressions | Promise Chains |
---|---|---|---|
promise-chain | createFilterWrapper |
none | new Promise(...), Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })) |
.then(resolve).catch, Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then, Promise.resolve | |||
promise-chain | wrapper |
none | new Promise(...), Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })) |
.then(resolve).catch, Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then, Promise.resolve | |||
promise-chain | debounceFilter |
none | Promise.resolve, new Promise(...) |
promise-chain | filter |
none | Promise.resolve, new Promise(...) |
promise-chain | filter |
none | new Promise(...) |
Functions¶
createFilterWrapper(filter: EventFilter, fn: T): (this: any, ...args: ArgumentsType<T>) => Promise<Awaited<ReturnType<T>>>
¶
Code
export function createFilterWrapper<T extends AnyFn>(filter: EventFilter, fn: T) {
function wrapper(this: any, ...args: ArgumentsType<T>) {
return new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {
// make sure it's a promise
Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args }))
.then(resolve)
.catch(reject)
})
}
return wrapper
}
-
JSDoc:
-
Parameters:
filter: EventFilter
fn: T
- Return Type:
(this: any, ...args: ArgumentsType<T>) => Promise<Awaited<ReturnType<T>>>
- Calls:
Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })) .then(resolve) .catch
- Internal Comments:
wrapper(this: any, args: ArgumentsType<T>): Promise<Awaited<ReturnType<T>>>
¶
Code
- Parameters:
this: any
args: ArgumentsType<T>
- Return Type:
Promise<Awaited<ReturnType<T>>>
- Calls:
Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })) .then(resolve) .catch
- Internal Comments:
bypassFilter(invoke: AnyFn): any
¶
- Parameters:
invoke: AnyFn
- Return Type:
any
- Calls:
invoke
debounceFilter(ms: MaybeRefOrGetter<number>, options: DebounceFilterOptions): EventFilter<any[], any, AnyFn>
¶
Code
export function debounceFilter(ms: MaybeRefOrGetter<number>, options: DebounceFilterOptions = {}) {
let timer: ReturnType<typeof setTimeout> | undefined
let maxTimer: ReturnType<typeof setTimeout> | undefined | null
let lastRejector: AnyFn = noop
const _clearTimeout = (timer: ReturnType<typeof setTimeout>) => {
clearTimeout(timer)
lastRejector()
lastRejector = noop
}
let lastInvoker: () => void
const filter: EventFilter = (invoke) => {
const duration = toValue(ms)
const maxDuration = toValue(options.maxWait)
if (timer)
_clearTimeout(timer)
if (duration <= 0 || (maxDuration !== undefined && maxDuration <= 0)) {
if (maxTimer) {
_clearTimeout(maxTimer)
maxTimer = null
}
return Promise.resolve(invoke())
}
return new Promise((resolve, reject) => {
lastRejector = options.rejectOnCancel ? reject : resolve
lastInvoker = invoke
// Create the maxTimer. Clears the regular timer on invoke
if (maxDuration && !maxTimer) {
maxTimer = setTimeout(() => {
if (timer)
_clearTimeout(timer)
maxTimer = null
resolve(lastInvoker())
}, maxDuration)
}
// Create the regular timer. Clears the max timer on invoke
timer = setTimeout(() => {
if (maxTimer)
_clearTimeout(maxTimer)
maxTimer = null
resolve(invoke())
}, duration)
})
}
return filter
}
-
JSDoc:
-
Parameters:
ms: MaybeRefOrGetter<number>
options: DebounceFilterOptions
- Return Type:
EventFilter<any[], any, AnyFn>
- Calls:
clearTimeout
lastRejector
toValue (from vue)
_clearTimeout
Promise.resolve
invoke
setTimeout
resolve
lastInvoker
- Internal Comments:
_clearTimeout(timer: ReturnType<typeof setTimeout>): void
¶
Code
- Parameters:
timer: ReturnType<typeof setTimeout>
- Return Type:
void
- Calls:
clearTimeout
lastRejector
filter(invoke: AnyFn): Promise<any>
¶
Code
(invoke) => {
const duration = toValue(ms)
const maxDuration = toValue(options.maxWait)
if (timer)
_clearTimeout(timer)
if (duration <= 0 || (maxDuration !== undefined && maxDuration <= 0)) {
if (maxTimer) {
_clearTimeout(maxTimer)
maxTimer = null
}
return Promise.resolve(invoke())
}
return new Promise((resolve, reject) => {
lastRejector = options.rejectOnCancel ? reject : resolve
lastInvoker = invoke
// Create the maxTimer. Clears the regular timer on invoke
if (maxDuration && !maxTimer) {
maxTimer = setTimeout(() => {
if (timer)
_clearTimeout(timer)
maxTimer = null
resolve(lastInvoker())
}, maxDuration)
}
// Create the regular timer. Clears the max timer on invoke
timer = setTimeout(() => {
if (maxTimer)
_clearTimeout(maxTimer)
maxTimer = null
resolve(invoke())
}, duration)
})
}
- Parameters:
invoke: AnyFn
- Return Type:
Promise<any>
- Calls:
toValue (from vue)
_clearTimeout
Promise.resolve
invoke
setTimeout
resolve
lastInvoker
- Internal Comments:
throttleFilter(ms: MaybeRefOrGetter<number>, trailing: boolean, leading: boolean, rejectOnCancel: boolean): EventFilter
¶
Code
-
JSDoc:
-
Parameters:
ms: MaybeRefOrGetter<number>
trailing: boolean
leading: boolean
rejectOnCancel: boolean
- Return Type:
EventFilter
clear(): void
¶
Code
- Return Type:
void
- Calls:
clearTimeout
lastRejector
filter(_invoke: AnyFn): any
¶
Code
(_invoke) => {
const duration = toValue(ms)
const elapsed = Date.now() - lastExec
const invoke = () => {
return lastValue = _invoke()
}
clear()
if (duration <= 0) {
lastExec = Date.now()
return invoke()
}
if (elapsed > duration && (leading || !isLeading)) {
lastExec = Date.now()
invoke()
}
else if (trailing) {
lastValue = new Promise((resolve, reject) => {
lastRejector = rejectOnCancel ? reject : resolve
timer = setTimeout(() => {
lastExec = Date.now()
isLeading = true
resolve(invoke())
clear()
}, Math.max(0, duration - elapsed))
})
}
if (!leading && !timer)
timer = setTimeout(() => isLeading = true, duration)
isLeading = false
return lastValue
}
- Parameters:
_invoke: AnyFn
- Return Type:
any
- Calls:
toValue (from vue)
Date.now
_invoke
clear
invoke
setTimeout
resolve
Math.max
invoke(): any
¶
- Return Type:
any
- Calls:
_invoke
pausableFilter(extendFilter: EventFilter, options: PausableFilterOptions): Pausable & { eventFilter: EventFilter }
¶
Code
export function pausableFilter(extendFilter: EventFilter = bypassFilter, options: PausableFilterOptions = {}): Pausable & { eventFilter: EventFilter } {
const {
initialState = 'active',
} = options
const isActive = toRef(initialState === 'active')
function pause() {
isActive.value = false
}
function resume() {
isActive.value = true
}
const eventFilter: EventFilter = (...args) => {
if (isActive.value)
extendFilter(...args)
}
return { isActive: readonly(isActive), pause, resume, eventFilter }
}
-
JSDoc:
-
Parameters:
extendFilter: EventFilter
options: PausableFilterOptions
- Return Type:
Pausable & { eventFilter: EventFilter }
- Calls:
toRef (from ../toRef)
extendFilter
readonly (from vue)
pause(): void
¶
- Return Type:
void
resume(): void
¶
- Return Type:
void
eventFilter(args: [invoke: AnyFn, options: FunctionWrapperOptions<any[], any>]): void
¶
- Parameters:
args: [invoke: AnyFn, options: FunctionWrapperOptions<any[], any>]
- Return Type:
void
- Calls:
extendFilter
Interfaces¶
FunctionWrapperOptions<Args extends any[] = any[], This = any>
¶
Interface Code
Properties¶
Name | Type | Optional | Description |
---|---|---|---|
fn |
FunctionArgs<Args, This> |
✗ | |
args |
Args |
✗ | |
thisArg |
This |
✗ |
ConfigurableEventFilter
¶
Interface Code
Properties¶
Name | Type | Optional | Description |
---|---|---|---|
eventFilter |
EventFilter |
✓ |
DebounceFilterOptions
¶
Interface Code
Properties¶
Name | Type | Optional | Description |
---|---|---|---|
maxWait |
MaybeRefOrGetter<number> |
✓ | |
rejectOnCancel |
boolean |
✓ |
ThrottleFilterOptions
¶
Interface Code
export interface ThrottleFilterOptions {
/**
* The maximum time allowed to be delayed before it's invoked.
*/
delay: MaybeRefOrGetter<number>
/**
* Whether to invoke on the trailing edge of the timeout.
*/
trailing?: boolean
/**
* Whether to invoke on the leading edge of the timeout.
*/
leading?: boolean
/**
* Whether to reject the last call if it's been cancel.
*/
rejectOnCancel?: boolean
}
Properties¶
Name | Type | Optional | Description |
---|---|---|---|
delay |
MaybeRefOrGetter<number> |
✗ | |
trailing |
boolean |
✓ | |
leading |
boolean |
✓ | |
rejectOnCancel |
boolean |
✓ |
PausableFilterOptions
¶
Interface Code
Properties¶
Name | Type | Optional | Description |
---|---|---|---|
initialState |
'active' | 'paused' |
✓ |
Type Aliases¶
FunctionArgs<Args extends any[] = any[] extends any[] = any[], Return = void = void>
¶
type FunctionArgs<Args extends any[] = any[] extends any[] = any[], Return = void = void> = (...args: Args) => Return;
EventFilter<Args extends any[] = any[] extends any[] = any[], This = any = any, Invoke extends AnyFn = AnyFn extends AnyFn = AnyFn>
¶
type EventFilter<Args extends any[] = any[] extends any[] = any[], This = any = any, Invoke extends AnyFn = AnyFn extends AnyFn = AnyFn> = (
invoke: Invoke,
options: FunctionWrapperOptions<Args, This>
) => ReturnType<Invoke> | Promisify<ReturnType<Invoke>>;