44 lines
846 B
TypeScript
44 lines
846 B
TypeScript
import { isPromise } from './util'
|
|
|
|
function noop() {}
|
|
|
|
export type Interceptor = (...args: any[]) => Promise<boolean> | boolean | undefined | void
|
|
|
|
export function callInterceptor(
|
|
interceptor: Interceptor | undefined,
|
|
{
|
|
args = [],
|
|
done,
|
|
canceled,
|
|
error
|
|
}: {
|
|
args?: unknown[]
|
|
done: () => void
|
|
canceled?: () => void
|
|
error?: () => void
|
|
}
|
|
) {
|
|
if (interceptor) {
|
|
// eslint-disable-next-line prefer-spread
|
|
const returnVal = interceptor.apply(null, args)
|
|
|
|
if (isPromise(returnVal)) {
|
|
returnVal
|
|
.then((value) => {
|
|
if (value) {
|
|
done()
|
|
} else if (canceled) {
|
|
canceled()
|
|
}
|
|
})
|
|
.catch(error || noop)
|
|
} else if (returnVal) {
|
|
done()
|
|
} else if (canceled) {
|
|
canceled()
|
|
}
|
|
} else {
|
|
done()
|
|
}
|
|
}
|