Source: lib/modules.js

/*------------------------------------*\
	NODE MODULES
\*------------------------------------*/
/* jslint node: true */

/**
 * Require all native modules from Node.js API required by NodeAtlas and set them into `NA#modules`.
 * @publics
 * @function initNodeModules
 * @memberOf NA#
 * @this NA
 */
exports.initNodeModules = function () {
	var NA = this;

	/**
	 * All node.js native modules required by NodeAtlas.
	 * @namespace modules
	 * @type {Object}
	 * @alias modules
	 * @memberOf NA#
	 */
	NA.modules = {};

	/**
	 * Allow you to manage read/write on files.
	 * @alias fs
	 * @type {Object}
	 * @memberOf NA#modules
	 * @see {@link http://nodejs.org/api/fs.html File System}
	 */
	NA.modules.fs = require("fs");

	/**
	 * Allow you to use many features of the HTTP protocol.
	 * @alias http
	 * @type {Object}
	 * @memberOf NA#modules
	 * @see {@link http://nodejs.org/api/http.html HTTP}
	 */
	NA.modules.http = require("http");

	/**
	 * Allow you to use many features of the HTTPs protocol.
	 * @alias https
	 * @type {Object}
	 * @memberOf NA#modules
	 * @see {@link http://nodejs.org/api/https.html HTTPs}
	 */
	NA.modules.https = require("https");

	/**
	 * Allow you to handle and to transform url paths.
	 * @alias url
	 * @type {Object}
	 * @memberOf NA#modules
	 * @see {@link http://nodejs.org/api/url.html URL}
	 */
	NA.modules.url = require("url");

	/**
	 * Allow you to handle and to transform file paths.
	 * @alias path
	 * @type {Object}
	 * @memberOf NA#modules
	 * @see {@link http://nodejs.org/api/path.html Path}
	 */
	NA.modules.path = require("path");
};

/**
 * Load all NPM modules to run a Web Server.
 * @private
 * @function loadServerModules
 * @memberOf NA~
 * @param {NA} NA NodeAtlas instance.
 */
function loadServerModules(NA) {

	/**
	 * An advanced web server.
	 * @function express
	 * @memberOf NA#modules
	 * @external express
	 * @see {@link http://expressjs.com/ Express.js}
	 */
	NA.modules.express = require("express");

	/**
	 * Parse HTML for POST methods.
	 * @function bodyParser
	 * @memberOf NA#modules
	 * @external body-parser
	 * @see {@link https://github.com/expressjs/body-parser body-parser}
	 */
	NA.modules.bodyParser = require("body-parser");

	/**
	 * Manage session of the server.
	 * @function express-session
	 * @memberOf NA#modules
	 * @external express-session
	 * @see {@link https://github.com/expressjs/session express-session}
	 */
	NA.modules.session = require("express-session");

	/**
	 * Parse Cookies for keep connection.
	 * @function cookieParser
	 * @memberOf NA#modules
	 * @external cookie-parser
	 * @see {@link https://github.com/expressjs/cookie-parser cookie-parser}
	 */
	NA.modules.cookieParser = require("cookie-parser");

	/**
	 * Compress code before send it to the client.
	 * @function compress
	 * @memberOf NA#modules
	 * @external compression
	 * @see {@link https://github.com/expressjs/compression compression}
	 */
	NA.modules.compress = require("compression");

	/**
	 * A command tool for run NodeAtlas as CLI.
	 * @alias commander
	 * @type {Object}
	 * @memberOf NA#modules
	 * @external commander
	 * @see {@link https://github.com/tj/commander.js commander.js}
	 */
	NA.modules.commander = require("commander");

	/**
	 * node.js realtime framework server.
	 * @function socketio
	 * @memberOf NA#modules
	 * @external socketio
	 * @see {@link https://www.npmjs.org/package/socket.io Socket.io}
	 */
	NA.modules.socketio = require("socket.io");
}

/**
 * Load all NPM modules for manipulate HTML render.
 * @private
 * @function loadHtmlModules
 * @memberOf NA~
 * @param {NA} NA NodeAtlas instance.
 */
function loadHtmlModules(NA) {

	/**
	 * EJS cleans the HTML out of your JavaScript with client side templates.
	 * @alias ejs
	 * @type {Object}
	 * @memberOf NA#modules
	 * @external ejs
	 * @see {@link http://www.embeddedjs.com/ EJS}
	 */
	NA.modules.ejs = require("ejs");

	/**
	 * A clean, whitespace-sensitive template language for writing HTML.
	 * @alias pug
	 * @type {Object}
	 * @memberOf NA#modules
	 * @external pug
	 * @see {@link https://pugjs.org/ PUG}
	 */
	NA.modules.pug = require("pug");

	/**
	 * jsdom is a pure-JavaScript implementation of many web standards, notably the WHATWG DOM and HTML Standards, for use with Node.js.
	 * @alias jsdom
	 * @type {Object}
	 * @memberOf NA#modules
	 * @external jsdom
	 * @see {@link https://www.npmjs.com/package/jsdom jsdom}
	 */
	NA.modules.jsdom = require("jsdom");
}

