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.

97 lines
3.3 KiB

2 years ago
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformFiles = exports.reduceChunk = exports.reduceAssets = exports.generateManifest = void 0;
const path_1 = require("path");
const generateManifest = (compilation, files, { generate, seed = {} }) => {
let result;
if (generate) {
const entrypointsArray = Array.from(compilation.entrypoints.entries());
const entrypoints = entrypointsArray.reduce((e, [name, entrypoint]) => Object.assign(e, { [name]: entrypoint.getFiles() }), {});
result = generate(seed, files, entrypoints);
}
else {
result = files.reduce((manifest, file) => Object.assign(manifest, { [file.name]: file.path }), seed);
}
return result;
};
exports.generateManifest = generateManifest;
const getFileType = (fileName, { transformExtensions }) => {
const replaced = fileName.replace(/\?.*/, '');
const split = replaced.split('.');
const extension = split.pop();
return transformExtensions.test(extension) ? `${split.pop()}.${extension}` : extension;
};
const reduceAssets = (files, asset, moduleAssets) => {
let name;
if (moduleAssets[asset.name]) {
name = moduleAssets[asset.name];
}
else if (asset.info.sourceFilename) {
name = path_1.join(path_1.dirname(asset.name), path_1.basename(asset.info.sourceFilename));
}
if (name) {
return files.concat({
isAsset: true,
isChunk: false,
isInitial: false,
isModuleAsset: true,
name,
path: asset.name
});
}
const isEntryAsset = asset.chunks && asset.chunks.length > 0;
if (isEntryAsset) {
return files;
}
return files.concat({
isAsset: true,
isChunk: false,
isInitial: false,
isModuleAsset: false,
name: asset.name,
path: asset.name
});
};
exports.reduceAssets = reduceAssets;
const reduceChunk = (files, chunk, options, auxiliaryFiles) => {
Array.from(chunk.auxiliaryFiles || []).forEach((auxiliaryFile) => {
auxiliaryFiles[auxiliaryFile] = {
isAsset: true,
isChunk: false,
isInitial: false,
isModuleAsset: true,
name: path_1.basename(auxiliaryFile),
path: auxiliaryFile
};
});
return Array.from(chunk.files).reduce((prev, path) => {
let name = chunk.name ? chunk.name : null;
name = name
? options.useEntryKeys && !path.endsWith('.map')
? name
: `${name}.${getFileType(path, options)}`
: path;
return prev.concat({
chunk,
isAsset: false,
isChunk: true,
isInitial: chunk.isOnlyInitial(),
isModuleAsset: false,
name,
path
});
}, files);
};
exports.reduceChunk = reduceChunk;
const standardizeFilePaths = (file) => {
const result = Object.assign({}, file);
result.name = file.name.replace(/\\/g, '/');
result.path = file.path.replace(/\\/g, '/');
return result;
};
const transformFiles = (files, options) => ['filter', 'map', 'sort']
.filter((fname) => !!options[fname])
.reduce((prev, fname) => prev[fname](options[fname]), files)
.map(standardizeFilePaths);
exports.transformFiles = transformFiles;
//# sourceMappingURL=helpers.js.map