UNPKG

raptor

Version:

RaptorJS provides an AMD module loader that works in Node, Rhino and the web browser. It also includes various sub-modules to support building optimized web applications.

153 lines (123 loc) 4.82 kB
var raptor = require('raptor'); var define = raptor.createDefine(module); require('raptor/logging').configure({ loggers: { 'ROOT': {level: 'WARN'}, "raptor/jsdoc": {level: "INFO"}, "raptor-jsdoc-app": {level: "INFO"}, } }); var files = require('raptor/files'), File = require('raptor/files/File'), jsdoc = require('raptor/jsdoc'), walker = require('raptor/files/walker'), logger = require('raptor/logging').logger('raptor-jsdoc-app'), configArgRegExp=/^(?:-|--)([A-Za-z0-9_\-]+)(?:=([^\s]+))?$/, paramArgRegExp=/^([A-Za-z0-9_\-]+)(?:=([^\s]+))?$/, cwd = process.cwd(), resolveFile = function(path, basePath) { if (!path) { return path; } return new File(files.resolvePath(basePath || cwd, path)); }, parseArgs = function(args) { var config={}; args.forEach(function(arg, i) { var matches; if ((matches = configArgRegExp.exec(arg))) { config[matches[1]] = matches[2] || ''; } else if ((matches = paramArgRegExp.exec(arg))) { config[matches[1]] = matches[2]; } else { config["source-dir"] = arg; } }); return config; }, config = parseArgs(process.argv.slice(2)); var outputDir = config['output-dir'] || config['out'] || files.joinPaths(__dirname, 'api'); var src = config['dir'] || config['source-dir'] || config['source'] || config['src']; var templateFile = config['template']; var clean = config['clean'] || config['clean-dir']; if (clean) { clean.split(/[;,:]/).forEach(function(cleanPath) { var cleanDir = resolveFile(cleanPath); logger.info('Deleting directory "' + cleanDir + '"...'); if (cleanDir.exists()) { cleanDir.remove(); } }, this); } outputDir = config['outputDir'] = resolveFile(outputDir); if (!templateFile) { templateFile = resolveFile('default-template', __dirname); } else { templateFile = resolveFile(templateFile); } if (templateFile.isDirectory()) { templateFile = new File(templateFile, 'publish.js'); } config.templateDir = templateFile.getParentFile(); var propsPaths = config['props']; if (propsPaths) { propsPaths.split(/[;,:]/).forEach(function(path) { var propsFile = resolveFile(path); if (propsFile.exists()) { var props = eval('(' + propsFile.readAsString() + ')'); raptor.extend(config, props); } }, this); } exports.run = function() { try { if (!templateFile.exists()) { console.error('Template not found at path "' + templateFile + '"'); return; } if (!src) { console.error('"dir" argument is required. Example: raptor-docs dir=path-to-src-dir'); return; } var sourceDirs = src.split(/[;:,]/).map(function(sourceDir) { return resolveFile(sourceDir); }); //Add the resources for the plugin to the resource search path require('raptor/resources').getSearchPath().addDir(templateFile.getParent()); require('raptor/resources').getSearchPath().addDir(outputDir); logger.info("Output directory: " + outputDir); logger.info("Source directories: [" + sourceDirs.join(",") + ']'); logger.info("Template: " + templateFile); console.log(); var currentFile = null; var env = jsdoc.createEnvironment(); env.getSymbols().subscribe({ 'newSymbol': function(eventArgs) { eventArgs.type.sourceFile = currentFile; console.log(' NEW SYMBOL "' + eventArgs.name + '":\n ' + eventArgs.type.toString(" ")); } }); require('raptor/jsdoc/raptor-plugin').load(env); sourceDirs.forEach(function(sourceDir) { logger.info('Loading symbols in directory "' + sourceDir + '"...'); walker.walk(sourceDir, function(file) { currentFile = file; env.addFile(file, sourceDir); if (file.isFile()) { if (file.getExtension() === 'js') { console.log('\n==========================================================================\nLoading symbols in file "' + file + '"...'); jsdoc.loadSymbols(file, env); } } }); }); require(templateFile.getAbsolutePath()).publish(env.getSymbols(), config, env); } catch(e) { logger.error("Unable to generate jsdocs: Exception: " + e, e); } };