UNPKG

@storybook/react

Version:

Storybook for React: Develop React Component in isolation with Hot Reloading.

72 lines (58 loc) 2.14 kB
import { createSummaryValue, isTooLongForDefaultValueSummary } from '@storybook/docs-tools'; import { FUNCTION_CAPTION, ELEMENT_CAPTION } from '../captions'; import { InspectionType, inspectValue } from '../inspection'; import { isHtmlTag } from '../isHtmlTag'; import { generateCode } from '../generateCode'; import { generateObject } from './generateObject'; import { generateArray } from './generateArray'; import { getPrettyIdentifier } from './prettyIdentifier'; function generateFunc({ inferredType, ast }) { const { identifier } = inferredType; if (identifier != null) { return createSummaryValue(getPrettyIdentifier(inferredType), generateCode(ast)); } const prettyCaption = generateCode(ast, true); return !isTooLongForDefaultValueSummary(prettyCaption) ? createSummaryValue(prettyCaption) : createSummaryValue(FUNCTION_CAPTION, generateCode(ast)); } // All elements are JSX elements. // JSX elements are not supported by escodegen. function generateElement(defaultValue, inspectionResult) { const { inferredType } = inspectionResult; const { identifier } = inferredType; if (identifier != null) { if (!isHtmlTag(identifier)) { const prettyIdentifier = getPrettyIdentifier(inferredType); return createSummaryValue(prettyIdentifier, defaultValue); } } return !isTooLongForDefaultValueSummary(defaultValue) ? createSummaryValue(defaultValue) : createSummaryValue(ELEMENT_CAPTION, defaultValue); } export function createDefaultValue(defaultValue) { try { const inspectionResult = inspectValue(defaultValue); switch (inspectionResult.inferredType.type) { case InspectionType.OBJECT: return generateObject(inspectionResult); case InspectionType.FUNCTION: return generateFunc(inspectionResult); case InspectionType.ELEMENT: return generateElement(defaultValue, inspectionResult); case InspectionType.ARRAY: return generateArray(inspectionResult); default: return null; } } catch (e) { // eslint-disable-next-line no-console console.error(e); } return null; }