p2p-media-loader-core
Version:
P2P Media Loader core functionality
42 lines (33 loc) • 983 B
text/typescript
class AbortSignalPolyfill {
aborted = false;
readonly #listeners = new Set<(event?: unknown) => void>();
addEventListener(_type: "abort", listener: (event?: unknown) => void) {
this.#listeners.add(listener);
}
removeEventListener(_type: "abort", listener: (event?: unknown) => void) {
this.#listeners.delete(listener);
}
dispatchEvent(_type: "abort") {
this.aborted = true;
for (const listener of this.#listeners) {
try {
listener();
} catch {
// Swallow listener errors
}
}
this.#listeners.clear();
}
}
class AbortControllerPolyfill {
readonly signal = new AbortSignalPolyfill();
abort() {
this.signal.dispatchEvent("abort");
}
}
export const isAbortControllerSupported =
typeof AbortController !== "undefined";
export const SafeAbortController = isAbortControllerSupported
? AbortController
: AbortControllerPolyfill;
export type SafeAbortSignal = AbortSignal | AbortSignalPolyfill;