#!/usr/bin/env node
var argv = require('yargs')
.usage('Usage: $0 [options] file...')
.alias('v', 'version')
.version(function() { return require('../package').version; })
.describe('v', 'show version information')
.help('h')
.alias('h', 'help')
.option('r', {
alias : 'readme',
describe: 'Provide a README markdown file',
type: 'string',
nargs: 1,
default: null
})
.option('n', {
alias : 'name',
describe: 'The name of the project',
type: 'string',
nargs: 1,
default: null
})
.option('o', {
alias : 'output',
describe: 'The output directory',
type: 'string',
nargs: 1,
default: 'docs'
})
.option('owners', {
describe: 'The owners of the project',
type: 'string',
nargs: 1,
default: null
})
.option('project-version', {
alias: 'p',
describe: 'A version number. Use "package.json" to read from that file.',
type: 'string',
nargs: 1,
default: null
})
.option('config', {
alias: 'c',
describe: 'A JSON configuration file',
type: 'string',
nargs: 1,
default: null
})
.epilog('Copyright 2016')
.argv;
var winston = require('winston');
var logger = new winston.Logger({
level: 'info',
transports: [
new (winston.transports.Console)({
colorize: true
})
]
});
var process = require('process');
var fs = require('fs-extra');
var jsonfile = require('jsonfile');
var indoc = require('../lib/main');
////////////////////////////////////////////////
if(argv.config) {
jsonfile.readFile(argv.config, function(err, data) {
if(err) {
logger.log('error', 'Could not read config file "' + argv.config + '"');
return;
}
run(data);
});
} else {
if(argv._.length == 0) {
logger.log('error', 'No files specified');
process.exit(0);
}
run({
files: argv._,
readme: argv.r,
name: argv.n,
output: argv.o,
owners: argv.owners,
version: argv['project-version'],
});
}
////////////////////////////////////////////////
function run(options) {
function elapsed(start) {
return ((Date.now() - start) * 0.001).toFixed(2) + 's';
}
var start = Date.now();
var project = new indoc.Project(options);
project.on('duplicate-file', function(data) {
logger.log('warn', 'Duplicate file "' + data.filename + '"');
});
project.on('recursive-file', function(data) {
logger.log('warn', 'File "' + data.filename + '" is in the output directory, ignoring');
});
project.on('project-link-err', function(data) {
logger.log('warn', 'File "' + data.filename + '" links to nonexistent file "' + data.link + '"');
});
project.on('template-err', function(data) {
logger.log('error', 'Could not read template "' + data.filename + '"');
process.exit(1);
});
project.on('package-json-err', function(data) {
logger.log('error', 'Could not get version number from "package.json"');
});
project.on('language-not-found', function(data) {
logger.log('error', 'Could not detect the programming language of "' + data.filename + '"');
});
project.on('language-highlight-err', function(data) {
logger.log('error', 'Could not highlight "' + data.filename + '" ("' + data.language + '" not known by highlight.js)');
});
project.on('readme-err', function(data) {
logger.log('warn', 'Could not open README file "' + data.filename + '"');
});
project.on('copy-err', function(data) {
logger.log('warn', 'Could not copy file "' + data.src + '" to "' + data.dest + '"');
});
project.on('run-file-complete', function(data) {
if(data.err) {
logger.log('error', 'Could not generate "' + data.data.filename + '"');
return;
}
logger.log('info', 'Generated "' + data.data.filename + '"');
});
project.run(function(err, data) {
var total = data.total;
var errors = data.errors;
var number = total;
if(errors) number = (total - errors) + '/' + total;
logger.log('info', 'Successfully generated ' + number + ' file' + (total == 1 ? '' : 's') + ' in ' + elapsed(start));
});
}