Releases: reactjs/react-docgen
v2.12.0
New
- Support for
objectOf
prop type (86b167f) (reported as #74) - Treat default arguments as default props in stateless components ( #108, @CompuIves)
Improved
-
When passing an unknown value to
shape(...)
, react-docgen will now report that value as computed.Example:
shape(Child.propTypes)
Before:"type": { "name": "shape", "value": "unkown" }
Now:
"type": { "name": "shape", "value": "Child.propTypes", "computed": true }
-
Resolve static values passed to
oneOf
. Examples:React.PropTypes.oneOf([TYPES.FOO, TYPES.BAR]); // or: var TYPES = ["FOO", "BAR"]; React.PropTypes.oneOf(TYPES); // or: var TYPES = ["A", "B"]; var MORE = [...TYPES, "C"]; React.PropTypes.oneOf(MORE);
(#122, @ZauberNerd)
Fixed
v2.11.0
New
Detect exported components passed to HOCs
Until now, react-docgen didn’t find components that are passed to a higher order component (HOC):
function MyComponent() { /* ... */ }
export default hoc(MyComponent);
The workaround was to change the resolver to find all component definitions in the file, something that is not always desirable.
With #124, @rtsao extended the default resolver to be able to handle these cases.
Fixes
-
findAllExportedComponentDefinitions
can now be selected in the CLI.
(reported as issue #119) -
The static variable resolution process was fixed to consider assignments to variables. The following example didn’t work before and works now:
var Component; Component = React.createClass(...); module.exports = Component;
(reported as issue #58)
-
The display name handler now takes
displayName
getters in class definitions into account:class Component extends React.Component { static get displayName() { return 'Name'; } }
(reported as issue #61)
Internal improvements
To guard ourselves better against regressions, we are using jest’s snapshot tests to test component definitions that are reported as broken.
v2.10.0
New
- New
findAllExportedComponentDefinitions
resolver. As the name suggests, it finds all exported component definitions. This complements the resolvers for finding all component definitions and the default exported definition ( #114, @ZauberNerd ) - New CLI option:
-e, --exclude PATTERN
, allows you to skip files that match the provided pattern ( #102, @wallaroo )
Fixed / improved
- Currently resolve namespace imports to their module ( #109, @ZauberNerd )
- Resolve
MemberExpression
s (such aspropTypes
of a stateless component) to the correct object ( #111, @ZauberNerd ) - Handle intersection and union flow types for prop types definitions. Intersection types are supported, union types are silently ignored. Before react-docgen would throw an error. ( #118, @danez )
- If a default prop value references an
import
ed value, the value of the prop will now be the variable name ( #99 , @nathanmarks ) - The jsdoc type declarations
@param {x|y}
and@param {*}
now correctly resolve to their equivalent flow type declarations (union and mixed). ( #95 , @dickeylth )
Thanks to everyone who contributed, this is great!
v2.9.1
v2.9.0
New: Type aliases and optional method parameter flag
@caabernathy added new information to method parameters ( #83 ). If the parameter has a flow type, the name of the type is no also included. I.e. if the type definition is:
export type StatusBarStyle = $Enum<{
...
}
the docs for a parameter of that type will include alias: "StatusBarStyle"
.
In addition the docs now include an optional
field indicating whether the parameter is optional or nor.
v2.8.2
v2.8.1
v2.8.0
v2.7.0
New
This version adds a great new feature: Support for Flow type definitions. Thanks a lot to @danez for implementing this feature ( #48 ).
react-docgen is now able to extract type definitions as in this example:
import React, { Component } from 'react';
type Props = {
/** Description of prop "foo". */
primitive: number,
/** Description of prop "bar". */
literalsAndUnion: 'string' | 'otherstring' | number,
arr: Array<any>,
func?: (value: string) => void,
obj?: { subvalue: ?boolean },
};
/**
* General component description.
*/
export default class MyComponent extends Component<void, Props, void> {
props: Props;
render(): ?ReactElement {
// ...
}
}
In the JSON output, every prop will have a new field named flowType
. If you use both, flow (for static type checks) and React propTypes (for dynamic type checks) you can do so without any collisions. The JSON blob now simply contains more information and you can decide which one to use for your documentation.
Have a look at the more extensive description in the README to learn how flow types are represented.