export function cancelable( f: (args: A) => Promise, signal: AbortSignal, ) { return (args: A) => { return new Promise((resolve, reject) => { signal.addEventListener('abort', () => { reject(new AbortError()) }) f(args).then(resolve, reject) }) } } export class AbortError extends Error { constructor() { super('Aborted') this.name = 'AbortError' } }