-
Notifications
You must be signed in to change notification settings - Fork 58
/
args.js
101 lines (90 loc) · 2.46 KB
/
args.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
* mochify.js
*
* Copyright (c) 2014 Maximilian Antoni <mail@maxantoni.de>
*
* @license MIT
*/
'use strict';
var subarg = require('subarg');
var url = require('url');
var defaults = {
watch: false,
cover: false,
node: false,
debug: false,
dumpio: false,
wd: false,
recursive: false,
'ignore-ssl-errors': false,
'browser-field': true,
commondir: true,
reporter: 'spec',
timeout: '2000',
yields: '0',
colors: null,
'async-polling': true,
'request-interception': true
};
function args(argv) {
var opts = subarg(argv, {
string: ['reporter', 'ui', 'chrome', 'consolify', 'timeout', 'port',
'yields', 'transform', 'global-transform', 'plugin', 'grep', 'url',
'require', 'extension', 'bundle', 'wd-file', 'path', 'external',
'viewport-width', 'viewport-height', 'outfile', 'https-server',
'mocha-path', 'web-security'],
boolean: ['help', 'version', 'watch', 'cover', 'node', 'wd', 'debug',
'invert', 'recursive', 'colors', 'ignore-ssl-errors', 'browser-field',
'commondir', 'allow-chrome-as-root', 'async-polling', 'dumpio',
'request-interception'],
alias: {
help: 'h',
version: 'v',
watch: 'w',
reporter: 'R',
ui: 'U',
timeout: 't',
yields: 'y',
require: 'r',
outfile: 'o'
},
default: defaults,
unknown: function (arg) {
if (arg.indexOf('-') === 0) {
console.log('Unknown argument: ' + arg);
console.log('Run `mochify --help` for usage.\n');
process.exit(1);
}
}
});
if (opts.help) {
/*eslint no-sync: 0*/
console.log(require('fs').readFileSync(__dirname + '/help.txt', 'utf8'));
process.exit(0);
}
if (opts.version) {
console.log(require('../package.json').version);
process.exit(0);
}
['timeout', 'port', 'yields', 'viewport-height', 'viewport-width']
.forEach(function (prop) {
if (opts.hasOwnProperty(prop)) {
opts[prop] = parseInt(opts[prop], 10);
}
});
if (opts.hasOwnProperty('url')) {
opts.url = url.parse(opts.url);
delete opts.url.host;
}
if (opts.hasOwnProperty('https-server')) {
opts['https-server'] = parseInt(opts['https-server'], 10) || 0;
} else if (opts.hasOwnProperty('url')) {
opts['https-server'] = parseInt(opts.url.port, 10) || 0;
}
if (opts.hasOwnProperty('web-security')) {
opts['web-security'] = opts['web-security'] === 'true';
}
return opts;
}
args.defaults = defaults;
module.exports = args;