mirror of
https://github.com/documentationjs/documentation.git
synced 2026-01-18 14:17:30 +00:00
85 lines
2.0 KiB
JavaScript
Executable File
85 lines
2.0 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/* eslint no-console: 0 */
|
|
|
|
'use strict';
|
|
|
|
var documentation = require('../'),
|
|
chokidar = require('chokidar'),
|
|
debounce = require('debounce'),
|
|
streamArray = require('stream-array'),
|
|
fs = require('fs'),
|
|
vfs = require('vinyl-fs'),
|
|
errorPage = require('../lib/error_page'),
|
|
Server = require('../lib/server'),
|
|
args = require('../lib/args');
|
|
|
|
var parsedArgs = args(process.argv.slice(2));
|
|
|
|
var generator = documentation.bind(null,
|
|
parsedArgs.inputs, parsedArgs.options, onDocumented.bind(null, parsedArgs));
|
|
|
|
var server = new Server();
|
|
server.on('listening', function () {
|
|
process.stdout.write('documentation.js serving on port 4001\n');
|
|
});
|
|
|
|
function onDocumented(parsedArgs, err, comments) {
|
|
if (err) {
|
|
if (parsedArgs.command === 'serve') {
|
|
return server.setFiles([errorPage(err)]).start();
|
|
}
|
|
throw err;
|
|
}
|
|
|
|
documentation.formats[parsedArgs.formatter](
|
|
comments, parsedArgs.formatterOptions,
|
|
onFormatted.bind(null, parsedArgs));
|
|
}
|
|
|
|
function onFormatted(parsedArgs, err, output) {
|
|
if (parsedArgs.watch) {
|
|
updateWatcher();
|
|
}
|
|
|
|
if (parsedArgs.command === 'serve') {
|
|
server.setFiles(output).start();
|
|
} else if (parsedArgs.output === 'stdout') {
|
|
process.stdout.write(output);
|
|
} else if (Array.isArray(output)) {
|
|
streamArray(output).pipe(vfs.dest(parsedArgs.output));
|
|
} else {
|
|
fs.writeFileSync(parsedArgs.output, output);
|
|
}
|
|
}
|
|
|
|
if (parsedArgs.command === 'lint') {
|
|
documentation.lint(parsedArgs.inputs, parsedArgs.options, function (err, lintOutput) {
|
|
if (err) {
|
|
throw err;
|
|
}
|
|
if (lintOutput) {
|
|
console.log(lintOutput);
|
|
process.exit(1);
|
|
} else {
|
|
process.exit(0);
|
|
}
|
|
});
|
|
} else {
|
|
generator();
|
|
if (parsedArgs.watch) {
|
|
var watcher = chokidar.watch(parsedArgs.inputs);
|
|
watcher.on('all', debounce(generator, 300));
|
|
}
|
|
}
|
|
|
|
function updateWatcher() {
|
|
documentation.expandInputs(parsedArgs.inputs, parsedArgs.options, addNewFiles);
|
|
}
|
|
|
|
function addNewFiles(err, files) {
|
|
watcher.add(files.map(function (data) {
|
|
return data.file;
|
|
}));
|
|
}
|