mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-25 09:55:15 +00:00
128 lines
3.3 KiB
JavaScript
128 lines
3.3 KiB
JavaScript
|
"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;
|
||
|
};
|