storybook-readme
Version:
Storybook addon to show components README (for React and Vue)
161 lines (128 loc) • 4.22 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = parseProps;
var _react = _interopRequireDefault(require("react"));
var PropTypesMap = new Map(); // Object.keys(PropTypes).forEach(typeName => {
// const type = PropTypes[typeName];
// PropTypesMap.set(type, typeName);
// PropTypesMap.set(type.isRequired, typeName);
// });
var getClearStringForVal = function getClearStringForVal(val) {
return val ? "".concat(val).replace(/^\'|\'$/g, '') : '';
};
var isNotEmpty = function isNotEmpty(obj) {
return obj && obj.props && Object.keys(obj.props).length > 0;
};
var hasDocgen = function hasDocgen(type) {
return isNotEmpty(type.__docgenInfo);
};
var propsFromDocgen = function propsFromDocgen(type) {
var props = {};
var docgenInfoProps = type.__docgenInfo.props;
Object.keys(docgenInfoProps).forEach(function (property) {
var docgenInfoProp = docgenInfoProps[property];
var defaultValueDesc = docgenInfoProp.defaultValue || {}; // console.log(docgenInfoProp);
var propType = // docgenInfoProp.flowType ||
(typeof docgenInfoProp.type === 'object' ? docgenInfoProp.type.name : docgenInfoProp.type) || 'other';
var propMeta = null;
switch (propType) {
case 'enum':
{
// if (typeof docgenInfoProp.type === 'object') {
propMeta = docgenInfoProp.type.value.map(function (v) {
return getClearStringForVal(v.value);
}); // }
break;
}
case 'instanceOf':
{
// if (typeof docgenInfoProp.type === 'object') {
propMeta = docgenInfoProp.type.value; // }
break;
}
case 'arrayOf':
{
// if (typeof docgenInfoProp.type === 'object') {
propMeta = docgenInfoProp.type.value.name; // }
break;
}
case 'objectOf':
{
// if (typeof docgenInfoProp.type === 'object') {
propMeta = docgenInfoProp.type.value.name; // }
break;
}
case 'union':
{
// if (typeof docgenInfoProp.type === 'object') {
propMeta = docgenInfoProp.type.value.map(function (v) {
return v.value || v.name;
}); // }
break;
}
case 'shape':
{
// if (typeof docgenInfoProp.type === 'object') {
propMeta = docgenInfoProp.type.value; // }
break;
}
}
props[property] = {
property: property,
propType: propType,
propMeta: propMeta,
required: docgenInfoProp.required,
description: docgenInfoProp.description,
defaultValue: getClearStringForVal(defaultValueDesc.value)
};
});
return props;
};
var propsFromPropTypes = function propsFromPropTypes(type) {
var props = {};
if (type.propTypes) {
Object.keys(type.propTypes).forEach(function (property) {
var typeInfo = type.propTypes[property];
var required = typeInfo.isRequired === undefined;
var docgenInfo = type.__docgenInfo && type.__docgenInfo.props && type.__docgenInfo.props[property];
var description = docgenInfo ? docgenInfo.description : null;
var propType = PropTypesMap.get(typeInfo) || 'other';
if (propType === 'other') {
if (docgenInfo && docgenInfo.type) {
propType = docgenInfo.type.name;
}
}
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 parseProps(type) {
if (!type) {
return null;
}
var propDefinitionsMap = hasDocgen(type) ? propsFromDocgen(type) : propsFromPropTypes(type);
return Object.values(propDefinitionsMap);
}