You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.5 KiB
42 lines
1.5 KiB
// Convenience function to load polyfills and return a promise when it's done. |
|
// If there are no polyfills, then this is just Promise.resolve() which means |
|
// it will execute in the same tick of the event loop (i.e. near-instant). |
|
|
|
import { loadIntlPolyfills } from './intl'; |
|
|
|
function importBasePolyfills() { |
|
return import(/* webpackChunkName: "base_polyfills" */ './base_polyfills'); |
|
} |
|
|
|
function importExtraPolyfills() { |
|
return import(/* webpackChunkName: "extra_polyfills" */ './extra_polyfills'); |
|
} |
|
|
|
export function loadPolyfills() { |
|
const needsBasePolyfills = !( |
|
'toBlob' in HTMLCanvasElement.prototype && |
|
'assign' in Object && |
|
'values' in Object && |
|
'Symbol' in window && |
|
'finally' in Promise.prototype |
|
); |
|
|
|
// Latest version of Firefox and Safari do not have IntersectionObserver. |
|
// Edge does not have requestIdleCallback. |
|
// This avoids shipping them all the polyfills. |
|
/* eslint-disable @typescript-eslint/no-unnecessary-condition -- those properties might not exist in old browsers, even if they are always here in types */ |
|
const needsExtraPolyfills = !( |
|
window.AbortController && |
|
window.IntersectionObserver && |
|
window.IntersectionObserverEntry && |
|
'isIntersecting' in IntersectionObserverEntry.prototype && |
|
window.requestIdleCallback |
|
); |
|
/* eslint-enable @typescript-eslint/no-unnecessary-condition */ |
|
|
|
return Promise.all([ |
|
loadIntlPolyfills(), |
|
needsBasePolyfills && importBasePolyfills(), |
|
needsExtraPolyfills && importExtraPolyfills(), |
|
]); |
|
}
|
|
|