/**
 * Load all NPM modules to enhance NodeAtlas.
 * @private
 * @function loadUtilsModules
 * @memberOf NA~
 * @param {NA} NA NodeAtlas instance.
 */
function loadUtilsModules(NA) {

	/**
	 * Higher-order functions and common patterns for asynchronous code.
	 * @alias async
	 * @type {Object}
	 * @memberOf NA#modules
	 * @external async
	 * @see {@link https://www.npmjs.com/package/async async}
	 */
	NA.modules.async = require("async");

	/**
	 * An implementation of heritage.
	 * @function extend
	 * @memberOf NA#modules
	 * @external extend
	 * @see {@link https://www.npmjs.org/package/extend extend}
	 */
	NA.modules.extend = require("extend");

	/**
	 * Open a file or url in the user's preferred application.
	 * @function opn
	 * @memberOf NA#modules
	 * @external opn
	 * @see {@link https://www.npmjs.com/package/opn opn}
	 */
	NA.modules.opn = require("opn");

	/**
	 * Make all directories in a path, like mkdir -p.
	 * @function mkpath
	 * @memberOf NA#modules
	 * @external mkpath
	 * @see {@link https://www.npmjs.org/package/mkpath mkpath}
	 */
	NA.modules.mkpath = require("mkpath");

	/**
	 * Easy used "copy-dir" method, even use a filter, copy a file or directory to another path.
	 * @function copyDir
	 * @memberOf NA#modules
	 * @external copy-dir
	 * @see {@link https://www.npmjs.com/package/copy-dir}
	 */
	NA.modules.copyDir = require("copy-dir");
}

/**
 * Load all NPM modules for preproccessing, minification, obfuscation and optimization.
 * @private
 * @function loadOptimizationsModules
 * @memberOf NA#
 * @param {NA} NA NodeAtlas instance.
 */
 function loadOptimizationsModules(NA) {

	/**
	 * CSS parser.
	 * @function cssParse
	 * @memberOf NA#modules
	 * @external css-parse
	 * @see {@link https://www.npmjs.com/package/css-parse css-parse}
	 */
	NA.modules.cssParse = require("css-parse");

	/**
	 * A fast, efficient, and well tested CSS minifier for node.js.
	 * @function cleanCss
	 * @memberOf NA#modules
	 * @external clean-css
	 * @see {@link https://github.com/jakubpawlowicz/clean-css clean-css}
	 */
	NA.modules.cleanCss = require("clean-css");

	/**
	 * uglify-es is an ECMAScript 2015 parser, minifier, compressor and beautifier toolkit.
	 * @alias uglifyEs
	 * @type {Object}
	 * @memberOf NA#modules
	 * @external uglify-es
	 * @see {@link https://github.com/mishoo/UglifyJS2/tree/harmony UglifyES}
	 */
	NA.modules.uglifyEs = require("uglify-es");

	/**
	 * An autoprefixer plugin for stylus.
	 * @function prefixStylus
	 * @memberOf NA#modules
	 * @external prefixStylus
	 * @see {@link https://www.npmjs.com/package/autoprefixer-stylus prefixStylus}
	 */
	NA.modules.prefixStylus = require("autoprefixer-stylus");

	/**
	 * Robust, expressive, and feature-rich CSS superset
	 * @function stylus
	 * @memberOf NA#modules
	 * @external stylus
	 * @see {@link https://www.npmjs.com/package/stylus stylus}
	 */
	NA.modules.stylus = require("stylus");

	/**
	 * Uses autoprefixer to add prefixes to css after conversion from less.
	 * @alias prefixLess
	 * @type {Object}
	 * @memberOf NA#modules
	 * @external prefixLess
	 * @see {@link https://www.npmjs.com/package/less-plugin-autoprefix prefixLess}
	 */
	NA.modules.prefixLess = require("less-plugin-autoprefix");

	/**
	 * The dynamic stylesheet language. http://lesscss.org.
	 * @alias less
	 * @type {Object}
	 * @memberOf NA#modules
	 * @external less
	 * @see {@link https://www.npmjs.com/package/less less}
	 */
	NA.modules.less = require("less");

	/**
	 * LESS.js middleware for connect.
	 * @alias lessMiddleware
	 * @type {Object}
	 * @memberOf NA#modules
	 * @external less-middleware
	 * @see {@link https://www.npmjs.com/package/less-middleware less-middleware}
	 */
	NA.modules.lessMiddleware = require("less-middleware");
	NA.modules.lessMiddlewareUtilities = require("less-middleware/lib/utilities");
}

/**
 * Require all NPM modules required by NodeAtlas and set them into `NA#modules`.
 * @public
 * @function initNpmModules
 * @memberOf NA#
 * @this NA
 */
exports.initNpmModules = function () {
	var NA = this;

	/* Load all modules. */
	loadServerModules(NA);
	loadHtmlModules(NA);
	loadUtilsModules(NA);
	loadOptimizationsModules(NA);
};