123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /**
- * @author Toru Nagashima <https://github.com/mysticatea>
- * See LICENSE file in root directory for full license.
- */
- import { EventTarget, defineEventAttribute } from 'event-target-shim';
- /**
- * The signal class.
- * @see https://dom.spec.whatwg.org/#abortsignal
- */
- class AbortSignal extends EventTarget {
- /**
- * AbortSignal cannot be constructed directly.
- */
- constructor() {
- super();
- throw new TypeError("AbortSignal cannot be constructed directly");
- }
- /**
- * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.
- */
- get aborted() {
- const aborted = abortedFlags.get(this);
- if (typeof aborted !== "boolean") {
- throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? "null" : typeof this}`);
- }
- return aborted;
- }
- }
- defineEventAttribute(AbortSignal.prototype, "abort");
- /**
- * Create an AbortSignal object.
- */
- function createAbortSignal() {
- const signal = Object.create(AbortSignal.prototype);
- EventTarget.call(signal);
- abortedFlags.set(signal, false);
- return signal;
- }
- /**
- * Abort a given signal.
- */
- function abortSignal(signal) {
- if (abortedFlags.get(signal) !== false) {
- return;
- }
- abortedFlags.set(signal, true);
- signal.dispatchEvent({ type: "abort" });
- }
- /**
- * Aborted flag for each instances.
- */
- const abortedFlags = new WeakMap();
- // Properties should be enumerable.
- Object.defineProperties(AbortSignal.prototype, {
- aborted: { enumerable: true },
- });
- // `toString()` should return `"[object AbortSignal]"`
- if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") {
- Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {
- configurable: true,
- value: "AbortSignal",
- });
- }
- /**
- * The AbortController.
- * @see https://dom.spec.whatwg.org/#abortcontroller
- */
- class AbortController {
- /**
- * Initialize this controller.
- */
- constructor() {
- signals.set(this, createAbortSignal());
- }
- /**
- * Returns the `AbortSignal` object associated with this object.
- */
- get signal() {
- return getSignal(this);
- }
- /**
- * Abort and signal to any observers that the associated activity is to be aborted.
- */
- abort() {
- abortSignal(getSignal(this));
- }
- }
- /**
- * Associated signals.
- */
- const signals = new WeakMap();
- /**
- * Get the associated signal of a given controller.
- */
- function getSignal(controller) {
- 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 default AbortController;
- export { AbortController, AbortSignal };
- //# sourceMappingURL=abort-controller.mjs.map
|