UNPKG

mongodb-stitch

Version:

[![Join the chat at https://gitter.im/mongodb/stitch](https://badges.gitter.im/mongodb/stitch.svg)](https://gitter.im/mongodb/stitch?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

136 lines (126 loc) 3.77 kB
var fs = require('fs'), path = require('path'), File = require('vinyl'), vfs = require('vinyl-fs'), _ = require('lodash'), concat = require('concat-stream'), GithubSlugger = require('github-slugger'), createFormatters = require('documentation').util.createFormatters, LinkerStack = require('documentation').util.LinkerStack, hljs = require('highlight.js'); function isFunction(section) { return ( section.kind === 'function' || (section.kind === 'typedef' && section.type.type === 'NameExpression' && section.type.name === 'Function') ); } // TODO: re-enable type annotations once Flow is enabled module.exports = function( comments/*: Array<Comment>*/, config/*: DocumentationConfig*/ ) { var linkerStack = new LinkerStack(config).namespaceResolver( comments, function(namespace) { var slugger = new GithubSlugger(); return '#' + slugger.slug(namespace); } ); var formatters = createFormatters(linkerStack.link); hljs.configure(config.hljs || {}); var sharedImports = { imports: { slug(str) { var slugger = new GithubSlugger(); return slugger.slug(str); }, shortSignature(section) { var prefix = ''; if (section.kind === 'class') { prefix = 'new '; } else if (!isFunction(section)) { return section.name; } return prefix + section.name + formatters.parameters(section, true); }, signature(section) { var returns = ''; var prefix = ''; if (section.kind === 'class') { prefix = 'new '; } else if (!isFunction(section)) { return section.name; } if (section.returns.length) { returns = ': ' + formatters.type(section.returns[0].type); } return prefix + section.name + formatters.parameters(section) + returns; }, md(ast, inline) { if ( inline && ast && ast.children.length && ast.children[0].type === 'paragraph' ) { ast = { type: 'root', children: ast.children[0].children.concat(ast.children.slice(1)) }; } return formatters.markdown(ast); }, formatType: formatters.type, autolink: formatters.autolink, highlight(example) { if (config.hljs && config.hljs.highlightAuto) { return hljs.highlightAuto(example).value; } return hljs.highlight('js', example).value; } } }; sharedImports.imports.renderSectionList = _.template( fs.readFileSync(path.join(__dirname, 'section_list._'), 'utf8'), sharedImports ); sharedImports.imports.renderSection = _.template( fs.readFileSync(path.join(__dirname, 'section._'), 'utf8'), sharedImports ); sharedImports.imports.renderNote = _.template( fs.readFileSync(path.join(__dirname, 'note._'), 'utf8'), sharedImports ); sharedImports.imports.renderParamProperty = _.template( fs.readFileSync(path.join(__dirname, 'paramProperty._'), 'utf8'), sharedImports ); var pageTemplate = _.template( fs.readFileSync(path.join(__dirname, 'index._'), 'utf8'), sharedImports ); // push assets into the pipeline as well. return new Promise(resolve => { vfs.src([__dirname + '/assets/**'], { base: __dirname }).pipe( concat(function(files) { resolve( files.concat( new File({ path: 'index.html', contents: new Buffer( pageTemplate({ docs: comments, config }), 'utf8' ) }) ) ); }) ); }); };