| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | import CanceledError from "../cancel/CanceledError.js";import AxiosError from "../core/AxiosError.js";import utils from '../utils.js';const composeSignals = (signals, timeout) => {  const {length} = (signals = signals ? signals.filter(Boolean) : []);  if (timeout || length) {    let controller = new AbortController();    let aborted;    const onabort = function (reason) {      if (!aborted) {        aborted = true;        unsubscribe();        const err = reason instanceof Error ? reason : this.reason;        controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));      }    }    let timer = timeout && setTimeout(() => {      timer = null;      onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))    }, timeout)    const unsubscribe = () => {      if (signals) {        timer && clearTimeout(timer);        timer = null;        signals.forEach(signal => {          signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);        });        signals = null;      }    }    signals.forEach((signal) => signal.addEventListener('abort', onabort));    const {signal} = controller;    signal.unsubscribe = () => utils.asap(unsubscribe);    return signal;  }}export default composeSignals;
 |