UNPKG

roc

Version:

Build modern web applications easily

100 lines (82 loc) 4.32 kB
'use strict'; exports.__esModule = true; exports['default'] = buildDocumentationObject; require('source-map-support/register'); var _lodash = require('lodash'); var _helpers = require('./helpers'); var defaultValidation = function defaultValidation(input, info) { return info ? { type: 'Unknown' } : true; }; /** * Creates a {@link rocDocumentationObject}. * * @param {Object} initalObject - The object to create a {@link rocDocumentationObject} of. * @param {rocMetaSettings} meta - The meta object to use. * @param {string[]} [initalFilter=[]] - The groups that should be used, will default to all groups. * * @returns {rocDocumentationObject} - The completed documentation object. */ function buildDocumentationObject(initalObject) { var meta = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var initalFilter = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2]; var allObjects = function allObjects(object, callback) { return Object.keys(object).map(callback).filter(function (value) { return value !== undefined; }); }; var manageGroup = function manageGroup(object, name, group, description, validation, parents, level) { if (group === undefined) group = {}; if (description === undefined) description = {}; if (validation === undefined) validation = {}; var groupDescription = _lodash.isPlainObject(group) ? undefined : group; return { name: name, level: level, description: groupDescription, objects: recursiveHelper(object, group, description, validation, [], parents, level + 1, true), children: recursiveHelper(object, group, description, validation, [], parents, level + 1) }; }; var manageLeaf = function manageLeaf(object, name, description, validation, parents) { if (validation === undefined) validation = defaultValidation; var _ref = _lodash.isFunction(validation) ? validation(null, true) : { type: validation.toString(), req: false }; var _ref$type = _ref.type; var type = _ref$type === undefined ? 'Unknown' : _ref$type; var _ref$required = _ref.required; var required = _ref$required === undefined ? false : _ref$required; return { name: name, description: description, type: type, required: required, path: parents.join('.'), cli: _helpers.toCliFlag(parents), defaultValue: object, validator: validation }; }; function recursiveHelper(object) { var groups = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var descriptions = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; var validations = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; var filter = arguments.length <= 4 || arguments[4] === undefined ? [] : arguments[4]; var initalParents = arguments.length <= 5 || arguments[5] === undefined ? [] : arguments[5]; var level = arguments.length <= 6 || arguments[6] === undefined ? 0 : arguments[6]; var leaves = arguments.length <= 7 || arguments[7] === undefined ? false : arguments[7]; return allObjects(object, function (key) { // Make sure that we either have no filter or that there is a match if (filter.length === 0 || filter.indexOf(key) !== -1) { var parents = [].concat(initalParents, key); var value = object[key]; if (_lodash.isPlainObject(value) && Object.keys(value).length > 0 && !leaves) { return manageGroup(value, key, groups[key], descriptions[key], validations[key], parents, level); } else if ((!_lodash.isPlainObject(value) || Object.keys(value).length === 0) && leaves) { return manageLeaf(value, key, descriptions[key], validations[key], parents); } } }); } return recursiveHelper(initalObject, meta.groups, meta.descriptions, meta.validations, initalFilter); } module.exports = exports['default']; //# sourceMappingURL=build-documentation-object.js.map