serwist 9.1.1 → 9.2.1

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/dist/Serwist.d.ts CHANGED
@@ -3,7 +3,7 @@ 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 { PrecacheOptions, RouteHandler, RouteHandlerCallback, RouteHandlerCallbackOptions, RouteMatchCallback, RouteMatchCallbackOptions } from "./types.js";
6
+ import type { PrecacheOptions, RequestRule, RouteHandler, RouteHandlerCallback, RouteHandlerCallbackOptions, RouteMatchCallback, RouteMatchCallbackOptions, InstallEvent } from "./types.js";
7
7
  import type { RuntimeCaching } from "./types.js";
8
8
  import type { CleanupResult, InstallResult, PrecacheEntry } from "./types.js";
9
9
  export interface FallbackEntry extends PrecacheFallbackEntry {
@@ -57,6 +57,14 @@ export interface SerwistOptions {
57
57
  * A list of caching strategies.
58
58
  */
59
59
  runtimeCaching?: RuntimeCaching[];
60
+ /**
61
+ * Request rules that define how certain resources should be fetched
62
+ * before the service worker starts up.
63
+ *
64
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes
65
+ * @experimental
66
+ */
67
+ requestRules?: RequestRule | RequestRule[];
60
68
  /**
61
69
  * Your configuration for {@linkcode initializeGoogleAnalytics}. This plugin is
62
70
  * only initialized when this option is not `undefined` or `false`.
@@ -91,7 +99,8 @@ export declare class Serwist {
91
99
  private readonly _routes;
92
100
  private readonly _defaultHandlerMap;
93
101
  private _catchHandler?;
94
- constructor({ precacheEntries, precacheOptions, skipWaiting, importScripts, navigationPreload, cacheId, clientsClaim, runtimeCaching, offlineAnalyticsConfig, disableDevLogs, fallbacks, }?: SerwistOptions);
102
+ private _requestRules?;
103
+ constructor({ precacheEntries, precacheOptions, skipWaiting, importScripts, navigationPreload, cacheId, clientsClaim, runtimeCaching, offlineAnalyticsConfig, disableDevLogs, fallbacks, requestRules, }?: SerwistOptions);
95
104
  /**
96
105
  * The strategy used to precache assets and respond to `fetch` events.
97
106
  */
@@ -121,7 +130,15 @@ export declare class Serwist {
121
130
  * @param event
122
131
  * @returns
123
132
  */
124
- handleInstall(event: ExtendableEvent): Promise<InstallResult>;
133
+ handleInstall(event: InstallEvent): Promise<InstallResult>;
134
+ /**
135
+ * Registers request rules using the experimental `InstallEvent.addRoutes()` API.
136
+ * These rules allow bypassing the service worker for specific requests to improve performance.
137
+ *
138
+ * @param event The event object of an `install` event handler.
139
+ * @throws {Error} When the route rules are invalid
140
+ */
141
+ registerRequestRules(event: InstallEvent): Promise<void>;
125
142
  /**
126
143
  * Deletes assets that are no longer present in the current precache manifest.
127
144
  * Call this method from the service worker's `activate` event.
@@ -1 +1 @@
1
- {"version":3,"file":"Serwist.d.ts","sourceRoot":"","sources":["../src/Serwist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Serwist.d.ts","sourceRoot":"","sources":["../src/Serwist.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export type HTTPMethod = "DELETE" | "GET" | "HEAD" | "PATCH" | "POST" | "PUT";
1
+ export type HTTPMethod = "DELETE" | "GET" | "HEAD" | "PATCH" | "POST" | "PUT" | "OPTIONS";
2
2
  /**
3
3
  * The default HTTP method, 'GET', used when there's no specific method
4
4
  * configured for a route.
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,aAAa,QAA6B,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,YAAY,0DAA2E,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;AAE1F;;;;;GAKG;AACH,eAAO,MAAM,aAAa,QAA6B,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,YAAY,0DAA2E,CAAC"}
package/dist/index.js CHANGED
@@ -209,12 +209,14 @@ class Serwist {
209
209
  _routes;
210
210
  _defaultHandlerMap;
211
211
  _catchHandler;
212
- constructor({ precacheEntries, precacheOptions, skipWaiting = false, importScripts, navigationPreload = false, cacheId, clientsClaim: clientsClaim$1 = false, runtimeCaching, offlineAnalyticsConfig, disableDevLogs: disableDevLogs$1 = false, fallbacks } = {}){
212
+ _requestRules;
213
+ constructor({ precacheEntries, precacheOptions, skipWaiting = false, importScripts, navigationPreload = false, cacheId, clientsClaim: clientsClaim$1 = false, runtimeCaching, offlineAnalyticsConfig, disableDevLogs: disableDevLogs$1 = false, fallbacks, requestRules } = {}){
213
214
  const { precacheStrategyOptions, precacheRouteOptions, precacheMiscOptions } = parsePrecacheOptions(this, precacheOptions);
214
215
  this._concurrentPrecaching = precacheMiscOptions.concurrency;
215
216
  this._precacheStrategy = new PrecacheStrategy(precacheStrategyOptions);
216
217
  this._routes = new Map();
217
218
  this._defaultHandlerMap = new Map();
219
+ this._requestRules = requestRules;
218
220
  this.handleInstall = this.handleInstall.bind(this);
219
221
  this.handleActivate = this.handleActivate.bind(this);
220
222
  this.handleFetch = this.handleFetch.bind(this);
@@ -336,6 +338,7 @@ class Serwist {
336
338
  }
337
339
  }
338
340
  handleInstall(event) {
341
+ void this.registerRequestRules(event);
339
342
  return waitUntil(event, async ()=>{
340
343
  const installReportPlugin = new PrecacheInstallReportPlugin();
341
344
  this.precacheStrategy.plugins.push(installReportPlugin);
@@ -366,6 +369,29 @@ class Serwist {
366
369
  };
367
370
  });
368
371
  }
372
+ async registerRequestRules(event) {
373
+ if (!this._requestRules) {
374
+ return;
375
+ }
376
+ if (!event?.addRoutes) {
377
+ if (process.env.NODE_ENV !== "production") {
378
+ logger.warn("Request rules ignored as the Static Routing API is not supported in this browser. " + "See https://caniuse.com/mdn-api_installevent_addroutes for more information.");
379
+ }
380
+ return;
381
+ }
382
+ try {
383
+ if (process.env.NODE_ENV !== "production") {
384
+ logger.warn("Request rules may not be supported in all browsers as the Static Routing API is experimental. " + "This feature allows bypassing the service worker for specific requests to improve performance. " + "See https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes for more information.");
385
+ }
386
+ await event.addRoutes(this._requestRules);
387
+ this._requestRules = undefined;
388
+ } catch (error) {
389
+ if (process.env.NODE_ENV !== "production") {
390
+ logger.error(`Failed to register request rules: ${error instanceof Error ? error.message : String(error)}. ` + "This may occur if the browser doesn't support the Static Routing API or if the request rules are invalid.");
391
+ }
392
+ throw error;
393
+ }
394
+ }
369
395
  handleActivate(event) {
370
396
  return waitUntil(event, async ()=>{
371
397
  const cache = await self.caches.open(this.precacheStrategy.cacheName);
package/dist/types.d.ts CHANGED
@@ -350,4 +350,96 @@ export interface PrecacheOptions extends PrecacheStrategyOptions, PrecacheRouteO
350
350
  export type UrlManipulation = ({ url }: {
351
351
  url: URL;
352
352
  }) => URL[];
353
+ /**
354
+ * Represents the condition object that defines which resources should match a rule.
355
+ * Based on the MDN documentation for `InstallEvent.addRoutes()`.
356
+ */
357
+ export interface RequestRuleCondition {
358
+ /**
359
+ * A condition object defining conditions that must explicitly NOT be met to match the rule.
360
+ * Conditions defined inside a `not` condition are mutually exclusive with other conditions.
361
+ */
362
+ not?: RequestRuleCondition;
363
+ /**
364
+ * An array of condition objects. One set of these defined conditions must be met to match the rule.
365
+ * Conditions defined inside an `or` condition are mutually exclusive with other conditions.
366
+ * Cannot be combined with other condition types.
367
+ */
368
+ or?: RequestRuleCondition[];
369
+ /**
370
+ * A string representing the HTTP method a request should be sent by for it to match the rule.
371
+ *
372
+ * @example "GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "PATCH"
373
+ */
374
+ requestMethod?: HTTPMethod;
375
+ /**
376
+ * A string representing the mode a request should have for it to match the rule.
377
+ *
378
+ * @example "same-origin", "no-cors", "cors"
379
+ */
380
+ requestMode?: RequestMode;
381
+ /**
382
+ * A string representing the destination of a request, i.e., what content type should be requested.
383
+ *
384
+ * @example "audio", "document", "script", "worker"
385
+ */
386
+ requestDestination?: RequestDestination;
387
+ /**
388
+ * An enumerated value representing the required running status of the service worker for a request to match the rule.
389
+ */
390
+ runningStatus?: "running" | "not-running";
391
+ /**
392
+ * A URLPattern instance, or a URLPattern constructor input pattern representing the URLs that match the rule.
393
+ * Regular expression capturing groups are not allowed, so `URLPattern.hasRegExpGroups` must be `false`.
394
+ */
395
+ urlPattern?: URLPattern | URLPatternInit;
396
+ }
397
+ /**
398
+ * Represents the source from which matching resources will be loaded.
399
+ * Can be an enumerated value or an object specifying a named cache.
400
+ */
401
+ export type RequestRuleSource = "cache" | "fetch-event" | "network" | "race-network-and-fetch-handler" | {
402
+ cacheName: string;
403
+ };
404
+ /**
405
+ * Represents a single router rule configuration.
406
+ * Each rule contains a condition (optional) and a source (required).
407
+ */
408
+ export interface RequestRule {
409
+ /**
410
+ * An object defining one or more conditions that specify which resources should match this rule.
411
+ * If multiple properties are used, a resource must meet all specified conditions to match the rule.
412
+ */
413
+ condition?: RequestRuleCondition;
414
+ /**
415
+ * An enumerated value or an object specifying the source from which matching resources will be loaded.
416
+ */
417
+ source: RequestRuleSource;
418
+ }
419
+ /**
420
+ * Types based on MDN documentation
421
+ * https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes
422
+ *
423
+ * Extends the standard `ExtendableEvent` interface to include the `addRoutes` method
424
+ * for configuring static routes during the service worker's installation.
425
+ *
426
+ * The `addRoutes()` method specifies one or more static routes, which define rules
427
+ * for fetching specified resources that will be used even before service worker startup.
428
+ * This allows bypassing a service worker in cases where you always want to fetch
429
+ * a resource from the network or a browser cache, avoiding the performance overhead
430
+ * of unnecessary service worker cycles.
431
+ */
432
+ export interface InstallEvent extends ExtendableEvent {
433
+ /**
434
+ * Specifies one or more static routes for fetching resources.
435
+ *
436
+ * @param requestRules A single object, or an array of one or more objects, representing rules
437
+ * for how certain resources should be fetched.
438
+ * @returns A Promise that fulfills with `undefined`.
439
+ * @throws {TypeError} Thrown if one or more of the rules objects is invalid, or has a source
440
+ * value of `"fetch-event"` when the associated service worker does not have
441
+ * a `fetch` event handler. Also thrown if you try to combine `or` with another condition type.
442
+ */
443
+ addRoutes?(requestRules: RequestRule | RequestRule[]): Promise<void>;
444
+ }
353
445
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "serwist",
3
- "version": "9.1.1",
3
+ "version": "9.2.1",
4
4
  "type": "module",
5
5
  "description": "A Swiss Army knife for service workers.",
6
6
  "files": [
@@ -52,10 +52,10 @@
52
52
  "idb": "8.0.3"
53
53
  },
54
54
  "devDependencies": {
55
- "rollup": "4.45.1",
56
- "typescript": "5.8.3",
57
- "@serwist/configs": "9.1.1",
58
- "@serwist/utils": "9.1.1"
55
+ "rollup": "4.49.0",
56
+ "typescript": "5.9.2",
57
+ "@serwist/configs": "9.2.1",
58
+ "@serwist/utils": "9.2.1"
59
59
  },
60
60
  "peerDependencies": {
61
61
  "typescript": ">=5.0.0"
package/src/Serwist.ts CHANGED
@@ -12,12 +12,14 @@ import { enableNavigationPreload } from "./navigationPreload.js";
12
12
  import { setCacheNameDetails } from "./setCacheNameDetails.js";
13
13
  import type {
14
14
  PrecacheOptions,
15
+ RequestRule,
15
16
  RouteHandler,
16
17
  RouteHandlerCallback,
17
18
  RouteHandlerCallbackOptions,
18
19
  RouteHandlerObject,
19
20
  RouteMatchCallback,
20
21
  RouteMatchCallbackOptions,
22
+ InstallEvent,
21
23
  } from "./types.js";
22
24
  import type { RuntimeCaching } from "./types.js";
23
25
  import type { CleanupResult, InstallResult, PrecacheEntry } from "./types.js";
@@ -90,6 +92,14 @@ export interface SerwistOptions {
90
92
  * A list of caching strategies.
91
93
  */
92
94
  runtimeCaching?: RuntimeCaching[];
95
+ /**
96
+ * Request rules that define how certain resources should be fetched
97
+ * before the service worker starts up.
98
+ *
99
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes
100
+ * @experimental
101
+ */
102
+ requestRules?: RequestRule | RequestRule[];
93
103
  /**
94
104
  * Your configuration for {@linkcode initializeGoogleAnalytics}. This plugin is
95
105
  * only initialized when this option is not `undefined` or `false`.
@@ -134,6 +144,7 @@ export class Serwist {
134
144
  private readonly _routes: Map<HTTPMethod, Route[]>;
135
145
  private readonly _defaultHandlerMap: Map<HTTPMethod, RouteHandlerObject>;
136
146
  private _catchHandler?: RouteHandlerObject;
147
+ private _requestRules?: RequestRule | RequestRule[];
137
148
 
138
149
  constructor({
139
150
  precacheEntries,
@@ -147,6 +158,7 @@ export class Serwist {
147
158
  offlineAnalyticsConfig,
148
159
  disableDevLogs = false,
149
160
  fallbacks,
161
+ requestRules,
150
162
  }: SerwistOptions = {}) {
151
163
  const { precacheStrategyOptions, precacheRouteOptions, precacheMiscOptions } = parsePrecacheOptions(this, precacheOptions);
152
164
 
@@ -154,6 +166,7 @@ export class Serwist {
154
166
  this._precacheStrategy = new PrecacheStrategy(precacheStrategyOptions);
155
167
  this._routes = new Map();
156
168
  this._defaultHandlerMap = new Map();
169
+ this._requestRules = requestRules;
157
170
 
158
171
  this.handleInstall = this.handleInstall.bind(this);
159
172
  this.handleActivate = this.handleActivate.bind(this);
@@ -332,7 +345,9 @@ export class Serwist {
332
345
  * @param event
333
346
  * @returns
334
347
  */
335
- handleInstall(event: ExtendableEvent): Promise<InstallResult> {
348
+ handleInstall(event: InstallEvent): Promise<InstallResult> {
349
+ void this.registerRequestRules(event);
350
+
336
351
  return waitUntil<InstallResult>(event, async () => {
337
352
  const installReportPlugin = new PrecacheInstallReportPlugin();
338
353
  this.precacheStrategy.plugins.push(installReportPlugin);
@@ -367,6 +382,54 @@ export class Serwist {
367
382
  });
368
383
  }
369
384
 
385
+ /**
386
+ * Registers request rules using the experimental `InstallEvent.addRoutes()` API.
387
+ * These rules allow bypassing the service worker for specific requests to improve performance.
388
+ *
389
+ * @param event The event object of an `install` event handler.
390
+ * @throws {Error} When the route rules are invalid
391
+ */
392
+ async registerRequestRules(event: InstallEvent): Promise<void> {
393
+ if (!this._requestRules) {
394
+ return;
395
+ }
396
+
397
+ // Check if both the API and route rules are available
398
+ if (!event?.addRoutes) {
399
+ if (process.env.NODE_ENV !== "production") {
400
+ logger.warn(
401
+ "Request rules ignored as the Static Routing API is not supported in this browser. " +
402
+ "See https://caniuse.com/mdn-api_installevent_addroutes for more information.",
403
+ );
404
+ }
405
+ return;
406
+ }
407
+
408
+ try {
409
+ if (process.env.NODE_ENV !== "production") {
410
+ logger.warn(
411
+ "Request rules may not be supported in all browsers as the Static Routing API is experimental. " +
412
+ "This feature allows bypassing the service worker for specific requests to improve performance. " +
413
+ "See https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes for more information.",
414
+ );
415
+ }
416
+
417
+ await event.addRoutes(this._requestRules);
418
+
419
+ // Free up the rules object.
420
+ this._requestRules = undefined;
421
+ } catch (error) {
422
+ if (process.env.NODE_ENV !== "production") {
423
+ logger.error(
424
+ `Failed to register request rules: ${error instanceof Error ? error.message : String(error)}. ` +
425
+ "This may occur if the browser doesn't support the Static Routing API or if the request rules are invalid.",
426
+ );
427
+ }
428
+
429
+ throw error;
430
+ }
431
+ }
432
+
370
433
  /**
371
434
  * Deletes assets that are no longer present in the current precache manifest.
372
435
  * Call this method from the service worker's `activate` event.
package/src/constants.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  https://opensource.org/licenses/MIT.
7
7
  */
8
8
 
9
- export type HTTPMethod = "DELETE" | "GET" | "HEAD" | "PATCH" | "POST" | "PUT";
9
+ export type HTTPMethod = "DELETE" | "GET" | "HEAD" | "PATCH" | "POST" | "PUT" | "OPTIONS";
10
10
 
11
11
  /**
12
12
  * The default HTTP method, 'GET', used when there's no specific method
package/src/types.ts CHANGED
@@ -395,3 +395,104 @@ export interface PrecacheOptions extends PrecacheStrategyOptions, PrecacheRouteO
395
395
  }
396
396
 
397
397
  export type UrlManipulation = ({ url }: { url: URL }) => URL[];
398
+
399
+ /**
400
+ * Represents the condition object that defines which resources should match a rule.
401
+ * Based on the MDN documentation for `InstallEvent.addRoutes()`.
402
+ */
403
+ export interface RequestRuleCondition {
404
+ /**
405
+ * A condition object defining conditions that must explicitly NOT be met to match the rule.
406
+ * Conditions defined inside a `not` condition are mutually exclusive with other conditions.
407
+ */
408
+ not?: RequestRuleCondition;
409
+
410
+ /**
411
+ * An array of condition objects. One set of these defined conditions must be met to match the rule.
412
+ * Conditions defined inside an `or` condition are mutually exclusive with other conditions.
413
+ * Cannot be combined with other condition types.
414
+ */
415
+ or?: RequestRuleCondition[];
416
+
417
+ /**
418
+ * A string representing the HTTP method a request should be sent by for it to match the rule.
419
+ *
420
+ * @example "GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "PATCH"
421
+ */
422
+ requestMethod?: HTTPMethod;
423
+
424
+ /**
425
+ * A string representing the mode a request should have for it to match the rule.
426
+ *
427
+ * @example "same-origin", "no-cors", "cors"
428
+ */
429
+ requestMode?: RequestMode;
430
+
431
+ /**
432
+ * A string representing the destination of a request, i.e., what content type should be requested.
433
+ *
434
+ * @example "audio", "document", "script", "worker"
435
+ */
436
+ requestDestination?: RequestDestination;
437
+
438
+ /**
439
+ * An enumerated value representing the required running status of the service worker for a request to match the rule.
440
+ */
441
+ runningStatus?: "running" | "not-running";
442
+
443
+ /**
444
+ * A URLPattern instance, or a URLPattern constructor input pattern representing the URLs that match the rule.
445
+ * Regular expression capturing groups are not allowed, so `URLPattern.hasRegExpGroups` must be `false`.
446
+ */
447
+ urlPattern?: URLPattern | URLPatternInit;
448
+ }
449
+
450
+ /**
451
+ * Represents the source from which matching resources will be loaded.
452
+ * Can be an enumerated value or an object specifying a named cache.
453
+ */
454
+ export type RequestRuleSource = "cache" | "fetch-event" | "network" | "race-network-and-fetch-handler" | { cacheName: string };
455
+
456
+ /**
457
+ * Represents a single router rule configuration.
458
+ * Each rule contains a condition (optional) and a source (required).
459
+ */
460
+ export interface RequestRule {
461
+ /**
462
+ * An object defining one or more conditions that specify which resources should match this rule.
463
+ * If multiple properties are used, a resource must meet all specified conditions to match the rule.
464
+ */
465
+ condition?: RequestRuleCondition;
466
+
467
+ /**
468
+ * An enumerated value or an object specifying the source from which matching resources will be loaded.
469
+ */
470
+ source: RequestRuleSource;
471
+ }
472
+
473
+ /**
474
+ * Types based on MDN documentation
475
+ * https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes
476
+ *
477
+ * Extends the standard `ExtendableEvent` interface to include the `addRoutes` method
478
+ * for configuring static routes during the service worker's installation.
479
+ *
480
+ * The `addRoutes()` method specifies one or more static routes, which define rules
481
+ * for fetching specified resources that will be used even before service worker startup.
482
+ * This allows bypassing a service worker in cases where you always want to fetch
483
+ * a resource from the network or a browser cache, avoiding the performance overhead
484
+ * of unnecessary service worker cycles.
485
+ */
486
+ export interface InstallEvent extends ExtendableEvent {
487
+ /**
488
+ * Specifies one or more static routes for fetching resources.
489
+ *
490
+ * @param requestRules A single object, or an array of one or more objects, representing rules
491
+ * for how certain resources should be fetched.
492
+ * @returns A Promise that fulfills with `undefined`.
493
+ * @throws {TypeError} Thrown if one or more of the rules objects is invalid, or has a source
494
+ * value of `"fetch-event"` when the associated service worker does not have
495
+ * a `fetch` event handler. Also thrown if you try to combine `or` with another condition type.
496
+ */
497
+ addRoutes?(requestRules: RequestRule | RequestRule[]): Promise<void>;
498
+ }