@angular/build
Version:
Official build system for Angular
67 lines (66 loc) • 2.45 kB
JavaScript
;
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.dev/license
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateBudgetStats = generateBudgetStats;
const bundler_context_1 = require("./bundler-context");
const utils_1 = require("./utils");
/**
* Generates a bundle budget calculator compatible stats object that provides
* the necessary information for the Webpack-based bundle budget code to
* interoperate with the esbuild-based builders.
* @param metafile The esbuild metafile of a build to use.
* @param initialFiles The records of all initial files of a build.
* @returns A bundle budget compatible stats object.
*/
function generateBudgetStats(metafile, outputFiles, initialFiles) {
const stats = {
chunks: [],
assets: [],
};
for (const { path: file, size, type } of outputFiles) {
if (!file.endsWith('.js') && !file.endsWith('.css')) {
continue;
}
// Exclude server bundles
if (type === bundler_context_1.BuildOutputFileType.ServerApplication || type === bundler_context_1.BuildOutputFileType.ServerRoot) {
continue;
}
const initialRecord = initialFiles.get(file);
const name = initialRecord?.name ?? (0, utils_1.getChunkNameFromMetafile)(metafile, file);
stats.chunks.push({
files: [file],
initial: !!initialRecord,
names: name ? [name] : undefined,
});
stats.assets.push({
name: file,
size,
});
}
// Add component styles from metafile
// TODO: Provide this information directly from the AOT compiler
for (const [file, entry] of Object.entries(metafile.outputs)) {
if (!file.endsWith('.css')) {
continue;
}
// 'ng-component' is set by the angular plugin's component stylesheet bundler
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const componentStyle = entry['ng-component'];
if (!componentStyle) {
continue;
}
stats.assets.push({
// Component styles use the input file
name: Object.keys(entry.inputs)[0],
size: entry.bytes,
componentStyle,
});
}
return stats;
}