forked from vitest-dev/vitest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
timers.ts
37 lines (33 loc) · 1.07 KB
/
timers.ts
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
const {
setTimeout: safeSetTimeout,
setInterval: safeSetInterval,
clearInterval: safeClearInterval,
clearTimeout: safeClearTimeout,
} = globalThis
export {
safeSetTimeout as setTimeout,
safeSetInterval as setInterval,
safeClearInterval as clearInterval,
safeClearTimeout as clearTimeout,
}
// can only work with sync code to not potentially mess with other code
export function withSafeTimers(fn: () => void) {
const currentSetTimeout = globalThis.setTimeout
const currentSetInterval = globalThis.setInterval
const currentClearInterval = globalThis.clearInterval
const currentClearTimeout = globalThis.clearTimeout
try {
globalThis.setTimeout = safeSetTimeout
globalThis.setInterval = safeSetInterval
globalThis.clearInterval = safeClearInterval
globalThis.clearTimeout = safeClearTimeout
const result = fn()
return result
}
finally {
globalThis.setTimeout = currentSetTimeout
globalThis.setInterval = currentSetInterval
globalThis.clearInterval = currentClearInterval
globalThis.clearTimeout = currentClearTimeout
}
}