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.
105 lines
3.7 KiB
105 lines
3.7 KiB
"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;
|
|
|