diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2018-06-14 20:36:17 +0200 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2018-12-13 17:09:19 +0100 |
| commit | 76edc5bad88a2c97d79e689c5b20b8de8ca179ea (patch) | |
| tree | a5d9b17f78c9b31c99b2b7b9f46397a6bc357888 /dist/workbox-v3.2.0/workbox-precaching.dev.js | |
| parent | 2a8405769acd4f359d0a3f37423ddcaa7530b26e (diff) | |
| download | brokentalents-76edc5bad88a2c97d79e689c5b20b8de8ca179ea.tar.gz brokentalents-76edc5bad88a2c97d79e689c5b20b8de8ca179ea.zip | |
Remove PWA again
Diffstat (limited to 'dist/workbox-v3.2.0/workbox-precaching.dev.js')
| -rw-r--r-- | dist/workbox-v3.2.0/workbox-precaching.dev.js | 1154 |
1 files changed, 0 insertions, 1154 deletions
diff --git a/dist/workbox-v3.2.0/workbox-precaching.dev.js b/dist/workbox-v3.2.0/workbox-precaching.dev.js deleted file mode 100644 index c7f6ec2..0000000 --- a/dist/workbox-v3.2.0/workbox-precaching.dev.js +++ /dev/null @@ -1,1154 +0,0 @@ -this.workbox = this.workbox || {}; -this.workbox.precaching = (function (DBWrapper_mjs,logger_mjs,cacheNames_mjs,WorkboxError_mjs,fetchWrapper_mjs,cacheWrapper_mjs,assert_mjs,getFriendlyURL_mjs) { -'use strict'; - -try { - self.workbox.v['workbox:precaching:3.2.0'] = 1; -} catch (e) {} // eslint-disable-line - -/* - Copyright 2017 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * Used as a consistent way of referencing a URL to precache. - * - * @private - * @memberof module:workbox-precaching - */ -class PrecacheEntry { - /** - * This class ensures all cache list entries are consistent and - * adds cache busting if required. - * - * @param {*} originalInput - * @param {string} url - * @param {string} revision - * @param {boolean} shouldCacheBust - */ - constructor(originalInput, url, revision, shouldCacheBust) { - this._originalInput = originalInput; - this._entryId = url; - this._revision = revision; - const requestAsCacheKey = new Request(url, { credentials: 'same-origin' }); - this._cacheRequest = requestAsCacheKey; - this._networkRequest = shouldCacheBust ? this._cacheBustRequest(requestAsCacheKey) : requestAsCacheKey; - } - - /** - * This method will either use Request.cache option OR append a cache - * busting parameter to the URL. - * - * @param {Request} request The request to cache bust - * @return {Request} A cachebusted Request - * - * @private - */ - _cacheBustRequest(request) { - let url = request.url; - const requestOptions = { - credentials: 'same-origin' - }; - if ('cache' in Request.prototype) { - // Make use of the Request cache mode where we can. - // Reload skips the HTTP cache for outgoing requests and updates - // the cache with the returned response. - requestOptions.cache = 'reload'; - } else { - const parsedURL = new URL(url, location); - - // This is done so the minifier can mangle 'global.encodeURIComponent' - const _encodeURIComponent = encodeURIComponent; - - parsedURL.search += (parsedURL.search ? '&' : '') + _encodeURIComponent(`_workbox-cache-bust`) + '=' + _encodeURIComponent(this._revision); - url = parsedURL.toString(); - } - - return new Request(url, requestOptions); - } -} - -/* - Copyright 2017 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -// Allows minifier to mangle this name -const REVISON_IDB_FIELD = 'revision'; -const URL_IDB_FIELD = 'url'; -const DB_STORE_NAME = 'precached-details-models'; -/** - * This model will track the relevant information of entries that - * are cached and their matching revision details. - * - * @private - */ -class PrecachedDetailsModel { - /** - * Construct a new model for a specific cache. - * - * @param {string} dbName - * @private - */ - constructor(dbName) { - // This ensures the db name contains only letters, numbers, '-', '_' and '$' - const filteredDBName = dbName.replace(/[^\w-]/g, '_'); - this._db = new DBWrapper_mjs.DBWrapper(filteredDBName, 2, { - onupgradeneeded: this._handleUpgrade - }); - } - - /** - * Should perform an upgrade of indexedDB. - * - * @param {Event} evt - * - * @private - */ - _handleUpgrade(evt) { - const db = evt.target.result; - if (evt.oldVersion < 2) { - // IndexedDB version 1 used both 'workbox-precaching' and - // 'precached-details-model' before upgrading to version 2. - // Delete them and create a new store with latest schema. - if (db.objectStoreNames.contains('workbox-precaching')) { - db.deleteObjectStore('workbox-precaching'); - } - if (db.objectStoreNames.contains(DB_STORE_NAME)) { - db.deleteObjectStore(DB_STORE_NAME); - } - } - db.createObjectStore(DB_STORE_NAME); - } - - /** - * Check if an entry is already cached. Returns false if - * the entry isn't cached or the revision has changed. - * - * @param {string} cacheName - * @param {PrecacheEntry} precacheEntry - * @return {boolean} - * - * @private - */ - _isEntryCached(cacheName, precacheEntry) { - var _this = this; - - return babelHelpers.asyncToGenerator(function* () { - const revisionDetails = yield _this._getRevision(precacheEntry._entryId); - if (revisionDetails !== precacheEntry._revision) { - return false; - } - - const openCache = yield caches.open(cacheName); - const cachedResponse = yield openCache.match(precacheEntry._cacheRequest); - return !!cachedResponse; - })(); - } - - /** - * @return {Promise<Array>} - * - * @private - */ - _getAllEntries() { - var _this2 = this; - - return babelHelpers.asyncToGenerator(function* () { - return yield _this2._db.getAllMatching(DB_STORE_NAME, { - includeKeys: true - }); - })(); - } - - /** - * Get the current revision details. - * - * @param {Object} entryId - * @return {Promise<string|null>} - * - * @private - */ - _getRevision(entryId) { - var _this3 = this; - - return babelHelpers.asyncToGenerator(function* () { - const data = yield _this3._db.get(DB_STORE_NAME, entryId); - return data ? data[REVISON_IDB_FIELD] : null; - })(); - } - - /** - * Add an entry to the details model. - * - * @param {PrecacheEntry} precacheEntry - * - * @private - */ - _addEntry(precacheEntry) { - var _this4 = this; - - return babelHelpers.asyncToGenerator(function* () { - yield _this4._db.put(DB_STORE_NAME, { - [REVISON_IDB_FIELD]: precacheEntry._revision, - [URL_IDB_FIELD]: precacheEntry._cacheRequest.url - }, precacheEntry._entryId); - })(); - } - - /** - * Delete entry from details model. - * - * @param {string} entryId - * - * @private - */ - _deleteEntry(entryId) { - var _this5 = this; - - return babelHelpers.asyncToGenerator(function* () { - yield _this5._db.delete(DB_STORE_NAME, entryId); - })(); - } -} - -/* - Copyright 2017 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * This method will print out a warning if a precache entry doesn't have - * a `revision` value. - * - * This is common if the asset if revisioned in the url like `index.1234.css`. - * - * @param {Map} entriesMap - * - * @private - * @memberof module:workbox-preaching - */ -var showWarningsIfNeeded = (entriesMap => { - const urlOnlyEntries = []; - entriesMap.forEach(entry => { - if (typeof entry === 'string' || !entry._originalInput.revision) { - urlOnlyEntries.push(entry._originalInput); - } - }); - - if (urlOnlyEntries.length === 0) { - // No warnings needed. - return; - } - - logger_mjs.logger.groupCollapsed('Are your precached assets revisioned?'); - - const urlsList = urlOnlyEntries.map(urlOnlyEntry => { - return ` - ${JSON.stringify(urlOnlyEntry)}`; - }).join(`\n`); - - logger_mjs.logger.warn(`The following precache entries might not be revisioned:` + `\n\n` + urlsList + `\n\n`); - - logger_mjs.logger.unprefixed.warn(`You can learn more about why this might be a ` + `problem here: https://developers.google.com/web/tools/workbox/modules/workbox-precaching`); - - logger_mjs.logger.groupEnd(); -}); - -/* - Copyright 2017 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @param {string} groupTitle - * @param {Array<PrecacheEntry>} entries - * - * @private - */ -const _nestedGroup = (groupTitle, entries) => { - if (entries.length === 0) { - return; - } - - logger_mjs.logger.groupCollapsed(groupTitle); - - entries.forEach(entry => { - logger_mjs.logger.log(entry._originalInput); - }); - - logger_mjs.logger.groupEnd(); -}; - -/** - * @param {Array<Object>} entriesToPrecache - * @param {Array<Object>} alreadyPrecachedEntries - * - * @private - * @memberof module:workbox-precachig - */ -var printInstallDetails = ((entriesToPrecache, alreadyPrecachedEntries) => { - // Goal is to print the message: - // Precaching X files. - // Or: - // Precaching X files. Y files were cached and up-to-date. - - const precachedCount = entriesToPrecache.length; - const alreadyPrecachedCount = alreadyPrecachedEntries.length; - let printText = `Precaching ${precachedCount} file${precachedCount === 1 ? '' : 's'}.`; - if (alreadyPrecachedCount > 0) { - printText += ` ${alreadyPrecachedCount} ` + `file${alreadyPrecachedCount === 1 ? ' is' : 's are'} already cached.`; - } - - logger_mjs.logger.groupCollapsed(printText); - - _nestedGroup(`View precached URLs.`, entriesToPrecache); - _nestedGroup(`View URLs that were already precached.`, alreadyPrecachedEntries); - logger_mjs.logger.groupEnd(); -}); - -/* - Copyright 2017 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -const logGroup = (groupTitle, urls) => { - logger_mjs.logger.groupCollapsed(groupTitle); - - urls.forEach(url => { - logger_mjs.logger.log(url); - }); - - logger_mjs.logger.groupEnd(); -}; - -/** - * @param {Array<string>} deletedCacheRequests - * @param {Array<string>} deletedRevisionDetails - * - * @private - * @memberof module:workbox-precachig - */ -var printCleanupDetails = ((deletedCacheRequests, deletedRevisionDetails) => { - if (deletedCacheRequests.length === 0 && deletedRevisionDetails.length === 0) { - return; - } - - const cacheDeleteCount = deletedCacheRequests.length; - const revisionDeleteCount = deletedRevisionDetails.length; - - const cacheDeleteText = `${cacheDeleteCount} cached ` + `request${cacheDeleteCount === 1 ? ' was' : 's were'} deleted`; - const revisionDeleteText = `${revisionDeleteCount} ` + `${revisionDeleteCount === 1 ? 'entry' : 'entries'} ` + `${revisionDeleteCount === 1 ? 'was' : 'were'} deleted from IndexedDB.`; - - logger_mjs.logger.groupCollapsed(`During precaching cleanup, ${cacheDeleteText} and ${revisionDeleteText}`); - - logGroup('Deleted Cache Requests', deletedCacheRequests); - logGroup('Revision Details Deleted from DB', deletedRevisionDetails); - - logger_mjs.logger.groupEnd(); -}); - -/* - Copyright 2017 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @param {Response} response - * @return {Response} - * - * @private - * @memberof module:workbox-precachig - */ -const cleanRedirect = (() => { - var _ref = babelHelpers.asyncToGenerator(function* (response) { - const clonedResponse = response.clone(); - - // Not all browsers support the Response.body stream, so fall back - // to reading the entire body into memory as a blob. - const bodyPromise = 'body' in clonedResponse ? Promise.resolve(clonedResponse.body) : clonedResponse.blob(); - - const body = yield bodyPromise; - - // new Response() is happy when passed either a stream or a Blob. - return new Response(body, ['headers', 'status', 'statusText'].map(function (key) { - return clonedResponse[key]; - })); - }); - - return function cleanRedirect(_x) { - return _ref.apply(this, arguments); - }; -})(); - -/* - Copyright 2017 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * Performs efficient precaching of assets. - * - * @memberof workbox.precaching - */ -class PrecacheController { - /** - * Create a new PrecacheController. - * - * @param {string} cacheName - */ - constructor(cacheName) { - this._cacheName = cacheNames_mjs.cacheNames.getPrecacheName(cacheName); - this._entriesToCacheMap = new Map(); - this._precacheDetailsModel = new PrecachedDetailsModel(this._cacheName); - } - - /** - * This method will add items to the precache list, removing duplicates - * and ensuring the information is valid. - * - * @param { - * Array<module:workbox-precaching.PrecacheController.PrecacheEntry|string> - * } entries Array of entries to - * precache. - */ - addToCacheList(entries) { - { - assert_mjs.assert.isArray(entries, { - moduleName: 'workbox-precaching', - className: 'PrecacheController', - funcName: 'addToCacheList', - paramName: 'entries' - }); - } - - entries.map(userEntry => { - this._addEntryToCacheList(this._parseEntry(userEntry)); - }); - } - - /** - * This method returns a precache entry. - * - * @private - * @param {string|Object} input - * @return {PrecacheEntry} - */ - _parseEntry(input) { - switch (typeof input) { - case 'string': - { - { - if (input.length === 0) { - throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-unexpected-type', { - entry: input - }); - } - } - - return new PrecacheEntry(input, input, input); - } - case 'object': - { - { - if (!input || !input.url) { - throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-unexpected-type', { - entry: input - }); - } - } - - return new PrecacheEntry(input, input.url, input.revision || input.url, !!input.revision); - } - default: - throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-unexpected-type', { - entry: input - }); - } - } - - /** - * Adds an entry to the precache list, accounting for possible duplicates. - * - * @private - * @param {PrecacheEntry} entryToAdd - */ - _addEntryToCacheList(entryToAdd) { - // Check if the entry is already part of the map - const existingEntry = this._entriesToCacheMap.get(entryToAdd._entryId); - if (!existingEntry) { - this._entriesToCacheMap.set(entryToAdd._entryId, entryToAdd); - return; - } - - // Duplicates are fine, but make sure the revision information - // is the same. - if (existingEntry._revision !== entryToAdd._revision) { - throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-conflicting-entries', { - firstEntry: existingEntry._originalInput, - secondEntry: entryToAdd._originalInput - }); - } - } - - /** - * Call this method from a service work install event to start - * precaching assets. - * - * @param {Object} options - * @param {boolean} options.suppressWarnings Suppress warning messages. - * @param {Array<Object>} options.plugins Plugins to be used for fetching - * and caching during install. - * @return { - * Promise<workbox.precaching.InstallResult>} - */ - install(options = {}) { - var _this = this; - - return babelHelpers.asyncToGenerator(function* () { - { - if (options.suppressWarnings !== true) { - showWarningsIfNeeded(_this._entriesToCacheMap); - } - - if (options.plugins) { - assert_mjs.assert.isArray(options.plugins, { - moduleName: 'workbox-precaching', - className: 'PrecacheController', - funcName: 'install', - paramName: 'plugins' - }); - } - } - - // Empty the temporary cache. - // NOTE: We remove all entries instead of deleting the cache as the cache - // may be marked for deletion but still exist until a later stage - // resulting in unexpected behavior of being deletect when all references - // are dropped. - // https://github.com/GoogleChrome/workbox/issues/1368 - const tempCache = yield caches.open(_this._getTempCacheName()); - const requests = yield tempCache.keys(); - yield Promise.all(requests.map(function (request) { - return tempCache.delete(request); - })); - - const entriesToPrecache = []; - const entriesAlreadyPrecached = []; - - for (const precacheEntry of _this._entriesToCacheMap.values()) { - if (yield _this._precacheDetailsModel._isEntryCached(_this._cacheName, precacheEntry)) { - entriesAlreadyPrecached.push(precacheEntry); - } else { - entriesToPrecache.push(precacheEntry); - } - } - - // Wait for all requests to be cached. - yield Promise.all(entriesToPrecache.map(function (precacheEntry) { - return _this._cacheEntryInTemp(precacheEntry, options.plugins); - })); - - { - printInstallDetails(entriesToPrecache, entriesAlreadyPrecached); - } - - return { - updatedEntries: entriesToPrecache, - notUpdatedEntries: entriesAlreadyPrecached - }; - })(); - } - - /** - * Takes the current set of temporary files and moves them to the final - * cache, deleting the temporary cache once copying is complete. - * - * @param {Object} options - * @param {Array<Object>} options.plugins Plugins to be used for fetching - * and caching during install. - * @return { - * Promise<workbox.precaching.CleanupResult>} - * Resolves with an object containing details of the deleted cache requests - * and precache revision details. - */ - activate(options = {}) { - var _this2 = this; - - return babelHelpers.asyncToGenerator(function* () { - const tempCache = yield caches.open(_this2._getTempCacheName()); - - const requests = yield tempCache.keys(); - yield Promise.all(requests.map((() => { - var _ref = babelHelpers.asyncToGenerator(function* (request) { - const response = yield tempCache.match(request); - yield cacheWrapper_mjs.cacheWrapper.put(_this2._cacheName, request, response, options.plugins); - yield tempCache.delete(request); - }); - - return function (_x) { - return _ref.apply(this, arguments); - }; - })())); - - return _this2._cleanup(); - })(); - } - - /** - * Returns the name of the temporary cache. - * - * @return {string} - * - * @private - */ - _getTempCacheName() { - return `${this._cacheName}-temp`; - } - - /** - * Requests the entry and saves it to the cache if the response - * is valid. - * - * @private - * @param {BaseCacheEntry} precacheEntry The entry to fetch and cache. - * @param {Array<Object>} plugins Array of plugins to apply to fetch and - * caching. - * @return {Promise<boolean>} Returns a promise that resolves once the entry - * has been fetched and cached or skipped if no update is needed. The - * promise resolves with true if the entry was cached / updated and - * false if the entry is already cached and up-to-date. - */ - _cacheEntryInTemp(precacheEntry, plugins) { - var _this3 = this; - - return babelHelpers.asyncToGenerator(function* () { - let response = yield fetchWrapper_mjs.fetchWrapper.fetch(precacheEntry._networkRequest, null, plugins); - - if (response.redirected) { - response = yield cleanRedirect(response); - } - - yield cacheWrapper_mjs.cacheWrapper.put(_this3._getTempCacheName(), precacheEntry._cacheRequest, response, plugins); - - yield _this3._precacheDetailsModel._addEntry(precacheEntry); - - return true; - })(); - } - - /** - * Compare the URLs and determines which assets are no longer required - * in the cache. - * - * This should be called in the service worker activate event. - * - * @return { - * Promise<workbox.precaching.CleanupResult>} - * Resolves with an object containing details of the deleted cache requests - * and precache revision details. - * - * @private - */ - _cleanup() { - var _this4 = this; - - return babelHelpers.asyncToGenerator(function* () { - const expectedCacheUrls = []; - _this4._entriesToCacheMap.forEach(function (entry) { - const fullUrl = new URL(entry._cacheRequest.url, location).toString(); - expectedCacheUrls.push(fullUrl); - }); - - const [deletedCacheRequests, deletedRevisionDetails] = yield Promise.all([_this4._cleanupCache(expectedCacheUrls), _this4._cleanupDetailsModel(expectedCacheUrls)]); - - { - printCleanupDetails(deletedCacheRequests, deletedRevisionDetails); - } - - return { - deletedCacheRequests, - deletedRevisionDetails - }; - })(); - } - - /** - * Goes through all the cache entries and removes any that are - * outdated. - * - * @private - * @param {Array<string>} expectedCacheUrls Array of URLs that are - * expected to be cached. - * @return {Promise<Array<string>>} Resolves to an array of URLs - * of cached requests that were deleted. - */ - _cleanupCache(expectedCacheUrls) { - var _this5 = this; - - return babelHelpers.asyncToGenerator(function* () { - if (!(yield caches.has(_this5._cacheName))) { - // Cache doesn't exist, so nothing to delete - return []; - } - - const cache = yield caches.open(_this5._cacheName); - const cachedRequests = yield cache.keys(); - const cachedRequestsToDelete = cachedRequests.filter(function (cachedRequest) { - return !expectedCacheUrls.includes(new URL(cachedRequest.url, location).toString()); - }); - - yield Promise.all(cachedRequestsToDelete.map(function (cacheUrl) { - return cache.delete(cacheUrl); - })); - - return cachedRequestsToDelete.map(function (request) { - return request.url; - }); - })(); - } - - /** - * Goes through all entries in indexedDB and removes any that are outdated. - * - * @private - * @param {Array<string>} expectedCacheUrls Array of URLs that are - * expected to be cached. - * @return {Promise<Array<string>>} Resolves to an array of URLs removed - * from indexedDB. - */ - _cleanupDetailsModel(expectedCacheUrls) { - var _this6 = this; - - return babelHelpers.asyncToGenerator(function* () { - const revisionedEntries = yield _this6._precacheDetailsModel._getAllEntries(); - const detailsToDelete = revisionedEntries.filter(function (entry) { - const fullUrl = new URL(entry.value.url, location).toString(); - return !expectedCacheUrls.includes(fullUrl); - }); - - yield Promise.all(detailsToDelete.map(function (entry) { - return _this6._precacheDetailsModel._deleteEntry(entry.primaryKey); - })); - return detailsToDelete.map(function (entry) { - return entry.value.url; - }); - })(); - } - - /** - * Returns an array of fully qualified URL's that will be precached. - * - * @return {Array<string>} An array of URLs. - */ - getCachedUrls() { - return Array.from(this._entriesToCacheMap.keys()).map(url => new URL(url, location).href); - } -} - -/* - Copyright 2017 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - -var publicAPI = Object.freeze({ - PrecacheController: PrecacheController -}); - -/* - Copyright 2017 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -{ - assert_mjs.assert.isSwEnv('workbox-precaching'); -} - -let installActivateListenersAdded = false; -let fetchListenersAdded = false; -let suppressWarnings = false; -let plugins = []; - -const cacheName = cacheNames_mjs.cacheNames.getPrecacheName(); -const precacheController = new PrecacheController(cacheName); - -const _removeIgnoreUrlParams = (origUrlObject, ignoreUrlParametersMatching) => { - // Exclude initial '?' - const searchString = origUrlObject.search.slice(1); - - // Split into an array of 'key=value' strings - const keyValueStrings = searchString.split('&'); - const keyValuePairs = keyValueStrings.map(keyValueString => { - // Split each 'key=value' string into a [key, value] array - return keyValueString.split('='); - }); - const filteredKeyValuesPairs = keyValuePairs.filter(keyValuePair => { - return ignoreUrlParametersMatching.every(ignoredRegex => { - // Return true iff the key doesn't match any of the regexes. - return !ignoredRegex.test(keyValuePair[0]); - }); - }); - const filteredStrings = filteredKeyValuesPairs.map(keyValuePair => { - // Join each [key, value] array into a 'key=value' string - return keyValuePair.join('='); - }); - - // Join the array of 'key=value' strings into a string with '&' in - // between each - const urlClone = new URL(origUrlObject); - urlClone.search = filteredStrings.join('&'); - return urlClone; -}; - -/** - * This function will take the request URL and manipulate it based on the - * configuration options. - * - * @param {string} url - * @param {Object} options - * @return {string|null} Returns the URL in the cache that matches the request - * if available, other null. - * - * @private - */ -const _getPrecachedUrl = (url, { - ignoreUrlParametersMatching = [/^utm_/], - directoryIndex = 'index.html', - cleanUrls = true, - urlManipulation = null -} = {}) => { - const urlObject = new URL(url, location); - - // Change '/some-url#123' => '/some-url' - urlObject.hash = ''; - - const urlWithoutIgnoredParams = _removeIgnoreUrlParams(urlObject, ignoreUrlParametersMatching); - - let urlsToAttempt = [ - // Test the URL that was fetched - urlObject, - // Test the URL without search params - urlWithoutIgnoredParams]; - - // Test the URL with a directory index - if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) { - const directoryUrl = new URL(urlWithoutIgnoredParams); - directoryUrl.pathname += directoryIndex; - urlsToAttempt.push(directoryUrl); - } - - // Test the URL with a '.html' extension - if (cleanUrls) { - const cleanUrl = new URL(urlWithoutIgnoredParams); - cleanUrl.pathname += '.html'; - urlsToAttempt.push(cleanUrl); - } - - if (urlManipulation) { - const additionalUrls = urlManipulation({ url: urlObject }); - urlsToAttempt = urlsToAttempt.concat(additionalUrls); - } - - const cachedUrls = precacheController.getCachedUrls(); - for (const possibleUrl of urlsToAttempt) { - if (cachedUrls.indexOf(possibleUrl.href) !== -1) { - // It's a perfect match - { - logger_mjs.logger.debug(`Precaching found a match for ` + getFriendlyURL_mjs.getFriendlyURL(possibleUrl.toString())); - } - return possibleUrl.href; - } - } - - return null; -}; - -const moduleExports = {}; - -/** - * Add items to the precache list, removing any duplicates and - * store the files in the - * ["precache cache"]{@link module:workbox-core.cacheNames} when the service - * worker installs. - * - * This method can be called multiple times. - * - * Please note: This method **will not** serve any of the cached files for you, - * it only precaches files. To respond to a network request you call - * [addRoute()]{@link module:workbox-precaching.addRoute}. - * - * If you have a single array of files to precache, you can just call - * [precacheAndRoute()]{@link module:workbox-precaching.precacheAndRoute}. - * - * @param {Array<Object|string>} entries Array of entries to precache. - * - * @alias workbox.precaching.precache - */ -moduleExports.precache = entries => { - precacheController.addToCacheList(entries); - - if (installActivateListenersAdded || entries.length <= 0) { - return; - } - - installActivateListenersAdded = true; - self.addEventListener('install', event => { - event.waitUntil(precacheController.install({ - suppressWarnings, - plugins - })); - }); - self.addEventListener('activate', event => { - event.waitUntil(precacheController.activate({ - plugins - })); - }); -}; - -/** - * Add a `fetch` listener to the service worker that will - * respond to - * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests} - * with precached assets. - * - * Requests for assets that aren't precached, the `FetchEvent` will not be - * responded to, allowing the event to fall through to other `fetch` event - * listeners. - * - * @param {Object} options - * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will - * check cache entries for a URLs ending with '/' to see if there is a hit when - * appending the `directoryIndex` value. - * @param {Array<RegExp>} [options.ignoreUrlParametersMatching=[/^utm_/]] An - * array of regex's to remove search params when looking for a cache match. - * @param {boolean} [options.cleanUrls=true] The `cleanUrls` option will - * check the cache for the URL with a `.html` added to the end of the end. - * @param {workbox.precaching~urlManipulation} [options.urlManipulation] - * This is a function that should take a URL and return an array of - * alternative URL's that should be checked for precache matches. - * - * @alias workbox.precaching.addRoute - */ -moduleExports.addRoute = options => { - if (fetchListenersAdded) { - // TODO: Throw error here. - return; - } - - fetchListenersAdded = true; - self.addEventListener('fetch', event => { - const precachedUrl = _getPrecachedUrl(event.request.url, options); - if (!precachedUrl) { - { - logger_mjs.logger.debug(`Precaching found no match for ` + getFriendlyURL_mjs.getFriendlyURL(event.request.url)); - } - return; - } - - let responsePromise = caches.open(cacheName).then(cache => { - return cache.match(precachedUrl); - }).then(cachedResponse => { - if (cachedResponse) { - return cachedResponse; - } - - // Fall back to the network if we don't have a cached response (perhaps - // due to manual cache cleanup). - { - logger_mjs.logger.debug(`The precached response for ` + `${getFriendlyURL_mjs.getFriendlyURL(precachedUrl)} in ${cacheName} was not found. ` + `Falling back to the network instead.`); - } - - return fetch(precachedUrl); - }); - - { - responsePromise = responsePromise.then(response => { - // Workbox is going to handle the route. - // print the routing details to the console. - logger_mjs.logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL_mjs.getFriendlyURL(event.request.url)); - logger_mjs.logger.log(`Serving the precached url: ${precachedUrl}`); - - // The Request and Response objects contains a great deal of - // information, hide it under a group in case developers want to see it. - logger_mjs.logger.groupCollapsed(`View request details here.`); - logger_mjs.logger.unprefixed.log(event.request); - logger_mjs.logger.groupEnd(); - - logger_mjs.logger.groupCollapsed(`View response details here.`); - logger_mjs.logger.unprefixed.log(response); - logger_mjs.logger.groupEnd(); - - logger_mjs.logger.groupEnd(); - return response; - }); - } - event.respondWith(responsePromise); - }); -}; - -/** - * This method will add entries to the precache list and add a route to - * respond to fetch events. - * - * This is a convenience method that will call - * [precache()]{@link module:workbox-precaching.precache} and - * [addRoute()]{@link module:workbox-precaching.addRoute} in a single call. - * - * @param {Array<Object|string>} entries Array of entries to precache. - * @param {Object} options See - * [addRoute() options]{@link module:workbox-precaching.addRoute}. - * - * @alias workbox.precaching.precacheAndRoute - */ -moduleExports.precacheAndRoute = (entries, options) => { - moduleExports.precache(entries); - moduleExports.addRoute(options); -}; - -/** - * Warnings will be logged if any of the precached assets are entered without - * a `revision` property. This is extremely dangerous if the URL's aren't - * revisioned. However, the warnings can be supressed with this method. - * - * @param {boolean} suppress - * - * @alias workbox.precaching.suppressWarnings - */ -moduleExports.suppressWarnings = suppress => { - suppressWarnings = suppress; -}; - -/** - * Add plugins to precaching. - * - * @param {Array<Object>} newPlugins - * - * @alias workbox.precaching.addPlugins - */ -moduleExports.addPlugins = newPlugins => { - plugins = plugins.concat(newPlugins); -}; - -/* - Copyright 2017 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -const finalExport = Object.assign(moduleExports, publicAPI); - -return finalExport; - -}(workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private)); - -//# sourceMappingURL=workbox-precaching.dev.js.map |
