UNPKG

storybook-addon-react-docgen

Version:
132 lines (101 loc) 5.32 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = makeTableComponent; var _react = _interopRequireDefault(require("react")); var PropTypes = _interopRequireWildcard(require("prop-types")); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _extends() { _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; }; return _extends.apply(this, arguments); } var PropTypesMap = new Map(); Object.keys(PropTypes).forEach(function (typeName) { var type = PropTypes[typeName]; PropTypesMap.set(type, typeName); if (typeof type === 'function' && 'isRequired' in type && type.isRequired) { PropTypesMap.set(type.isRequired, typeName); } }); var isNotEmpty = function isNotEmpty(component) { return (component === null || component === void 0 ? void 0 : component.props) && Object.keys(component.props).length > 0; }; var hasDocgen = function hasDocgen(type) { return isNotEmpty(type.__docgenInfo); }; var propsFromDocgen = function propsFromDocgen(type) { var _type$__docgenInfo; var props = {}; var docgenInfoProps = ((_type$__docgenInfo = type.__docgenInfo) === null || _type$__docgenInfo === void 0 ? void 0 : _type$__docgenInfo.props) || {}; var defaults = type.defaultProps || {}; Object.keys(docgenInfoProps).forEach(function (property) { var docgenInfoProp = docgenInfoProps[property]; var defaultValueDesc = docgenInfoProp.defaultValue || { value: defaults[property] } || {}; var propType = docgenInfoProp.flowType || docgenInfoProp.type; if (!propType) { return; } props[property] = { property: property, propType: propType, required: docgenInfoProp.required, description: docgenInfoProp.description, defaultValue: defaultValueDesc.value }; }); return props; }; var propsFromPropTypes = function propsFromPropTypes(type) { var props = {}; if (type.propTypes) { Object.keys(type.propTypes).forEach(function (property) { var _type$__docgenInfo2, _type$__docgenInfo2$p; var typeInfo = type.propTypes[property]; var required = typeInfo.isRequired === undefined; var docgenProp = (_type$__docgenInfo2 = type.__docgenInfo) === null || _type$__docgenInfo2 === void 0 ? void 0 : (_type$__docgenInfo2$p = _type$__docgenInfo2.props) === null || _type$__docgenInfo2$p === void 0 ? void 0 : _type$__docgenInfo2$p[property]; var description = docgenProp ? docgenProp.description : undefined; var propType = PropTypesMap.get(typeInfo); if (!propType && (docgenProp === null || docgenProp === void 0 ? void 0 : docgenProp.type)) { propType = docgenProp.type.name; } // @ts-expect-error props[property] = { property: property, propType: propType, required: required, description: description }; }); } if (type.defaultProps) { Object.keys(type.defaultProps).forEach(function (property) { var value = type.defaultProps[property]; if (value === undefined) { return; } if (!props[property]) { props[property] = { property: property }; } props[property].defaultValue = value; }); } return props; }; function makeTableComponent(Component) { return function (props) { var type = props.type; if (!type) { return null; } var propDefinitionsMap = hasDocgen(type) ? propsFromDocgen(type) : propsFromPropTypes(type); var propDefinitions = Object.values(propDefinitionsMap); return /*#__PURE__*/_react["default"].createElement(Component, _extends({ propDefinitions: propDefinitions }, props)); }; } module.exports = exports.default;