101 lines
3.8 KiB
JavaScript
101 lines
3.8 KiB
JavaScript
"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; |