123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- "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.
- */
- const assert = require('assert');
- const errors = require('./errors');
- const transformManifest = require('./transform-manifest');
- const getCompositeDetails = require('./get-composite-details');
- const getFileDetails = require('./get-file-details');
- const getStringDetails = require('./get-string-details');
- module.exports = async ({
- additionalManifestEntries,
- dontCacheBustURLsMatching,
- globDirectory,
- globFollow,
- globIgnores,
- globPatterns,
- globStrict,
- manifestTransforms,
- maximumFileSizeToCacheInBytes,
- modifyURLPrefix,
- swDest,
- templatedURLs
- }) => {
- const warnings = []; // Initialize to an empty array so that we can still pass something to
- // transformManifest() and get a normalized output.
- let fileDetails = [];
- const fileSet = new Set();
- if (globDirectory) {
- try {
- fileDetails = globPatterns.reduce((accumulated, globPattern) => {
- const {
- globbedFileDetails,
- warning
- } = getFileDetails({
- globDirectory,
- globFollow,
- globIgnores,
- globPattern,
- globStrict
- });
- if (warning) {
- warnings.push(warning);
- }
- globbedFileDetails.forEach(fileDetails => {
- if (fileSet.has(fileDetails.file)) {
- return;
- }
- fileSet.add(fileDetails.file);
- accumulated.push(fileDetails);
- });
- return accumulated;
- }, []);
- } catch (error) {
- // If there's an exception thrown while globbing, then report
- // it back as a warning, and don't consider it fatal.
- warnings.push(error.message);
- }
- }
- if (templatedURLs) {
- for (const url of Object.keys(templatedURLs)) {
- assert(!fileSet.has(url), errors['templated-url-matches-glob']);
- const dependencies = templatedURLs[url];
- if (Array.isArray(dependencies)) {
- const details = dependencies.reduce((previous, globPattern) => {
- try {
- const {
- globbedFileDetails,
- warning
- } = getFileDetails({
- globDirectory,
- globFollow,
- globIgnores,
- globPattern,
- globStrict
- });
- if (warning) {
- warnings.push(warning);
- }
- return previous.concat(globbedFileDetails);
- } catch (error) {
- const debugObj = {};
- debugObj[url] = dependencies;
- throw new Error(`${errors['bad-template-urls-asset']} ` + `'${globPattern}' from '${JSON.stringify(debugObj)}':\n` + error);
- }
- }, []);
- fileDetails.push(getCompositeDetails(url, details));
- } else if (typeof dependencies === 'string') {
- fileDetails.push(getStringDetails(url, dependencies));
- }
- }
- }
- const transformedManifest = await transformManifest({
- additionalManifestEntries,
- dontCacheBustURLsMatching,
- fileDetails,
- manifestTransforms,
- maximumFileSizeToCacheInBytes,
- modifyURLPrefix
- });
- if (warnings.length > 0) {
- transformedManifest.warnings.push(...warnings);
- }
- return transformedManifest;
- };
|