MCPcopy
hub / github.com/axios/axios / composeSignals

Function composeSignals

lib/helpers/composeSignals.js:5–55  ·  view source on GitHub ↗
(signals, timeout)

Source from the content-addressed store, hash-verified

3import utils from '../utils.js';
4
5const composeSignals = (signals, timeout) => {
6 signals = signals ? signals.filter(Boolean) : [];
7
8 if (!timeout && !signals.length) {
9 return;
10 }
11
12 const controller = new AbortController();
13
14 let aborted = false;
15
16 const onabort = function (reason) {
17 if (!aborted) {
18 aborted = true;
19 unsubscribe();
20 const err = reason instanceof Error ? reason : this.reason;
21 controller.abort(
22 err instanceof AxiosError
23 ? err
24 : new CanceledError(err instanceof Error ? err.message : err)
25 );
26 }
27 };
28
29 let timer =
30 timeout &&
31 setTimeout(() => {
32 timer = null;
33 onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT));
34 }, timeout);
35
36 const unsubscribe = () => {
37 if (!signals) { return; }
38 timer && clearTimeout(timer);
39 timer = null;
40 signals.forEach((signal) => {
41 signal.unsubscribe
42 ? signal.unsubscribe(onabort)
43 : signal.removeEventListener('abort', onabort);
44 });
45 signals = null;
46 };
47
48 signals.forEach((signal) => signal.addEventListener('abort', onabort, { once: true }));
49
50 const { signal } = controller;
51
52 signal.unsubscribe = () => utils.asap(unsubscribe);
53
54 return signal;
55};
56
57export default composeSignals;

Callers 3

factoryFunction · 0.85

Calls 3

onabortFunction · 0.85
forEachMethod · 0.80
addEventListenerMethod · 0.45

Tested by

no test coverage detected