storybook-addon-react-docgen
Version:
A storybook addon to display react docgen info.
132 lines (101 loc) • 5.32 kB
JavaScript
;
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;