'use strict'; var _ = require('lodash'), docdown = require('docdown'), fs = require('fs-extra'), path = require('path'); var util = require('../common/util'); var basePath = path.join(__dirname, '..', '..'), docPath = path.join(basePath, 'doc'), readmePath = path.join(docPath, 'README.md'); var pkg = require('../../package.json'), version = pkg.version; var config = { 'base': { 'path': path.join(basePath, 'lodash.js'), 'title': 'lodash v' + version + '', 'toc': 'categories', 'url': 'https://github.com/lodash/lodash/blob/' + version + '/lodash.js' }, 'github': { 'style': 'github', 'sublinks': [npmLink('Ⓝ', 'See the npm package')] }, 'site': { 'entryLink': '', 'sourceLink': '[source](${sourceHref})', 'tocHref': '', 'tocLink': '', 'sublinks': [npmLink('npm package')] } }; /** * Composes a npm link from `text` and optional `title`. * * @private * @param {string} text The link text. * @param {string} [title] The link title. * @returns {string} Returns the composed npm link. */ function npmLink(text, title) { return ( '<% if (name == "templateSettings" || !/^(?:methods|properties|seq)$/i.test(category)) {' + 'print(' + '"[' + text + '](https://www.npmjs.com/package/lodash." + name.toLowerCase() + ' + '"' + (title == null ? '' : ' \\"' + title + '\\"') + ')"' + ');' + '} %>' ); } /** * Post-process `markdown` to make adjustments. * * @private * @param {string} markdown The markdown to process. * @returns {string} Returns the processed markdown. */ function postprocess(markdown) { // Wrap symbol property identifiers in brackets. return markdown.replace(/\.(Symbol\.(?:[a-z]+[A-Z]?)+)/g, '[$1]'); } /*----------------------------------------------------------------------------*/ /** * Creates the documentation markdown formatted for 'github' or 'site'. * * @private * @param {string} type The format type. */ function build(type) { var options = _.defaults({}, config.base, config[type]), markdown = docdown(options); fs.writeFile(readmePath, postprocess(markdown), util.pitch); } build(_.last(process.argv));