UNPKG

ngc-webpack

Version:

A wrapper for the @ngtools/webpack with hooks into the compilation process

130 lines 4.45 kB
#!/usr/bin/env node "use strict"; 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