UNPKG

@openziti/ziti-browzer-sw

Version:

Service Worker used as part of the OpenZiti browZer stack

316 lines (290 loc) 10.3 kB
define(['exports'], (function (exports) { 'use strict'; // @ts-ignore try { self['workbox:core:6.6.0'] && _(); } catch (e) { } /* Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ const fallback = (code, ...args) => { let msg = code; if (args.length > 0) { msg += ` :: ${JSON.stringify(args)}`; } return msg; }; const messageGenerator = fallback ; /* Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ /** * Workbox errors should be thrown with this class. * This allows use to ensure the type easily in tests, * helps developers identify errors from workbox * easily and allows use to optimise error * messages correctly. * * @private */ class WorkboxError extends Error { /** * * @param {string} errorCode The error code that * identifies this particular error. * @param {Object=} details Any relevant arguments * that will help developers identify issues should * be added as a key on the context object. */ constructor(errorCode, details) { const message = messageGenerator(errorCode, details); super(message); this.name = errorCode; this.details = details; } } /* Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ /** * A helper function that prevents a promise from being flagged as unused. * * @private **/ function dontWaitFor(promise) { // Effective no-op. void promise.then(() => { }); } /* Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ const logger = (null ); /* Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ const _cacheNameDetails = { googleAnalytics: 'googleAnalytics', precache: 'precache-v2', prefix: 'workbox', runtime: 'runtime', suffix: typeof registration !== 'undefined' ? registration.scope : '', }; const _createCacheName = (cacheName) => { return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix] .filter((value) => value && value.length > 0) .join('-'); }; const eachCacheNameDetail = (fn) => { for (const key of Object.keys(_cacheNameDetails)) { fn(key); } }; const 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; }, }; /* Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ const getFriendlyURL = (url) => { const urlObj = new URL(String(url), location.href); // See https://github.com/GoogleChrome/workbox/issues/2323 // We want to include everything, except for the origin if it's same-origin. return urlObj.href.replace(new RegExp(`^${location.origin}`), ''); }; /* Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ // Callbacks to be executed whenever there's a quota error. // Can't change Function type right now. // eslint-disable-next-line @typescript-eslint/ban-types const quotaErrorCallbacks = new Set(); /* Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ /** * Adds a function to the set of quotaErrorCallbacks that will be executed if * there's a quota error. * * @param {Function} callback * @memberof workbox-core */ // Can't change Function type // eslint-disable-next-line @typescript-eslint/ban-types function registerQuotaErrorCallback(callback) { quotaErrorCallbacks.add(callback); } /* Copyright 2020 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ function stripParams(fullURL, ignoreParams) { const strippedURL = new URL(fullURL); for (const param of ignoreParams) { strippedURL.searchParams.delete(param); } return strippedURL.href; } /** * Matches an item in the cache, ignoring specific URL params. This is similar * to the `ignoreSearch` option, but it allows you to ignore just specific * params (while continuing to match on the others). * * @private * @param {Cache} cache * @param {Request} request * @param {Object} matchOptions * @param {Array<string>} ignoreParams * @return {Promise<Response|undefined>} */ async function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) { const strippedRequestURL = stripParams(request.url, ignoreParams); // If the request doesn't include any ignored params, match as normal. if (request.url === strippedRequestURL) { return cache.match(request, matchOptions); } // Otherwise, match by comparing keys const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true }); const cacheKeys = await cache.keys(request, keysOptions); for (const cacheKey of cacheKeys) { const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams); if (strippedRequestURL === strippedCacheKeyURL) { return cache.match(cacheKey, matchOptions); } } return; } /* Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ /** * The Deferred class composes Promises in a way that allows for them to be * resolved or rejected from outside the constructor. In most cases promises * should be used directly, but Deferreds can be necessary when the logic to * resolve a promise must be separate. * * @private */ class Deferred { /** * Creates a promise and exposes its resolve and reject functions as methods. */ constructor() { this.promise = new Promise((resolve, reject) => { this.resolve = resolve; this.reject = reject; }); } } /* Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ /** * Runs all of the callback functions, one at a time sequentially, in the order * in which they were registered. * * @memberof workbox-core * @private */ async function executeQuotaErrorCallbacks() { for (const callback of quotaErrorCallbacks) { await callback(); } } /* Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ /** * Returns a promise that resolves and the passed number of milliseconds. * This utility is an async/await-friendly version of `setTimeout`. * * @param {number} ms * @return {Promise} * @private */ function timeout(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } /* Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ /** * Claim any currently available clients once the service worker * becomes active. This is normally used in conjunction with `skipWaiting()`. * * @memberof workbox-core */ function clientsClaim() { self.addEventListener('activate', () => self.clients.claim()); } exports.Deferred = Deferred; exports.WorkboxError = WorkboxError; exports.cacheMatchIgnoreParams = cacheMatchIgnoreParams; exports.cacheNames = cacheNames; exports.clientsClaim = clientsClaim; exports.dontWaitFor = dontWaitFor; exports.executeQuotaErrorCallbacks = executeQuotaErrorCallbacks; exports.getFriendlyURL = getFriendlyURL; exports.logger = logger; exports.registerQuotaErrorCallback = registerQuotaErrorCallback; exports.timeout = timeout; }));