Sha256: cf2fa36cb4cd64acaabcb46648075f57859c7693f3b8f4540060c7bbdce2e77a
Contents?: true
Size: 1.01 KB
Versions: 26
Compression:
Stored size: 1.01 KB
Contents
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) } }
Version data entries
26 entries across 26 versions & 1 rubygems