UNPKG

roc

Version:

Build modern web applications easily

135 lines (100 loc) 4.12 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = generateMarkdownHooks; var _redent = require('redent'); var _redent2 = _interopRequireDefault(_redent); var _stripAnsi = require('strip-ansi'); var _stripAnsi2 = _interopRequireDefault(_stripAnsi); var _trimNewlines = require('trim-newlines'); var _trimNewlines2 = _interopRequireDefault(_trimNewlines); var _generateTable = require('../../documentation/generate-table'); var _generateTable2 = _interopRequireDefault(_generateTable); var _helpers = require('../../documentation/helpers'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Command used to generate markdown documentation for all the registered hooks. * Can be piped to a file and uploaded somewhere easily. * * @param {string} name - Name from info object in {@link rocCommandObject}. * @param {Object} hooks - The hooks from {@link rocCommandObject}. * * @returns {string} - Markdown documentation. */ function generateMarkdownHooks(name, hooks) { if (Object.keys(hooks).length === 0) { return 'No hooks available.'; } const rows = []; const extensions = Object.keys(hooks).sort(); // Header rows.push('# Hooks for `' + name + '`'); rows.push(''); rows.push('## Hooks'); extensions.forEach(extension => { const extensionHooks = Object.keys(hooks[extension]).sort(); rows.push(`* [${ extension }](#${ extension })`); extensionHooks.forEach(hook => { rows.push(` * [${ hook }](#${ hook })`); }); }); rows.push(''); extensions.forEach(extension => { rows.push(`## ${ extension }`); rows.push(''); const extensionHooks = Object.keys(hooks[extension]).sort(); extensionHooks.forEach(hook => { const currentHook = hooks[extension][hook]; rows.push(`### ${ hook }`); if (currentHook.description) { rows.push('', (0, _redent2.default)((0, _trimNewlines2.default)(currentHook.description))); } rows.push(''); rows.push('__Initial value:__ ' + (currentHook.initialValue ? `\`${ JSON.stringify(currentHook.initialValue) }\`` : '_Nothing_') + ' '); rows.push('__Expected return value:__ ' + (currentHook.returns ? `\`${ currentHook.returns(null, true).type }\`` : '_Nothing_')); rows.push(''); // Create table with arguments let body = []; // Generate the arguments if (currentHook.arguments) { const objects = currentHook.arguments.map(argument => { return { name: argument.name, description: argument.description || '', type: argument.validation && argument.validation(null, true).type }; }); if (objects.length > 0) { body = body.concat({ name: 'Arguments', level: 1, objects: objects }); } } const header = { name: { name: 'Name' }, description: { name: 'Description', renderer: input => (0, _stripAnsi2.default)(input) }, type: { name: 'Type', renderer: input => input && `\`${ input }\`` } }; const settings = { groupTitleWrapper: (groupName, level) => (0, _helpers.pad)(level + 3, '#') + ' ' + groupName.charAt(0).toUpperCase() + groupName.slice(1) }; const table = (0, _generateTable2.default)(body, header, settings); if (table) { rows.push(table); } }); }); return rows.join('\n'); } //# sourceMappingURL=generate-markdown-hooks.js.map