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.
132 lines
3.7 KiB
132 lines
3.7 KiB
"use strict"; |
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); |
|
|
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); |
|
|
|
/* |
|
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 path = require('path'); |
|
|
|
const errors = require('./errors'); |
|
|
|
const filterFiles = require('./filter-files'); |
|
|
|
const getCompositeDetails = require('./get-composite-details'); |
|
|
|
const getFileDetails = require('./get-file-details'); |
|
|
|
const getStringDetails = require('./get-string-details'); |
|
|
|
module.exports = |
|
/*#__PURE__*/ |
|
function () { |
|
var _ref = (0, _asyncToGenerator2.default)(function* ({ |
|
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 |
|
// filterFiles() and get a normalized output. |
|
|
|
let fileDetails = []; |
|
const fileSet = new Set(); |
|
|
|
if (globDirectory) { |
|
if (swDest) { |
|
// Ensure that we ignore the SW file we're eventually writing to disk. |
|
globIgnores.push(`**/${path.basename(swDest)}`); |
|
} |
|
|
|
try { |
|
fileDetails = globPatterns.reduce((accumulated, globPattern) => { |
|
const globbedFileDetails = getFileDetails({ |
|
globDirectory, |
|
globFollow, |
|
globIgnores, |
|
globPattern, |
|
globStrict |
|
}); |
|
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) { |
|
var _arr = Object.keys(templatedURLs); |
|
|
|
for (var _i = 0; _i < _arr.length; _i++) { |
|
let url = _arr[_i]; |
|
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 = getFileDetails({ |
|
globDirectory, |
|
globFollow, |
|
globIgnores, |
|
globPattern, |
|
globStrict |
|
}); |
|
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 filteredFiles = filterFiles({ |
|
fileDetails, |
|
maximumFileSizeToCacheInBytes, |
|
modifyURLPrefix, |
|
dontCacheBustURLsMatching, |
|
manifestTransforms |
|
}); |
|
|
|
if (warnings.length > 0) { |
|
filteredFiles.warnings.push(...warnings); |
|
} |
|
|
|
return filteredFiles; |
|
}); |
|
|
|
return function (_x) { |
|
return _ref.apply(this, arguments); |
|
}; |
|
}(); |