UNPKG

crn-cli

Version:

The Ctrip React Native CLI Tools

57 lines (49 loc) 1.63 kB
/** * copy form react-native-cli */ 'use strict'; var optimistModule = require('optimist'); function parseCommandLine(config, args) { var optimist = new optimistModule(); args = args || process.argv; // optimist default API requires you to write the command name three time // This is a small wrapper to accept an object instead for (var i = 0; i < config.length; ++i) { if (config[i].type === 'string') { optimist.string(config[i].command); } else { optimist.boolean(config[i].command); } optimist .default(config[i].command, config[i].default) .describe(config[i].command, config[i].description); if (config[i].required) { optimist.demand(config[i].command); } } var argv = optimist.parse(args); // optimist doesn't have support for --dev=false, instead it returns 'false' for (var i = 0; i < config.length; ++i) { var command = config[i].command; if (argv[command] === undefined) { argv[command] = config[i].default; } if (argv[command] === 'true') { argv[command] = true; } if (argv[command] === 'false') { argv[command] = false; } if (config[i].type === 'string') { // According to https://github.com/substack/node-optimist#numbers, // every argument that looks like a number should be converted to one. // var strValue = argv[command]; // var numValue = strValue ? Number(strValue) : undefined; // if (typeof numValue === 'number' && !isNaN(numValue)) { // argv[command] = numValue; // } } } return argv; } module.exports = parseCommandLine;