serwist 9.0.5 → 9.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/Serwist.d.ts +2 -44
- package/dist/Serwist.d.ts.map +1 -1
- package/dist/chunks/printInstallDetails.js +20 -9
- package/dist/index.js +41 -18
- package/dist/lib/strategies/PrecacheStrategy.d.ts +5 -2
- package/dist/lib/strategies/PrecacheStrategy.d.ts.map +1 -1
- package/dist/lib/strategies/StrategyHandler.d.ts +8 -0
- package/dist/lib/strategies/StrategyHandler.d.ts.map +1 -1
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/parsePrecacheOptions.d.ts +26 -0
- package/dist/utils/parsePrecacheOptions.d.ts.map +1 -0
- package/package.json +9 -6
- package/src/Serwist.ts +15 -61
- package/src/lib/strategies/PrecacheStrategy.ts +11 -1
- package/src/lib/strategies/StrategyHandler.ts +24 -8
- package/src/types.ts +30 -0
- package/src/utils/parsePrecacheOptions.ts +47 -0
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2018 Google LLC, 2019 ShadowWalker w@weiw.io https://weiw.io, 2023 Serwist
|
|
3
|
+
Copyright (c) 2018-2023 Google LLC, 2019-2023 ShadowWalker w@weiw.io https://weiw.io, 2020-2023 Anthony Fu <https://github.com/antfu>, 2023-PRESENT Serwist
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/dist/Serwist.d.ts
CHANGED
|
@@ -3,8 +3,8 @@ import { type HTTPMethod } from "./constants.js";
|
|
|
3
3
|
import { type GoogleAnalyticsInitializeOptions } from "./lib/googleAnalytics/initializeGoogleAnalytics.js";
|
|
4
4
|
import { type PrecacheFallbackEntry } from "./lib/precaching/PrecacheFallbackPlugin.js";
|
|
5
5
|
import { Strategy } from "./lib/strategies/Strategy.js";
|
|
6
|
-
import type { RouteHandler, RouteHandlerCallback, RouteHandlerCallbackOptions, RouteMatchCallback, RouteMatchCallbackOptions
|
|
7
|
-
import type {
|
|
6
|
+
import type { PrecacheOptions, RouteHandler, RouteHandlerCallback, RouteHandlerCallbackOptions, RouteMatchCallback, RouteMatchCallbackOptions } from "./types.js";
|
|
7
|
+
import type { RuntimeCaching } from "./types.js";
|
|
8
8
|
import type { CleanupResult, InstallResult, PrecacheEntry } from "./types.js";
|
|
9
9
|
export interface FallbackEntry extends PrecacheFallbackEntry {
|
|
10
10
|
}
|
|
@@ -14,48 +14,6 @@ export interface FallbacksOptions {
|
|
|
14
14
|
*/
|
|
15
15
|
entries: FallbackEntry[];
|
|
16
16
|
}
|
|
17
|
-
export interface PrecacheOptions extends PrecacheRouteOptions {
|
|
18
|
-
/**
|
|
19
|
-
* The cache used for precaching.
|
|
20
|
-
*/
|
|
21
|
-
cacheName?: string;
|
|
22
|
-
/**
|
|
23
|
-
* Whether outdated caches should be removed.
|
|
24
|
-
*
|
|
25
|
-
* @default false
|
|
26
|
-
*/
|
|
27
|
-
cleanupOutdatedCaches?: boolean;
|
|
28
|
-
/**
|
|
29
|
-
* The number of precache requests that should be made concurrently.
|
|
30
|
-
*
|
|
31
|
-
* @default 10
|
|
32
|
-
*/
|
|
33
|
-
concurrency?: number;
|
|
34
|
-
/**
|
|
35
|
-
* Whether to attempt to get the response from the network if there's
|
|
36
|
-
* a precache miss.
|
|
37
|
-
*/
|
|
38
|
-
fallbackToNetwork?: boolean;
|
|
39
|
-
/**
|
|
40
|
-
* An URL that should point to a HTML file with which navigation requests for URLs that aren't
|
|
41
|
-
* precached will be fulfilled.
|
|
42
|
-
*/
|
|
43
|
-
navigateFallback?: string;
|
|
44
|
-
/**
|
|
45
|
-
* URLs that should be allowed to use the `navigateFallback` handler.
|
|
46
|
-
*/
|
|
47
|
-
navigateFallbackAllowlist?: RegExp[];
|
|
48
|
-
/**
|
|
49
|
-
* URLs that should not be allowed to use the `navigateFallback` handler. This takes precedence
|
|
50
|
-
* over `navigateFallbackAllowlist`.
|
|
51
|
-
*/
|
|
52
|
-
navigateFallbackDenylist?: RegExp[];
|
|
53
|
-
/**
|
|
54
|
-
* Plugins to use when precaching as well as responding to fetch
|
|
55
|
-
* events for precached assets.
|
|
56
|
-
*/
|
|
57
|
-
plugins?: SerwistPlugin[];
|
|
58
|
-
}
|
|
59
17
|
export interface SerwistOptions {
|
|
60
18
|
/**
|
|
61
19
|
* A list of URLs that should be cached.
|
package/dist/Serwist.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Serwist.d.ts","sourceRoot":"","sources":["../src/Serwist.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,KAAK,UAAU,EAAiB,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,KAAK,gCAAgC,EAA6B,MAAM,oDAAoD,CAAC;AACtI,OAAO,EAAE,KAAK,qBAAqB,EAA0B,MAAM,4CAA4C,CAAC;AAEhH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,2BAA2B,EAE3B,kBAAkB,EAClB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"Serwist.d.ts","sourceRoot":"","sources":["../src/Serwist.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { f as finalAssertExports, l as logger, D as Deferred,
|
|
1
|
+
import { f as finalAssertExports, l as logger, D as Deferred, S as SerwistError, g as getFriendlyURL, t as timeout, d as cacheMatchIgnoreParams, e as executeQuotaErrorCallbacks, c as cacheNames, h as canConstructResponseFromBodyStream } from './waitUntil.js';
|
|
2
2
|
import { openDB } from 'idb';
|
|
3
3
|
|
|
4
4
|
const defaultMethod = "GET";
|
|
@@ -261,14 +261,9 @@ class StrategyHandler {
|
|
|
261
261
|
async fetch(input) {
|
|
262
262
|
const { event } = this;
|
|
263
263
|
let request = toRequest(input);
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
if (process.env.NODE_ENV !== "production") {
|
|
268
|
-
logger.log(`Using a preloaded navigation response for '${getFriendlyURL(request.url)}'`);
|
|
269
|
-
}
|
|
270
|
-
return possiblePreloadResponse;
|
|
271
|
-
}
|
|
264
|
+
const preloadResponse = await this.getPreloadResponse();
|
|
265
|
+
if (preloadResponse) {
|
|
266
|
+
return preloadResponse;
|
|
272
267
|
}
|
|
273
268
|
const originalRequest = this.hasCallback("fetchDidFail") ? request.clone() : null;
|
|
274
269
|
try {
|
|
@@ -471,6 +466,18 @@ class StrategyHandler {
|
|
|
471
466
|
destroy() {
|
|
472
467
|
this._handlerDeferred.resolve(null);
|
|
473
468
|
}
|
|
469
|
+
async getPreloadResponse() {
|
|
470
|
+
if (this.event instanceof FetchEvent && this.event.request.mode === "navigate" && "preloadResponse" in this.event) {
|
|
471
|
+
const possiblePreloadResponse = await this.event.preloadResponse;
|
|
472
|
+
if (possiblePreloadResponse) {
|
|
473
|
+
if (process.env.NODE_ENV !== "production") {
|
|
474
|
+
logger.log(`Using a preloaded navigation response for '${getFriendlyURL(this.event.request.url)}'`);
|
|
475
|
+
}
|
|
476
|
+
return possiblePreloadResponse;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
return undefined;
|
|
480
|
+
}
|
|
474
481
|
async _ensureResponseSafeToCache(response) {
|
|
475
482
|
let responseToCache = response;
|
|
476
483
|
let pluginsUsed = false;
|
|
@@ -1284,6 +1291,10 @@ class PrecacheStrategy extends Strategy {
|
|
|
1284
1291
|
this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin);
|
|
1285
1292
|
}
|
|
1286
1293
|
async _handle(request, handler) {
|
|
1294
|
+
const preloadResponse = await handler.getPreloadResponse();
|
|
1295
|
+
if (preloadResponse) {
|
|
1296
|
+
return preloadResponse;
|
|
1297
|
+
}
|
|
1287
1298
|
const response = await handler.cacheMatch(request);
|
|
1288
1299
|
if (response) {
|
|
1289
1300
|
return response;
|
package/dist/index.js
CHANGED
|
@@ -169,6 +169,37 @@ class PrecacheCacheKeyPlugin {
|
|
|
169
169
|
};
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
+
const parsePrecacheOptions = (serwist, precacheOptions = {})=>{
|
|
173
|
+
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 ?? {};
|
|
174
|
+
return {
|
|
175
|
+
precacheStrategyOptions: {
|
|
176
|
+
cacheName: cacheNames$1.getPrecacheName(precacheCacheName),
|
|
177
|
+
plugins: [
|
|
178
|
+
...precachePlugins,
|
|
179
|
+
new PrecacheCacheKeyPlugin({
|
|
180
|
+
precacheController: serwist
|
|
181
|
+
})
|
|
182
|
+
],
|
|
183
|
+
fetchOptions: precacheFetchOptions,
|
|
184
|
+
matchOptions: precacheMatchOptions,
|
|
185
|
+
fallbackToNetwork: precacheFallbackToNetwork
|
|
186
|
+
},
|
|
187
|
+
precacheRouteOptions: {
|
|
188
|
+
directoryIndex: precacheDirectoryIndex,
|
|
189
|
+
ignoreURLParametersMatching: precacheIgnoreUrls,
|
|
190
|
+
cleanURLs: precacheCleanUrls,
|
|
191
|
+
urlManipulation: precacheUrlManipulation
|
|
192
|
+
},
|
|
193
|
+
precacheMiscOptions: {
|
|
194
|
+
cleanupOutdatedCaches,
|
|
195
|
+
concurrency,
|
|
196
|
+
navigateFallback,
|
|
197
|
+
navigateFallbackAllowlist,
|
|
198
|
+
navigateFallbackDenylist
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
|
|
172
203
|
class Serwist {
|
|
173
204
|
_urlsToCacheKeys = new Map();
|
|
174
205
|
_urlsToCacheModes = new Map();
|
|
@@ -179,17 +210,9 @@ class Serwist {
|
|
|
179
210
|
_defaultHandlerMap;
|
|
180
211
|
_catchHandler;
|
|
181
212
|
constructor({ precacheEntries, precacheOptions, skipWaiting = false, importScripts, navigationPreload = false, cacheId, clientsClaim: clientsClaim$1 = false, runtimeCaching, offlineAnalyticsConfig, disableDevLogs: disableDevLogs$1 = false, fallbacks } = {}){
|
|
182
|
-
|
|
183
|
-
this.
|
|
184
|
-
|
|
185
|
-
plugins: [
|
|
186
|
-
...precacheOptions?.plugins ?? [],
|
|
187
|
-
new PrecacheCacheKeyPlugin({
|
|
188
|
-
precacheController: this
|
|
189
|
-
})
|
|
190
|
-
],
|
|
191
|
-
fallbackToNetwork: precacheOptions?.fallbackToNetwork
|
|
192
|
-
});
|
|
213
|
+
const { precacheStrategyOptions, precacheRouteOptions, precacheMiscOptions } = parsePrecacheOptions(this, precacheOptions);
|
|
214
|
+
this._concurrentPrecaching = precacheMiscOptions.concurrency;
|
|
215
|
+
this._precacheStrategy = new PrecacheStrategy(precacheStrategyOptions);
|
|
193
216
|
this._routes = new Map();
|
|
194
217
|
this._defaultHandlerMap = new Map();
|
|
195
218
|
this.handleInstall = this.handleInstall.bind(this);
|
|
@@ -216,14 +239,14 @@ class Serwist {
|
|
|
216
239
|
if (!!precacheEntries && precacheEntries.length > 0) {
|
|
217
240
|
this.addToPrecacheList(precacheEntries);
|
|
218
241
|
}
|
|
219
|
-
if (
|
|
220
|
-
cleanupOutdatedCaches(
|
|
242
|
+
if (precacheMiscOptions.cleanupOutdatedCaches) {
|
|
243
|
+
cleanupOutdatedCaches(precacheStrategyOptions.cacheName);
|
|
221
244
|
}
|
|
222
|
-
this.registerRoute(new PrecacheRoute(this,
|
|
223
|
-
if (
|
|
224
|
-
this.registerRoute(new NavigationRoute(this.createHandlerBoundToUrl(
|
|
225
|
-
allowlist:
|
|
226
|
-
denylist:
|
|
245
|
+
this.registerRoute(new PrecacheRoute(this, precacheRouteOptions));
|
|
246
|
+
if (precacheMiscOptions.navigateFallback) {
|
|
247
|
+
this.registerRoute(new NavigationRoute(this.createHandlerBoundToUrl(precacheMiscOptions.navigateFallback), {
|
|
248
|
+
allowlist: precacheMiscOptions.navigateFallbackAllowlist,
|
|
249
|
+
denylist: precacheMiscOptions.navigateFallbackDenylist
|
|
227
250
|
}));
|
|
228
251
|
}
|
|
229
252
|
if (offlineAnalyticsConfig !== undefined) {
|
|
@@ -2,7 +2,11 @@ import type { SerwistPlugin } from "../../types.js";
|
|
|
2
2
|
import type { StrategyOptions } from "./Strategy.js";
|
|
3
3
|
import { Strategy } from "./Strategy.js";
|
|
4
4
|
import type { StrategyHandler } from "./StrategyHandler.js";
|
|
5
|
-
interface PrecacheStrategyOptions extends StrategyOptions {
|
|
5
|
+
export interface PrecacheStrategyOptions extends StrategyOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Plugins to use when precaching as well as responding to `fetch` events for precached assets.
|
|
8
|
+
*/
|
|
9
|
+
plugins?: StrategyOptions["plugins"];
|
|
6
10
|
/**
|
|
7
11
|
* Whether to attempt to get the response from the network
|
|
8
12
|
* if there's a precache miss.
|
|
@@ -62,5 +66,4 @@ export declare class PrecacheStrategy extends Strategy {
|
|
|
62
66
|
*/
|
|
63
67
|
_useDefaultCacheabilityPluginIfNeeded(): void;
|
|
64
68
|
}
|
|
65
|
-
export {};
|
|
66
69
|
//# sourceMappingURL=PrecacheStrategy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrecacheStrategy.d.ts","sourceRoot":"","sources":["../../../src/lib/strategies/PrecacheStrategy.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,
|
|
1
|
+
{"version":3,"file":"PrecacheStrategy.d.ts","sourceRoot":"","sources":["../../../src/lib/strategies/PrecacheStrategy.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D;;OAEG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACrC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAE7C,MAAM,CAAC,QAAQ,CAAC,iCAAiC,EAAE,aAAa,CAQ9D;IAEF,MAAM,CAAC,QAAQ,CAAC,sCAAsC,EAAE,aAAa,CAInE;IAEF;;OAEG;gBACS,OAAO,GAAE,uBAA4B;IAcjD;;;;;OAKG;IACG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwBtE,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyE3E,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAqBnF;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,qCAAqC,IAAI,IAAI;CA4B9C"}
|
|
@@ -169,6 +169,14 @@ export declare class StrategyHandler {
|
|
|
169
169
|
* `waitUntil()` promise.
|
|
170
170
|
*/
|
|
171
171
|
destroy(): void;
|
|
172
|
+
/**
|
|
173
|
+
* This method checks if the navigation preload `Response` is available.
|
|
174
|
+
*
|
|
175
|
+
* @param request
|
|
176
|
+
* @param event
|
|
177
|
+
* @returns
|
|
178
|
+
*/
|
|
179
|
+
getPreloadResponse(): Promise<Response | undefined>;
|
|
172
180
|
/**
|
|
173
181
|
* This method will call `cacheWillUpdate` on the available plugins (or use
|
|
174
182
|
* status === 200) to determine if the response is safe and valid to cache.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StrategyHandler.d.ts","sourceRoot":"","sources":["../../../src/lib/strategies/StrategyHandler.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AASvH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAO9C;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACI,KAAK,EAAE,eAAe,CAAC;IAC9B;;;OAGG;IACI,OAAO,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACI,GAAG,CAAC,EAAE,GAAG,CAAC;IACjB;;;;;;;OAOG;IACI,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC;IAEzC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IACjD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiB;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IAEpE;;;;;;;;;OASG;gBAED,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,sBAAsB,GAAG;QAChC,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;KACtD;IAsCH;;;;;;;;;;;;OAYG;IACG,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"StrategyHandler.d.ts","sourceRoot":"","sources":["../../../src/lib/strategies/StrategyHandler.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AASvH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAO9C;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACI,KAAK,EAAE,eAAe,CAAC;IAC9B;;;OAGG;IACI,OAAO,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACI,GAAG,CAAC,EAAE,GAAG,CAAC;IACjB;;;;;;;OAOG;IACI,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC;IAEzC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IACjD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiB;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IAEpE;;;;;;;;;OASG;gBAED,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,sBAAsB,GAAG;QAChC,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;KACtD;IAsCH;;;;;;;;;;;;OAYG;IACG,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAqElD;;;;;;;;OAQG;IACG,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAS7D;;;;;;;;;;;OAWG;IACG,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IA+BjE;;;;;;;;;;;;;;OAcG;IACG,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IA8FtE;;;;;;;;;;OAUG;IACG,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB7E;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,SAAS,MAAM,aAAa,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO;IAS5D;;;;;;;;;;;OAWG;IACG,YAAY,CAAC,CAAC,SAAS,MAAM,WAAW,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3I;;;;;OAKG;IACF,gBAAgB,CAAC,CAAC,SAAS,MAAM,aAAa,EAAE,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAgBnG;;;;;;;;;OASG;IACH,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK7C;;;;;;;OAOG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAOlC;;;OAGG;IACH,OAAO,IAAI,IAAI;IAIf;;;;;;OAMG;IACG,kBAAkB,IAAI,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAazD;;;;;;;OAOG;IACG,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;CAmCpF"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { HTTPMethod } from "./constants.js";
|
|
2
|
+
import type { PrecacheStrategyOptions } from "./lib/strategies/PrecacheStrategy.js";
|
|
2
3
|
export type PromiseOrNot<T> = T | Promise<T>;
|
|
3
4
|
export interface MapLikeObject {
|
|
4
5
|
[key: string]: any;
|
|
@@ -317,6 +318,34 @@ export interface PrecacheRouteOptions {
|
|
|
317
318
|
*/
|
|
318
319
|
urlManipulation?: UrlManipulation;
|
|
319
320
|
}
|
|
321
|
+
export interface PrecacheOptions extends PrecacheStrategyOptions, PrecacheRouteOptions {
|
|
322
|
+
/**
|
|
323
|
+
* Whether outdated caches should be removed.
|
|
324
|
+
*
|
|
325
|
+
* @default false
|
|
326
|
+
*/
|
|
327
|
+
cleanupOutdatedCaches?: boolean;
|
|
328
|
+
/**
|
|
329
|
+
* The number of precache requests that should be made concurrently.
|
|
330
|
+
*
|
|
331
|
+
* @default 10
|
|
332
|
+
*/
|
|
333
|
+
concurrency?: number;
|
|
334
|
+
/**
|
|
335
|
+
* An URL that should point to a HTML file with which navigation requests for URLs that aren't
|
|
336
|
+
* precached will be fulfilled.
|
|
337
|
+
*/
|
|
338
|
+
navigateFallback?: string;
|
|
339
|
+
/**
|
|
340
|
+
* URLs that should be allowed to use the `navigateFallback` handler.
|
|
341
|
+
*/
|
|
342
|
+
navigateFallbackAllowlist?: RegExp[];
|
|
343
|
+
/**
|
|
344
|
+
* URLs that should not be allowed to use the `navigateFallback` handler. This takes precedence
|
|
345
|
+
* over `navigateFallbackAllowlist`.
|
|
346
|
+
*/
|
|
347
|
+
navigateFallbackDenylist?: RegExp[];
|
|
348
|
+
}
|
|
320
349
|
export type UrlManipulation = ({ url }: {
|
|
321
350
|
url: URL;
|
|
322
351
|
}) => URL[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Serwist } from "../Serwist.js";
|
|
2
|
+
import type { PrecacheOptions } from "../types.js";
|
|
3
|
+
import { PrecacheCacheKeyPlugin } from "./PrecacheCacheKeyPlugin.js";
|
|
4
|
+
export declare const parsePrecacheOptions: (serwist: Serwist, precacheOptions?: PrecacheOptions) => {
|
|
5
|
+
precacheStrategyOptions: {
|
|
6
|
+
cacheName: string;
|
|
7
|
+
plugins: (import("../types.js").SerwistPlugin | PrecacheCacheKeyPlugin)[];
|
|
8
|
+
fetchOptions: RequestInit | undefined;
|
|
9
|
+
matchOptions: CacheQueryOptions | undefined;
|
|
10
|
+
fallbackToNetwork: boolean | undefined;
|
|
11
|
+
};
|
|
12
|
+
precacheRouteOptions: {
|
|
13
|
+
directoryIndex: string | null | undefined;
|
|
14
|
+
ignoreURLParametersMatching: RegExp[] | undefined;
|
|
15
|
+
cleanURLs: boolean | undefined;
|
|
16
|
+
urlManipulation: import("../types.js").UrlManipulation | undefined;
|
|
17
|
+
};
|
|
18
|
+
precacheMiscOptions: {
|
|
19
|
+
cleanupOutdatedCaches: boolean | undefined;
|
|
20
|
+
concurrency: number;
|
|
21
|
+
navigateFallback: string | undefined;
|
|
22
|
+
navigateFallbackAllowlist: RegExp[] | undefined;
|
|
23
|
+
navigateFallbackDenylist: RegExp[] | undefined;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=parsePrecacheOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsePrecacheOptions.d.ts","sourceRoot":"","sources":["../../src/utils/parsePrecacheOptions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAwB,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,eAAO,MAAM,oBAAoB,YAAa,OAAO,oBAAmB,eAAe;;;;;;;;;;;;;;;;;;;;;CAwCtF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "serwist",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A Swiss Army knife for service workers.",
|
|
6
6
|
"files": [
|
|
@@ -13,7 +13,10 @@
|
|
|
13
13
|
"service worker",
|
|
14
14
|
"sw"
|
|
15
15
|
],
|
|
16
|
-
"author": "Google's Web DevRel Team
|
|
16
|
+
"author": "Google's Web DevRel Team",
|
|
17
|
+
"contributors": [
|
|
18
|
+
"Serwist <ducanh2912.rusty@gmail.com> (https://serwist.pages.dev/)"
|
|
19
|
+
],
|
|
17
20
|
"license": "MIT",
|
|
18
21
|
"repository": "https://github.com/serwist/serwist",
|
|
19
22
|
"bugs": "https://github.com/serwist/serwist/issues",
|
|
@@ -49,10 +52,10 @@
|
|
|
49
52
|
"idb": "8.0.0"
|
|
50
53
|
},
|
|
51
54
|
"devDependencies": {
|
|
52
|
-
"rollup": "4.
|
|
53
|
-
"typescript": "5.5.
|
|
54
|
-
"@serwist/configs": "9.0.
|
|
55
|
-
"@serwist/utils": "9.0.
|
|
55
|
+
"rollup": "4.21.0",
|
|
56
|
+
"typescript": "5.5.4",
|
|
57
|
+
"@serwist/configs": "9.0.7",
|
|
58
|
+
"@serwist/utils": "9.0.7"
|
|
56
59
|
},
|
|
57
60
|
"peerDependencies": {
|
|
58
61
|
"typescript": ">=5.0.0"
|
package/src/Serwist.ts
CHANGED
|
@@ -11,21 +11,19 @@ import { Strategy } from "./lib/strategies/Strategy.js";
|
|
|
11
11
|
import { enableNavigationPreload } from "./navigationPreload.js";
|
|
12
12
|
import { setCacheNameDetails } from "./setCacheNameDetails.js";
|
|
13
13
|
import type {
|
|
14
|
+
PrecacheOptions,
|
|
14
15
|
RouteHandler,
|
|
15
16
|
RouteHandlerCallback,
|
|
16
17
|
RouteHandlerCallbackOptions,
|
|
17
18
|
RouteHandlerObject,
|
|
18
19
|
RouteMatchCallback,
|
|
19
20
|
RouteMatchCallbackOptions,
|
|
20
|
-
SerwistPlugin,
|
|
21
21
|
} from "./types.js";
|
|
22
|
-
import type {
|
|
22
|
+
import type { RuntimeCaching } from "./types.js";
|
|
23
23
|
import type { CleanupResult, InstallResult, PrecacheEntry } from "./types.js";
|
|
24
|
-
import { PrecacheCacheKeyPlugin } from "./utils/PrecacheCacheKeyPlugin.js";
|
|
25
24
|
import { PrecacheInstallReportPlugin } from "./utils/PrecacheInstallReportPlugin.js";
|
|
26
25
|
import { SerwistError } from "./utils/SerwistError.js";
|
|
27
26
|
import { assert } from "./utils/assert.js";
|
|
28
|
-
import { cacheNames as privateCacheNames } from "./utils/cacheNames.js";
|
|
29
27
|
import { cleanupOutdatedCaches as cleanupOutdatedCachesImpl } from "./utils/cleanupOutdatedCaches.js";
|
|
30
28
|
import { clientsClaim as clientsClaimImpl } from "./utils/clientsClaim.js";
|
|
31
29
|
import { createCacheKey } from "./utils/createCacheKey.js";
|
|
@@ -36,6 +34,7 @@ import { parseRoute } from "./utils/parseRoute.js";
|
|
|
36
34
|
import { printCleanupDetails } from "./utils/printCleanupDetails.js";
|
|
37
35
|
import { printInstallDetails } from "./utils/printInstallDetails.js";
|
|
38
36
|
import { waitUntil } from "./utils/waitUntil.js";
|
|
37
|
+
import { parsePrecacheOptions } from "./utils/parsePrecacheOptions.js";
|
|
39
38
|
|
|
40
39
|
declare const self: ServiceWorkerGlobalScope;
|
|
41
40
|
|
|
@@ -48,49 +47,6 @@ export interface FallbacksOptions {
|
|
|
48
47
|
entries: FallbackEntry[];
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
export interface PrecacheOptions extends PrecacheRouteOptions {
|
|
52
|
-
/**
|
|
53
|
-
* The cache used for precaching.
|
|
54
|
-
*/
|
|
55
|
-
cacheName?: string;
|
|
56
|
-
/**
|
|
57
|
-
* Whether outdated caches should be removed.
|
|
58
|
-
*
|
|
59
|
-
* @default false
|
|
60
|
-
*/
|
|
61
|
-
cleanupOutdatedCaches?: boolean;
|
|
62
|
-
/**
|
|
63
|
-
* The number of precache requests that should be made concurrently.
|
|
64
|
-
*
|
|
65
|
-
* @default 10
|
|
66
|
-
*/
|
|
67
|
-
concurrency?: number;
|
|
68
|
-
/**
|
|
69
|
-
* Whether to attempt to get the response from the network if there's
|
|
70
|
-
* a precache miss.
|
|
71
|
-
*/
|
|
72
|
-
fallbackToNetwork?: boolean;
|
|
73
|
-
/**
|
|
74
|
-
* An URL that should point to a HTML file with which navigation requests for URLs that aren't
|
|
75
|
-
* precached will be fulfilled.
|
|
76
|
-
*/
|
|
77
|
-
navigateFallback?: string;
|
|
78
|
-
/**
|
|
79
|
-
* URLs that should be allowed to use the `navigateFallback` handler.
|
|
80
|
-
*/
|
|
81
|
-
navigateFallbackAllowlist?: RegExp[];
|
|
82
|
-
/**
|
|
83
|
-
* URLs that should not be allowed to use the `navigateFallback` handler. This takes precedence
|
|
84
|
-
* over `navigateFallbackAllowlist`.
|
|
85
|
-
*/
|
|
86
|
-
navigateFallbackDenylist?: RegExp[];
|
|
87
|
-
/**
|
|
88
|
-
* Plugins to use when precaching as well as responding to fetch
|
|
89
|
-
* events for precached assets.
|
|
90
|
-
*/
|
|
91
|
-
plugins?: SerwistPlugin[];
|
|
92
|
-
}
|
|
93
|
-
|
|
94
50
|
export interface SerwistOptions {
|
|
95
51
|
/**
|
|
96
52
|
* A list of URLs that should be cached.
|
|
@@ -192,12 +148,10 @@ export class Serwist {
|
|
|
192
148
|
disableDevLogs = false,
|
|
193
149
|
fallbacks,
|
|
194
150
|
}: SerwistOptions = {}) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
fallbackToNetwork: precacheOptions?.fallbackToNetwork,
|
|
200
|
-
});
|
|
151
|
+
const { precacheStrategyOptions, precacheRouteOptions, precacheMiscOptions } = parsePrecacheOptions(this, precacheOptions);
|
|
152
|
+
|
|
153
|
+
this._concurrentPrecaching = precacheMiscOptions.concurrency;
|
|
154
|
+
this._precacheStrategy = new PrecacheStrategy(precacheStrategyOptions);
|
|
201
155
|
this._routes = new Map();
|
|
202
156
|
this._defaultHandlerMap = new Map();
|
|
203
157
|
|
|
@@ -232,17 +186,17 @@ export class Serwist {
|
|
|
232
186
|
this.addToPrecacheList(precacheEntries);
|
|
233
187
|
}
|
|
234
188
|
|
|
235
|
-
if (
|
|
236
|
-
cleanupOutdatedCachesImpl(
|
|
189
|
+
if (precacheMiscOptions.cleanupOutdatedCaches) {
|
|
190
|
+
cleanupOutdatedCachesImpl(precacheStrategyOptions.cacheName);
|
|
237
191
|
}
|
|
238
192
|
|
|
239
|
-
this.registerRoute(new PrecacheRoute(this,
|
|
193
|
+
this.registerRoute(new PrecacheRoute(this, precacheRouteOptions));
|
|
240
194
|
|
|
241
|
-
if (
|
|
195
|
+
if (precacheMiscOptions.navigateFallback) {
|
|
242
196
|
this.registerRoute(
|
|
243
|
-
new NavigationRoute(this.createHandlerBoundToUrl(
|
|
244
|
-
allowlist:
|
|
245
|
-
denylist:
|
|
197
|
+
new NavigationRoute(this.createHandlerBoundToUrl(precacheMiscOptions.navigateFallback), {
|
|
198
|
+
allowlist: precacheMiscOptions.navigateFallbackAllowlist,
|
|
199
|
+
denylist: precacheMiscOptions.navigateFallbackDenylist,
|
|
246
200
|
}),
|
|
247
201
|
);
|
|
248
202
|
}
|
|
@@ -268,7 +222,7 @@ export class Serwist {
|
|
|
268
222
|
runtimeCaching.forEach((cacheEntry) => {
|
|
269
223
|
if (
|
|
270
224
|
cacheEntry.handler instanceof Strategy &&
|
|
271
|
-
//
|
|
225
|
+
// This also filters entries with `PrecacheFallbackPlugin` as it also has `handlerDidError`.
|
|
272
226
|
!cacheEntry.handler.plugins.some((plugin) => "handlerDidError" in plugin)
|
|
273
227
|
) {
|
|
274
228
|
cacheEntry.handler.plugins.push(fallbackPlugin);
|
|
@@ -17,7 +17,11 @@ import type { StrategyOptions } from "./Strategy.js";
|
|
|
17
17
|
import { Strategy } from "./Strategy.js";
|
|
18
18
|
import type { StrategyHandler } from "./StrategyHandler.js";
|
|
19
19
|
|
|
20
|
-
interface PrecacheStrategyOptions extends StrategyOptions {
|
|
20
|
+
export interface PrecacheStrategyOptions extends StrategyOptions {
|
|
21
|
+
/**
|
|
22
|
+
* Plugins to use when precaching as well as responding to `fetch` events for precached assets.
|
|
23
|
+
*/
|
|
24
|
+
plugins?: StrategyOptions["plugins"];
|
|
21
25
|
/**
|
|
22
26
|
* Whether to attempt to get the response from the network
|
|
23
27
|
* if there's a precache miss.
|
|
@@ -75,6 +79,12 @@ export class PrecacheStrategy extends Strategy {
|
|
|
75
79
|
* @returns
|
|
76
80
|
*/
|
|
77
81
|
async _handle(request: Request, handler: StrategyHandler): Promise<Response> {
|
|
82
|
+
const preloadResponse = await handler.getPreloadResponse();
|
|
83
|
+
|
|
84
|
+
if (preloadResponse) {
|
|
85
|
+
return preloadResponse;
|
|
86
|
+
}
|
|
87
|
+
|
|
78
88
|
const response = await handler.cacheMatch(request);
|
|
79
89
|
|
|
80
90
|
if (response) {
|
|
@@ -131,14 +131,10 @@ export class StrategyHandler {
|
|
|
131
131
|
const { event } = this;
|
|
132
132
|
let request: Request = toRequest(input);
|
|
133
133
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
logger.log(`Using a preloaded navigation response for '${getFriendlyURL(request.url)}'`);
|
|
139
|
-
}
|
|
140
|
-
return possiblePreloadResponse;
|
|
141
|
-
}
|
|
134
|
+
const preloadResponse = await this.getPreloadResponse();
|
|
135
|
+
|
|
136
|
+
if (preloadResponse) {
|
|
137
|
+
return preloadResponse;
|
|
142
138
|
}
|
|
143
139
|
|
|
144
140
|
// If there is a fetchDidFail plugin, we need to save a clone of the
|
|
@@ -498,6 +494,26 @@ export class StrategyHandler {
|
|
|
498
494
|
this._handlerDeferred.resolve(null);
|
|
499
495
|
}
|
|
500
496
|
|
|
497
|
+
/**
|
|
498
|
+
* This method checks if the navigation preload `Response` is available.
|
|
499
|
+
*
|
|
500
|
+
* @param request
|
|
501
|
+
* @param event
|
|
502
|
+
* @returns
|
|
503
|
+
*/
|
|
504
|
+
async getPreloadResponse(): Promise<Response | undefined> {
|
|
505
|
+
if (this.event instanceof FetchEvent && this.event.request.mode === "navigate" && "preloadResponse" in this.event) {
|
|
506
|
+
const possiblePreloadResponse = (await this.event.preloadResponse) as Response | undefined;
|
|
507
|
+
if (possiblePreloadResponse) {
|
|
508
|
+
if (process.env.NODE_ENV !== "production") {
|
|
509
|
+
logger.log(`Using a preloaded navigation response for '${getFriendlyURL(this.event.request.url)}'`);
|
|
510
|
+
}
|
|
511
|
+
return possiblePreloadResponse;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
return undefined;
|
|
515
|
+
}
|
|
516
|
+
|
|
501
517
|
/**
|
|
502
518
|
* This method will call `cacheWillUpdate` on the available plugins (or use
|
|
503
519
|
* status === 200) to determine if the response is safe and valid to cache.
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { HTTPMethod } from "./constants.js";
|
|
2
|
+
import type { PrecacheStrategyOptions } from "./lib/strategies/PrecacheStrategy.js";
|
|
2
3
|
import type { Route } from "./Route.js";
|
|
3
4
|
import type { Serwist } from "./Serwist.js";
|
|
4
5
|
|
|
@@ -363,4 +364,33 @@ export interface PrecacheRouteOptions {
|
|
|
363
364
|
urlManipulation?: UrlManipulation;
|
|
364
365
|
}
|
|
365
366
|
|
|
367
|
+
export interface PrecacheOptions extends PrecacheStrategyOptions, PrecacheRouteOptions {
|
|
368
|
+
/**
|
|
369
|
+
* Whether outdated caches should be removed.
|
|
370
|
+
*
|
|
371
|
+
* @default false
|
|
372
|
+
*/
|
|
373
|
+
cleanupOutdatedCaches?: boolean;
|
|
374
|
+
/**
|
|
375
|
+
* The number of precache requests that should be made concurrently.
|
|
376
|
+
*
|
|
377
|
+
* @default 10
|
|
378
|
+
*/
|
|
379
|
+
concurrency?: number;
|
|
380
|
+
/**
|
|
381
|
+
* An URL that should point to a HTML file with which navigation requests for URLs that aren't
|
|
382
|
+
* precached will be fulfilled.
|
|
383
|
+
*/
|
|
384
|
+
navigateFallback?: string;
|
|
385
|
+
/**
|
|
386
|
+
* URLs that should be allowed to use the `navigateFallback` handler.
|
|
387
|
+
*/
|
|
388
|
+
navigateFallbackAllowlist?: RegExp[];
|
|
389
|
+
/**
|
|
390
|
+
* URLs that should not be allowed to use the `navigateFallback` handler. This takes precedence
|
|
391
|
+
* over `navigateFallbackAllowlist`.
|
|
392
|
+
*/
|
|
393
|
+
navigateFallbackDenylist?: RegExp[];
|
|
394
|
+
}
|
|
395
|
+
|
|
366
396
|
export type UrlManipulation = ({ url }: { url: URL }) => URL[];
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { privateCacheNames } from "../index.internal.js";
|
|
2
|
+
import type { PrecacheStrategyOptions } from "../lib/strategies/PrecacheStrategy.js";
|
|
3
|
+
import type { Serwist } from "../Serwist.js";
|
|
4
|
+
import type { PrecacheOptions, PrecacheRouteOptions } from "../types.js";
|
|
5
|
+
import { PrecacheCacheKeyPlugin } from "./PrecacheCacheKeyPlugin.js";
|
|
6
|
+
|
|
7
|
+
export const parsePrecacheOptions = (serwist: Serwist, precacheOptions: PrecacheOptions = {}) => {
|
|
8
|
+
const {
|
|
9
|
+
cacheName: precacheCacheName,
|
|
10
|
+
plugins: precachePlugins = [],
|
|
11
|
+
fetchOptions: precacheFetchOptions,
|
|
12
|
+
matchOptions: precacheMatchOptions,
|
|
13
|
+
fallbackToNetwork: precacheFallbackToNetwork,
|
|
14
|
+
directoryIndex: precacheDirectoryIndex,
|
|
15
|
+
ignoreURLParametersMatching: precacheIgnoreUrls,
|
|
16
|
+
cleanURLs: precacheCleanUrls,
|
|
17
|
+
urlManipulation: precacheUrlManipulation,
|
|
18
|
+
cleanupOutdatedCaches,
|
|
19
|
+
concurrency = 10,
|
|
20
|
+
navigateFallback,
|
|
21
|
+
navigateFallbackAllowlist,
|
|
22
|
+
navigateFallbackDenylist,
|
|
23
|
+
} = precacheOptions ?? {};
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
precacheStrategyOptions: {
|
|
27
|
+
cacheName: privateCacheNames.getPrecacheName(precacheCacheName),
|
|
28
|
+
plugins: [...precachePlugins, new PrecacheCacheKeyPlugin({ precacheController: serwist })],
|
|
29
|
+
fetchOptions: precacheFetchOptions,
|
|
30
|
+
matchOptions: precacheMatchOptions,
|
|
31
|
+
fallbackToNetwork: precacheFallbackToNetwork,
|
|
32
|
+
} satisfies PrecacheStrategyOptions,
|
|
33
|
+
precacheRouteOptions: {
|
|
34
|
+
directoryIndex: precacheDirectoryIndex,
|
|
35
|
+
ignoreURLParametersMatching: precacheIgnoreUrls,
|
|
36
|
+
cleanURLs: precacheCleanUrls,
|
|
37
|
+
urlManipulation: precacheUrlManipulation,
|
|
38
|
+
} satisfies PrecacheRouteOptions,
|
|
39
|
+
precacheMiscOptions: {
|
|
40
|
+
cleanupOutdatedCaches,
|
|
41
|
+
concurrency,
|
|
42
|
+
navigateFallback,
|
|
43
|
+
navigateFallbackAllowlist,
|
|
44
|
+
navigateFallbackDenylist,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
};
|