Urara-Blog/node_modules/.pnpm-store/v3/files/d4/367bfbc5423646b0d67e9bff590c52f8e6ce64bee5542a5c3b67842d8ec4e24bf6d746e758cbe1d84e1c21be983016c09a75e55c126752a42bb292cf5283e1
2022-08-14 01:14:53 +08:00

121 lines
3.6 KiB
Text

/*
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.
*/
import assert from 'assert';
import {GetManifestResult, FileDetails, GetManifestOptions} from '../types';
import {errors} from './errors';
import {getCompositeDetails} from './get-composite-details';
import {getFileDetails} from './get-file-details';
import {getStringDetails} from './get-string-details';
import {transformManifest} from './transform-manifest';
export async function getFileManifestEntries({
additionalManifestEntries,
dontCacheBustURLsMatching,
globDirectory,
globFollow,
globIgnores,
globPatterns = [],
globStrict,
manifestTransforms,
maximumFileSizeToCacheInBytes,
modifyURLPrefix,
templatedURLs,
}: GetManifestOptions): Promise<GetManifestResult> {
const warnings: Array<string> = [];
const allFileDetails = new Map<string, FileDetails>();
try {
for (const globPattern of globPatterns) {
const {globbedFileDetails, warning} = 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)) {
assert(!allFileDetails.has(url), errors['templated-url-matches-glob']);
const dependencies = templatedURLs[url];
if (Array.isArray(dependencies)) {
const details = dependencies.reduce<Array<FileDetails>>(
(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: {[key: string]: Array<string>} = {};
debugObj[url] = dependencies;
throw new Error(
`${errors['bad-template-urls-asset']} ` +
`'${globPattern}' from '${JSON.stringify(debugObj)}':\n` +
`${error instanceof Error ? error.toString() : ''}`,
);
}
},
[],
);
if (details.length === 0) {
throw new Error(
`${errors['bad-template-urls-asset']} The glob ` +
`pattern '${dependencies.toString()}' did not match anything.`,
);
}
allFileDetails.set(url, getCompositeDetails(url, details));
} else if (typeof dependencies === 'string') {
allFileDetails.set(url, getStringDetails(url, dependencies));
}
}
}
const transformedManifest = await transformManifest({
additionalManifestEntries,
dontCacheBustURLsMatching,
manifestTransforms,
maximumFileSizeToCacheInBytes,
modifyURLPrefix,
fileDetails: Array.from(allFileDetails.values()),
});
transformedManifest.warnings.push(...warnings);
return transformedManifest;
}