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.
98 lines
4.3 KiB
98 lines
4.3 KiB
"use strict"; |
|
/* |
|
Copyright 2021 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.getFileManifestEntries = void 0; |
|
const assert_1 = __importDefault(require("assert")); |
|
const errors_1 = require("./errors"); |
|
const get_composite_details_1 = require("./get-composite-details"); |
|
const get_file_details_1 = require("./get-file-details"); |
|
const get_string_details_1 = require("./get-string-details"); |
|
const transform_manifest_1 = require("./transform-manifest"); |
|
async function getFileManifestEntries({ additionalManifestEntries, dontCacheBustURLsMatching, globDirectory, globFollow, globIgnores, globPatterns = [], globStrict, manifestTransforms, maximumFileSizeToCacheInBytes, modifyURLPrefix, templatedURLs, }) { |
|
const warnings = []; |
|
const allFileDetails = new Map(); |
|
try { |
|
for (const globPattern of globPatterns) { |
|
const { globbedFileDetails, warning } = (0, get_file_details_1.getFileDetails)({ |
|
globDirectory, |
|
globFollow, |
|
globIgnores, |
|
globPattern, |
|
globStrict, |
|
}); |
|
if (warning) { |
|
warnings.push(warning); |
|
} |
|
for (const details of globbedFileDetails) { |
|
if (details && !allFileDetails.has(details.file)) { |
|
allFileDetails.set(details.file, details); |
|
} |
|
} |
|
} |
|
} |
|
catch (error) { |
|
// If there's an exception thrown while globbing, then report |
|
// it back as a warning, and don't consider it fatal. |
|
if (error instanceof Error && error.message) { |
|
warnings.push(error.message); |
|
} |
|
} |
|
if (templatedURLs) { |
|
for (const url of Object.keys(templatedURLs)) { |
|
(0, assert_1.default)(!allFileDetails.has(url), errors_1.errors['templated-url-matches-glob']); |
|
const dependencies = templatedURLs[url]; |
|
if (Array.isArray(dependencies)) { |
|
const details = dependencies.reduce((previous, globPattern) => { |
|
try { |
|
const { globbedFileDetails, warning } = (0, get_file_details_1.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_1.errors['bad-template-urls-asset']} ` + |
|
`'${globPattern}' from '${JSON.stringify(debugObj)}':\n` + |
|
`${error instanceof Error ? error.toString() : ''}`); |
|
} |
|
}, []); |
|
if (details.length === 0) { |
|
throw new Error(`${errors_1.errors['bad-template-urls-asset']} The glob ` + |
|
`pattern '${dependencies.toString()}' did not match anything.`); |
|
} |
|
allFileDetails.set(url, (0, get_composite_details_1.getCompositeDetails)(url, details)); |
|
} |
|
else if (typeof dependencies === 'string') { |
|
allFileDetails.set(url, (0, get_string_details_1.getStringDetails)(url, dependencies)); |
|
} |
|
} |
|
} |
|
const transformedManifest = await (0, transform_manifest_1.transformManifest)({ |
|
additionalManifestEntries, |
|
dontCacheBustURLsMatching, |
|
manifestTransforms, |
|
maximumFileSizeToCacheInBytes, |
|
modifyURLPrefix, |
|
fileDetails: Array.from(allFileDetails.values()), |
|
}); |
|
transformedManifest.warnings.push(...warnings); |
|
return transformedManifest; |
|
} |
|
exports.getFileManifestEntries = getFileManifestEntries;
|
|
|