@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
43 lines (42 loc) • 1.16 kB
JavaScript
import { Observable, fromEvent } from 'rxjs';
class AbortError extends Error {
code;
}
export function checkAbortSignal(signal) {
if (!signal) {
return;
}
if (!(signal instanceof AbortSignal)) {
throw new TypeError('must pass an AbortSignal');
}
if (signal.aborted) {
throw makeAbortError();
}
}
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
export async function abortBreakPoint(signal) {
await timeout(1);
checkAbortSignal(signal);
}
export function makeAbortError() {
if (typeof DOMException !== 'undefined') {
return new DOMException('aborted', 'AbortError');
}
const e = new AbortError('aborted');
e.code = 'ERR_ABORTED';
return e;
}
export function observeAbortSignal(signal) {
if (!signal) {
return new Observable();
}
return fromEvent(signal, 'abort');
}
export function isAbortException(exception) {
return (exception instanceof Error &&
(exception.name === 'AbortError' ||
exception.code === 'ERR_ABORTED' ||
/\b(aborted|aborterror)\b/i.test(exception.message)));
}