1 | const teardownAbort = (token, map) => {
|
2 | if (!token) {
|
3 | return;
|
4 | }
|
5 |
|
6 | const val = map.get(token);
|
7 | if (!val || --val.count) {
|
8 | return;
|
9 | }
|
10 | map.delete(token);
|
11 | };
|
12 |
|
13 | const setupAbort = ({ abortToken, signal }, controller, map) => {
|
14 |
|
15 | if (!abortToken && !signal) {
|
16 | return controller.signal;
|
17 | }
|
18 |
|
19 |
|
20 | let abortController = new AbortController();
|
21 | if (abortToken) {
|
22 |
|
23 | const mapValue = map.get(abortToken) || {
|
24 | controller: abortController,
|
25 | count: 0
|
26 | };
|
27 |
|
28 | mapValue.count++;
|
29 | map.set(abortToken, mapValue);
|
30 | abortController = mapValue.controller;
|
31 | }
|
32 |
|
33 |
|
34 | if (signal) {
|
35 | signal.addEventListener("abort", () => abortController.abort());
|
36 | }
|
37 |
|
38 |
|
39 | controller.signal.addEventListener("abort", () => abortController.abort());
|
40 | return abortController.signal;
|
41 | };
|
42 |
|
43 | export { setupAbort, teardownAbort };
|