Release Notes
7.0.0
Major Changes
-
#846 (opens in a new tab)
82154c3(opens in a new tab) Thanks @danez (opens in a new tab)! -getTypeFromReactComponentnow returns an array of paths to types instead of just one. This can appear when multiple type definitions are found for a component, for example:const Component: React.FC<Props> = (props: { some: string }) => {};In this example both the
Propsdefinition as well as{ some: string }are now found and used.Here is a simple diff to illustrate the change when using
getTypeFromReactComponent:const type = getTypeFromReactComponent(path) -if (type) { +if (type.length > 0) { // do smth } -
#848 (opens in a new tab)
dda8915(opens in a new tab) Thanks @danez (opens in a new tab)! - Drop support for Node.js version 14.The minimum supported version is now 16.14.0
-
#846 (opens in a new tab)
62e692f(opens in a new tab) Thanks @danez (opens in a new tab)! -resolveToValuewill not resolve toImportDeclarationanymore but instead to one of the possible specifiers (ImportSpecifier,ImportDefaultSpecifierorImportNamespaceSpecifier). This gives better understanding to which specifier exactlyresolveToValuedid resolve a NodePath to.Here is a possible easy fix for this in a code snippet that uses
resolveToValueconst resolved = resolveToValue(path); -if (resolved.isImportDeclaration()) { +if (resolved.parentPath?.isImportDeclaration()) { // do smth }
Minor Changes
-
#862 (opens in a new tab)
40ebb00(opens in a new tab) Thanks @danez (opens in a new tab)! - SupportPropsWithoutRef,PropsWithRefandPropsWithChildrenin TypeScript.Component props are now detected correctly when these builtin types are used, but they do currently not add any props to the documentation.
-
#846 (opens in a new tab)
82154c3(opens in a new tab) Thanks @danez (opens in a new tab)! - Add support forReact.FCin TypeScript.
Patch Changes
-
6312f2f(opens in a new tab) Thanks @renovate[bot] (opens in a new tab)! - update dependency @types/doctrine to ^0.0.7 -
#846 (opens in a new tab)
c01d1a0(opens in a new tab) Thanks @danez (opens in a new tab)! - Fix detection of react class components when super class is imported via named import. -
#861 (opens in a new tab)
74b6680(opens in a new tab) Thanks @renovate (opens in a new tab)! - update dependency @types/doctrine to ^0.0.8 -
#846 (opens in a new tab)
0641700(opens in a new tab) Thanks @danez (opens in a new tab)! - Remove unnecessary call toresolveToValuewhen trying to find props type from react components. -
#858 (opens in a new tab)
3be404e(opens in a new tab) Thanks @danez (opens in a new tab)! - Fix detection of React.Children with ESM imports
6.0.4
Patch Changes
- #838 (opens in a new tab)
8ba9ac7(opens in a new tab) Thanks @danez (opens in a new tab)! - Support index types correctly in flow
6.0.3
Patch Changes
- #830 (opens in a new tab)
c3c16e3(opens in a new tab) Thanks @danez (opens in a new tab)! - Fixed error with object and array patterns in function signatures.
6.0.2
Patch Changes
- #810 (opens in a new tab)
ddf4e20(opens in a new tab) Thanks @danez (opens in a new tab)! - Read docblock in nested flow object types and use them as descriptions
6.0.1
Patch Changes
- #806 (opens in a new tab)
c7e2bd5(opens in a new tab) Thanks @danez (opens in a new tab)! - Make docblocks for assigned methods be correctly detected.
6.0.0
Major Changes
-
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - RenameflowTypeHandlertocodeTypeHandlerbecause it handles Flow and TypeScript -
#719 (opens in a new tab)
d7a39af(opens in a new tab) Thanks @danez (opens in a new tab)! - RefactoredresolveComponentDefinitionutility.- Renamed to
findComponentDefinition - Removed named export
isComponentDefinition - The utility now does a lot more than previously, check out the commit to see the changes in detail.
- Renamed to
-
#761 (opens in a new tab)
dfc2f85(opens in a new tab) Thanks @danez (opens in a new tab)! - RenamedpropDocBlockHandlertopropDocblockHandlerfor consistency -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - SimplifyresolveObjectValuesToArrayand remove type handling. None of the code that was handling types was used. -
caae6bf(opens in a new tab) Thanks @danez (opens in a new tab)! - The return values ofresolveObjectValuesToArrayare now in the order they are defined in the source code. -
#744 (opens in a new tab)
e956802(opens in a new tab) Thanks @danez (opens in a new tab)! - Removed match utility.The utility can be replaced by babel helpers and is not needed anymore. Also using explicit checks like
path.isMemberExpression()is better for type safety and catching potential bugs. -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Migrate react-docgen to ES modules. Please read this (opens in a new tab) -
#693 (opens in a new tab)
3b28f6e(opens in a new tab) Thanks @danez (opens in a new tab)! - The CLI was removed fromreact-docgeninto its own package@react-docgen/cli.Check out https://react-docgen.dev/docs/getting-started/cli (opens in a new tab) for the documentation.
-
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - The mainparseAPI had some breaking changes.-
The arguments were changed from previously 5 to just 2. The following diff illustrates how to migrate:
-parse(src, resolver, handlers, importer, options: { filename, ...babelOptions}) +parse(src, { resolver, handlers, importer, filename, babelOptions: {} }) -
The return type is now always an array, independent of the resolver, even if only one component was found in the file.
-
-
#786 (opens in a new tab)
0a2481d(opens in a new tab) Thanks @danez (opens in a new tab)! - Renamed the methodtoObjecttobuildin the DocumentationBuilder.This method might be used by integrations.
-
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Renamed some of the main exports for clarity.Renamed
handlerstobuiltinHandlersRenamedresolvertobuiltinResolversRenamedimporterstobuiltinImporters -
#743 (opens in a new tab)
5215bab(opens in a new tab) Thanks @danez (opens in a new tab)! - Removed support for the@extends React.Componentannotation on react class components.Instead, you can use the new
@componentannotation or define your own annotation by creating a customFindAnnotatedDefinitionsResolverinstance -
#714 (opens in a new tab)
80e4c74(opens in a new tab) Thanks @danez (opens in a new tab)! - Renamed and migrated built-in resolvers to classes.-
findAllComponentDefinitionswas renamed toFindAllDefinitionsResolverand is now a class.-const resolver = builtinResolvers.findAllComponentDefinitions +const resolver = new builtinResolvers.FindAllDefinitionsResolver() -
findAllExportedComponentDefinitionswas renamed toFindExportedDefinitionsResolverand is now a class.-const resolver = builtinResolvers.findAllExportedComponentDefinitions +const resolver = new builtinResolvers.FindExportedDefinitionsResolver() -
findExportedComponentDefinitionwas removed. UseFindExportedDefinitionsResolverwith thelimitoption instead.This is still the default resolver.
-const resolver = builtinResolvers.findExportedComponentDefinition +const resolver = new builtinResolvers.FindExportedDefinitionsResolver({ limit: 1 })
-
-
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Migrated to babel toolchainThis is one of the big changes in this new version of react-docgen. It made the code a lot more robust because there are now finally working TypeScript types for the ASTs.
Another benefit from this change is that react-docgen is now a lot faster. 🚀 In some tests an improvement of nearly 50% was seen in comparison to version 5.
-
#707 (opens in a new tab)
d4c27d4(opens in a new tab) Thanks @danez (opens in a new tab)! - Improve performance of file system importer.The file system importer now also caches the resolving of files in addition to parsing files. If the importer is used in an environment where files do change at runtime (like a watch command) then the caches will need to be cleared on every file change.
-
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Changed the minimum Node.js version to 14.18.0
Minor Changes
-
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Add support for.ctsand.mtsextension when using typescript -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Treat functions returningReact.Children.mapas components -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Improve performance by creating all visitors only once -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Support all possible kinds of functions in thedisplayNameHandler -
#786 (opens in a new tab)
0a2481d(opens in a new tab) Thanks @danez (opens in a new tab)! - Export the type for the DocumentationBuilder. -
#786 (opens in a new tab)
0a2481d(opens in a new tab) Thanks @danez (opens in a new tab)! - The typesNodePathandbabelTypesare now exported.These types are useful when building integrations in TypeScript.
babelTypesincludes all types from@babel/types. -
#714 (opens in a new tab)
80e4c74(opens in a new tab) Thanks @danez (opens in a new tab)! - Add the new ChainResolver which allows multiple resolvers to be chained.import { builtinResolvers } from 'react-docgen'; const { ChainResolver } = builtinResolvers; const resolver = new ChainResolver([resolver1, resolver2], { chainingLogic: ChainResolver.Logic.ALL, // or ChainResolver.Logic.FIRST_FOUND, }); -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Support all literal types in typescript -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Support flow qualified type names -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Support class and function declarations without identifier -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Support resolving of destructuring inresolveToValue -
#714 (opens in a new tab)
80e4c74(opens in a new tab) Thanks @danez (opens in a new tab)! - Allow resolvers to be classes in addition to functions.import type { ResolverClass, ResolverFunction } from 'react-docgen'; // This was the only option until now const functionResolver: ResolverFunction = (file: FileState) => { //needs to return array of found components }; // This is the new class resolver class MyResolver implements ResolverClass { resolve(file: FileState) { //needs to return array of found components } } const classResolver = new MyResolver(); -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Improve performance drastically by making changes to AST traversalVisitors are now pre-exploded and are cached in the module scope instead of creating them on every call. This change brought the benchmark from 170ops/s to 225ops/sec
-
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Add codes to errors to be able to easily detect themThere is a new export
ERROR_CODESthat contains all possible error codes. The two errors that have codes right now are:MISSING_DEFINITION: No component found in a fileMULTIPLE_DEFINITIONS: Multiple components found in one file
-
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Support handlinguseImperativeHandlecorrectly -
#743 (opens in a new tab)
5215bab(opens in a new tab) Thanks @danez (opens in a new tab)! - Added a new resolver that finds annotated components. This resolver is also enabled by default.To use this feature simply annotated a component with
@component.// @component class MyComponent {}
Patch Changes
-
#745 (opens in a new tab)
8fe3dbf(opens in a new tab) Thanks @danez (opens in a new tab)! - Fix crash when using TypeScript mapped types -
#789 (opens in a new tab)
7c99f15(opens in a new tab) Thanks @danez (opens in a new tab)! - Fix TypeScript types when strict null checks are disabled -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - HandleReact.forwardRefcalls without a function -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Fixed the handling of some edge cases in resolveToValue -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Remove trailing commas and semicolons from raw values in the documentation -
#767 (opens in a new tab)
a684d82(opens in a new tab) Thanks @danez (opens in a new tab)! - Fix handling ofPropTypes.oneOfto handle unresolved imported values correctly -
#761 (opens in a new tab)
cc94da2(opens in a new tab) Thanks @danez (opens in a new tab)! - Fix using react-docgen in browsers -
#761 (opens in a new tab)
98a1138(opens in a new tab) Thanks @danez (opens in a new tab)! - AdddisplayNameanddescriptionto Documentation type -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Parse jsdoc comments for TypeScript structs -
#748 (opens in a new tab)
ea25b16(opens in a new tab) Thanks @danez (opens in a new tab)! - Handle cyclic references in PropTypesshape()andexact()methods. -
#787 (opens in a new tab)
5a226ac(opens in a new tab) Thanks @danez (opens in a new tab)! - Fix @babel/traverse import to work in non ESM environments -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Correctly handle ObjectProperties inisReactComponentMethod -
#747 (opens in a new tab)
1aa0249(opens in a new tab) Thanks @danez (opens in a new tab)! - Handletypeof import('...')andtypeof MyType.propertycorrectly in TypeScript -
050313d(opens in a new tab) Thanks @danez (opens in a new tab)! - Correctly add LICENSE file to published packages -
96d6e9e(opens in a new tab) Thanks @danez (opens in a new tab)! - Add support for TSAsExpressions when trying to stringify expressions -
#720 (opens in a new tab)
f6e4fe7(opens in a new tab) Thanks @renovate (opens in a new tab)! - Update dependency strip-indent to v4 -
#769 (opens in a new tab)
e08e08d(opens in a new tab) Thanks @danez (opens in a new tab)! - Correctly resolve the values in anObject.values()call
6.0.0-rc.9
Patch Changes
- #789 (opens in a new tab)
7c99f15(opens in a new tab) Thanks @danez (opens in a new tab)! - Fix TypeScript types when strict null checks are disabled
6.0.0-rc.8
Patch Changes
- #787 (opens in a new tab)
5a226ac(opens in a new tab) Thanks @danez (opens in a new tab)! - Fix @babel/traverse import to work in non ESM environments
6.0.0-rc.7
Major Changes
-
#786 (opens in a new tab)
0a2481d(opens in a new tab) Thanks @danez (opens in a new tab)! - Renamed the methodtoObjecttobuildin the DocumentationBuilder.This method might be used by integrations.
Minor Changes
-
#786 (opens in a new tab)
0a2481d(opens in a new tab) Thanks @danez (opens in a new tab)! - Export the type for the DocumentationBuilder. -
#786 (opens in a new tab)
0a2481d(opens in a new tab) Thanks @danez (opens in a new tab)! - The typesNodePathandbabelTypesare now exported.These types are useful when building integrations in TypeScript.
babelTypesincludes all types from@babel/types.
Patch Changes
-
#767 (opens in a new tab)
a684d82(opens in a new tab) Thanks @danez (opens in a new tab)! - Fix handling ofPropTypes.oneOfto handle unresolved imported values correctly -
#769 (opens in a new tab)
e08e08d(opens in a new tab) Thanks @danez (opens in a new tab)! - Correctly resolve the values in anObject.values()call
6.0.0-beta.6
Major Changes
- dfc2f85: Rename
propDocBlockHandlertopropDocblockHandlerfor consistency
Patch Changes
- cc94da2: Fix using react-docgen in browsers
- 98a1138: Add
displayNameanddescriptionto Documentation type
6.0.0-beta.5
Major Changes
-
d7a39af: Refactored
resolveComponentDefinitionutility.- Renamed to
findComponentDefinition - Removed named export
isComponentDefinition - The utility now does a lot more than previously, check out the commit to see the changes in detail.
- Renamed to
-
e956802: Remove match utility.
The utility can be replaced by babel helpers and is not needed anymore. Also using explicit checks like
path.isMemberExpression()is better for type safety and catching potential bugs. -
5215bab: Removed support for the
@extends React.Componentannotation on react class components.Instead you can use the new
@componentannotation. -
80e4c74: Renamed and migrated built-in resolvers to classes.
-
findAllComponentDefinitionswas renamed toFindAllDefinitionsResolverand is now a class.-const resolver = builtinResolvers.findAllComponentDefinitions +const resolver = new builtinResolvers.FindAllDefinitionsResolver() -
findAllExportedComponentDefinitionswas renamed toFindExportedDefinitionsResolverand is now a class.-const resolver = builtinResolvers.findAllExportedComponentDefinitions +const resolver = new builtinResolvers.FindExportedDefinitionsResolver() -
findExportedComponentDefinitionwas removed. UseFindExportedDefinitionsResolverwith thelimitoption instead.This is still the default resolver.
-const resolver = builtinResolvers.findExportedComponentDefinition +const resolver = new builtinResolvers.FindExportedDefinitionsResolver({ limit: 1 })
-
Minor Changes
-
80e4c74: Add the new ChainResolver which allows multiple resolvers to be chained.
import { builtinResolvers } from 'react-docgen'; const { ChainResolver } = builtinResolvers; const resolver = new ChainResolver([resolver1, resolver2], { chainingLogic: ChainResolver.Logic.ALL, // or ChainResolver.Logic.FIRST_FOUND, }); -
80e4c74: Allow resolvers to be classes in addition to functions.
import type { ResolverClass, ResolverFunction } from 'react-docgen'; // This was the only option until now const functionResolver: ResolverFunction = (file: FileState) => { //needs to return array of found components }; // This is the new class resolver class MyResolver implements ResolverClass { resolve(file: FileState) { //needs to return array of found components } } const classResolver = new MyResolver(); -
5215bab: Added a new resolver that finds annotated components. This resolver is also enabled by default.
To use this feature simply annotated a component with
@component.// @component class MyComponent {}
Patch Changes
- 8fe3dbf: Fix crash when using TypeScript mapped types
- ea25b16: Handle cyclic references in PropTypes
shape()andexact()methods. - 1aa0249: Handle
typeof import('...')andtypeof MyType.propertycorrectly in TypeScript - 050313d: Correctly add LICENSE file to published packages
- f6e4fe7: Update dependency strip-indent to v4
6.0.0-alpha.4
Major Changes
-
96d6e9e: Rename
flowTypeHandlertocodeTypeHandlerbecause it handles Flow and TypeScript -
96d6e9e: Simplify
resolveObjectValuesToArrayand remove type handling. None of the code that was handling types was actually used. -
caae6bf: The return values of
resolveObjectValuesToArrayare now in the order they are defined in the source code. -
96d6e9e: Migrate react-docgen to ES modules. Please read this (opens in a new tab)
-
3b28f6e: The CLI was removed from
react-docgeninto its own package@react-docgen/cli.Check out https://react-docgen.dev/docs/getting-started/cli/ (opens in a new tab) for the documentation.
-
96d6e9e: Main
parseAPI was changedThe main API changed and now includes only 2 arguments.
-parse(src, resolver, handlers, importer, options) +parse(src, { resolver, handlers, importer, ... }) -
96d6e9e: Renamed some of the main exports for clarity.
Renamed
handlerstobuiltinHandlersRenamedresolvertobuiltinResolversRenamedimporterstobuiltinImporters -
96d6e9e: Migrated to babel toolchain
This is one of the big changes in this new version of react-docgen. It made the code a lot more robust because there are now finally working TypeScript types for the ASTs.
Another benefit from this change that react-docgen is now a lot faster. 🚀 In some tests an improvement of nearly 50% was seen in comparison to version 5.
-
d4c27d4: Improve performance of file system importer.
The file system importer now also caches resolving of files in addition to parsing files. If the importer is used in an environment where files do change at runtime (like a watch command) then the caches will need to be cleared on every file change.
-
96d6e9e: Changed the minimum Node.js version to 14.18.0
Minor Changes
-
96d6e9e: Add support for
.ctsand.mtsextension when using typescript -
96d6e9e: Treat functions returning
React.Children.mapas components -
96d6e9e: Improve performance by creating all visitors only once
-
96d6e9e: Support all possible kinds of functions in the
displayNameHandler -
96d6e9e: Support all literal types in typescript
-
96d6e9e: Support flow qualified type names
-
96d6e9e: Support class and function declarations without identifier
-
96d6e9e: Support resolving of destructurings in
resolveToValue -
96d6e9e: Improve performance drastically by making changes to AST traversal
Visitors are now pre-exploded and are cached in the module scope instead of creating them on every call. This change brought the benchmark from 170ops/s to 225ops/sec
-
96d6e9e: Add codes to errors to be able to easily detect them
There is a new export
ERROR_CODESthat contains all possible error codes. The two errors that have codes right now are:MISSING_DEFINITION: No component found in fileMULTIPLE_DEFINITIONS: Multiple components found in one files
-
96d6e9e: Support handling
useImperativeHandlecorrectly
Patch Changes
- 96d6e9e: Handle
React.forwardRefcalls without a function - 96d6e9e: Handle some edge cases in resolveToValue
- 96d6e9e: Remove trailing commas and semicolons from raw values in the documentation
- 96d6e9e: Parse jsdoc comments for TypeScript structs
- 96d6e9e: Correctly handle ObjectProperties in
isReactComponentMethod - 96d6e9e: Add support for TSAsExpressions when trying to stringify expressions
6.0.0-alpha.3 (opens in a new tab) (2022-06-13)
Bug Fixes
- Correctly detect index access types in typescript (#400 (opens in a new tab)) (85ea6a5 (opens in a new tab))
- Correctly handle ObjectTypeSpreadProperty in object type annotations (#593 (opens in a new tab)) (395f338 (opens in a new tab))
- Fix typescript types for parsing (34c55ac (opens in a new tab))
- Fix wrong detection of forwardRef in combination with memo (#592 (opens in a new tab)) (ea9cbeb (opens in a new tab))
- Handle ObjectTypeSpreadProperties which are not resolvable (4b8b721 (opens in a new tab))
- Ignore methods in
Object.value()calls (4fc5b21 (opens in a new tab))
6.0.0-alpha.2 (opens in a new tab) (2022-04-04)
Bug Fixes
- Change folder name inside the npm package back to
dist. (5f3da8c (opens in a new tab)) There was no real reason to change this and happened during the TypeScript migration.
6.0.0-alpha.1 (2022-04-04)
Bug Fixes
- Fix for expressionTo with Spread and Methods (5f3da8c (opens in a new tab))
- Remove obsolete id check (66961d8 (opens in a new tab))
- Remove usage of ast-type builders (17c8a9c (opens in a new tab))
Features
- Migrate to TypeScript (7b35e6f (opens in a new tab))
- Remove building out of scope AST Nodes from resolveToValue (5bcf56c (opens in a new tab))
BREAKING CHANGES
resolveToValuewill not create aMemberExpressionfor targets ending in destructuring. It will now simply resolve to theIdentifierinside the destructuring. Use new helperisDestructuringAssignmentto further check this identifier.- The helpers
resolveObjectValuesToArrayandresolveObjectKeysToArrayreturn nowstring[]instead of aNodePath