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