UNPKG

2.48 kBJavaScriptView Raw
1var Parameter, _, settings, state, yargsParser;
2
3_ = require('lodash');
4
5_.str = require('underscore.string');
6
7yargsParser = require('yargs-parser');
8
9settings = require('./settings');
10
11state = require('./state');
12
13Parameter = require('./parameter');
14
15exports.normalizeInput = function(argv) {
16 if (argv === process.argv) {
17 argv = argv.slice(2);
18 }
19 if (_.isArray(argv)) {
20 return argv;
21 }
22 if (_.isString(argv)) {
23 return exports.split(argv);
24 }
25 throw new Error('Invalid argument list');
26};
27
28exports.parse = function(argv) {
29 var options, output, result;
30 argv = exports.normalizeInput(argv);
31 output = yargsParser(argv);
32 options = _.omit(output, '_');
33 result = {};
34 result.options = options;
35 result.global = exports.parseOptions(state.globalOptions, options);
36 if (!_.isEmpty(output._)) {
37 output._ = _.map(output._, function(word) {
38 var wordParameter;
39 wordParameter = new Parameter(word);
40 return wordParameter.toString();
41 });
42 result.command = output._.join(' ');
43 }
44 return result;
45};
46
47exports.split = function(string) {
48 var pair, regex, result;
49 if (string == null) {
50 return [];
51 }
52 regex = '';
53 pair = function(arg) {
54 var end, start;
55 start = arg[0], end = arg[1];
56 start = '\\' + start;
57 end = '\\' + end;
58 return regex += start + "[^" + end + "]+" + end + "|";
59 };
60 pair('[]');
61 pair('<>');
62 pair('""');
63 pair("''");
64 regex += '\\S+';
65 result = string.match(new RegExp(regex, 'g')) || [];
66 return _.map(result, function(word) {
67 word = _.str.unquote(word, '\'');
68 word = _.str.unquote(word, '"');
69 return word;
70 });
71};
72
73exports.parseOptions = function(definedOptions, options) {
74 var definedOption, i, len, result, signature, value;
75 if (options == null) {
76 options = {};
77 }
78 result = {};
79 for (i = 0, len = definedOptions.length; i < len; i++) {
80 definedOption = definedOptions[i];
81 signature = definedOption.signature;
82 value = definedOption.getOptionsValue(options);
83 if ((definedOption.required != null) && (value == null)) {
84 if (_.isString(definedOption.required)) {
85 throw new Error(definedOption.required);
86 } else if (definedOption.required) {
87 throw new Error("Option " + definedOption.signature + " is required");
88 }
89 }
90 if (!definedOption.matches(value)) {
91 continue;
92 }
93 if (/^\d+$/.test(value)) {
94 value = _.parseInt(value);
95 }
96 result[signature] = value;
97 }
98 return result;
99};