import { isPromise } from './util' function noop() {} export type Interceptor = (...args: any[]) => Promise | 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() } }