aboutsummaryrefslogtreecommitdiff
path: root/node_modules/istanbul/lib/cli.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
commitde98e0b232509d5f40c135d540a70e415272ff85 (patch)
treea79222a5b58484ab3b80d18efcaaa7ccc4769b33 /node_modules/istanbul/lib/cli.js
parente0c9d480a73fa629c1e4a47d3e721f1d2d345406 (diff)
node_modules
Diffstat (limited to 'node_modules/istanbul/lib/cli.js')
-rwxr-xr-xnode_modules/istanbul/lib/cli.js99
1 files changed, 99 insertions, 0 deletions
diff --git a/node_modules/istanbul/lib/cli.js b/node_modules/istanbul/lib/cli.js
new file mode 100755
index 000000000..5a8f1bfca
--- /dev/null
+++ b/node_modules/istanbul/lib/cli.js
@@ -0,0 +1,99 @@
+#!/usr/bin/env node
+
+/*
+ Copyright (c) 2012, Yahoo! Inc. All rights reserved.
+ Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
+ */
+
+
+var async = require('async'),
+ Command = require('./command'),
+ inputError = require('./util/input-error'),
+ exitProcess = process.exit; //hold a reference to original process.exit so that we are not affected even when a test changes it
+
+require('./register-plugins');
+
+function findCommandPosition(args) {
+ var i;
+
+ for (i = 0; i < args.length; i += 1) {
+ if (args[i].charAt(0) !== '-') {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+function exit(ex, code) {
+ // flush output for Node.js Windows pipe bug
+ // https://github.com/joyent/node/issues/6247 is just one bug example
+ // https://github.com/visionmedia/mocha/issues/333 has a good discussion
+ var streams = [process.stdout, process.stderr];
+ async.forEach(streams, function (stream, done) {
+ // submit a write request and wait until it's written
+ stream.write('', done);
+ }, function () {
+ if (ex) {
+ if (typeof ex === 'string') {
+ console.error(ex);
+ exitProcess(1);
+ } else {
+ throw ex; // turn it into an uncaught exception
+ }
+ } else {
+ exitProcess(code);
+ }
+ });
+}
+
+function errHandler (ex) {
+ if (!ex) { return; }
+ if (!ex.inputError) {
+ // exit with exception stack trace
+ exit(ex);
+ } else {
+ //don't print nasty traces but still exit(1)
+ console.error(ex.message);
+ console.error('Try "istanbul help" for usage');
+ exit(null, 1);
+ }
+}
+
+function runCommand(args, callback) {
+ var pos = findCommandPosition(args),
+ command,
+ commandArgs,
+ commandObject;
+
+ if (pos < 0) {
+ return callback(inputError.create('Need a command to run'));
+ }
+
+ commandArgs = args.slice(0, pos);
+ command = args[pos];
+ commandArgs.push.apply(commandArgs, args.slice(pos + 1));
+
+ try {
+ commandObject = Command.create(command);
+ } catch (ex) {
+ errHandler(inputError.create(ex.message));
+ return;
+ }
+ commandObject.run(commandArgs, errHandler);
+}
+
+function runToCompletion(args) {
+ runCommand(args, errHandler);
+}
+
+/* istanbul ignore if: untestable */
+if (require.main === module) {
+ var args = Array.prototype.slice.call(process.argv, 2);
+ runToCompletion(args);
+}
+
+module.exports = {
+ runToCompletion: runToCompletion
+};
+