123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- var _ = require('lodash');
- var apidoc = require('apidoc-core');
- var fs = require('fs-extra');
- var path = require('path');
- var winston = require('winston');
- var Markdown = require('markdown-it');
- var PackageInfo = require('./package_info');
- var defaults = {
- dest : path.join(__dirname, '../doc/'),
- template: path.join(__dirname, '../template/'),
- debug : false,
- silent : false,
- verbose : false,
- simulate : false,
- parse : false,
- colorize : true,
- markdown : true,
- config : './',
- apiprivate: false,
- encoding : 'utf8'
- };
- var app = {
- log : {},
- markdownParser: null,
- options : {}
- };
- process.on('uncaughtException', function(err) {
- console.error((new Date()).toUTCString() + ' uncaughtException:', err.message);
- console.error(err.stack);
- process.exit(1);
- });
- function createDoc(options) {
- var api;
- var apidocPath = path.join(__dirname, '../');
- var markdownParser;
- var packageInfo;
- options = _.defaults({}, options, defaults);
-
- options.dest = path.join(options.dest, './');
- options.template = path.join(options.template, './');
-
- if (options.lineEnding) {
- if (options.lineEnding === 'CRLF')
- options.lineEnding = '\r\n';
- else if (options.lineEnding === 'CR')
- options.lineEnding = '\r';
- else
- options.lineEnding = '\n';
- }
-
- app.options = options;
-
- app.log = new (winston.Logger)({
- transports: [
- new (winston.transports.Console)({
- level : app.options.debug ? 'debug' : app.options.verbose ? 'verbose' : 'info',
- silent : app.options.silent,
- prettyPrint: true,
- colorize : app.options.colorize,
- timestamp : false
- }),
- ]
- });
-
- if(app.options.markdown === true) {
- markdownParser = new Markdown({
- breaks : false,
- html : true,
- linkify : false,
- typographer: false
- });
- } else if(app.options.markdown !== false) {
-
- Markdown = require(app.options.markdown);
- markdownParser = new Markdown();
- }
- app.markdownParser = markdownParser;
- try {
- packageInfo = new PackageInfo(app);
-
- var json = JSON.parse( fs.readFileSync(apidocPath + 'package.json', 'utf8') );
- apidoc.setGeneratorInfos({
- name : json.name,
- time : new Date(),
- url : json.homepage,
- version: json.version
- });
- apidoc.setLogger(app.log);
- apidoc.setMarkdownParser(markdownParser);
- apidoc.setPackageInfos(packageInfo.get());
- api = apidoc.parse(app.options);
- if (api === true) {
- app.log.info('Nothing to do.');
- return true;
- }
- if (api === false)
- return false;
- if (app.options.parse !== true)
- createOutputFiles(api);
- app.log.info('Done.');
- return api;
- } catch(e) {
- app.log.error(e.message);
- if (e.stack)
- app.log.debug(e.stack);
- return false;
- }
- }
- function createOutputFiles(api) {
- if (app.options.simulate)
- app.log.warn('!!! Simulation !!! No file or dir will be copied or created.');
- app.log.verbose('create dir: ' + app.options.dest);
- if ( ! app.options.simulate)
- fs.mkdirsSync(app.options.dest);
- app.log.verbose('copy template ' + app.options.template + ' to: ' + app.options.dest);
- if ( ! app.options.simulate)
- fs.copySync(app.options.template, app.options.dest);
-
- app.log.verbose('write json file: ' + app.options.dest + 'api_data.json');
- if( ! app.options.simulate)
- fs.writeFileSync(app.options.dest + './api_data.json', api.data + '\n');
- app.log.verbose('write js file: ' + app.options.dest + 'api_data.js');
- if( ! app.options.simulate)
- fs.writeFileSync(app.options.dest + './api_data.js', 'define({ "api": ' + api.data + ' });' + '\n');
-
- app.log.verbose('write json file: ' + app.options.dest + 'api_project.json');
- if( ! app.options.simulate)
- fs.writeFileSync(app.options.dest + './api_project.json', api.project + '\n');
- app.log.verbose('write js file: ' + app.options.dest + 'api_project.js');
- if( ! app.options.simulate)
- fs.writeFileSync(app.options.dest + './api_project.js', 'define(' + api.project + ');' + '\n');
- }
- module.exports = {
- createDoc: createDoc
- };
|