#!/usr/bin/env node
/*global arguments, require: true */
/**
* @project jsdoc
* @author Michael Mathews <micmath@gmail.com>
* @license See LICENSE.md file included in this distribution.
*/
// initialize the environment for the current JavaScript VM
(function(args) {
'use strict';
var path;
Eif (args[0] && typeof args[0] === 'object') {
// we should be on Node.js
args = [__dirname, process.cwd()];
path = require('path');
// Create a custom require method that adds `lib/jsdoc` and `node_modules` to the module
// lookup path. This makes it possible to `require('jsdoc/foo')` from external templates and
// plugins, and within JSDoc itself. It also allows external templates and plugins to
// require JSDoc's module dependencies without installing them locally.
require = require('requizzle')({
requirePaths: {
before: [path.join(__dirname, 'lib')],
after: [path.join(__dirname, 'node_modules')]
},
infect: true
});
}
require('./lib/jsdoc/util/runtime').initialize(args);
})( Array.prototype.slice.call(arguments, 0) );
/**
* Data about the environment in which JSDoc is running, including the configuration settings that
* were used to run JSDoc.
*
* @deprecated As of JSDoc 3.4.0. Use `require('jsdoc/env')` to access the `env` object. The global
* `env` object will be removed in a future release.
* @namespace
* @name env
*/
global.env = (function() {
'use strict';
// This bit of joy is here because Rhino treats `./lib/jsdoc/env` and `jsdoc/env` as separate
// modules. In contrast, Node.js errors out on `jsdoc/env` because we don't patch `require()`
// until after this file is loaded.
Iif (require('./lib/jsdoc/util/runtime').isRhino()) {
return require('jsdoc/env');
}
else {
return require('./lib/jsdoc/env');
}
})();
/**
* Data that must be shared across the entire application.
*
* @deprecated As of JSDoc 3.4.0. Avoid using the `app` object. The global `app` object and the
* `jsdoc/app` module will be removed in a future release.
* @namespace
* @name app
*/
global.app = (function() {
'use strict';
// See comment in `global.env` to find out why we jump through this hoop.
Iif (require('./lib/jsdoc/util/runtime').isRhino()) {
return require('jsdoc/app');
}
else {
return require('./lib/jsdoc/app');
}
})();
(function() {
'use strict';
var env = global.env;
var logger = require('./lib/jsdoc/util/logger');
var runtime = require('./lib/jsdoc/util/runtime');
var cli = require('./cli');
function cb(errorCode) {
cli.logFinish();
cli.exit(errorCode || 0);
}
cli.setVersionInfo()
.loadConfig();
Iif (!env.opts.test) {
cli.configureLogger();
}
cli.logStart();
Iif (env.opts.debug) {
/**
* Recursively print an object's properties to stdout. This method is safe to use with
* objects that contain circular references. In addition, on Mozilla Rhino, this method is
* safe to use with native Java objects.
*
* This method is available only when JSDoc is run with the `--debug` option.
*
* @global
* @name dump
* @private
* @param {...*} obj - Object(s) to print to stdout.
*/
global.dump = function() {
console.log(require('./lib/jsdoc/util/dumper').dump(arguments));
};
}
// On Rhino, we use a try/catch block so we can log the Java exception (if available)
Iif ( runtime.isRhino() ) {
try {
cli.runCommand(cb);
}
catch(e) {
if (e.rhinoException) {
logger.fatal( e.rhinoException.printStackTrace() );
} else {
console.trace(e);
cli.exit(1);
}
}
}
else {
cli.runCommand(cb);
}
})();
|