@farris/build-angular
Version:
Angular Webpack Build Facade
144 lines • 18 kB
JavaScript
;
// tslint:disable
// TODO: cleanup this file, it's copied as is from Angular CLI.
Object.defineProperty(exports, "__esModule", { value: true });
function calculateSizes(budget, compilation) {
const calculatorMap = {
all: AllCalculator,
allScript: AllScriptCalculator,
any: AnyCalculator,
anyScript: AnyScriptCalculator,
bundle: BundleCalculator,
initial: InitialCalculator,
};
const ctor = calculatorMap[budget.type];
const calculator = new ctor(budget, compilation);
return calculator.calculate();
}
exports.calculateSizes = calculateSizes;
class Calculator {
constructor(budget, compilation) {
this.budget = budget;
this.compilation = compilation;
}
}
exports.Calculator = Calculator;
/**
* A named bundle.
*/
class BundleCalculator extends Calculator {
calculate() {
const size = this.compilation.chunks
.filter(chunk => chunk.name === this.budget.name)
.reduce((files, chunk) => [...files, ...chunk.files], [])
.map((file) => this.compilation.assets[file].size())
.reduce((total, size) => total + size, 0);
return [{ size, label: this.budget.name }];
}
}
/**
* The sum of all initial chunks (marked as initial by webpack).
*/
class InitialCalculator extends Calculator {
calculate() {
const initialChunks = this.compilation.chunks.filter(chunk => chunk.isInitial);
const size = initialChunks
.reduce((files, chunk) => [...files, ...chunk.files], [])
.map((file) => this.compilation.assets[file].size())
.reduce((total, size) => total + size, 0);
return [{ size, label: 'initial' }];
}
}
/**
* The sum of all the scripts portions.
*/
class AllScriptCalculator extends Calculator {
calculate() {
const size = Object.keys(this.compilation.assets)
.filter(key => /\.js$/.test(key))
.map(key => this.compilation.assets[key])
.map(asset => asset.size())
.reduce((total, size) => total + size, 0);
return [{ size, label: 'total scripts' }];
}
}
/**
* All scripts and assets added together.
*/
class AllCalculator extends Calculator {
calculate() {
const size = Object.keys(this.compilation.assets)
.map(key => this.compilation.assets[key].size())
.reduce((total, size) => total + size, 0);
return [{ size, label: 'total' }];
}
}
/**
* Any script, individually.
*/
class AnyScriptCalculator extends Calculator {
calculate() {
return Object.keys(this.compilation.assets)
.filter(key => /\.js$/.test(key))
.map(key => {
const asset = this.compilation.assets[key];
return {
size: asset.size(),
label: key
};
});
}
}
/**
* Any script or asset (images, css, etc).
*/
class AnyCalculator extends Calculator {
calculate() {
return Object.keys(this.compilation.assets)
.map(key => {
const asset = this.compilation.assets[key];
return {
size: asset.size(),
label: key
};
});
}
}
/**
* Calculate the bytes given a string value.
*/
function calculateBytes(val, baseline, factor) {
if (/^\d+$/.test(val)) {
return parseFloat(val);
}
if (/^(\d+)%$/.test(val)) {
return calculatePercentBytes(val, baseline, factor);
}
const multiplier = getMultiplier(val);
const numberVal = parseFloat(val.replace(/((k|m|M|)b?)$/, ''));
const baselineVal = baseline ? parseFloat(baseline.replace(/((k|m|M|)b?)$/, '')) : 0;
const baselineMultiplier = baseline ? getMultiplier(baseline) : 1;
const factorMultiplier = factor ? (factor === 'pos' ? 1 : -1) : 1;
return numberVal * multiplier + baselineVal * baselineMultiplier * factorMultiplier;
}
exports.calculateBytes = calculateBytes;
function getMultiplier(val) {
if (/^(\d+)b?$/.test(val)) {
return 1;
}
else if (/^(\d+)kb$/.test(val)) {
return 1000;
}
else if (/^(\d+)(m|M)b$/.test(val)) {
return 1000 * 1000;
}
else {
return 1;
}
}
function calculatePercentBytes(val, baseline, factor) {
const baselineBytes = calculateBytes(baseline);
const percentage = parseFloat(val.replace(/%/g, ''));
return baselineBytes + baselineBytes * percentage / 100 * (factor === 'pos' ? 1 : -1);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLWNhbGN1bGF0b3IuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2ZhcnJpc19kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvYW5ndWxhci1jbGktZmlsZXMvdXRpbGl0aWVzL2J1bmRsZS1jYWxjdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxpQkFBaUI7QUFDakIsK0RBQStEOztBQXVCL0Qsd0JBQStCLE1BQWMsRUFBRSxXQUF3QjtJQUNyRSxNQUFNLGFBQWEsR0FBRztRQUNwQixHQUFHLEVBQUUsYUFBYTtRQUNsQixTQUFTLEVBQUUsbUJBQW1CO1FBQzlCLEdBQUcsRUFBRSxhQUFhO1FBQ2xCLFNBQVMsRUFBRSxtQkFBbUI7UUFDOUIsTUFBTSxFQUFFLGdCQUFnQjtRQUN4QixPQUFPLEVBQUUsaUJBQWlCO0tBQzNCLENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqRCxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2hDLENBQUM7QUFaRCx3Q0FZQztBQUVEO0lBQ0UsWUFBdUIsTUFBYyxFQUFZLFdBQXdCO1FBQWxELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUFHLENBQUM7Q0FHOUU7QUFKRCxnQ0FJQztBQUVEOztHQUVHO0FBQ0gsc0JBQXVCLFNBQVEsVUFBVTtJQUN2QyxTQUFTO1FBQ1AsTUFBTSxJQUFJLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO2FBQ3pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7YUFDaEQsTUFBTSxDQUFDLENBQUMsS0FB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TSxDQUFDLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7QUFDSCxDQUFDO0FBRUQsK0JBQStCLEdBQVcsRUFBRSxRQUFpQixFQUFFLE1BQXdCO0lBQ3JGLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxRQUFrQixDQUFDLENBQUM7SUFDekQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsTUFBTSxDQUFDLGFBQWEsR0FBRyxhQUFhLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGVcbi8vIFRPRE86IGNsZWFudXAgdGhpcyBmaWxlLCBpdCdzIGNvcGllZCBhcyBpcyBmcm9tIEFuZ3VsYXIgQ0xJLlxuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQgeyBCdWRnZXQgfSBmcm9tICcuLi8uLi9icm93c2VyL3NjaGVtYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsYXRpb24ge1xuICBhc3NldHM6IGFueTtcbiAgY2h1bmtzOiBhbnlbXTtcbiAgd2FybmluZ3M6IHN0cmluZ1tdO1xuICBlcnJvcnM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpemUge1xuICBzaXplOiBudW1iZXI7XG4gIGxhYmVsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU2l6ZXMoYnVkZ2V0OiBCdWRnZXQsIGNvbXBpbGF0aW9uOiBDb21waWxhdGlvbik6IFNpemVbXSB7XG4gIGNvbnN0IGNhbGN1bGF0b3JNYXAgPSB7XG4gICAgYWxsOiBBbGxDYWxjdWxhdG9yLFxuICAgIGFsbFNjcmlwdDogQWxsU2NyaXB0Q2FsY3VsYXRvcixcbiAgICBhbnk6IEFueUNhbGN1bGF0b3IsXG4gICAgYW55U2NyaXB0OiBBbnlTY3JpcHRDYWxjdWxhdG9yLFxuICAgIGJ1bmRsZTogQnVuZGxlQ2FsY3VsYXRvcixcbiAgICBpbml0aWFsOiBJbml0aWFsQ2FsY3VsYXRvcixcbiAgfTtcbiAgY29uc3QgY3RvciA9IGNhbGN1bGF0b3JNYXBbYnVkZ2V0LnR5cGVdO1xuICBjb25zdCBjYWxjdWxhdG9yID0gbmV3IGN0b3IoYnVkZ2V0LCBjb21waWxhdGlvbik7XG4gIHJldHVybiBjYWxjdWxhdG9yLmNhbGN1bGF0ZSgpO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2FsY3VsYXRvciB7XG4gIGNvbnN0cnVjdG9yIChwcm90ZWN0ZWQgYnVkZ2V0OiBCdWRnZXQsIHByb3RlY3RlZCBjb21waWxhdGlvbjogQ29tcGlsYXRpb24pIHt9XG5cbiAgYWJzdHJhY3QgY2FsY3VsYXRlKCk6IFNpemVbXTtcbn1cblxuLyoqXG4gKiBBIG5hbWVkIGJ1bmRsZS5cbiAqL1xuY2xhc3MgQnVuZGxlQ2FsY3VsYXRvciBleHRlbmRzIENhbGN1bGF0b3Ige1xuICBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3Qgc2l6ZTogbnVtYmVyID0gdGhpcy5jb21waWxhdGlvbi5jaHVua3NcbiAgICAgIC5maWx0ZXIoY2h1bmsgPT4gY2h1bmsubmFtZSA9PT0gdGhpcy5idWRnZXQubmFtZSlcbiAgICAgIC5yZWR1Y2UoKGZpbGVzLCBjaHVuaykgPT4gWy4uLmZpbGVzLCAuLi5jaHVuay5maWxlc10sIFtdKVxuICAgICAgLm1hcCgoZmlsZTogc3RyaW5nKSA9PiB0aGlzLmNvbXBpbGF0aW9uLmFzc2V0c1tmaWxlXS5zaXplKCkpXG4gICAgICAucmVkdWNlKCh0b3RhbDogbnVtYmVyLCBzaXplOiBudW1iZXIpID0+IHRvdGFsICsgc2l6ZSwgMCk7XG4gICAgcmV0dXJuIFt7c2l6ZSwgbGFiZWw6IHRoaXMuYnVkZ2V0Lm5hbWV9XTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBzdW0gb2YgYWxsIGluaXRpYWwgY2h1bmtzIChtYXJrZWQgYXMgaW5pdGlhbCBieSB3ZWJwYWNrKS5cbiAqL1xuY2xhc3MgSW5pdGlhbENhbGN1bGF0b3IgZXh0ZW5kcyBDYWxjdWxhdG9yIHtcbiAgY2FsY3VsYXRlKCkge1xuICAgIGNvbnN0IGluaXRpYWxDaHVua3MgPSB0aGlzLmNvbXBpbGF0aW9uLmNodW5rcy5maWx0ZXIoY2h1bmsgPT4gY2h1bmsuaXNJbml0aWFsKTtcbiAgICBjb25zdCBzaXplOiBudW1iZXIgPSBpbml0aWFsQ2h1bmtzXG4gICAgICAucmVkdWNlKChmaWxlcywgY2h1bmspID0+IFsuLi5maWxlcywgLi4uY2h1bmsuZmlsZXNdLCBbXSlcbiAgICAgIC5tYXAoKGZpbGU6IHN0cmluZykgPT4gdGhpcy5jb21waWxhdGlvbi5hc3NldHNbZmlsZV0uc2l6ZSgpKVxuICAgICAgLnJlZHVjZSgodG90YWw6IG51bWJlciwgc2l6ZTogbnVtYmVyKSA9PiB0b3RhbCArIHNpemUsIDApO1xuICAgIHJldHVybiBbe3NpemUsIGxhYmVsOiAnaW5pdGlhbCd9XTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBzdW0gb2YgYWxsIHRoZSBzY3JpcHRzIHBvcnRpb25zLlxuICovXG5jbGFzcyBBbGxTY3JpcHRDYWxjdWxhdG9yIGV4dGVuZHMgQ2FsY3VsYXRvciB7XG4gIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCBzaXplOiBudW1iZXIgPSBPYmplY3Qua2V5cyh0aGlzLmNvbXBpbGF0aW9uLmFzc2V0cylcbiAgICAgIC5maWx0ZXIoa2V5ID0+IC9cXC5qcyQvLnRlc3Qoa2V5KSlcbiAgICAgIC5tYXAoa2V5ID0+IHRoaXMuY29tcGlsYXRpb24uYXNzZXRzW2tleV0pXG4gICAgICAubWFwKGFzc2V0ID0+IGFzc2V0LnNpemUoKSlcbiAgICAgIC5yZWR1Y2UoKHRvdGFsOiBudW1iZXIsIHNpemU6IG51bWJlcikgPT4gdG90YWwgKyBzaXplLCAwKTtcbiAgICByZXR1cm4gW3tzaXplLCBsYWJlbDogJ3RvdGFsIHNjcmlwdHMnfV07XG4gIH1cbn1cblxuLyoqXG4gKiBBbGwgc2NyaXB0cyBhbmQgYXNzZXRzIGFkZGVkIHRvZ2V0aGVyLlxuICovXG5jbGFzcyBBbGxDYWxjdWxhdG9yIGV4dGVuZHMgQ2FsY3VsYXRvciB7XG4gIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCBzaXplOiBudW1iZXIgPSBPYmplY3Qua2V5cyh0aGlzLmNvbXBpbGF0aW9uLmFzc2V0cylcbiAgICAgIC5tYXAoa2V5ID0+IHRoaXMuY29tcGlsYXRpb24uYXNzZXRzW2tleV0uc2l6ZSgpKVxuICAgICAgLnJlZHVjZSgodG90YWw6IG51bWJlciwgc2l6ZTogbnVtYmVyKSA9PiB0b3RhbCArIHNpemUsIDApO1xuICAgIHJldHVybiBbe3NpemUsIGxhYmVsOiAndG90YWwnfV07XG4gIH1cbn1cblxuLyoqXG4gKiBBbnkgc2NyaXB0LCBpbmRpdmlkdWFsbHkuXG4gKi9cbmNsYXNzIEFueVNjcmlwdENhbGN1bGF0b3IgZXh0ZW5kcyBDYWxjdWxhdG9yIHtcbiAgY2FsY3VsYXRlKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbXBpbGF0aW9uLmFzc2V0cylcbiAgICAgIC5maWx0ZXIoa2V5ID0+IC9cXC5qcyQvLnRlc3Qoa2V5KSlcbiAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgY29uc3QgYXNzZXQgPSB0aGlzLmNvbXBpbGF0aW9uLmFzc2V0c1trZXldO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNpemU6IGFzc2V0LnNpemUoKSxcbiAgICAgICAgICBsYWJlbDoga2V5XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEFueSBzY3JpcHQgb3IgYXNzZXQgKGltYWdlcywgY3NzLCBldGMpLlxuICovXG5jbGFzcyBBbnlDYWxjdWxhdG9yIGV4dGVuZHMgQ2FsY3VsYXRvciB7XG4gIGNhbGN1bGF0ZSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb21waWxhdGlvbi5hc3NldHMpXG4gICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IGFzc2V0ID0gdGhpcy5jb21waWxhdGlvbi5hc3NldHNba2V5XTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzaXplOiBhc3NldC5zaXplKCksXG4gICAgICAgICAgbGFiZWw6IGtleVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGJ5dGVzIGdpdmVuIGEgc3RyaW5nIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQnl0ZXModmFsOiBzdHJpbmcsIGJhc2VsaW5lPzogc3RyaW5nLCBmYWN0b3I/OiAoJ3BvcycgfCAnbmVnJykpOiBudW1iZXIge1xuICBpZiAoL15cXGQrJC8udGVzdCh2YWwpKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsKTtcbiAgfVxuXG4gIGlmICgvXihcXGQrKSUkLy50ZXN0KHZhbCkpIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlUGVyY2VudEJ5dGVzKHZhbCwgYmFzZWxpbmUsIGZhY3Rvcik7XG4gIH1cblxuICBjb25zdCBtdWx0aXBsaWVyID0gZ2V0TXVsdGlwbGllcih2YWwpO1xuXG4gIGNvbnN0IG51bWJlclZhbCA9IHBhcnNlRmxvYXQodmFsLnJlcGxhY2UoLygoa3xtfE18KWI/KSQvLCAnJykpO1xuICBjb25zdCBiYXNlbGluZVZhbCA9IGJhc2VsaW5lID8gcGFyc2VGbG9hdChiYXNlbGluZS5yZXBsYWNlKC8oKGt8bXxNfCliPykkLywgJycpKSA6IDA7XG4gIGNvbnN0IGJhc2VsaW5lTXVsdGlwbGllciA9IGJhc2VsaW5lID8gZ2V0TXVsdGlwbGllcihiYXNlbGluZSkgOiAxO1xuICBjb25zdCBmYWN0b3JNdWx0aXBsaWVyID0gZmFjdG9yID8gKGZhY3RvciA9PT0gJ3BvcycgPyAxIDogLTEpIDogMTtcblxuICByZXR1cm4gbnVtYmVyVmFsICogbXVsdGlwbGllciArIGJhc2VsaW5lVmFsICogYmFzZWxpbmVNdWx0aXBsaWVyICogZmFjdG9yTXVsdGlwbGllcjtcbn1cblxuZnVuY3Rpb24gZ2V0TXVsdGlwbGllcih2YWw6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmICgvXihcXGQrKWI/JC8udGVzdCh2YWwpKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoL14oXFxkKylrYiQvLnRlc3QodmFsKSkge1xuICAgIHJldHVybiAxMDAwO1xuICB9IGVsc2UgaWYgKC9eKFxcZCspKG18TSliJC8udGVzdCh2YWwpKSB7XG4gICAgcmV0dXJuIDEwMDAgKiAxMDAwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVBlcmNlbnRCeXRlcyh2YWw6IHN0cmluZywgYmFzZWxpbmU/OiBzdHJpbmcsIGZhY3Rvcj86ICgncG9zJyB8ICduZWcnKSk6IG51bWJlciB7XG4gIGNvbnN0IGJhc2VsaW5lQnl0ZXMgPSBjYWxjdWxhdGVCeXRlcyhiYXNlbGluZSBhcyBzdHJpbmcpO1xuICBjb25zdCBwZXJjZW50YWdlID0gcGFyc2VGbG9hdCh2YWwucmVwbGFjZSgvJS9nLCAnJykpO1xuICByZXR1cm4gYmFzZWxpbmVCeXRlcyArIGJhc2VsaW5lQnl0ZXMgKiBwZXJjZW50YWdlIC8gMTAwICogKGZhY3RvciA9PT0gJ3BvcycgPyAxIDogLTEpO1xufVxuIl19