Bump react-docgen to ^7.1.0
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| react-docgen (source) | ^5.4.3 -> ^7.1.0 |
Release Notes
reactjs/react-docgen (react-docgen)
v7.1.0
Minor Changes
-
#923
3033ca0Thanks @rvetere! - Support generic types onReact.forwardRefcalls.Example:
react-docgenwill now findIButtonProps.export const FullWidthButton = forwardRef<HTMLButtonElement, IButtonProps>( () => {}, );
v7.0.3
Patch Changes
-
#890
afe8d02Thanks @danez! - Do not throw error when using namespace specifiers in export statements
v7.0.2
Patch Changes
v7.0.1
Patch Changes
-
#870
2b51bbdThanks @renovate! - update dependency @types/doctrine to ^0.0.9
v7.0.0
Major Changes
-
#846
82154c3Thanks @danez! -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
dda8915Thanks @danez! - Drop support for Node.js version 14.The minimum supported version is now 16.14.0
-
#846
62e692fThanks @danez! -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
40ebb00Thanks @danez! - 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
82154c3Thanks @danez! - Add support forReact.FCin TypeScript.
Patch Changes
-
6312f2fThanks @renovate[bot]! - update dependency @types/doctrine to ^0.0.7 -
#846
c01d1a0Thanks @danez! - Fix detection of react class components when super class is imported via named import. -
#861
74b6680Thanks @renovate! - update dependency @types/doctrine to ^0.0.8 -
#846
0641700Thanks @danez! - Remove unnecessary call toresolveToValuewhen trying to find props type from react components. -
#858
3be404eThanks @danez! - Fix detection of React.Children with ESM imports
v6.0.4
Patch Changes
v6.0.3
Patch Changes
v6.0.2
Patch Changes
-
#810
ddf4e20Thanks @danez! - Read docblock in nested flow object types and use them as descriptions
v6.0.1
Patch Changes
v6.0.0
Major Changes
-
96d6e9eThanks @danez! - RenameflowTypeHandlertocodeTypeHandlerbecause it handles Flow and TypeScript -
#719
d7a39afThanks @danez! - 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
dfc2f85Thanks @danez! - RenamedpropDocBlockHandlertopropDocblockHandlerfor consistency -
96d6e9eThanks @danez! - SimplifyresolveObjectValuesToArrayand remove type handling. None of the code that was handling types was used. -
caae6bfThanks @danez! - The return values ofresolveObjectValuesToArrayare now in the order they are defined in the source code. -
#744
e956802Thanks @danez! - 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. -
96d6e9eThanks @danez! - Migrate react-docgen to ES modules. Please read this -
#693
3b28f6eThanks @danez! - The CLI was removed fromreact-docgeninto its own package@react-docgen/cli.Check out https://react-docgen.dev/docs/getting-started/cli for the documentation.
-
96d6e9eThanks @danez! - 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
0a2481dThanks @danez! - Renamed the methodtoObjecttobuildin the DocumentationBuilder.This method might be used by integrations.
-
96d6e9eThanks @danez! - Renamed some of the main exports for clarity.Renamed
handlerstobuiltinHandlersRenamedresolvertobuiltinResolversRenamedimporterstobuiltinImporters -
#743
5215babThanks @danez! - 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
80e4c74Thanks @danez! - 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 })
-
-
96d6e9eThanks @danez! - 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
d4c27d4Thanks @danez! - 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.
-
96d6e9eThanks @danez! - Changed the minimum Node.js version to 14.18.0
Minor Changes
-
96d6e9eThanks @danez! - Add support for.ctsand.mtsextension when using typescript -
96d6e9eThanks @danez! - Treat functions returningReact.Children.mapas components -
96d6e9eThanks @danez! - Improve performance by creating all visitors only once -
96d6e9eThanks @danez! - Support all possible kinds of functions in thedisplayNameHandler -
#786
0a2481dThanks @danez! - Export the type for the DocumentationBuilder. -
#786
0a2481dThanks @danez! - The typesNodePathandbabelTypesare now exported.These types are useful when building integrations in TypeScript.
babelTypesincludes all types from@babel/types. -
#714
80e4c74Thanks @danez! - 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, }); -
96d6e9eThanks @danez! - Support all literal types in typescript -
96d6e9eThanks @danez! - Support class and function declarations without identifier -
96d6e9eThanks @danez! - Support resolving of destructuring inresolveToValue -
#714
80e4c74Thanks @danez! - 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(); -
96d6e9eThanks @danez! - 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
-
96d6e9eThanks @danez! - 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 file -
MULTIPLE_DEFINITIONS: Multiple components found in one file
-
-
96d6e9eThanks @danez! - Support handlinguseImperativeHandlecorrectly -
#743
5215babThanks @danez! - 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
8fe3dbfThanks @danez! - Fix crash when using TypeScript mapped types -
#789
7c99f15Thanks @danez! - Fix TypeScript types when strict null checks are disabled -
96d6e9eThanks @danez! - HandleReact.forwardRefcalls without a function -
96d6e9eThanks @danez! - Fixed the handling of some edge cases in resolveToValue -
96d6e9eThanks @danez! - Remove trailing commas and semicolons from raw values in the documentation -
#767
a684d82Thanks @danez! - Fix handling ofPropTypes.oneOfto handle unresolved imported values correctly -
#761
cc94da2Thanks @danez! - Fix using react-docgen in browsers -
#761
98a1138Thanks @danez! - AdddisplayNameanddescriptionto Documentation type -
96d6e9eThanks @danez! - Parse jsdoc comments for TypeScript structs -
#748
ea25b16Thanks @danez! - Handle cyclic references in PropTypesshape()andexact()methods. -
#787
5a226acThanks @danez! - Fix @babel/traverse import to work in non ESM environments -
96d6e9eThanks @danez! - Correctly handle ObjectProperties inisReactComponentMethod -
#747
1aa0249Thanks @danez! - Handletypeof import('...')andtypeof MyType.propertycorrectly in TypeScript -
050313dThanks @danez! - Correctly add LICENSE file to published packages -
96d6e9eThanks @danez! - Add support for TSAsExpressions when trying to stringify expressions -
#720
f6e4fe7Thanks @renovate! - Update dependency strip-indent to v4 -
#769
e08e08dThanks @danez! - Correctly resolve the values in anObject.values()call
Configuration
📅 Schedule: Branch creation - "on sunday before 6:00am" in timezone UTC, Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
- [ ] If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.
Netlify deploy preview
https://deploy-preview-44022--material-ui.netlify.app/
Bundle size report
No bundle size changes (Toolpad) No bundle size changes
Generated by :no_entry_sign: dangerJS against dd0115bae5cacf01485f3121004b2da89f56f939
@ZeeshanTamboli what did you mean with this: https://github.com/mui/material-ui/pull/37887#issuecomment-1633778432
What is required to be ESM?
@ZeeshanTamboli what did you mean with this: #37887 (comment)
What is required to be ESM?
@ZeeshanTamboli ping
@ZeeshanTamboli what did you mean with this: #37887 (comment)
What is required to be ESM?
I was out of the office for the last two weeks hence I couldn't reply.
I don't know much about ESM. However, I saw that from v5 to v6, the package became pure ESM with no CommonJS compatibility (docs). The guide here also says that projects should support ESM, so in our case, packages/api-docs-builder should support ESM packages with changes in package.json and file imports. I could be mistaken.
Indeed something seems broken when generating the documentation: https://app.circleci.com/pipelines/github/mui/material-ui/142193/workflows/0045335b-63ca-4ca2-814a-d23babdfc501/jobs/766104
Assigning @mui/docs-infra