UNPKG

storybook-readme

Version:

Storybook addon to show components README (for React and Vue)

161 lines (128 loc) 4.22 kB
"use strict"; 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); }