Skip to content

Commit

Permalink
fix(validation): add requestIdleCallback shim for Safari
Browse files Browse the repository at this point in the history
  • Loading branch information
bjoerge committed Sep 26, 2022
1 parent 9044965 commit 6cd45cb
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
31 changes: 31 additions & 0 deletions packages/@sanity/validation/src/util/requestIdleCallback.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* Simple requestIdleCallback polyfill
* Can be removed when all browsers support requestIdleCallback: https://caniuse.com/requestidlecallback
* @param callback
* @param options
*/
const requestIdleCallbackShim: typeof window.requestIdleCallback = function requestIdleCallbackShim(
callback,
options?
): number {
const start = Date.now()
return window.setTimeout(() => {
callback({
didTimeout: false,
timeRemaining() {
return Math.max(0, Date.now() - start)
},
})
}, 0)
}

const cancelIdleCallbackShim: typeof window.cancelIdleCallback = function cancelIdleCallbackShim(
handle: number
): void {
return window.clearTimeout(handle)
}

const win = typeof window === 'undefined' ? undefined : window

export const requestIdleCallback = win?.requestIdleCallback || requestIdleCallbackShim
export const cancelIdleCallback = win?.cancelIdleCallback || cancelIdleCallbackShim
1 change: 1 addition & 0 deletions packages/@sanity/validation/src/validateDocument.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
import {uniqBy} from 'lodash'
import type {SanityClient} from '@sanity/client'
import typeString from './util/typeString'
import {requestIdleCallback, cancelIdleCallback} from './util/requestIdleCallback'
import ValidationErrorClass from './ValidationError'
import normalizeValidationRules from './util/normalizeValidationRules'

Expand Down

0 comments on commit 6cd45cb

Please sign in to comment.