UNPKG

wix-storybook-utils

Version:

Utilities for automated component documentation within Storybook

54 lines 2.52 kB
import { __assign, __spreadArray } from "tslib"; import parsePropTypes from 'parse-prop-types'; import omit from 'lodash/omit'; var isUpperCaseLetter = function (char) { return /[A-Z]/.test(char); }; var getCompoundComponents = function (componentsScope, componentName) { var component = componentsScope[componentName]; return Object.keys(component).reduce(function (result, componentProperty) { var _a; if (isUpperCaseLetter(componentProperty[0])) { return __assign(__assign({}, result), (_a = {}, _a["".concat(componentName, ".").concat(componentProperty)] = component[componentProperty], _a)); } return result; }, {}); }; var getParsedComponent = function (componentsScope, componentName) { var _a; var component = componentsScope[componentName]; if (!component.propTypes && !component.displayName) { return {}; } var parsedPropTypes = parsePropTypes(component); var filteredPropTypes = omit(parsedPropTypes, 'children', 'className'); var propNames = Object.keys(filteredPropTypes); return _a = {}, _a[componentName] = { attrs: Object.assign.apply(Object, __spreadArray([{}], propNames.sort().map(function (propName) { var _a; var propType = filteredPropTypes[propName].type; return _a = {}, _a[propName] = propType.name === 'oneOf' ? propType.value.filter(function (x) { return typeof x === 'string'; }) : null, _a; }), false)), }, _a; }; var getCompoundComponentsHints = function (componentsScope, componentName) { var compoundComponents = getCompoundComponents(componentsScope, componentName); return Object.keys(compoundComponents) .sort() .reduce(function (result, compoundComponentName) { return (__assign(__assign({}, result), getParsedComponent(compoundComponents, compoundComponentName))); }, {}); }; export var getComponentsHints = function (componentsScope) { if (!componentsScope) { return null; } return Object.keys(componentsScope) .sort() .reduce(function (result, componentName) { return (!componentsScope[componentName] ? result : __assign(__assign(__assign({}, result), getParsedComponent(componentsScope, componentName)), getCompoundComponentsHints(componentsScope, componentName))); }, {}); }; //# sourceMappingURL=components-hints-builder.js.map