Skip to content

Commit f77a11e

Browse files
committed
chore: add support for AbortSignal.any and match behavior of combineAbortSignal to it
1 parent fb0751f commit f77a11e

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

.changeset/grumpy-files-brake.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@masknet/kit": patch
3+
---
4+
5+
add support for AbortSignal.any and match behavior of combineAbortSignal to it

src/web/combineAbortSignal.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,22 @@ export type HasNonNullableAbortSignal<T extends unknown[]> = false extends (
77
export function combineAbortSignal<T extends (AbortSignal | undefined | null)[]>(
88
..._: T
99
): HasNonNullableAbortSignal<T> extends true ? AbortSignal : AbortSignal | undefined {
10-
const args: (AbortSignal | undefined | null)[] = _.filter(Boolean)
11-
if (args.length === 0) return undefined!
12-
if (args.length === 1) return args[0] ?? undefined!
10+
const signals = _.filter<AbortSignal>(Boolean as any)
11+
if (signals.length === 0) return undefined!
12+
if (signals.length === 1) return signals[0] ?? undefined!
13+
14+
if (AbortSignal.any) return AbortSignal.any(signals)
15+
16+
const aborted = signals.find((x) => x.aborted)
17+
if (aborted) return aborted
18+
1319
const controller = new AbortController()
14-
const abort = () => controller.abort()
15-
for (const each of args) {
16-
each!.addEventListener('abort', abort, { signal: controller.signal })
20+
const abort = () => controller.abort(signals.find((x) => x.aborted)?.reason)
21+
for (const signal of signals) {
22+
signal.addEventListener('abort', abort, { signal: controller.signal })
1723
}
1824
return controller.signal
1925
}
26+
declare var AbortSignal: {
27+
any?(iterable: Iterable<AbortSignal>): AbortSignal
28+
}

0 commit comments

Comments
 (0)