dgeni-alive
Version:
Live doc generator on top of Dgeni
104 lines (92 loc) • 3.4 kB
JavaScript
/*
* dgeni-alive
* https://github.com/wingedfox/dgeni-alive
*
* Copyright (c) 2016 Ilya WingedFox Lebedev ilya@lebedev.net
* Licensed under the MIT license.
*/
;
var docgen = require('../src/docgen')();
var _ = require('lodash');
var path = require('path');
var defaults = {
root: process.cwd(),
port: 10000,
host: '127.0.0.1',
cache: 20,
showDir : true,
autoIndex: true,
ext: 'html',
runInBackground: false,
cors: false,
openBrowser : false
};
module.exports = function (grunt) {
// register task
grunt.registerMultiTask('dgeni-alive', 'Generate live docs with ngdoc/dgeni.', function () {
var debug = !!grunt.option('debug');
var serve = this.options().serve;
var dest = path.resolve(this.data.dest);
var apiOptions = this.data;
// enable debug
docgen.Package().config(function(log) {
log.level = debug? 'debug': 'info';
})
.config(function(templateFinder) {
if(apiOptions.templatePaths) {
apiOptions.templatePaths.forEach(function(templatePath) {
grunt.log.writeln('Adding template path: %s', path.resolve(templatePath));
templateFinder.templateFolders.unshift(path.resolve(templatePath));
});
}
})
.config(function(generateWebsite) {
if(apiOptions.templateOverrides) {
apiOptions.templateOverrides.forEach(function(template) {
grunt.log.writeln('Overriding template: %s', path.resolve(template.template));
generateWebsite.addTemplateOverride(template.template, template.file);
});
}
});
var done = this.async();
if (this.data.title) {
docgen.title(this.data.title);
}
if (this.data.version) {
docgen.version(this.data.version);
}
docgen.src(this.filesSrc);
docgen.dest(dest);
docgen.generate().then(function (data) {
if (serve) {
var options = _.extend({}, defaults, {
root: dest
}, serve);
var url = _.template('http://<%= host %>:<%= port %>/')(options);
var server = require('http-server').createServer(options);
server.listen(options.port, options.host, function () {
grunt.log.writeln('Server running on %s', url);
grunt.log.ok('Hit CTRL-C to stop the server');
if (options.openBrowser){
require('opener')(url, {
command: options.openBrowser !== true ? options.openBrowser : null
});
}
process.on('SIGINT', function () {
process.stdout.clearLine();
process.stdout.cursorTo(0);
grunt.log.verbose.ok('http-server stopped').or.writeln('');
server.close();
done();
process.exit();
});
});
} else {
done(data);
}
}).catch(function(data) {
done(data);
});
});
};
module.exports.docgen = docgen;