ngc-webpack
Version:
A wrapper for the @ngtools/webpack with hooks into the compilation process
130 lines • 4.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var Path = require("path");
var FS = require("fs");
var minimist = require("minimist");
var resolve = require("resolve");
var cli_1 = require("./cli");
var utils_1 = require("../utils");
function freezeStdout() {
var old_stdout_write = process.stdout.write, old_stderr_write = process.stderr.write, old_console_error = console.error;
process.stdout.write = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return true;
};
process.stderr.write = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return true;
};
console.error = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
};
return function () {
process.stdout.write = old_stdout_write;
process.stderr.write = old_stderr_write;
console.error = old_console_error;
};
}
function tryFindNgScript() {
return utils_1.promisify(resolve)('@angular/cli', { basedir: process.cwd() })
.then(function (resolvedPath) {
var value = resolvedPath;
var root = Path.parse(value).root;
while (value !== root) {
var base = Path.basename(value);
if (base === 'node_modules') {
if (FS.existsSync(Path.resolve(value, '.bin/ng'))) {
return Path.resolve(value, '.bin/ng');
}
}
else if (base === '') {
break;
}
else {
value = Path.dirname(value);
}
}
throw new Error("Could not find ng script (starting at: " + resolvedPath);
});
}
function hijackCliConfiguration() {
var promise = utils_1.promiseWrapper();
var state = {
config: undefined,
err: undefined,
unfreeze: undefined
};
var processExit = process.exit;
process.exit = function (code) {
process.exit = processExit;
if (state.config) {
if (state.unfreeze) {
state.unfreeze();
delete state.unfreeze;
}
// error thrown to cancel cli work, suppress it and revert.
promise.resolve(state.config);
}
else {
var e = state.err || new Error('Invalid state, integration between ngc-webpack and @angular/cli failed.');
promise.reject(e);
}
};
utils_1.promisify(resolve)('@angular/cli/models/webpack-config.js', { basedir: process.cwd() })
.then(function (value) {
var NgCliWebpackConfig = require(value).NgCliWebpackConfig;
var buildConfig = NgCliWebpackConfig.prototype.buildConfig;
NgCliWebpackConfig.prototype.buildConfig = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
state.config = buildConfig.apply(this, args);
state.unfreeze = freezeStdout();
throw new Error('suppressed error');
};
return tryFindNgScript().then(function (ngScriptPath) { return require(ngScriptPath); });
})
.catch(function (err) {
state.err = err;
process.exit();
});
return promise.promise;
}
function runNgCli(tsConfigPath, cliParams) {
var p = hijackCliConfiguration();
return p.then(function (webpackConfig) { return cli_1.runCli(webpackConfig, tsConfigPath, cliParams); });
}
exports.runNgCli = runNgCli;
if (require.main === module) {
var args = process.argv.slice(2);
var parsedArgs = minimist(args);
// p or project is not part of angular cli
if ('p' in parsedArgs) {
process.argv.splice(process.argv.indexOf('-p'), 2);
}
if ('project' in parsedArgs) {
process.argv.splice(process.argv.indexOf('--project'), 2);
}
runNgCli({ args: args, parsedArgs: parsedArgs })
.then(function (parsedDiagnostics) {
if (parsedDiagnostics.error) {
throw parsedDiagnostics.error;
}
})
.catch(function (err) {
console.error(err);
process.exit(1);
});
}
//# sourceMappingURL=ng-cli.js.map