import AbortSignal, { abortSignal, createAbortSignal } from './abortsignal'; /** * The AbortController. * @see https://dom.spec.whatwg.org/#abortcontroller */ export default class AbortController { /** * Initialize this controller. */ public constructor() { signals.set(this, createAbortSignal()); } /** * Returns the `AbortSignal` object associated with this object. */ public get signal(): AbortSignal { return getSignal(this); } /** * Abort and signal to any observers that the associated activity is to be aborted. */ public abort(): void { abortSignal(getSignal(this)); } } /** * Associated signals. */ const signals = new WeakMap(); /** * Get the associated signal of a given controller. */ function getSignal(controller: AbortController): AbortSignal { const signal = signals.get(controller); if (signal == null) { throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${controller === null ? 'null' : typeof controller}`); } return signal; } // Properties should be enumerable. Object.defineProperties(AbortController.prototype, { signal: { enumerable: true }, abort: { enumerable: true }, }); if (typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol') { Object.defineProperty(AbortController.prototype, Symbol.toStringTag, { configurable: true, value: 'AbortController', }); } export { AbortController, AbortSignal };