You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.8 KiB
101 lines
3.8 KiB
"use strict"; |
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); |
|
|
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); |
|
|
|
/* |
|
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 path = require('path'); |
|
|
|
const cdnUtils = require('../lib/cdn-utils'); |
|
|
|
const checkForDeprecatedOptions = require('../lib/check-for-deprecated-options'); |
|
|
|
const copyWorkboxLibraries = require('../lib/copy-workbox-libraries'); |
|
|
|
const generateSWSchema = require('./options/generate-sw-schema'); |
|
|
|
const getFileManifestEntries = require('../lib/get-file-manifest-entries'); |
|
|
|
const validate = require('./options/validate'); |
|
|
|
const writeServiceWorkerUsingDefaultTemplate = require('../lib/write-sw-using-default-template'); |
|
/** |
|
* This method creates a list of URLs to precache, referred to as a "precache |
|
* manifest", based on the options you provide. |
|
* |
|
* It also takes in additional options that configures the service worker's |
|
* behavior, like any `runtimeCaching` rules it should use. |
|
* |
|
* Based on the precache manifest and the additional configuration, it writes |
|
* a ready-to-use service worker file to disk at `swDest`. |
|
* |
|
* @param {Object} config Please refer to the |
|
* [configuration guide](https://developers.google.com/web/tools/workbox/modules/workbox-build#full_generatesw_config). |
|
* @return {Promise<{count: number, size: number, warnings: Array<string>}>} |
|
* A promise that resolves once the service worker file has been written to |
|
* `swDest`. The `size` property contains the aggregate size of all the |
|
* precached entries, in bytes, and the `count` property contains the total |
|
* number of precached entries. Any non-fatal warning messages will be returned |
|
* via `warnings`. |
|
* |
|
* @memberof module:workbox-build |
|
*/ |
|
|
|
|
|
function generateSW(_x) { |
|
return _generateSW.apply(this, arguments); |
|
} |
|
|
|
function _generateSW() { |
|
_generateSW = (0, _asyncToGenerator2.default)(function* (config) { |
|
// This check needs to be done before validation, since the deprecated options |
|
// will be renamed. |
|
const deprecationWarnings = checkForDeprecatedOptions(config); |
|
const options = validate(config, generateSWSchema); |
|
const destDirectory = path.dirname(options.swDest); // Do nothing if importWorkboxFrom is set to 'disabled'. Otherwise, check: |
|
|
|
if (options.importWorkboxFrom === 'cdn') { |
|
const cdnURL = cdnUtils.getModuleURL('workbox-sw'); |
|
options.workboxSWImport = cdnURL; |
|
} else if (options.importWorkboxFrom === 'local') { |
|
// Copy over the dev + prod version of all of the core libraries. |
|
const workboxDirectoryName = yield copyWorkboxLibraries(destDirectory); // The Workbox library files should not be precached, since they're cached |
|
// automatically by virtue of being used with importScripts(). |
|
|
|
options.globIgnores = [`**/${workboxDirectoryName}/*.+(js|mjs)*`].concat(options.globIgnores || []); |
|
|
|
const workboxSWPkg = require(`workbox-sw/package.json`); |
|
|
|
const workboxSWFilename = path.basename(workboxSWPkg.main); |
|
options.workboxSWImport = `${workboxDirectoryName}/${workboxSWFilename}`; |
|
options.modulePathPrefix = workboxDirectoryName; |
|
} |
|
|
|
const _ref = yield getFileManifestEntries(options), |
|
count = _ref.count, |
|
size = _ref.size, |
|
manifestEntries = _ref.manifestEntries, |
|
warnings = _ref.warnings; |
|
|
|
yield writeServiceWorkerUsingDefaultTemplate(Object.assign({ |
|
manifestEntries |
|
}, options)); // Add in any deprecation warnings. |
|
|
|
warnings.push(...deprecationWarnings); |
|
return { |
|
count, |
|
size, |
|
warnings |
|
}; |
|
}); |
|
return _generateSW.apply(this, arguments); |
|
} |
|
|
|
module.exports = generateSW; |