diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/workbox-core/_private/checkSWFileCacheHeaders.mjs | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/workbox-core/_private/checkSWFileCacheHeaders.mjs')
| -rw-r--r-- | node_modules/workbox-core/_private/checkSWFileCacheHeaders.mjs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/node_modules/workbox-core/_private/checkSWFileCacheHeaders.mjs b/node_modules/workbox-core/_private/checkSWFileCacheHeaders.mjs new file mode 100644 index 00000000..7382ceed --- /dev/null +++ b/node_modules/workbox-core/_private/checkSWFileCacheHeaders.mjs @@ -0,0 +1,88 @@ +/* + 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. +*/ + +import {logger} from './logger.mjs'; +import '../_version.mjs'; + +/** + * Logs a warning to the user recommending changing + * to max-age=0 or no-cache. + * + * @param {string} cacheControlHeader + * + * @private + */ +function showWarning(cacheControlHeader) { + const docsUrl = 'https://developers.google.com/web/tools/workbox/guides/service-worker-checklist#cache-control_of_your_service_worker_file'; + logger.warn(`You are setting a 'cache-control' header of ` + + `'${cacheControlHeader}' on your service worker file. This should be ` + + `set to 'max-age=0' or 'no-cache' to ensure the latest service worker ` + + `is served to your users. Learn more here: ${docsUrl}` + ); +} + +/** + * Checks for cache-control header on SW file and + * warns the developer if it exists with a value + * other than max-age=0 or no-cache. + * + * @return {Promise} + * @private + */ +function checkSWFileCacheHeaders() { + // This is wrapped as an iife to allow async/await while making + // rollup exclude it in builds. + return (async () => { + try { + const swFile = self.location.href; + const response = await fetch(swFile); + if (!response.ok) { + // Response failed so nothing we can check; + return; + } + + if (!response.headers.has('cache-control')) { + // No cache control header. + return; + } + + const cacheControlHeader = response.headers.get('cache-control'); + const maxAgeResult = /max-age\s*=\s*(\d*)/g.exec(cacheControlHeader); + if (maxAgeResult) { + if (parseInt(maxAgeResult[1], 10) === 0) { + return; + } + } + + if (cacheControlHeader.indexOf('no-cache') !== -1) { + return; + } + + if (cacheControlHeader.indexOf('no-store') !== -1) { + return; + } + + showWarning(cacheControlHeader); + } catch (err) { + // NOOP + } + })(); +} + +const finalCheckSWFileCacheHeaders = + process.env.NODE_ENV === 'production' ? null : checkSWFileCacheHeaders; + +export {finalCheckSWFileCacheHeaders as checkSWFileCacheHeaders}; |
