Skip to content

Commit c8ad087

Browse files
committed
Refactor CLI parsing
1 parent 5a5ebaf commit c8ad087

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

bin/documentation.js

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,23 @@ commands[parsedArgs.command](documentation, parsedArgs);
1414

1515
function parseArgs() {
1616

17-
var commandArgv = addCommands(yargs)
17+
var rawArgv = addCommands(yargs)
1818
.version(function () {
1919
return require('../package').version;
2020
})
2121
.argv;
2222

23-
var argv = commands[commandArgv._[0]]
24-
.parseArgs(yargs.reset()).argv;
23+
var command = rawArgv._[0];
24+
25+
if (!commands[command]) {
26+
yargs.showHelp();
27+
var suggestion = [rawArgv['$0'], 'build'].concat(process.argv.slice(2)).join(' ');
28+
process.stderr.write('Unknown command: ' + command + '. Did you mean "' + suggestion + '"?\n');
29+
process.exit(1);
30+
}
31+
32+
var argv = commands[command].parseArgs(yargs.reset()).argv;
33+
var inputs = argv._.slice(1);
2534

2635
var options = {};
2736
if (argv.config) {
@@ -37,16 +46,6 @@ function parseArgs() {
3746
options.access = (options.access || ['public', 'undefined', 'protected']).concat(['private']);
3847
}
3948

40-
var command = argv._[0],
41-
inputs = argv._.slice(1);
42-
43-
if (!commands[command]) {
44-
yargs.showHelp();
45-
var suggestion = [argv['$0'], 'build'].concat(process.argv.slice(2)).join(' ');
46-
process.stderr.write('Unknown command: ' + command + '. Did you mean "' + suggestion + '"?\n');
47-
process.exit(1);
48-
}
49-
5049
if (inputs.length == 0) {
5150
try {
5251
var p = require(path.resolve('package.json'));
@@ -66,8 +65,8 @@ function parseArgs() {
6665
};
6766
}
6867

69-
function addCommands(parser, descriptionOnly) {
70-
return Object.keys(commands).reduce(function(parser, cmd) {
68+
function addCommands(parser) {
69+
return Object.keys(commands).reduce(function (parser, cmd) {
7170
return parser.command(cmd, commands[cmd].description);
7271
}, parser.demand(1)).help('help');
7372
}

lib/commands/build.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ function build(documentation, parsedArgs, callback) {
4040
var inputs = parsedArgs.inputs;
4141
var buildOptions = parsedArgs.commandOptions;
4242
var options = parsedArgs.options;
43+
if (options.f === 'html' && options.o === 'stdout') {
44+
throw new Error('The HTML output mode requires a destination directory set with -o');
45+
}
4346
var formatterOptions = {
4447
name: buildOptions.name || (options.package || {}).name,
4548
version: buildOptions['project-version'] || (options.package || {}).version,

lib/commands/shared_options.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
/**
22
* Adds shared options to any command that runs documentation
3+
*
4+
* @param {Object} parser yargs object
5+
* @returns {Object} same yargs object with options
6+
* @private
37
*/
48
function sharedInputOptions(parser) {
59
return parser.option('shallow', {
@@ -45,10 +49,17 @@ function sharedInputOptions(parser) {
4549
describe: 'infer links to github in documentation',
4650
alias: 'g'
4751
});
48-
};
52+
}
4953

50-
function sharedOutputOptions(yargs) {
51-
return yargs.option('theme', {
54+
/**
55+
* Adds shared options to any command that runs documentation
56+
*
57+
* @param {Object} parser yargs object
58+
* @returns {Object} same yargs object with options
59+
* @private
60+
*/
61+
function sharedOutputOptions(parser) {
62+
return parser.option('theme', {
5263
describe: 'specify a theme: this must be a valid theme module',
5364
alias: 't'
5465
})

0 commit comments

Comments
 (0)