in src/cli.js [80:184]
module.exports = function (inputArgs) {
// If no inputArgs given, use process.argv.
inputArgs = inputArgs || process.argv;
let cmd = inputArgs[2]; // e.g: inputArgs= 'node cordova run ios'
const subcommand = getSubCommand(inputArgs, cmd);
const isTelemetryCmd = (cmd === 'telemetry');
const isConfigCmd = (cmd === 'config');
// ToDO: Move nopt-based parsing of args up here
if (cmd === '--version' || cmd === '-v') {
cmd = 'version';
} else if (!cmd || cmd === '--help' || cmd === 'h') {
cmd = 'help';
}
// If "get" is called
if (isConfigCmd && inputArgs[3] === 'get') {
if (inputArgs[4]) {
logger.subscribe(events);
conf.get(inputArgs[4]);
if (conf.get(inputArgs[4]) !== undefined) {
events.emit('log', conf.get(inputArgs[4]).toString());
} else {
events.emit('log', 'undefined');
}
}
}
// If "set" is called
if (isConfigCmd && inputArgs[3] === 'set') {
if (inputArgs[5] === undefined) {
conf.set(inputArgs[4], true);
}
if (inputArgs[5]) {
conf.set(inputArgs[4], inputArgs[5]);
}
}
// If "delete" is called
if (isConfigCmd && inputArgs[3] === 'delete') {
if (inputArgs[4]) {
conf.del(inputArgs[4]);
}
}
// If "edit" is called
if (isConfigCmd && inputArgs[3] === 'edit') {
editor(conf.path, function (code, sig) {
logger.warn('Finished editing with code ' + code);
});
}
// If "ls" is called
if (isConfigCmd && (inputArgs[3] === 'ls' || inputArgs[3] === 'list')) {
logger.results(JSON.stringify(conf.all, null, 4));
}
return Promise.resolve().then(function () {
/**
* Skip telemetry prompt if:
* - CI environment variable is present
* - Command is run with `--no-telemetry` flag
* - Command ran is: `cordova telemetry on | off | ...`
*/
if (telemetry.isCI(process.env) || telemetry.isNoTelemetryFlag(inputArgs)) {
return Promise.resolve(false);
}
/**
* We shouldn't prompt for telemetry if user issues a command of the form: `cordova telemetry on | off | ...x`
* Also, if the user has already been prompted and made a decision, use his saved answer
*/
if (isTelemetryCmd) {
const isOptedIn = telemetry.isOptedIn();
return handleTelemetryCmd(subcommand, isOptedIn);
}
if (telemetry.hasUserOptedInOrOut()) {
return Promise.resolve(telemetry.isOptedIn());
}
/**
* Otherwise, prompt user to opt-in or out
* Note: the prompt is shown for 30 seconds. If no choice is made by that time, User is considered to have opted out.
*/
return telemetry.showPrompt();
}).then(function (collectTelemetry) {
shouldCollectTelemetry = collectTelemetry;
if (isTelemetryCmd) {
return Promise.resolve();
}
return cli(inputArgs);
}).then(function () {
if (shouldCollectTelemetry && !isTelemetryCmd) {
telemetry.track(cmd, subcommand, 'successful');
}
}).catch(function (err) {
if (shouldCollectTelemetry && !isTelemetryCmd) {
telemetry.track(cmd, subcommand, 'unsuccessful');
}
throw err;
});
};