serwist
Version:
A Swiss Army knife for service workers.
69 lines (63 loc) • 2.24 kB
text/typescript
import { logger } from "./utils/logger.js";
declare const self: ServiceWorkerGlobalScope;
/**
* Checks whether the current browser supports
* navigation preloading.
*
* @returns
* @see https://serwist.pages.dev/docs/serwist/core/is-navigation-preload-supported
*/
export const isNavigationPreloadSupported = (): boolean => {
return Boolean(self.registration?.navigationPreload);
};
/**
* If the browser supports navigation preloading, then this will enable it.
*
* @param headerValue Optional. Allows developers to override the value of
* the `Service-Worker-Navigation-Preload` header which will be sent to the
* server when making the navigation request.
* @see https://serwist.pages.dev/docs/serwist/core/enable-navigation-preload
*/
export const enableNavigationPreload = (headerValue?: string): void => {
if (isNavigationPreloadSupported()) {
self.addEventListener("activate", (event) => {
event.waitUntil(
self.registration.navigationPreload.enable().then(() => {
// Defaults to Service-Worker-Navigation-Preload: true if not set.
if (headerValue) {
void self.registration.navigationPreload.setHeaderValue(headerValue);
}
if (process.env.NODE_ENV !== "production") {
logger.log("Navigation preloading is enabled.");
}
}),
);
});
} else {
if (process.env.NODE_ENV !== "production") {
logger.log("Navigation preloading is not supported in this browser.");
}
}
};
/**
* If the browser supports navigation preloading, then this will disable it.
*
* @see https://serwist.pages.dev/docs/serwist/core/disable-navigation-preload
*/
export const disableNavigationPreload = (): void => {
if (isNavigationPreloadSupported()) {
self.addEventListener("activate", (event: ExtendableEvent) => {
event.waitUntil(
self.registration.navigationPreload.disable().then(() => {
if (process.env.NODE_ENV !== "production") {
logger.log("Navigation preloading is disabled.");
}
}),
);
});
} else {
if (process.env.NODE_ENV !== "production") {
logger.log("Navigation preloading is not supported in this browser.");
}
}
};