Spaces:
Running
Running
File size: 1,039 Bytes
d4b85c0 |
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 |
import { until } from '@open-draft/until'
/**
* Intercepts and defers any requests on the page
* until the Service Worker instance is ready.
* Must only be used in a browser.
*/
export function deferNetworkRequestsUntil(predicatePromise: Promise<any>) {
// Defer any `XMLHttpRequest` requests until the Service Worker is ready.
const originalXhrSend = window.XMLHttpRequest.prototype.send
window.XMLHttpRequest.prototype.send = function (
...args: Parameters<XMLHttpRequest['send']>
) {
// Keep this function synchronous to comply with `XMLHttpRequest.prototype.send`,
// because that method is always synchronous.
until(() => predicatePromise).then(() => {
window.XMLHttpRequest.prototype.send = originalXhrSend
this.send(...args)
})
}
// Defer any `fetch` requests until the Service Worker is ready.
const originalFetch = window.fetch
window.fetch = async (...args) => {
await until(() => predicatePromise)
window.fetch = originalFetch
return window.fetch(...args)
}
}
|