react-docgen-loader.mjs 2.5 KB

12345678
  1. import '../chunk-WGM2LNBD.mjs';
  2. import { builtinHandlers, builtinResolvers, builtinImporters, parse, ERROR_CODES, utils } from 'react-docgen';
  3. import MagicString from 'magic-string';
  4. import { logger } from '@storybook/node-logger';
  5. var{getNameOrValue,isReactForwardRefCall}=utils,actualNameHandler=function(documentation,componentDefinition){if((componentDefinition.isClassDeclaration()||componentDefinition.isFunctionDeclaration())&&componentDefinition.has("id"))documentation.set("actualName",getNameOrValue(componentDefinition.get("id")));else if(componentDefinition.isArrowFunctionExpression()||componentDefinition.isFunctionExpression()||isReactForwardRefCall(componentDefinition)){let currentPath=componentDefinition;for(;currentPath.parentPath;){if(currentPath.parentPath.isVariableDeclarator()){documentation.set("actualName",getNameOrValue(currentPath.parentPath.get("id")));return}if(currentPath.parentPath.isAssignmentExpression()){let leftPath=currentPath.parentPath.get("left");if(leftPath.isIdentifier()||leftPath.isLiteral()){documentation.set("actualName",getNameOrValue(leftPath));return}}currentPath=currentPath.parentPath;}documentation.set("actualName","");}},defaultHandlers=Object.values(builtinHandlers).map(handler=>handler),defaultResolver=new builtinResolvers.FindExportedDefinitionsResolver,defaultImporter=builtinImporters.fsImporter,handlers=[...defaultHandlers,actualNameHandler];async function reactDocgenLoader(source){let callback=this.async(),options=this.getOptions()||{},{babelOptions={},debug=!1}=options,{plugins,presets}=babelOptions;try{let docgenResults=parse(source,{filename:this.resourcePath,resolver:defaultResolver,handlers,importer:defaultImporter,babelOptions:{babelrc:!1,configFile:!1,plugins,presets}}),magicString=new MagicString(source);docgenResults.forEach(info=>{let{actualName,...docgenInfo}=info;if(actualName){let docNode=JSON.stringify(docgenInfo);magicString.append(`;${actualName}.__docgenInfo=${docNode}`);}});let map=magicString.generateMap({hires:!0});callback(null,magicString.toString(),map);}catch(error){error.code===ERROR_CODES.MISSING_DEFINITION||(debug?(logger.warn(`Failed to parse ${this.resourcePath} with react-docgen. Please use the below error message and the content of the file which causes the error to report the issue to the maintainers of react-docgen. https://github.com/reactjs/react-docgen`),logger.error(error)):logger.warn(`Failed to parse ${this.resourcePath} with react-docgen. Rerun Storybook with --loglevel=debug to get more info.`)),callback(null,source);}}
  6. export { reactDocgenLoader as default };