serwist
Version:
A Swiss Army knife for service workers.
48 lines (45 loc) • 1.8 kB
text/typescript
import { privateCacheNames } from "../index.internal.js";
import type { PrecacheStrategyOptions } from "../lib/strategies/PrecacheStrategy.js";
import type { Serwist } from "../Serwist.js";
import type { PrecacheOptions, PrecacheRouteOptions } from "../types.js";
import { PrecacheCacheKeyPlugin } from "./PrecacheCacheKeyPlugin.js";
export const parsePrecacheOptions = (serwist: Serwist, precacheOptions: PrecacheOptions = {}) => {
const {
cacheName: precacheCacheName,
plugins: precachePlugins = [],
fetchOptions: precacheFetchOptions,
matchOptions: precacheMatchOptions,
fallbackToNetwork: precacheFallbackToNetwork,
directoryIndex: precacheDirectoryIndex,
ignoreURLParametersMatching: precacheIgnoreUrls,
cleanURLs: precacheCleanUrls,
urlManipulation: precacheUrlManipulation,
cleanupOutdatedCaches,
concurrency = 10,
navigateFallback,
navigateFallbackAllowlist,
navigateFallbackDenylist,
} = precacheOptions ?? {};
return {
precacheStrategyOptions: {
cacheName: privateCacheNames.getPrecacheName(precacheCacheName),
plugins: [...precachePlugins, new PrecacheCacheKeyPlugin({ precacheController: serwist })],
fetchOptions: precacheFetchOptions,
matchOptions: precacheMatchOptions,
fallbackToNetwork: precacheFallbackToNetwork,
} satisfies PrecacheStrategyOptions,
precacheRouteOptions: {
directoryIndex: precacheDirectoryIndex,
ignoreURLParametersMatching: precacheIgnoreUrls,
cleanURLs: precacheCleanUrls,
urlManipulation: precacheUrlManipulation,
} satisfies PrecacheRouteOptions,
precacheMiscOptions: {
cleanupOutdatedCaches,
concurrency,
navigateFallback,
navigateFallbackAllowlist,
navigateFallbackDenylist,
},
};
};