2023-10-03 11:14:36 +08:00
|
|
|
"use strict";
|
|
|
|
/*
|
|
|
|
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.
|
|
|
|
*/
|
|
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
|
|
};
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
exports.generateSW = void 0;
|
|
|
|
const upath_1 = __importDefault(require("upath"));
|
|
|
|
const get_file_manifest_entries_1 = require("./lib/get-file-manifest-entries");
|
|
|
|
const rebase_path_1 = require("./lib/rebase-path");
|
|
|
|
const validate_options_1 = require("./lib/validate-options");
|
|
|
|
const write_sw_using_default_template_1 = 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`.
|
|
|
|
*
|
|
|
|
* ```
|
|
|
|
* // The following lists some common options; see the rest of the documentation
|
|
|
|
* // for the full set of options and defaults.
|
|
|
|
* const {count, size, warnings} = await generateSW({
|
|
|
|
* dontCacheBustURLsMatching: [new RegExp('...')],
|
|
|
|
* globDirectory: '...',
|
|
|
|
* globPatterns: ['...', '...'],
|
|
|
|
* maximumFileSizeToCacheInBytes: ...,
|
|
|
|
* navigateFallback: '...',
|
|
|
|
* runtimeCaching: [{
|
|
|
|
* // Routing via a matchCallback function:
|
|
|
|
* urlPattern: ({request, url}) => ...,
|
|
|
|
* handler: '...',
|
|
|
|
* options: {
|
|
|
|
* cacheName: '...',
|
|
|
|
* expiration: {
|
|
|
|
* maxEntries: ...,
|
|
|
|
* },
|
|
|
|
* },
|
|
|
|
* }, {
|
|
|
|
* // Routing via a RegExp:
|
|
|
|
* urlPattern: new RegExp('...'),
|
|
|
|
* handler: '...',
|
|
|
|
* options: {
|
|
|
|
* cacheName: '...',
|
|
|
|
* plugins: [..., ...],
|
|
|
|
* },
|
|
|
|
* }],
|
|
|
|
* skipWaiting: ...,
|
|
|
|
* swDest: '...',
|
|
|
|
* });
|
|
|
|
* ```
|
|
|
|
*
|
|
|
|
* @memberof workbox-build
|
|
|
|
*/
|
|
|
|
async function generateSW(config) {
|
|
|
|
const options = (0, validate_options_1.validateGenerateSWOptions)(config);
|
|
|
|
let entriesResult;
|
|
|
|
if (options.globDirectory) {
|
|
|
|
// Make sure we leave swDest out of the precache manifest.
|
|
|
|
options.globIgnores.push((0, rebase_path_1.rebasePath)({
|
|
|
|
baseDirectory: options.globDirectory,
|
|
|
|
file: options.swDest,
|
|
|
|
}));
|
|
|
|
// If we create an extra external runtime file, ignore that, too.
|
|
|
|
// See https://rollupjs.org/guide/en/#outputchunkfilenames for naming.
|
|
|
|
if (!options.inlineWorkboxRuntime) {
|
|
|
|
const swDestDir = upath_1.default.dirname(options.swDest);
|
|
|
|
const workboxRuntimeFile = upath_1.default.join(swDestDir, 'workbox-*.js');
|
|
|
|
options.globIgnores.push((0, rebase_path_1.rebasePath)({
|
|
|
|
baseDirectory: options.globDirectory,
|
|
|
|
file: workboxRuntimeFile,
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
// We've previously asserted that options.globDirectory is set, so this
|
|
|
|
// should be a safe cast.
|
|
|
|
entriesResult = await (0, get_file_manifest_entries_1.getFileManifestEntries)(options);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
entriesResult = {
|
|
|
|
count: 0,
|
|
|
|
manifestEntries: [],
|
|
|
|
size: 0,
|
|
|
|
warnings: [],
|
|
|
|
};
|
|
|
|
}
|
|
|
|
const filePaths = await (0, write_sw_using_default_template_1.writeSWUsingDefaultTemplate)(Object.assign({
|
|
|
|
manifestEntries: entriesResult.manifestEntries,
|
|
|
|
}, options));
|
|
|
|
return {
|
|
|
|
filePaths,
|
|
|
|
count: entriesResult.count,
|
|
|
|
size: entriesResult.size,
|
|
|
|
warnings: entriesResult.warnings,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
exports.generateSW = generateSW;
|