mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2025-07-27 17:00:06 +02:00
54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
if (typeof AbortSignal.timeout !== 'function') {
|
|
AbortSignal.timeout = (time: number) => {
|
|
const controller = new AbortController()
|
|
|
|
function abort() {
|
|
controller.abort(new DOMException('Timed out', 'TimeoutError'))
|
|
}
|
|
|
|
function clean() {
|
|
window.clearTimeout(timer)
|
|
controller.signal.removeEventListener('abort', clean)
|
|
}
|
|
|
|
controller.signal.addEventListener('abort', clean)
|
|
|
|
const timer = window.setTimeout(abort, time)
|
|
|
|
return controller.signal
|
|
}
|
|
}
|
|
|
|
if (typeof AbortSignal.any !== 'function') {
|
|
AbortSignal.any = (signals: AbortSignal[]) => {
|
|
const controller = new AbortController()
|
|
|
|
// return immediately if any of the signals are already aborted.
|
|
for (const signal of signals) {
|
|
if (signal.aborted) {
|
|
controller.abort(signal.reason)
|
|
return controller.signal
|
|
}
|
|
}
|
|
|
|
function abort() {
|
|
controller.abort()
|
|
clean()
|
|
}
|
|
|
|
function clean() {
|
|
for (const signal of signals) {
|
|
signal.removeEventListener('abort', abort)
|
|
}
|
|
}
|
|
|
|
// abort the controller (and clean up) when any of the signals aborts
|
|
for (const signal of signals) {
|
|
signal.addEventListener('abort', abort)
|
|
}
|
|
|
|
return controller.signal
|
|
}
|
|
}
|
|
|
|
export default null // show that this is a module
|