pashto-dictionary/website/sout/service-worker.js

2046 lines
68 KiB
JavaScript
Raw Normal View History

// node_modules/workbox-core/_version.js
try {
self["workbox:core:5.1.4"] && _();
} catch (e) {
}
// node_modules/workbox-core/_private/logger.js
var logger = (() => {
if (!("__WB_DISABLE_DEV_LOGS" in self)) {
self.__WB_DISABLE_DEV_LOGS = false;
}
let inGroup = false;
const methodToColorMap = {
debug: `#7f8c8d`,
log: `#2ecc71`,
warn: `#f39c12`,
error: `#c0392b`,
groupCollapsed: `#3498db`,
groupEnd: null
};
const print = function(method, args) {
if (self.__WB_DISABLE_DEV_LOGS) {
return;
}
if (method === "groupCollapsed") {
if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
console[method](...args);
return;
}
}
const styles = [
`background: ${methodToColorMap[method]}`,
`border-radius: 0.5em`,
`color: white`,
`font-weight: bold`,
`padding: 2px 0.5em`
];
const logPrefix = inGroup ? [] : ["%cworkbox", styles.join(";")];
console[method](...logPrefix, ...args);
if (method === "groupCollapsed") {
inGroup = true;
}
if (method === "groupEnd") {
inGroup = false;
}
};
const api = {};
const loggerMethods = Object.keys(methodToColorMap);
for (const key of loggerMethods) {
const method = key;
api[method] = (...args) => {
print(method, args);
};
}
return api;
})();
// node_modules/workbox-core/models/messages/messages.js
var messages = {
"invalid-value": ({ paramName, validValueDescription, value }) => {
if (!paramName || !validValueDescription) {
throw new Error(`Unexpected input to 'invalid-value' error.`);
}
return `The '${paramName}' parameter was given a value with an ` + `unexpected value. ${validValueDescription} Received a value of ` + `${JSON.stringify(value)}.`;
},
"not-an-array": ({ moduleName, className, funcName, paramName }) => {
if (!moduleName || !className || !funcName || !paramName) {
throw new Error(`Unexpected input to 'not-an-array' error.`);
}
return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className}.${funcName}()' must be an array.`;
},
"incorrect-type": ({ expectedType, paramName, moduleName, className, funcName }) => {
if (!expectedType || !paramName || !moduleName || !funcName) {
throw new Error(`Unexpected input to 'incorrect-type' error.`);
}
return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className ? className + "." : ""}` + `${funcName}()' must be of type ${expectedType}.`;
},
"incorrect-class": ({ expectedClass, paramName, moduleName, className, funcName, isReturnValueProblem }) => {
if (!expectedClass || !moduleName || !funcName) {
throw new Error(`Unexpected input to 'incorrect-class' error.`);
}
if (isReturnValueProblem) {
return `The return value from ` + `'${moduleName}.${className ? className + "." : ""}${funcName}()' ` + `must be an instance of class ${expectedClass.name}.`;
}
return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className ? className + "." : ""}${funcName}()' ` + `must be an instance of class ${expectedClass.name}.`;
},
"missing-a-method": ({ expectedMethod, paramName, moduleName, className, funcName }) => {
if (!expectedMethod || !paramName || !moduleName || !className || !funcName) {
throw new Error(`Unexpected input to 'missing-a-method' error.`);
}
return `${moduleName}.${className}.${funcName}() expected the ` + `'${paramName}' parameter to expose a '${expectedMethod}' method.`;
},
"add-to-cache-list-unexpected-type": ({ entry }) => {
return `An unexpected entry was passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' The entry ` + `'${JSON.stringify(entry)}' isn't supported. You must supply an array of ` + `strings with one or more characters, objects with a url property or ` + `Request objects.`;
},
"add-to-cache-list-conflicting-entries": ({ firstEntry, secondEntry }) => {
if (!firstEntry || !secondEntry) {
throw new Error(`Unexpected input to ` + `'add-to-cache-list-duplicate-entries' error.`);
}
return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` + `${firstEntry._entryId} but different revision details. Workbox is ` + `unable to cache and version the asset correctly. Please remove one ` + `of the entries.`;
},
"plugin-error-request-will-fetch": ({ thrownError }) => {
if (!thrownError) {
throw new Error(`Unexpected input to ` + `'plugin-error-request-will-fetch', error.`);
}
return `An error was thrown by a plugins 'requestWillFetch()' method. ` + `The thrown error message was: '${thrownError.message}'.`;
},
"invalid-cache-name": ({ cacheNameId, value }) => {
if (!cacheNameId) {
throw new Error(`Expected a 'cacheNameId' for error 'invalid-cache-name'`);
}
return `You must provide a name containing at least one character for ` + `setCacheDetails({${cacheNameId}: '...'}). Received a value of ` + `'${JSON.stringify(value)}'`;
},
"unregister-route-but-not-found-with-method": ({ method }) => {
if (!method) {
throw new Error(`Unexpected input to ` + `'unregister-route-but-not-found-with-method' error.`);
}
return `The route you're trying to unregister was not previously ` + `registered for the method type '${method}'.`;
},
"unregister-route-route-not-registered": () => {
return `The route you're trying to unregister was not previously ` + `registered.`;
},
"queue-replay-failed": ({ name }) => {
return `Replaying the background sync queue '${name}' failed.`;
},
"duplicate-queue-name": ({ name }) => {
return `The Queue name '${name}' is already being used. ` + `All instances of backgroundSync.Queue must be given unique names.`;
},
"expired-test-without-max-age": ({ methodName, paramName }) => {
return `The '${methodName}()' method can only be used when the ` + `'${paramName}' is used in the constructor.`;
},
"unsupported-route-type": ({ moduleName, className, funcName, paramName }) => {
return `The supplied '${paramName}' parameter was an unsupported type. ` + `Please check the docs for ${moduleName}.${className}.${funcName} for ` + `valid input types.`;
},
"not-array-of-class": ({ value, expectedClass, moduleName, className, funcName, paramName }) => {
return `The supplied '${paramName}' parameter must be an array of ` + `'${expectedClass}' objects. Received '${JSON.stringify(value)},'. ` + `Please check the call to ${moduleName}.${className}.${funcName}() ` + `to fix the issue.`;
},
"max-entries-or-age-required": ({ moduleName, className, funcName }) => {
return `You must define either config.maxEntries or config.maxAgeSeconds` + `in ${moduleName}.${className}.${funcName}`;
},
"statuses-or-headers-required": ({ moduleName, className, funcName }) => {
return `You must define either config.statuses or config.headers` + `in ${moduleName}.${className}.${funcName}`;
},
"invalid-string": ({ moduleName, funcName, paramName }) => {
if (!paramName || !moduleName || !funcName) {
throw new Error(`Unexpected input to 'invalid-string' error.`);
}
return `When using strings, the '${paramName}' parameter must start with ` + `'http' (for cross-origin matches) or '/' (for same-origin matches). ` + `Please see the docs for ${moduleName}.${funcName}() for ` + `more info.`;
},
"channel-name-required": () => {
return `You must provide a channelName to construct a ` + `BroadcastCacheUpdate instance.`;
},
"invalid-responses-are-same-args": () => {
return `The arguments passed into responsesAreSame() appear to be ` + `invalid. Please ensure valid Responses are used.`;
},
"expire-custom-caches-only": () => {
return `You must provide a 'cacheName' property when using the ` + `expiration plugin with a runtime caching strategy.`;
},
"unit-must-be-bytes": ({ normalizedRangeHeader }) => {
if (!normalizedRangeHeader) {
throw new Error(`Unexpected input to 'unit-must-be-bytes' error.`);
}
return `The 'unit' portion of the Range header must be set to 'bytes'. ` + `The Range header provided was "${normalizedRangeHeader}"`;
},
"single-range-only": ({ normalizedRangeHeader }) => {
if (!normalizedRangeHeader) {
throw new Error(`Unexpected input to 'single-range-only' error.`);
}
return `Multiple ranges are not supported. Please use a single start ` + `value, and optional end value. The Range header provided was ` + `"${normalizedRangeHeader}"`;
},
"invalid-range-values": ({ normalizedRangeHeader }) => {
if (!normalizedRangeHeader) {
throw new Error(`Unexpected input to 'invalid-range-values' error.`);
}
return `The Range header is missing both start and end values. At least ` + `one of those values is needed. The Range header provided was ` + `"${normalizedRangeHeader}"`;
},
"no-range-header": () => {
return `No Range header was found in the Request provided.`;
},
"range-not-satisfiable": ({ size, start, end }) => {
return `The start (${start}) and end (${end}) values in the Range are ` + `not satisfiable by the cached response, which is ${size} bytes.`;
},
"attempt-to-cache-non-get-request": ({ url, method }) => {
return `Unable to cache '${url}' because it is a '${method}' request and ` + `only 'GET' requests can be cached.`;
},
"cache-put-with-no-response": ({ url }) => {
return `There was an attempt to cache '${url}' but the response was not ` + `defined.`;
},
"no-response": ({ url, error }) => {
let message = `The strategy could not generate a response for '${url}'.`;
if (error) {
message += ` The underlying error is ${error}.`;
}
return message;
},
"bad-precaching-response": ({ url, status }) => {
return `The precaching request for '${url}' failed with an HTTP ` + `status of ${status}.`;
},
"non-precached-url": ({ url }) => {
return `createHandlerBoundToURL('${url}') was called, but that URL is ` + `not precached. Please pass in a URL that is precached instead.`;
},
"add-to-cache-list-conflicting-integrities": ({ url }) => {
return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` + `${url} with different integrity values. Please remove one of them.`;
},
"missing-precache-entry": ({ cacheName, url }) => {
return `Unable to find a precached response in ${cacheName} for ${url}.`;
}
};
// node_modules/workbox-core/models/messages/messageGenerator.js
var generatorFunction = (code, details = {}) => {
const message = messages[code];
if (!message) {
throw new Error(`Unable to find message for code '${code}'.`);
}
return message(details);
};
var messageGenerator = generatorFunction;
// node_modules/workbox-core/_private/WorkboxError.js
class WorkboxError extends Error {
constructor(errorCode, details) {
const message = messageGenerator(errorCode, details);
super(message);
this.name = errorCode;
this.details = details;
}
}
// node_modules/workbox-core/_private/assert.js
var isArray = (value, details) => {
if (!Array.isArray(value)) {
throw new WorkboxError("not-an-array", details);
}
};
var hasMethod = (object, expectedMethod, details) => {
const type = typeof object[expectedMethod];
if (type !== "function") {
details["expectedMethod"] = expectedMethod;
throw new WorkboxError("missing-a-method", details);
}
};
var isType = (object, expectedType, details) => {
if (typeof object !== expectedType) {
details["expectedType"] = expectedType;
throw new WorkboxError("incorrect-type", details);
}
};
var isInstance = (object, expectedClass, details) => {
if (!(object instanceof expectedClass)) {
details["expectedClass"] = expectedClass;
throw new WorkboxError("incorrect-class", details);
}
};
var isOneOf = (value, validValues, details) => {
if (!validValues.includes(value)) {
details["validValueDescription"] = `Valid values are ${JSON.stringify(validValues)}.`;
throw new WorkboxError("invalid-value", details);
}
};
var isArrayOfClass = (value, expectedClass, details) => {
const error = new WorkboxError("not-array-of-class", details);
if (!Array.isArray(value)) {
throw error;
}
for (const item of value) {
if (!(item instanceof expectedClass)) {
throw error;
}
}
};
var finalAssertExports = {
hasMethod,
isArray,
isInstance,
isOneOf,
isType,
isArrayOfClass
};
// node_modules/workbox-core/models/quotaErrorCallbacks.js
var quotaErrorCallbacks = new Set;
// node_modules/workbox-core/registerQuotaErrorCallback.js
function registerQuotaErrorCallback(callback) {
if (true) {
finalAssertExports.isType(callback, "function", {
moduleName: "workbox-core",
funcName: "register",
paramName: "callback"
});
}
quotaErrorCallbacks.add(callback);
if (true) {
logger.log("Registered a callback to respond to quota errors.", callback);
}
}
// node_modules/workbox-core/_private/cacheNames.js
var _cacheNameDetails = {
googleAnalytics: "googleAnalytics",
precache: "precache-v2",
prefix: "workbox",
runtime: "runtime",
suffix: typeof registration !== "undefined" ? registration.scope : ""
};
var _createCacheName = (cacheName) => {
return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix].filter((value) => value && value.length > 0).join("-");
};
var eachCacheNameDetail = (fn) => {
for (const key of Object.keys(_cacheNameDetails)) {
fn(key);
}
};
var cacheNames = {
updateDetails: (details) => {
eachCacheNameDetail((key) => {
if (typeof details[key] === "string") {
_cacheNameDetails[key] = details[key];
}
});
},
getGoogleAnalyticsName: (userCacheName) => {
return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);
},
getPrecacheName: (userCacheName) => {
return userCacheName || _createCacheName(_cacheNameDetails.precache);
},
getPrefix: () => {
return _cacheNameDetails.prefix;
},
getRuntimeName: (userCacheName) => {
return userCacheName || _createCacheName(_cacheNameDetails.runtime);
},
getSuffix: () => {
return _cacheNameDetails.suffix;
}
};
// node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js
async function executeQuotaErrorCallbacks() {
if (true) {
logger.log(`About to run ${quotaErrorCallbacks.size} ` + `callbacks to clean up caches.`);
}
for (const callback of quotaErrorCallbacks) {
await callback();
if (true) {
logger.log(callback, "is complete.");
}
}
if (true) {
logger.log("Finished running callbacks.");
}
}
// node_modules/workbox-core/_private/getFriendlyURL.js
var getFriendlyURL = (url) => {
const urlObj = new URL(String(url), location.href);
return urlObj.href.replace(new RegExp(`^${location.origin}`), "");
};
// node_modules/workbox-core/utils/pluginUtils.js
var pluginUtils = {
filter: (plugins, callbackName) => {
return plugins.filter((plugin) => (callbackName in plugin));
}
};
// node_modules/workbox-core/_private/cacheWrapper.js
var _getEffectiveRequest = async ({ request, mode, plugins = [] }) => {
const cacheKeyWillBeUsedPlugins = pluginUtils.filter(plugins, "cacheKeyWillBeUsed");
let effectiveRequest = request;
for (const plugin of cacheKeyWillBeUsedPlugins) {
effectiveRequest = await plugin["cacheKeyWillBeUsed"].call(plugin, { mode, request: effectiveRequest });
if (typeof effectiveRequest === "string") {
effectiveRequest = new Request(effectiveRequest);
}
if (true) {
finalAssertExports.isInstance(effectiveRequest, Request, {
moduleName: "Plugin",
funcName: "cacheKeyWillBeUsed",
isReturnValueProblem: true
});
}
}
return effectiveRequest;
};
var _isResponseSafeToCache = async ({ request, response, event, plugins = [] }) => {
let responseToCache = response;
let pluginsUsed = false;
for (const plugin of plugins) {
if ("cacheWillUpdate" in plugin) {
pluginsUsed = true;
const pluginMethod = plugin["cacheWillUpdate"];
responseToCache = await pluginMethod.call(plugin, {
request,
response: responseToCache,
event
});
if (true) {
if (responseToCache) {
finalAssertExports.isInstance(responseToCache, Response, {
moduleName: "Plugin",
funcName: "cacheWillUpdate",
isReturnValueProblem: true
});
}
}
if (!responseToCache) {
break;
}
}
}
if (!pluginsUsed) {
if (true) {
if (responseToCache) {
if (responseToCache.status !== 200) {
if (responseToCache.status === 0) {
logger.warn(`The response for '${request.url}' is an opaque ` + `response. The caching strategy that you're using will not ` + `cache opaque responses by default.`);
} else {
logger.debug(`The response for '${request.url}' returned ` + `a status code of '${response.status}' and won't be cached as a ` + `result.`);
}
}
}
}
responseToCache = responseToCache && responseToCache.status === 200 ? responseToCache : undefined;
}
return responseToCache ? responseToCache : null;
};
var matchWrapper = async ({ cacheName, request, event, matchOptions, plugins = [] }) => {
const cache = await self.caches.open(cacheName);
const effectiveRequest = await _getEffectiveRequest({
plugins,
request,
mode: "read"
});
let cachedResponse = await cache.match(effectiveRequest, matchOptions);
if (true) {
if (cachedResponse) {
logger.debug(`Found a cached response in '${cacheName}'.`);
} else {
logger.debug(`No cached response found in '${cacheName}'.`);
}
}
for (const plugin of plugins) {
if ("cachedResponseWillBeUsed" in plugin) {
const pluginMethod = plugin["cachedResponseWillBeUsed"];
cachedResponse = await pluginMethod.call(plugin, {
cacheName,
event,
matchOptions,
cachedResponse,
request: effectiveRequest
});
if (true) {
if (cachedResponse) {
finalAssertExports.isInstance(cachedResponse, Response, {
moduleName: "Plugin",
funcName: "cachedResponseWillBeUsed",
isReturnValueProblem: true
});
}
}
}
}
return cachedResponse;
};
var putWrapper = async ({ cacheName, request, response, event, plugins = [], matchOptions }) => {
if (true) {
if (request.method && request.method !== "GET") {
throw new WorkboxError("attempt-to-cache-non-get-request", {
url: getFriendlyURL(request.url),
method: request.method
});
}
}
const effectiveRequest = await _getEffectiveRequest({
plugins,
request,
mode: "write"
});
if (!response) {
if (true) {
logger.error(`Cannot cache non-existent response for ` + `'${getFriendlyURL(effectiveRequest.url)}'.`);
}
throw new WorkboxError("cache-put-with-no-response", {
url: getFriendlyURL(effectiveRequest.url)
});
}
const responseToCache = await _isResponseSafeToCache({
event,
plugins,
response,
request: effectiveRequest
});
if (!responseToCache) {
if (true) {
logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' will ` + `not be cached.`, responseToCache);
}
return;
}
const cache = await self.caches.open(cacheName);
const updatePlugins = pluginUtils.filter(plugins, "cacheDidUpdate");
const oldResponse = updatePlugins.length > 0 ? await matchWrapper({ cacheName, matchOptions, request: effectiveRequest }) : null;
if (true) {
logger.debug(`Updating the '${cacheName}' cache with a new Response for ` + `${getFriendlyURL(effectiveRequest.url)}.`);
}
try {
await cache.put(effectiveRequest, responseToCache);
} catch (error) {
if (error.name === "QuotaExceededError") {
await executeQuotaErrorCallbacks();
}
throw error;
}
for (const plugin of updatePlugins) {
await plugin["cacheDidUpdate"].call(plugin, {
cacheName,
event,
oldResponse,
newResponse: responseToCache,
request: effectiveRequest
});
}
};
var cacheWrapper = {
put: putWrapper,
match: matchWrapper
};
// node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js
function canConstructResponseFromBodyStream() {
if (supportStatus === undefined) {
const testResponse = new Response("");
if ("body" in testResponse) {
try {
new Response(testResponse.body);
supportStatus = true;
} catch (error) {
supportStatus = false;
}
}
supportStatus = false;
}
return supportStatus;
}
var supportStatus;
// node_modules/workbox-core/_private/dontWaitFor.js
function dontWaitFor(promise) {
promise.then(() => {
});
}
// node_modules/workbox-core/_private/DBWrapper.js
class DBWrapper {
constructor(name, version, { onupgradeneeded, onversionchange } = {}) {
this._db = null;
this._name = name;
this._version = version;
this._onupgradeneeded = onupgradeneeded;
this._onversionchange = onversionchange || (() => this.close());
}
get db() {
return this._db;
}
async open() {
if (this._db)
return;
this._db = await new Promise((resolve, reject) => {
let openRequestTimedOut = false;
setTimeout(() => {
openRequestTimedOut = true;
reject(new Error("The open request was blocked and timed out"));
}, this.OPEN_TIMEOUT);
const openRequest = indexedDB.open(this._name, this._version);
openRequest.onerror = () => reject(openRequest.error);
openRequest.onupgradeneeded = (evt) => {
if (openRequestTimedOut) {
openRequest.transaction.abort();
openRequest.result.close();
} else if (typeof this._onupgradeneeded === "function") {
this._onupgradeneeded(evt);
}
};
openRequest.onsuccess = () => {
const db = openRequest.result;
if (openRequestTimedOut) {
db.close();
} else {
db.onversionchange = this._onversionchange.bind(this);
resolve(db);
}
};
});
return this;
}
async getKey(storeName, query) {
return (await this.getAllKeys(storeName, query, 1))[0];
}
async getAll(storeName, query, count) {
return await this.getAllMatching(storeName, { query, count });
}
async getAllKeys(storeName, query, count) {
const entries = await this.getAllMatching(storeName, { query, count, includeKeys: true });
return entries.map((entry) => entry.key);
}
async getAllMatching(storeName, {
index,
query = null,
direction = "next",
count,
includeKeys = false
} = {}) {
return await this.transaction([storeName], "readonly", (txn, done) => {
const store = txn.objectStore(storeName);
const target = index ? store.index(index) : store;
const results = [];
const request = target.openCursor(query, direction);
request.onsuccess = () => {
const cursor = request.result;
if (cursor) {
results.push(includeKeys ? cursor : cursor.value);
if (count && results.length >= count) {
done(results);
} else {
cursor.continue();
}
} else {
done(results);
}
};
});
}
async transaction(storeNames, type, callback) {
await this.open();
return await new Promise((resolve, reject) => {
const txn = this._db.transaction(storeNames, type);
txn.onabort = () => reject(txn.error);
txn.oncomplete = () => resolve();
callback(txn, (value) => resolve(value));
});
}
async _call(method, storeName, type, ...args) {
const callback = (txn, done) => {
const objStore = txn.objectStore(storeName);
const request = objStore[method].apply(objStore, args);
request.onsuccess = () => done(request.result);
};
return await this.transaction([storeName], type, callback);
}
close() {
if (this._db) {
this._db.close();
this._db = null;
}
}
}
DBWrapper.prototype.OPEN_TIMEOUT = 2000;
var methodsToWrap = {
readonly: ["get", "count", "getKey", "getAll", "getAllKeys"],
readwrite: ["add", "put", "clear", "delete"]
};
for (const [mode, methods] of Object.entries(methodsToWrap)) {
for (const method of methods) {
if (method in IDBObjectStore.prototype) {
DBWrapper.prototype[method] = async function(storeName, ...args) {
return await this._call(method, storeName, mode, ...args);
};
}
}
}
// node_modules/workbox-core/_private/deleteDatabase.js
var deleteDatabase = async (name) => {
await new Promise((resolve, reject) => {
const request = indexedDB.deleteDatabase(name);
request.onerror = () => {
reject(request.error);
};
request.onblocked = () => {
reject(new Error("Delete blocked"));
};
request.onsuccess = () => {
resolve();
};
});
};
// node_modules/workbox-core/_private/fetchWrapper.js
var wrappedFetch = async ({ request, fetchOptions, event, plugins = [] }) => {
if (typeof request === "string") {
request = new Request(request);
}
if (event instanceof FetchEvent && event.preloadResponse) {
const possiblePreloadResponse = await event.preloadResponse;
if (possiblePreloadResponse) {
if (true) {
logger.log(`Using a preloaded navigation response for ` + `'${getFriendlyURL(request.url)}'`);
}
return possiblePreloadResponse;
}
}
if (true) {
finalAssertExports.isInstance(request, Request, {
paramName: "request",
expectedClass: Request,
moduleName: "workbox-core",
className: "fetchWrapper",
funcName: "wrappedFetch"
});
}
const failedFetchPlugins = pluginUtils.filter(plugins, "fetchDidFail");
const originalRequest = failedFetchPlugins.length > 0 ? request.clone() : null;
try {
for (const plugin of plugins) {
if ("requestWillFetch" in plugin) {
const pluginMethod = plugin["requestWillFetch"];
const requestClone = request.clone();
request = await pluginMethod.call(plugin, {
request: requestClone,
event
});
if (true) {
if (request) {
finalAssertExports.isInstance(request, Request, {
moduleName: "Plugin",
funcName: "cachedResponseWillBeUsed",
isReturnValueProblem: true
});
}
}
}
}
} catch (err) {
throw new WorkboxError("plugin-error-request-will-fetch", {
thrownError: err
});
}
const pluginFilteredRequest = request.clone();
try {
let fetchResponse;
if (request.mode === "navigate") {
fetchResponse = await fetch(request);
} else {
fetchResponse = await fetch(request, fetchOptions);
}
if (true) {
logger.debug(`Network request for ` + `'${getFriendlyURL(request.url)}' returned a response with ` + `status '${fetchResponse.status}'.`);
}
for (const plugin of plugins) {
if ("fetchDidSucceed" in plugin) {
fetchResponse = await plugin["fetchDidSucceed"].call(plugin, {
event,
request: pluginFilteredRequest,
response: fetchResponse
});
if (true) {
if (fetchResponse) {
finalAssertExports.isInstance(fetchResponse, Response, {
moduleName: "Plugin",
funcName: "fetchDidSucceed",
isReturnValueProblem: true
});
}
}
}
}
return fetchResponse;
} catch (error) {
if (true) {
logger.error(`Network request for ` + `'${getFriendlyURL(request.url)}' threw an error.`, error);
}
for (const plugin of failedFetchPlugins) {
await plugin["fetchDidFail"].call(plugin, {
error,
event,
originalRequest: originalRequest.clone(),
request: pluginFilteredRequest.clone()
});
}
throw error;
}
};
var fetchWrapper = {
fetch: wrappedFetch
};
// node_modules/workbox-core/copyResponse.js
async function copyResponse(response, modifier) {
const clonedResponse = response.clone();
const responseInit = {
headers: new Headers(clonedResponse.headers),
status: clonedResponse.status,
statusText: clonedResponse.statusText
};
const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;
const body = canConstructResponseFromBodyStream() ? clonedResponse.body : await clonedResponse.blob();
return new Response(body, modifiedResponseInit);
}
// node_modules/workbox-core/clientsClaim.js
function clientsClaim() {
self.addEventListener("activate", () => self.clients.claim());
}
// node_modules/workbox-expiration/_version.js
try {
self["workbox:expiration:5.1.4"] && _();
} catch (e) {
}
// node_modules/workbox-expiration/models/CacheTimestampsModel.js
var DB_NAME = "workbox-expiration";
var OBJECT_STORE_NAME = "cache-entries";
var normalizeURL = (unNormalizedUrl) => {
const url = new URL(unNormalizedUrl, location.href);
url.hash = "";
return url.href;
};
class CacheTimestampsModel {
constructor(cacheName) {
this._cacheName = cacheName;
this._db = new DBWrapper(DB_NAME, 1, {
onupgradeneeded: (event) => this._handleUpgrade(event)
});
}
_handleUpgrade(event) {
const db = event.target.result;
const objStore = db.createObjectStore(OBJECT_STORE_NAME, { keyPath: "id" });
objStore.createIndex("cacheName", "cacheName", { unique: false });
objStore.createIndex("timestamp", "timestamp", { unique: false });
deleteDatabase(this._cacheName);
}
async setTimestamp(url, timestamp) {
url = normalizeURL(url);
const entry = {
url,
timestamp,
cacheName: this._cacheName,
id: this._getId(url)
};
await this._db.put(OBJECT_STORE_NAME, entry);
}
async getTimestamp(url) {
const entry = await this._db.get(OBJECT_STORE_NAME, this._getId(url));
return entry.timestamp;
}
async expireEntries(minTimestamp, maxCount) {
const entriesToDelete = await this._db.transaction(OBJECT_STORE_NAME, "readwrite", (txn, done) => {
const store = txn.objectStore(OBJECT_STORE_NAME);
const request = store.index("timestamp").openCursor(null, "prev");
const entriesToDelete2 = [];
let entriesNotDeletedCount = 0;
request.onsuccess = () => {
const cursor = request.result;
if (cursor) {
const result = cursor.value;
if (result.cacheName === this._cacheName) {
if (minTimestamp && result.timestamp < minTimestamp || maxCount && entriesNotDeletedCount >= maxCount) {
entriesToDelete2.push(cursor.value);
} else {
entriesNotDeletedCount++;
}
}
cursor.continue();
} else {
done(entriesToDelete2);
}
};
});
const urlsDeleted = [];
for (const entry of entriesToDelete) {
await this._db.delete(OBJECT_STORE_NAME, entry.id);
urlsDeleted.push(entry.url);
}
return urlsDeleted;
}
_getId(url) {
return this._cacheName + "|" + normalizeURL(url);
}
}
// node_modules/workbox-expiration/CacheExpiration.js
class CacheExpiration {
constructor(cacheName, config = {}) {
this._isRunning = false;
this._rerunRequested = false;
if (true) {
finalAssertExports.isType(cacheName, "string", {
moduleName: "workbox-expiration",
className: "CacheExpiration",
funcName: "constructor",
paramName: "cacheName"
});
if (!(config.maxEntries || config.maxAgeSeconds)) {
throw new WorkboxError("max-entries-or-age-required", {
moduleName: "workbox-expiration",
className: "CacheExpiration",
funcName: "constructor"
});
}
if (config.maxEntries) {
finalAssertExports.isType(config.maxEntries, "number", {
moduleName: "workbox-expiration",
className: "CacheExpiration",
funcName: "constructor",
paramName: "config.maxEntries"
});
}
if (config.maxAgeSeconds) {
finalAssertExports.isType(config.maxAgeSeconds, "number", {
moduleName: "workbox-expiration",
className: "CacheExpiration",
funcName: "constructor",
paramName: "config.maxAgeSeconds"
});
}
}
this._maxEntries = config.maxEntries;
this._maxAgeSeconds = config.maxAgeSeconds;
this._cacheName = cacheName;
this._timestampModel = new CacheTimestampsModel(cacheName);
}
async expireEntries() {
if (this._isRunning) {
this._rerunRequested = true;
return;
}
this._isRunning = true;
const minTimestamp = this._maxAgeSeconds ? Date.now() - this._maxAgeSeconds * 1000 : 0;
const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries);
const cache = await self.caches.open(this._cacheName);
for (const url of urlsExpired) {
await cache.delete(url);
}
if (true) {
if (urlsExpired.length > 0) {
logger.groupCollapsed(`Expired ${urlsExpired.length} ` + `${urlsExpired.length === 1 ? "entry" : "entries"} and removed ` + `${urlsExpired.length === 1 ? "it" : "them"} from the ` + `'${this._cacheName}' cache.`);
logger.log(`Expired the following ${urlsExpired.length === 1 ? "URL" : "URLs"}:`);
urlsExpired.forEach((url) => logger.log(` ${url}`));
logger.groupEnd();
} else {
logger.debug(`Cache expiration ran and found no entries to remove.`);
}
}
this._isRunning = false;
if (this._rerunRequested) {
this._rerunRequested = false;
dontWaitFor(this.expireEntries());
}
}
async updateTimestamp(url) {
if (true) {
finalAssertExports.isType(url, "string", {
moduleName: "workbox-expiration",
className: "CacheExpiration",
funcName: "updateTimestamp",
paramName: "url"
});
}
await this._timestampModel.setTimestamp(url, Date.now());
}
async isURLExpired(url) {
if (!this._maxAgeSeconds) {
if (true) {
throw new WorkboxError(`expired-test-without-max-age`, {
methodName: "isURLExpired",
paramName: "maxAgeSeconds"
});
}
return false;
} else {
const timestamp = await this._timestampModel.getTimestamp(url);
const expireOlderThan = Date.now() - this._maxAgeSeconds * 1000;
return timestamp < expireOlderThan;
}
}
async delete() {
this._rerunRequested = false;
await this._timestampModel.expireEntries(Infinity);
}
}
// node_modules/workbox-expiration/ExpirationPlugin.js
class ExpirationPlugin {
constructor(config = {}) {
this.cachedResponseWillBeUsed = async ({ event, request, cacheName, cachedResponse }) => {
if (!cachedResponse) {
return null;
}
const isFresh = this._isResponseDateFresh(cachedResponse);
const cacheExpiration = this._getCacheExpiration(cacheName);
dontWaitFor(cacheExpiration.expireEntries());
const updateTimestampDone = cacheExpiration.updateTimestamp(request.url);
if (event) {
try {
event.waitUntil(updateTimestampDone);
} catch (error) {
if (true) {
if ("request" in event) {
logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache entry for ` + `'${getFriendlyURL(event.request.url)}'.`);
}
}
}
}
return isFresh ? cachedResponse : null;
};
this.cacheDidUpdate = async ({ cacheName, request }) => {
if (true) {
finalAssertExports.isType(cacheName, "string", {
moduleName: "workbox-expiration",
className: "Plugin",
funcName: "cacheDidUpdate",
paramName: "cacheName"
});
finalAssertExports.isInstance(request, Request, {
moduleName: "workbox-expiration",
className: "Plugin",
funcName: "cacheDidUpdate",
paramName: "request"
});
}
const cacheExpiration = this._getCacheExpiration(cacheName);
await cacheExpiration.updateTimestamp(request.url);
await cacheExpiration.expireEntries();
};
if (true) {
if (!(config.maxEntries || config.maxAgeSeconds)) {
throw new WorkboxError("max-entries-or-age-required", {
moduleName: "workbox-expiration",
className: "Plugin",
funcName: "constructor"
});
}
if (config.maxEntries) {
finalAssertExports.isType(config.maxEntries, "number", {
moduleName: "workbox-expiration",
className: "Plugin",
funcName: "constructor",
paramName: "config.maxEntries"
});
}
if (config.maxAgeSeconds) {
finalAssertExports.isType(config.maxAgeSeconds, "number", {
moduleName: "workbox-expiration",
className: "Plugin",
funcName: "constructor",
paramName: "config.maxAgeSeconds"
});
}
}
this._config = config;
this._maxAgeSeconds = config.maxAgeSeconds;
this._cacheExpirations = new Map;
if (config.purgeOnQuotaError) {
registerQuotaErrorCallback(() => this.deleteCacheAndMetadata());
}
}
_getCacheExpiration(cacheName) {
if (cacheName === cacheNames.getRuntimeName()) {
throw new WorkboxError("expire-custom-caches-only");
}
let cacheExpiration = this._cacheExpirations.get(cacheName);
if (!cacheExpiration) {
cacheExpiration = new CacheExpiration(cacheName, this._config);
this._cacheExpirations.set(cacheName, cacheExpiration);
}
return cacheExpiration;
}
_isResponseDateFresh(cachedResponse) {
if (!this._maxAgeSeconds) {
return true;
}
const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse);
if (dateHeaderTimestamp === null) {
return true;
}
const now = Date.now();
return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1000;
}
_getDateHeaderTimestamp(cachedResponse) {
if (!cachedResponse.headers.has("date")) {
return null;
}
const dateHeader = cachedResponse.headers.get("date");
const parsedDate = new Date(dateHeader);
const headerTime = parsedDate.getTime();
if (isNaN(headerTime)) {
return null;
}
return headerTime;
}
async deleteCacheAndMetadata() {
for (const [cacheName, cacheExpiration] of this._cacheExpirations) {
await self.caches.delete(cacheName);
await cacheExpiration.delete();
}
this._cacheExpirations = new Map;
}
}
// node_modules/workbox-precaching/_version.js
try {
self["workbox:precaching:5.1.4"] && _();
} catch (e) {
}
// node_modules/workbox-precaching/utils/precachePlugins.js
var plugins = [];
var precachePlugins = {
get() {
return plugins;
},
add(newPlugins) {
plugins.push(...newPlugins);
}
};
// node_modules/workbox-precaching/utils/createCacheKey.js
function createCacheKey(entry) {
if (!entry) {
throw new WorkboxError("add-to-cache-list-unexpected-type", { entry });
}
if (typeof entry === "string") {
const urlObject = new URL(entry, location.href);
return {
cacheKey: urlObject.href,
url: urlObject.href
};
}
const { revision, url } = entry;
if (!url) {
throw new WorkboxError("add-to-cache-list-unexpected-type", { entry });
}
if (!revision) {
const urlObject = new URL(url, location.href);
return {
cacheKey: urlObject.href,
url: urlObject.href
};
}
const cacheKeyURL = new URL(url, location.href);
const originalURL = new URL(url, location.href);
cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);
return {
cacheKey: cacheKeyURL.href,
url: originalURL.href
};
}
var REVISION_SEARCH_PARAM = "__WB_REVISION__";
// node_modules/workbox-precaching/utils/printCleanupDetails.js
function printCleanupDetails(deletedURLs) {
const deletionCount = deletedURLs.length;
if (deletionCount > 0) {
logger.groupCollapsed(`During precaching cleanup, ` + `${deletionCount} cached ` + `request${deletionCount === 1 ? " was" : "s were"} deleted.`);
logGroup("Deleted Cache Requests", deletedURLs);
logger.groupEnd();
}
}
var logGroup = (groupTitle, deletedURLs) => {
logger.groupCollapsed(groupTitle);
for (const url of deletedURLs) {
logger.log(url);
}
logger.groupEnd();
};
// node_modules/workbox-precaching/utils/printInstallDetails.js
function _nestedGroup(groupTitle, urls) {
if (urls.length === 0) {
return;
}
logger.groupCollapsed(groupTitle);
for (const url of urls) {
logger.log(url);
}
logger.groupEnd();
}
function printInstallDetails(urlsToPrecache, urlsAlreadyPrecached) {
const precachedCount = urlsToPrecache.length;
const alreadyPrecachedCount = urlsAlreadyPrecached.length;
if (precachedCount || alreadyPrecachedCount) {
let message = `Precaching ${precachedCount} file${precachedCount === 1 ? "" : "s"}.`;
if (alreadyPrecachedCount > 0) {
message += ` ${alreadyPrecachedCount} ` + `file${alreadyPrecachedCount === 1 ? " is" : "s are"} already cached.`;
}
logger.groupCollapsed(message);
_nestedGroup(`View newly precached URLs.`, urlsToPrecache);
_nestedGroup(`View previously precached URLs.`, urlsAlreadyPrecached);
logger.groupEnd();
}
}
// node_modules/workbox-precaching/PrecacheController.js
class PrecacheController {
constructor(cacheName) {
this._cacheName = cacheNames.getPrecacheName(cacheName);
this._urlsToCacheKeys = new Map;
this._urlsToCacheModes = new Map;
this._cacheKeysToIntegrities = new Map;
}
addToCacheList(entries) {
if (true) {
finalAssertExports.isArray(entries, {
moduleName: "workbox-precaching",
className: "PrecacheController",
funcName: "addToCacheList",
paramName: "entries"
});
}
const urlsToWarnAbout = [];
for (const entry of entries) {
if (typeof entry === "string") {
urlsToWarnAbout.push(entry);
} else if (entry && entry.revision === undefined) {
urlsToWarnAbout.push(entry.url);
}
const { cacheKey, url } = createCacheKey(entry);
const cacheMode = typeof entry !== "string" && entry.revision ? "reload" : "default";
if (this._urlsToCacheKeys.has(url) && this._urlsToCacheKeys.get(url) !== cacheKey) {
throw new WorkboxError("add-to-cache-list-conflicting-entries", {
firstEntry: this._urlsToCacheKeys.get(url),
secondEntry: cacheKey
});
}
if (typeof entry !== "string" && entry.integrity) {
if (this._cacheKeysToIntegrities.has(cacheKey) && this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {
throw new WorkboxError("add-to-cache-list-conflicting-integrities", {
url
});
}
this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);
}
this._urlsToCacheKeys.set(url, cacheKey);
this._urlsToCacheModes.set(url, cacheMode);
if (urlsToWarnAbout.length > 0) {
const warningMessage = `Workbox is precaching URLs without revision ` + `info: ${urlsToWarnAbout.join(", ")}\nThis is generally NOT safe. ` + `Learn more at https://bit.ly/wb-precache`;
if (false) {
} else {
logger.warn(warningMessage);
}
}
}
}
async install({ event, plugins: plugins2 } = {}) {
if (true) {
if (plugins2) {
finalAssertExports.isArray(plugins2, {
moduleName: "workbox-precaching",
className: "PrecacheController",
funcName: "install",
paramName: "plugins"
});
}
}
const toBePrecached = [];
const alreadyPrecached = [];
const cache = await self.caches.open(this._cacheName);
const alreadyCachedRequests = await cache.keys();
const existingCacheKeys = new Set(alreadyCachedRequests.map((request) => request.url));
for (const [url, cacheKey] of this._urlsToCacheKeys) {
if (existingCacheKeys.has(cacheKey)) {
alreadyPrecached.push(url);
} else {
toBePrecached.push({ cacheKey, url });
}
}
const precacheRequests = toBePrecached.map(({ cacheKey, url }) => {
const integrity = this._cacheKeysToIntegrities.get(cacheKey);
const cacheMode = this._urlsToCacheModes.get(url);
return this._addURLToCache({
cacheKey,
cacheMode,
event,
integrity,
plugins: plugins2,
url
});
});
await Promise.all(precacheRequests);
const updatedURLs = toBePrecached.map((item) => item.url);
if (true) {
printInstallDetails(updatedURLs, alreadyPrecached);
}
return {
updatedURLs,
notUpdatedURLs: alreadyPrecached
};
}
async activate() {
const cache = await self.caches.open(this._cacheName);
const currentlyCachedRequests = await cache.keys();
const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());
const deletedURLs = [];
for (const request of currentlyCachedRequests) {
if (!expectedCacheKeys.has(request.url)) {
await cache.delete(request);
deletedURLs.push(request.url);
}
}
if (true) {
printCleanupDetails(deletedURLs);
}
return { deletedURLs };
}
async _addURLToCache({ cacheKey, url, cacheMode, event, plugins: plugins2, integrity }) {
const request = new Request(url, {
integrity,
cache: cacheMode,
credentials: "same-origin"
});
let response = await fetchWrapper.fetch({
event,
plugins: plugins2,
request
});
let cacheWillUpdatePlugin;
for (const plugin of plugins2 || []) {
if ("cacheWillUpdate" in plugin) {
cacheWillUpdatePlugin = plugin;
}
}
const isValidResponse = cacheWillUpdatePlugin ? await cacheWillUpdatePlugin.cacheWillUpdate({ event, request, response }) : response.status < 400;
if (!isValidResponse) {
throw new WorkboxError("bad-precaching-response", {
url,
status: response.status
});
}
if (response.redirected) {
response = await copyResponse(response);
}
await cacheWrapper.put({
event,
plugins: plugins2,
response,
request: cacheKey === url ? request : new Request(cacheKey),
cacheName: this._cacheName,
matchOptions: {
ignoreSearch: true
}
});
}
getURLsToCacheKeys() {
return this._urlsToCacheKeys;
}
getCachedURLs() {
return [...this._urlsToCacheKeys.keys()];
}
getCacheKeyForURL(url) {
const urlObject = new URL(url, location.href);
return this._urlsToCacheKeys.get(urlObject.href);
}
async matchPrecache(request) {
const url = request instanceof Request ? request.url : request;
const cacheKey = this.getCacheKeyForURL(url);
if (cacheKey) {
const cache = await self.caches.open(this._cacheName);
return cache.match(cacheKey);
}
return;
}
createHandler(fallbackToNetwork = true) {
return async ({ request }) => {
try {
const response = await this.matchPrecache(request);
if (response) {
return response;
}
throw new WorkboxError("missing-precache-entry", {
cacheName: this._cacheName,
url: request instanceof Request ? request.url : request
});
} catch (error) {
if (fallbackToNetwork) {
if (true) {
logger.debug(`Unable to respond with precached response. ` + `Falling back to network.`, error);
}
return fetch(request);
}
throw error;
}
};
}
createHandlerBoundToURL(url, fallbackToNetwork = true) {
const cacheKey = this.getCacheKeyForURL(url);
if (!cacheKey) {
throw new WorkboxError("non-precached-url", { url });
}
const handler = this.createHandler(fallbackToNetwork);
const request = new Request(url);
return () => handler({ request });
}
}
// node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js
var precacheController;
var getOrCreatePrecacheController = () => {
if (!precacheController) {
precacheController = new PrecacheController;
}
return precacheController;
};
// node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js
function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) {
for (const paramName of [...urlObject.searchParams.keys()]) {
if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) {
urlObject.searchParams.delete(paramName);
}
}
return urlObject;
}
// node_modules/workbox-precaching/utils/generateURLVariations.js
function* generateURLVariations(url, { ignoreURLParametersMatching, directoryIndex, cleanURLs, urlManipulation } = {}) {
const urlObject = new URL(url, location.href);
urlObject.hash = "";
yield urlObject.href;
const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);
yield urlWithoutIgnoredParams.href;
if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith("/")) {
const directoryURL = new URL(urlWithoutIgnoredParams.href);
directoryURL.pathname += directoryIndex;
yield directoryURL.href;
}
if (cleanURLs) {
const cleanURL = new URL(urlWithoutIgnoredParams.href);
cleanURL.pathname += ".html";
yield cleanURL.href;
}
if (urlManipulation) {
const additionalURLs = urlManipulation({ url: urlObject });
for (const urlToAttempt of additionalURLs) {
yield urlToAttempt.href;
}
}
}
// node_modules/workbox-precaching/utils/getCacheKeyForURL.js
var getCacheKeyForURL = (url, options) => {
const precacheController2 = getOrCreatePrecacheController();
const urlsToCacheKeys = precacheController2.getURLsToCacheKeys();
for (const possibleURL of generateURLVariations(url, options)) {
const possibleCacheKey = urlsToCacheKeys.get(possibleURL);
if (possibleCacheKey) {
return possibleCacheKey;
}
}
};
// node_modules/workbox-precaching/utils/addFetchListener.js
var addFetchListener = ({ ignoreURLParametersMatching = [/^utm_/], directoryIndex = "index.html", cleanURLs = true, urlManipulation } = {}) => {
const cacheName = cacheNames.getPrecacheName();
self.addEventListener("fetch", (event) => {
const precachedURL = getCacheKeyForURL(event.request.url, {
cleanURLs,
directoryIndex,
ignoreURLParametersMatching,
urlManipulation
});
if (!precachedURL) {
if (true) {
logger.debug(`Precaching did not find a match for ` + getFriendlyURL(event.request.url));
}
return;
}
let responsePromise = self.caches.open(cacheName).then((cache) => {
return cache.match(precachedURL);
}).then((cachedResponse) => {
if (cachedResponse) {
return cachedResponse;
}
if (true) {
logger.warn(`The precached response for ` + `${getFriendlyURL(precachedURL)} in ${cacheName} was not found. ` + `Falling back to the network instead.`);
}
return fetch(precachedURL);
});
if (true) {
responsePromise = responsePromise.then((response) => {
logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL(event.request.url));
logger.log(`Serving the precached url: ${precachedURL}`);
logger.groupCollapsed(`View request details here.`);
logger.log(event.request);
logger.groupEnd();
logger.groupCollapsed(`View response details here.`);
logger.log(response);
logger.groupEnd();
logger.groupEnd();
return response;
});
}
event.respondWith(responsePromise);
});
};
// node_modules/workbox-precaching/addRoute.js
function addRoute(options) {
if (!listenerAdded) {
addFetchListener(options);
listenerAdded = true;
}
}
var listenerAdded = false;
// node_modules/workbox-precaching/createHandlerBoundToURL.js
function createHandlerBoundToURL(url) {
const precacheController2 = getOrCreatePrecacheController();
return precacheController2.createHandlerBoundToURL(url);
}
// node_modules/workbox-precaching/precache.js
function precache(entries) {
const precacheController2 = getOrCreatePrecacheController();
precacheController2.addToCacheList(entries);
if (entries.length > 0) {
self.addEventListener("install", installListener);
self.addEventListener("activate", activateListener);
}
}
var installListener = (event) => {
const precacheController2 = getOrCreatePrecacheController();
const plugins2 = precachePlugins.get();
event.waitUntil(precacheController2.install({ event, plugins: plugins2 }).catch((error) => {
if (true) {
logger.error(`Service worker installation failed. It will ` + `be retried automatically during the next navigation.`);
}
throw error;
}));
};
var activateListener = (event) => {
const precacheController2 = getOrCreatePrecacheController();
event.waitUntil(precacheController2.activate());
};
// node_modules/workbox-precaching/precacheAndRoute.js
function precacheAndRoute(entries, options) {
precache(entries);
addRoute(options);
}
// node_modules/workbox-routing/_version.js
try {
self["workbox:routing:5.1.4"] && _();
} catch (e) {
}
// node_modules/workbox-routing/utils/constants.js
var defaultMethod = "GET";
var validMethods = [
"DELETE",
"GET",
"HEAD",
"PATCH",
"POST",
"PUT"
];
// node_modules/workbox-routing/utils/normalizeHandler.js
var normalizeHandler = (handler) => {
if (handler && typeof handler === "object") {
if (true) {
finalAssertExports.hasMethod(handler, "handle", {
moduleName: "workbox-routing",
className: "Route",
funcName: "constructor",
paramName: "handler"
});
}
return handler;
} else {
if (true) {
finalAssertExports.isType(handler, "function", {
moduleName: "workbox-routing",
className: "Route",
funcName: "constructor",
paramName: "handler"
});
}
return { handle: handler };
}
};
// node_modules/workbox-routing/Route.js
class Route {
constructor(match, handler, method = defaultMethod) {
if (true) {
finalAssertExports.isType(match, "function", {
moduleName: "workbox-routing",
className: "Route",
funcName: "constructor",
paramName: "match"
});
if (method) {
finalAssertExports.isOneOf(method, validMethods, { paramName: "method" });
}
}
this.handler = normalizeHandler(handler);
this.match = match;
this.method = method;
}
}
// node_modules/workbox-routing/RegExpRoute.js
class RegExpRoute extends Route {
constructor(regExp, handler, method) {
if (true) {
finalAssertExports.isInstance(regExp, RegExp, {
moduleName: "workbox-routing",
className: "RegExpRoute",
funcName: "constructor",
paramName: "pattern"
});
}
const match = ({ url }) => {
const result = regExp.exec(url.href);
if (!result) {
return;
}
if (url.origin !== location.origin && result.index !== 0) {
if (true) {
logger.debug(`The regular expression '${regExp}' only partially matched ` + `against the cross-origin URL '${url}'. RegExpRoute's will only ` + `handle cross-origin requests if they match the entire URL.`);
}
return;
}
return result.slice(1);
};
super(match, handler, method);
}
}
// node_modules/workbox-routing/Router.js
class Router {
constructor() {
this._routes = new Map;
}
get routes() {
return this._routes;
}
addFetchListener() {
self.addEventListener("fetch", (event) => {
const { request } = event;
const responsePromise = this.handleRequest({ request, event });
if (responsePromise) {
event.respondWith(responsePromise);
}
});
}
addCacheListener() {
self.addEventListener("message", (event) => {
if (event.data && event.data.type === "CACHE_URLS") {
const { payload } = event.data;
if (true) {
logger.debug(`Caching URLs from the window`, payload.urlsToCache);
}
const requestPromises = Promise.all(payload.urlsToCache.map((entry) => {
if (typeof entry === "string") {
entry = [entry];
}
const request = new Request(...entry);
return this.handleRequest({ request });
}));
event.waitUntil(requestPromises);
if (event.ports && event.ports[0]) {
requestPromises.then(() => event.ports[0].postMessage(true));
}
}
});
}
handleRequest({ request, event }) {
if (true) {
finalAssertExports.isInstance(request, Request, {
moduleName: "workbox-routing",
className: "Router",
funcName: "handleRequest",
paramName: "options.request"
});
}
const url = new URL(request.url, location.href);
if (!url.protocol.startsWith("http")) {
if (true) {
logger.debug(`Workbox Router only supports URLs that start with 'http'.`);
}
return;
}
const { params, route } = this.findMatchingRoute({ url, request, event });
let handler = route && route.handler;
const debugMessages = [];
if (true) {
if (handler) {
debugMessages.push([
`Found a route to handle this request:`,
route
]);
if (params) {
debugMessages.push([
`Passing the following params to the route's handler:`,
params
]);
}
}
}
if (!handler && this._defaultHandler) {
if (true) {
debugMessages.push(`Failed to find a matching route. Falling ` + `back to the default handler.`);
}
handler = this._defaultHandler;
}
if (!handler) {
if (true) {
logger.debug(`No route found for: ${getFriendlyURL(url)}`);
}
return;
}
if (true) {
logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);
debugMessages.forEach((msg) => {
if (Array.isArray(msg)) {
logger.log(...msg);
} else {
logger.log(msg);
}
});
logger.groupEnd();
}
let responsePromise;
try {
responsePromise = handler.handle({ url, request, event, params });
} catch (err) {
responsePromise = Promise.reject(err);
}
if (responsePromise instanceof Promise && this._catchHandler) {
responsePromise = responsePromise.catch((err) => {
if (true) {
logger.groupCollapsed(`Error thrown when responding to: ` + ` ${getFriendlyURL(url)}. Falling back to Catch Handler.`);
logger.error(`Error thrown by:`, route);
logger.error(err);
logger.groupEnd();
}
return this._catchHandler.handle({ url, request, event });
});
}
return responsePromise;
}
findMatchingRoute({ url, request, event }) {
if (true) {
finalAssertExports.isInstance(url, URL, {
moduleName: "workbox-routing",
className: "Router",
funcName: "findMatchingRoute",
paramName: "options.url"
});
finalAssertExports.isInstance(request, Request, {
moduleName: "workbox-routing",
className: "Router",
funcName: "findMatchingRoute",
paramName: "options.request"
});
}
const routes = this._routes.get(request.method) || [];
for (const route of routes) {
let params;
const matchResult = route.match({ url, request, event });
if (matchResult) {
params = matchResult;
if (Array.isArray(matchResult) && matchResult.length === 0) {
params = undefined;
} else if (matchResult.constructor === Object && Object.keys(matchResult).length === 0) {
params = undefined;
} else if (typeof matchResult === "boolean") {
params = undefined;
}
return { route, params };
}
}
return {};
}
setDefaultHandler(handler) {
this._defaultHandler = normalizeHandler(handler);
}
setCatchHandler(handler) {
this._catchHandler = normalizeHandler(handler);
}
registerRoute(route) {
if (true) {
finalAssertExports.isType(route, "object", {
moduleName: "workbox-routing",
className: "Router",
funcName: "registerRoute",
paramName: "route"
});
finalAssertExports.hasMethod(route, "match", {
moduleName: "workbox-routing",
className: "Router",
funcName: "registerRoute",
paramName: "route"
});
finalAssertExports.isType(route.handler, "object", {
moduleName: "workbox-routing",
className: "Router",
funcName: "registerRoute",
paramName: "route"
});
finalAssertExports.hasMethod(route.handler, "handle", {
moduleName: "workbox-routing",
className: "Router",
funcName: "registerRoute",
paramName: "route.handler"
});
finalAssertExports.isType(route.method, "string", {
moduleName: "workbox-routing",
className: "Router",
funcName: "registerRoute",
paramName: "route.method"
});
}
if (!this._routes.has(route.method)) {
this._routes.set(route.method, []);
}
this._routes.get(route.method).push(route);
}
unregisterRoute(route) {
if (!this._routes.has(route.method)) {
throw new WorkboxError("unregister-route-but-not-found-with-method", {
method: route.method
});
}
const routeIndex = this._routes.get(route.method).indexOf(route);
if (routeIndex > -1) {
this._routes.get(route.method).splice(routeIndex, 1);
} else {
throw new WorkboxError("unregister-route-route-not-registered");
}
}
}
// node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js
var defaultRouter;
var getOrCreateDefaultRouter = () => {
if (!defaultRouter) {
defaultRouter = new Router;
defaultRouter.addFetchListener();
defaultRouter.addCacheListener();
}
return defaultRouter;
};
// node_modules/workbox-routing/registerRoute.js
function registerRoute(capture, handler, method) {
let route;
if (typeof capture === "string") {
const captureUrl = new URL(capture, location.href);
if (true) {
if (!(capture.startsWith("/") || capture.startsWith("http"))) {
throw new WorkboxError("invalid-string", {
moduleName: "workbox-routing",
funcName: "registerRoute",
paramName: "capture"
});
}
const valueToCheck = capture.startsWith("http") ? captureUrl.pathname : capture;
const wildcards = "[*:?+]";
if (new RegExp(`${wildcards}`).exec(valueToCheck)) {
logger.debug(`The '\$capture' parameter contains an Express-style wildcard ` + `character (${wildcards}). Strings are now always interpreted as ` + `exact matches; use a RegExp for partial or wildcard matches.`);
}
}
const matchCallback = ({ url }) => {
if (true) {
if (url.pathname === captureUrl.pathname && url.origin !== captureUrl.origin) {
logger.debug(`${capture} only partially matches the cross-origin URL ` + `${url}. This route will only handle cross-origin requests ` + `if they match the entire URL.`);
}
}
return url.href === captureUrl.href;
};
route = new Route(matchCallback, handler, method);
} else if (capture instanceof RegExp) {
route = new RegExpRoute(capture, handler, method);
} else if (typeof capture === "function") {
route = new Route(capture, handler, method);
} else if (capture instanceof Route) {
route = capture;
} else {
throw new WorkboxError("unsupported-route-type", {
moduleName: "workbox-routing",
funcName: "registerRoute",
paramName: "capture"
});
}
const defaultRouter2 = getOrCreateDefaultRouter();
defaultRouter2.registerRoute(route);
return route;
}
// node_modules/workbox-strategies/_version.js
try {
self["workbox:strategies:5.1.4"] && _();
} catch (e) {
}
// node_modules/workbox-strategies/utils/messages.js
var messages3 = {
strategyStart: (strategyName, request) => `Using ${strategyName} to respond to '${getFriendlyURL(request.url)}'`,
printFinalResponse: (response) => {
if (response) {
logger.groupCollapsed(`View the final response here.`);
logger.log(response || "[No response returned]");
logger.groupEnd();
}
}
};
// node_modules/workbox-strategies/plugins/cacheOkAndOpaquePlugin.js
var cacheOkAndOpaquePlugin = {
cacheWillUpdate: async ({ response }) => {
if (response.status === 200 || response.status === 0) {
return response;
}
return null;
}
};
// node_modules/workbox-strategies/StaleWhileRevalidate.js
class StaleWhileRevalidate {
constructor(options = {}) {
this._cacheName = cacheNames.getRuntimeName(options.cacheName);
this._plugins = options.plugins || [];
if (options.plugins) {
const isUsingCacheWillUpdate = options.plugins.some((plugin) => !!plugin.cacheWillUpdate);
this._plugins = isUsingCacheWillUpdate ? options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];
} else {
this._plugins = [cacheOkAndOpaquePlugin];
}
this._fetchOptions = options.fetchOptions;
this._matchOptions = options.matchOptions;
}
async handle({ event, request }) {
const logs = [];
if (typeof request === "string") {
request = new Request(request);
}
if (true) {
finalAssertExports.isInstance(request, Request, {
moduleName: "workbox-strategies",
className: "StaleWhileRevalidate",
funcName: "handle",
paramName: "request"
});
}
const fetchAndCachePromise = this._getFromNetwork({ request, event });
let response = await cacheWrapper.match({
cacheName: this._cacheName,
request,
event,
matchOptions: this._matchOptions,
plugins: this._plugins
});
let error;
if (response) {
if (true) {
logs.push(`Found a cached response in the '${this._cacheName}'` + ` cache. Will update with the network response in the background.`);
}
if (event) {
try {
event.waitUntil(fetchAndCachePromise);
} catch (error2) {
if (true) {
logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache for '${getFriendlyURL(request.url)}'.`);
}
}
}
} else {
if (true) {
logs.push(`No response found in the '${this._cacheName}' cache. ` + `Will wait for the network response.`);
}
try {
response = await fetchAndCachePromise;
} catch (err) {
error = err;
}
}
if (true) {
logger.groupCollapsed(messages3.strategyStart("StaleWhileRevalidate", request));
for (const log of logs) {
logger.log(log);
}
messages3.printFinalResponse(response);
logger.groupEnd();
}
if (!response) {
throw new WorkboxError("no-response", { url: request.url, error });
}
return response;
}
async _getFromNetwork({ request, event }) {
const response = await fetchWrapper.fetch({
request,
event,
fetchOptions: this._fetchOptions,
plugins: this._plugins
});
const cachePutPromise = cacheWrapper.put({
cacheName: this._cacheName,
request,
response: response.clone(),
event,
plugins: this._plugins
});
if (event) {
try {
event.waitUntil(cachePutPromise);
} catch (error) {
if (true) {
logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache for '${getFriendlyURL(request.url)}'.`);
}
}
}
return response;
}
}
// src/service-worker.ts
clientsClaim();
precacheAndRoute(self.__WB_MANIFEST);
var fileExtensionRegexp = new RegExp("/[^/?]+\\.[^/]+$");
registerRoute(({ request, url }) => {
if (request.mode !== "navigate") {
return false;
}
if (url.pathname.startsWith("/_")) {
return false;
}
if (url.pathname.match(fileExtensionRegexp)) {
return false;
}
return true;
}, createHandlerBoundToURL(process.env.PUBLIC_URL + "/index.html"));
registerRoute(({ url }) => url.origin === self.location.origin && url.pathname.endsWith(".png"), new StaleWhileRevalidate({
cacheName: "images",
plugins: [
new ExpirationPlugin({ maxEntries: 50 })
]
}));
self.addEventListener("message", (event) => {
if (event.data && event.data.type === "SKIP_WAITING") {
self.skipWaiting();
}
});