Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 81542x 214447x 81542x 152225x 6x 6x 81536x 81536x 152216x 81536x 70654x 130452x 70654x 17807x | export interface LinkedSignal extends Disposable {
signal: AbortSignal
}
export function linkSignals(...signals: (AbortSignal | undefined)[]): LinkedSignal {
let ac = new AbortController()
let activeSignals = signals.filter((s): s is AbortSignal => !!s)
for (let signal of activeSignals) {
if (signal.aborted) {
ac.abort(signal.reason)
return {
signal: ac.signal,
[Symbol.dispose]: () => {},
}
}
}
let onAbort = (e: Event) => ac.abort((e.target as AbortSignal).reason)
for (let signal of activeSignals) {
signal.addEventListener('abort', onAbort, { once: true })
}
return {
signal: ac.signal,
[Symbol.dispose]() {
for (let signal of activeSignals) {
signal.removeEventListener('abort', onAbort)
}
if (!ac.signal.aborted) {
ac.abort()
}
},
}
}
|