UNPKG

crojsdoc

Version:

A documentation generator for JavaScript and CoffeeScript

194 lines (181 loc) 6.94 kB
// Generated by CoffeeScript 1.8.0 (function() { var basename, dirname, fs, glob, isWindows, join, resolve, walkdir, _buildOptions, _parseArguments, _readConfig, _readExternalTypes, _readSourceFiles, _ref; fs = require('fs'); glob = require('glob'); walkdir = require('walkdir'); _ref = require('path'), basename = _ref.basename, dirname = _ref.dirname, join = _ref.join, resolve = _ref.resolve; isWindows = process.platform === 'win32'; _readConfig = function(options) { var config, safeLoad; safeLoad = require('js-yaml').safeLoad; try { config = safeLoad(fs.readFileSync(join(process.cwd(), 'crojsdoc.yaml'), 'utf-8')); if (config.hasOwnProperty('output')) { options.output = config.output; } if (config.hasOwnProperty('title')) { options.title = config.title; } if (config.hasOwnProperty('quite')) { options.quite = config.quite === true; } if (config.hasOwnProperty('files')) { options.files = config.files === true; } if (config.hasOwnProperty('readme') && typeof config.readme === 'string') { options._readme = config.readme; } if (config.hasOwnProperty('external-types')) { options['external-types'] = config['external-types']; } if (config.hasOwnProperty('sources')) { if (Array.isArray(config.sources)) { [].push.apply(options._sources, config.sources); } else { options._sources.push(config.sources); } } if (config.hasOwnProperty('github')) { options.github = config.github; if (options.github.branch === void 0) { options.github.branch = 'master'; } } if (config.hasOwnProperty('reverse_see_also')) { options.reverse_see_also = config.reverse_see_also === true; } } catch (_error) {} }; _parseArguments = function(options) { var OptionParser, parser, switches; OptionParser = require('optparse').OptionParser; switches = [['-o', '--output DIRECTORY', 'Output directory'], ['-t', '--title TITLE', 'Document Title'], ['-q', '--quite', 'less output'], ['-r', '--readme DIRECTORY', 'README.md directory path'], ['-f', '--files', 'included source files'], ['--external-types JSONFILE', 'external type definitions']]; parser = new OptionParser(switches); parser.on('*', function(opt, value) { if (value === void 0) { value = true; } return options[opt] = value; }); return [].push.apply(options._sources, parser.parse(process.argv.slice(2))); }; _readExternalTypes = function(external_types, types) { var content, e, type, url, _results; if (!external_types) { return; } if (typeof external_types === 'string') { try { content = fs.readFileSync(external_types, 'utf-8').trim(); try { external_types = JSON.parse(content); } catch (_error) { e = _error; console.log("external-types: Invalid JSON file"); } } catch (_error) { e = _error; console.log("external-types: Cannot open " + external_types); } } if (typeof external_types === 'object') { _results = []; for (type in external_types) { url = external_types[type]; _results.push(types[type] = url); } return _results; } }; _buildOptions = function() { var options; options = { _project_dir: process.cwd(), types: { Object: 'https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object', Boolean: 'https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Boolean', String: 'https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String', Array: 'https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array', Number: 'https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number', Date: 'https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date', Function: 'https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function', RegExp: 'https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp', Error: 'https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error', undefined: 'https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/undefined' }, _sources: [] }; _readConfig(options); _parseArguments(options); _readExternalTypes(options['external-types'], options.types); options.output_dir = resolve(options._project_dir, options.output || 'doc'); return options; }; _readSourceFiles = function(options) { var base_path, contents, data, path, project_dir_re, _i, _len, _ref1; if (isWindows) { project_dir_re = new RegExp("^" + options._project_dir.replace(/\\/g, '\\\\')); } else { project_dir_re = new RegExp("^" + options._project_dir); } contents = []; _ref1 = options._sources; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { path = _ref1[_i]; base_path = path = resolve(options._project_dir, path); while (/[*?]/.test(basename(base_path))) { base_path = dirname(base_path); } glob.sync(path).forEach((function(_this) { return function(path) { var data, file, list, _j, _len1; if (fs.statSync(path).isDirectory()) { list = walkdir.sync(path); } else { list = [path]; } for (_j = 0, _len1 = list.length; _j < _len1; _j++) { file = list[_j]; if (fs.statSync(file).isDirectory()) { continue; } data = fs.readFileSync(file, 'utf-8').trim(); if (!data) { continue; } if (isWindows) { contents.push({ path: file.replace(project_dir_re, '').replace(/\\/g, '/'), file: file.substr(base_path.length + 1).replace(/\\/g, '/'), data: data }); } else { contents.push({ path: file.replace(project_dir_re, ''), file: file.substr(base_path.length + 1), data: data }); } } }; })(this)); } try { data = fs.readFileSync("" + (options._readme || options._project_dir) + "/README.md", 'utf-8'); contents.push({ path: '', file: 'README', data: data }); } catch (_error) {} return contents; }; exports.run = function() { var contents, options, result; options = _buildOptions(); contents = _readSourceFiles(options); result = require('./collect')(contents, options); return require('./render')(result, options); }; }).call(this);