roc
Version:
Build modern web applications easily
204 lines (152 loc) • 7.02 kB
JavaScript
;
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