UNPKG

roc

Version:

Build modern web applications easily

204 lines (152 loc) 7.02 kB
'use strict'; exports.__esModule = true; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports['default'] = generateTable; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } require('source-map-support/register'); var _deepExtend = require('deep-extend'); var _deepExtend2 = _interopRequireDefault(_deepExtend); var _lodash = require('lodash'); var _stripAnsi = require('strip-ansi'); var _stripAnsi2 = _interopRequireDefault(_stripAnsi); var _helpers = require('./helpers'); var defaultSettings = { groupTitleWrapper: function groupTitleWrapper(name) { return name; }, cellDivider: '|', rowWrapper: function rowWrapper(input) { return '|' + input + '|'; }, cellWrapper: function cellWrapper(input) { return ' ' + input + ' '; }, header: true, compact: false }; /** * Creates a table based on a {@link rocDocumentationObject}. * * @param {rocDocumentationObject} initalDocumentationObject - The documentation object to create a table of. * @param {rocTableHeader} header - Header object to use. * @param {rocTableSettings} settings - The settings to use. * * @returns {string} - A table. */ function generateTable(initalDocumentationObject, header, settings) { settings = _deepExtend2['default']({}, defaultSettings, settings); var headerLengths = createLengthObject(header, header, {}, true); var lengths = createLengthObject(initalDocumentationObject, header, headerLengths); var printTableCell = function printTableCell(key, element) { var renderer = arguments.length <= 2 || arguments[2] === undefined ? function (input) { return input || ''; } : arguments[2]; var fill = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; if (fill) { return settings.cellWrapper(_helpers.pad(lengths[key], '-')); } var padding = _lodash.isUndefined(header[key].padding) ? true : header[key].padding; var text = padding ? _helpers.addPadding(renderer(element), lengths[key]) : renderer(element); return settings.cellWrapper(text); }; var printTableRow = function printTableRow(object) { var isHeader = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; return settings.rowWrapper(Object.keys(header).map(function (key) { var _getValueAndRenderer = getValueAndRenderer(isHeader, header[key], object[key]); var value = _getValueAndRenderer.value; var renderer = _getValueAndRenderer.renderer; return printTableCell(key, value, renderer); }).join(settings.cellDivider)); }; var printTableSplitter = function printTableSplitter() { return settings.rowWrapper(Object.keys(header).map(function (key) { return printTableCell(key, undefined, undefined, true); }).join(settings.cellDivider)); }; var printTableHead = function printTableHead(name, description) { var level = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2]; var rows = []; rows.push(settings.groupTitleWrapper(name, level)); if (description) { rows.push(description); } // Add a new empty row rows.push(''); if (settings.header) { rows.push(printTableRow(header, true)); rows.push(printTableSplitter()); } return rows; }; var recursiveHelper = function recursiveHelper() { var documentationObject = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; var spacing = settings.compact ? [] : ['']; return documentationObject.map(function (group) { var rows = []; var level = group.level || 0; if (level === 0 || !settings.compact) { rows = rows.concat(printTableHead(group.name, group.description, level)); } rows = rows.concat(group.objects.map(function (element) { return printTableRow(element); })); rows = rows.concat(recursiveHelper(group.children)); if (level === 0 && settings.compact) { rows.push(''); } return rows; }).reduce(function (a, b) { return a.concat(b); }, spacing); }; return recursiveHelper(initalDocumentationObject).join('\n'); } function createLengthObject(initalElements, header, initalLengths) { var isHeader = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; var getObjectLength = function getObjectLength(object) { var renderer = arguments.length <= 1 || arguments[1] === undefined ? function (input) { return input; } : arguments[1]; return _stripAnsi2['default'](renderer(object)).length; }; var getLength = function getLength(newLength) { var currentLength = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; return newLength > currentLength ? newLength : currentLength; }; var recursiveHelper = function recursiveHelper() { var elements = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; var lengths = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var newLengths = _extends({}, lengths); elements.forEach(function (element) { element.objects.forEach(function (object) { Object.keys(header).forEach(function (key) { var _getValueAndRenderer2 = getValueAndRenderer(isHeader, header[key], object[key]); var value = _getValueAndRenderer2.value; var renderer = _getValueAndRenderer2.renderer; if (value) { newLengths[key] = getLength(getObjectLength(value, renderer), newLengths[key]); } }); }); newLengths = recursiveHelper(element.children, newLengths); }); return newLengths; }; // Make sure the data matches the expected format if (!Array.isArray(initalElements)) { initalElements = [{ objects: [initalElements], children: [] }]; } return recursiveHelper(initalElements, initalLengths); } function getValueAndRenderer(isHeader, headerObject, object) { var value = isHeader ? object.name : object; var renderer = isHeader ? function (input) { return input; } : headerObject.renderer; return { value: value, renderer: renderer }; } module.exports = exports['default']; //# sourceMappingURL=generate-table.js.map