mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-14 17:43:52 +08:00
At the moment, error can be undefined sometimes which is causing the process not to be terminated with a non zero error code.
78 lines
2.2 KiB
JavaScript
Executable File
78 lines
2.2 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
/**
|
|
* @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
|
|
*/
|
|
'use strict';
|
|
|
|
/**
|
|
* This file is useful for not having to load bootstrap-local in various javascript.
|
|
* Simply use package.json to have npm scripts that use this script as well, or use
|
|
* this script directly.
|
|
*/
|
|
require('../lib/bootstrap-local');
|
|
|
|
|
|
const minimist = require('minimist');
|
|
const path = require('path');
|
|
|
|
const args = minimist(process.argv.slice(2), {
|
|
boolean: ['verbose']
|
|
});
|
|
const scriptName = args._.shift();
|
|
const scriptPath = path.join('../scripts', scriptName);
|
|
|
|
const cwd = process.cwd();
|
|
process.chdir(path.join(__dirname, '..'));
|
|
|
|
|
|
// This might get awkward, so we fallback to console if there was an error.
|
|
let logger = null;
|
|
try {
|
|
logger = new (require('@angular-devkit/core').logging.IndentLogger)('root');
|
|
const { bold, gray, red, yellow, white } = require('@angular-devkit/core').terminal;
|
|
const filter = require('rxjs/operators').filter;
|
|
|
|
logger
|
|
.pipe(filter(entry => (entry.level !== 'debug' || args.verbose)))
|
|
.subscribe(entry => {
|
|
let color = gray;
|
|
let output = process.stdout;
|
|
switch (entry.level) {
|
|
case 'info': color = white; break;
|
|
case 'warn': color = yellow; break;
|
|
case 'error': color = red; output = process.stderr; break;
|
|
case 'fatal': color = x => bold(red(x)); output = process.stderr; break;
|
|
}
|
|
|
|
output.write(color(entry.message) + '\n');
|
|
});
|
|
} catch (e) {
|
|
console.error(`Reverting to manual console logging.\nReason: ${e.message}.`);
|
|
logger = {
|
|
debug: console.log.bind(console),
|
|
info: console.log.bind(console),
|
|
warn: console.warn.bind(console),
|
|
error: console.error.bind(console),
|
|
fatal: x => { console.error(x); process.exit(100); },
|
|
createChild: () => logger,
|
|
};
|
|
}
|
|
|
|
|
|
try {
|
|
Promise.resolve()
|
|
.then(() => require(scriptPath).default(args, logger, cwd))
|
|
.then(exitCode => process.exit(exitCode || 0))
|
|
.catch(err => {
|
|
logger.fatal(err && err.stack);
|
|
process.exit(99);
|
|
});
|
|
} catch (err) {
|
|
logger.fatal(err.stack);
|
|
process.exit(99);
|
|
}
|