@farris/build-angular
Version:
Angular Webpack Build Facade
74 lines • 12.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @license
* Copyright Google Inc. 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.io/license
*/
// tslint:disable
// TODO: cleanup this file, it's copied as is from Angular CLI.
const core_1 = require("@angular-devkit/core");
const { bold, green, red, reset, white, yellow } = core_1.terminal;
function formatSize(size) {
if (size <= 0) {
return '0 bytes';
}
const abbreviations = ['bytes', 'kB', 'MB', 'GB'];
const index = Math.floor(Math.log(size) / Math.log(1000));
return `${+(size / Math.pow(1000, index)).toPrecision(3)} ${abbreviations[index]}`;
}
exports.formatSize = formatSize;
function statsToString(json, statsConfig) {
const colors = statsConfig.colors;
const rs = (x) => colors ? reset(x) : x;
const w = (x) => colors ? bold(white(x)) : x;
const g = (x) => colors ? bold(green(x)) : x;
const y = (x) => colors ? bold(yellow(x)) : x;
const changedChunksStats = json.chunks
.filter((chunk) => chunk.rendered)
.map((chunk) => {
const asset = json.assets.filter((x) => x.name == chunk.files[0])[0];
const size = asset ? ` ${formatSize(asset.size)}` : '';
const files = chunk.files.join(', ');
const names = chunk.names ? ` (${chunk.names.join(', ')})` : '';
const initial = y(chunk.entry ? '[entry]' : chunk.initial ? '[initial]' : '');
const flags = ['rendered', 'recorded']
.map(f => f && chunk[f] ? g(` [${f}]`) : '')
.join('');
return `chunk {${y(chunk.id)}} ${g(files)}${names}${size} ${initial}${flags}`;
});
const unchangedChunkNumber = json.chunks.length - changedChunksStats.length;
if (unchangedChunkNumber > 0) {
return '\n' + rs(core_1.tags.stripIndents `
Date: ${w(new Date().toISOString())} - Hash: ${w(json.hash)} - Time: ${w('' + json.time)}ms
${unchangedChunkNumber} unchanged chunks
${changedChunksStats.join('\n')}
`);
}
else {
return '\n' + rs(core_1.tags.stripIndents `
Date: ${w(new Date().toISOString())}
Hash: ${w(json.hash)}
Time: ${w('' + json.time)}ms
${changedChunksStats.join('\n')}
`);
}
}
exports.statsToString = statsToString;
function statsWarningsToString(json, statsConfig) {
const colors = statsConfig.colors;
const rs = (x) => colors ? reset(x) : x;
const y = (x) => colors ? bold(yellow(x)) : x;
return rs('\n' + json.warnings.map((warning) => y(`WARNING in ${warning}`)).join('\n\n'));
}
exports.statsWarningsToString = statsWarningsToString;
function statsErrorsToString(json, statsConfig) {
const colors = statsConfig.colors;
const rs = (x) => colors ? reset(x) : x;
const r = (x) => colors ? bold(red(x)) : x;
return rs('\n' + json.errors.map((error) => r(`ERROR in ${error}`)).join('\n'));
}
exports.statsErrorsToString = statsErrorsToString;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2ZhcnJpc19kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvYW5ndWxhci1jbGktZmlsZXMvdXRpbGl0aWVzL3N0YXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7OztHQU1HO0FBQ0gsaUJBQWlCO0FBQ2pCLCtEQUErRDtBQUMvRCwrQ0FBc0Q7QUFHdEQsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsZUFBUSxDQUFDO0FBRTVELG9CQUEyQixJQUFZO0lBQ3JDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTFELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDckYsQ0FBQztBQVRELGdDQVNDO0FBR0QsdUJBQThCLElBQVMsRUFBRSxXQUFnQjtJQUN2RCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQ2xDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXRELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU07U0FDbkMsTUFBTSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1NBQ3RDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsTUFBTSxLQUFL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QyxJQUFTLEVBQUUsV0FBZ0I7SUFDN0QsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUNsQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuRCxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFORCxrREFNQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8vIHRzbGludDpkaXNhYmxlXG4vLyBUT0RPOiBjbGVhbnVwIHRoaXMgZmlsZSwgaXQncyBjb3BpZWQgYXMgaXMgZnJvbSBBbmd1bGFyIENMSS5cbmltcG9ydCB7IHRhZ3MsIHRlcm1pbmFsIH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuXG5cbmNvbnN0IHsgYm9sZCwgZ3JlZW4sIHJlZCwgcmVzZXQsIHdoaXRlLCB5ZWxsb3cgfSA9IHRlcm1pbmFsO1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U2l6ZShzaXplOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuICcwIGJ5dGVzJztcbiAgfVxuXG4gIGNvbnN0IGFiYnJldmlhdGlvbnMgPSBbJ2J5dGVzJywgJ2tCJywgJ01CJywgJ0dCJ107XG4gIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzaXplKSAvIE1hdGgubG9nKDEwMDApKTtcblxuICByZXR1cm4gYCR7KyhzaXplIC8gTWF0aC5wb3coMTAwMCwgaW5kZXgpKS50b1ByZWNpc2lvbigzKX0gJHthYmJyZXZpYXRpb25zW2luZGV4XX1gO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0c1RvU3RyaW5nKGpzb246IGFueSwgc3RhdHNDb25maWc6IGFueSkge1xuICBjb25zdCBjb2xvcnMgPSBzdGF0c0NvbmZpZy5jb2xvcnM7XG4gIGNvbnN0IHJzID0gKHg6IHN0cmluZykgPT4gY29sb3JzID8gcmVzZXQoeCkgOiB4O1xuICBjb25zdCB3ID0gKHg6IHN0cmluZykgPT4gY29sb3JzID8gYm9sZCh3aGl0ZSh4KSkgOiB4O1xuICBjb25zdCBnID0gKHg6IHN0cmluZykgPT4gY29sb3JzID8gYm9sZChncmVlbih4KSkgOiB4O1xuICBjb25zdCB5ID0gKHg6IHN0cmluZykgPT4gY29sb3JzID8gYm9sZCh5ZWxsb3coeCkpIDogeDtcblxuICBjb25zdCBjaGFuZ2VkQ2h1bmtzU3RhdHMgPSBqc29uLmNodW5rc1xuICAgIC5maWx0ZXIoKGNodW5rOiBhbnkpID0+IGNodW5rLnJlbmRlcmVkKVxuICAgIC5tYXAoKGNodW5rOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGFzc2V0ID0ganNvbi5hc3NldHMuZmlsdGVyKCh4OiBhbnkpID0+IHgubmFtZSA9PSBjaHVuay5maWxlc1swXSlbMF07XG4gICAgICBjb25zdCBzaXplID0gYXNzZXQgPyBgICR7Zm9ybWF0U2l6ZShhc3NldC5zaXplKX1gIDogJyc7XG4gICAgICBjb25zdCBmaWxlcyA9IGNodW5rLmZpbGVzLmpvaW4oJywgJyk7XG4gICAgICBjb25zdCBuYW1lcyA9IGNodW5rLm5hbWVzID8gYCAoJHtjaHVuay5uYW1lcy5qb2luKCcsICcpfSlgIDogJyc7XG4gICAgICBjb25zdCBpbml0aWFsID0geShjaHVuay5lbnRyeSA/ICdbZW50cnldJyA6IGNodW5rLmluaXRpYWwgPyAnW2luaXRpYWxdJyA6ICcnKTtcbiAgICAgIGNvbnN0IGZsYWdzID0gWydyZW5kZXJlZCcsICdyZWNvcmRlZCddXG4gICAgICAgIC5tYXAoZiA9PiBmICYmIGNodW5rW2ZdID8gZyhgIFske2Z9XWApIDogJycpXG4gICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgcmV0dXJuIGBjaHVuayB7JHt5KGNodW5rLmlkKX19ICR7ZyhmaWxlcyl9JHtuYW1lc30ke3NpemV9ICR7aW5pdGlhbH0ke2ZsYWdzfWA7XG4gICAgfSk7XG5cbiAgY29uc3QgdW5jaGFuZ2VkQ2h1bmtOdW1iZXIgPSBqc29uLmNodW5rcy5sZW5ndGggLSBjaGFuZ2VkQ2h1bmtzU3RhdHMubGVuZ3RoO1xuXG4gIGlmICh1bmNoYW5nZWRDaHVua051bWJlciA+IDApIHtcbiAgICByZXR1cm4gJ1xcbicgKyBycyh0YWdzLnN0cmlwSW5kZW50c2BcbiAgICAgIERhdGU6ICR7dyhuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpfSAtIEhhc2g6ICR7dyhqc29uLmhhc2gpfSAtIFRpbWU6ICR7dygnJyArIGpzb24udGltZSl9bXNcbiAgICAgICR7dW5jaGFuZ2VkQ2h1bmtOdW1iZXJ9IHVuY2hhbmdlZCBjaHVua3NcbiAgICAgICR7Y2hhbmdlZENodW5rc1N0YXRzLmpvaW4oJ1xcbicpfVxuICAgICAgYCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICdcXG4nICsgcnModGFncy5zdHJpcEluZGVudHNgXG4gICAgICBEYXRlOiAke3cobmV3IERhdGUoKS50b0lTT1N0cmluZygpKX1cbiAgICAgIEhhc2g6ICR7dyhqc29uLmhhc2gpfVxuICAgICAgVGltZTogJHt3KCcnICsganNvbi50aW1lKX1tc1xuICAgICAgJHtjaGFuZ2VkQ2h1bmtzU3RhdHMuam9pbignXFxuJyl9XG4gICAgICBgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdHNXYXJuaW5nc1RvU3RyaW5nKGpzb246IGFueSwgc3RhdHNDb25maWc6IGFueSkge1xuICBjb25zdCBjb2xvcnMgPSBzdGF0c0NvbmZpZy5jb2xvcnM7XG4gIGNvbnN0IHJzID0gKHg6IHN0cmluZykgPT4gY29sb3JzID8gcmVzZXQoeCkgOiB4O1xuICBjb25zdCB5ID0gKHg6IHN0cmluZykgPT4gY29sb3JzID8gYm9sZCh5ZWxsb3coeCkpIDogeDtcblxuICByZXR1cm4gcnMoJ1xcbicgKyBqc29uLndhcm5pbmdzLm1hcCgod2FybmluZzogYW55KSA9PiB5KGBXQVJOSU5HIGluICR7d2FybmluZ31gKSkuam9pbignXFxuXFxuJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdHNFcnJvcnNUb1N0cmluZyhqc29uOiBhbnksIHN0YXRzQ29uZmlnOiBhbnkpIHtcbiAgY29uc3QgY29sb3JzID0gc3RhdHNDb25maWcuY29sb3JzO1xuICBjb25zdCBycyA9ICh4OiBzdHJpbmcpID0+IGNvbG9ycyA/IHJlc2V0KHgpIDogeDtcbiAgY29uc3QgciA9ICh4OiBzdHJpbmcpID0+IGNvbG9ycyA/IGJvbGQocmVkKHgpKSA6IHg7XG5cbiAgcmV0dXJuIHJzKCdcXG4nICsganNvbi5lcnJvcnMubWFwKChlcnJvcjogYW55KSA9PiByKGBFUlJPUiBpbiAke2Vycm9yfWApKS5qb2luKCdcXG4nKSk7XG59XG4iXX0=