wix-storybook-utils
Version:
Utilities for automated component documentation within Storybook
58 lines • 2.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getComponentsHints = void 0;
var tslib_1 = require("tslib");
var parse_prop_types_1 = tslib_1.__importDefault(require("parse-prop-types"));
var omit_1 = tslib_1.__importDefault(require("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 tslib_1.__assign(tslib_1.__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 = (0, parse_prop_types_1.default)(component);
var filteredPropTypes = (0, omit_1.default)(parsedPropTypes, 'children', 'className');
var propNames = Object.keys(filteredPropTypes);
return _a = {},
_a[componentName] = {
attrs: Object.assign.apply(Object, tslib_1.__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 (tslib_1.__assign(tslib_1.__assign({}, result), getParsedComponent(compoundComponents, compoundComponentName))); }, {});
};
var getComponentsHints = function (componentsScope) {
if (!componentsScope) {
return null;
}
return Object.keys(componentsScope)
.sort()
.reduce(function (result, componentName) { return (!componentsScope[componentName] ?
result
: tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, result), getParsedComponent(componentsScope, componentName)), getCompoundComponentsHints(componentsScope, componentName))); }, {});
};
exports.getComponentsHints = getComponentsHints;
//# sourceMappingURL=components-hints-builder.js.map