34 lines
828 B
TypeScript
34 lines
828 B
TypeScript
|
type RequestIdleCallbackHandle = any
|
||
|
type RequestIdleCallbackOptions = {
|
||
|
timeout: number
|
||
|
}
|
||
|
type RequestIdleCallbackDeadline = {
|
||
|
readonly didTimeout: boolean
|
||
|
timeRemaining: () => number
|
||
|
}
|
||
|
|
||
|
declare global {
|
||
|
interface Window {
|
||
|
requestIdleCallback: (
|
||
|
callback: (deadline: RequestIdleCallbackDeadline) => void,
|
||
|
opts?: RequestIdleCallbackOptions
|
||
|
) => RequestIdleCallbackHandle
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const requestIdleCallback =
|
||
|
(typeof self !== 'undefined' && self.requestIdleCallback) ||
|
||
|
function (cb: (deadline: RequestIdleCallbackDeadline) => void) {
|
||
|
let start = Date.now()
|
||
|
return setTimeout(function () {
|
||
|
cb({
|
||
|
didTimeout: false,
|
||
|
timeRemaining: function () {
|
||
|
return Math.max(0, 50 - (Date.now() - start))
|
||
|
},
|
||
|
})
|
||
|
}, 1)
|
||
|
}
|
||
|
|
||
|
export default requestIdleCallback
|