A CLI and library to extract information from React component files for documentation generation purposes.
MIT License
Bot releases are visible (Hide)
(cherry picked changes released in v2.19.0
)
See v2.19.0
.
See v2.19.0
.
Flow: Function type definitions without parameter names are now supported. For example:
type Props = {
callback: (string) => void,
}
In such a case the parameter name will simply be empty. See the commit ( #218 ) for an example of the output. Thank you @odinuge!
v2.19.0
.getMemberValuePath
now understands TaggedTemplateExpression
s. This is used by @Jmeyering's custom annotation resolver. Check it out at https://github.com/Jmeyering/react-docgen-annotation-resolver ! Thank you @Jmeyering!You can install this version via npm install react-docgen@next
.
The names of class declarations and function declarations are now used as displayName
s (3f22b3c49f4056ad725bec8d9908cc1027bf45dc).
In classes, static get propTypes(){}
is now inspected for propTypes. I.e. instead of
class MyComponent extends React.Component {}
MyComponent.propTypes = {
disabled: PropTypes.boolean,
};
you can now write
class MyComponent extends React.Component {
static get propTypes() {
return {
disabled: PropTypes.boolean,
};
}
}
(23aa0feeff512ea841907e75598798de65bedd4a)
resolveToModule
also resolvesJSXIdentifiers
now (2c6e55aa838c1cb9a6755711a17ca4f108cbdf13)Published by danez about 7 years ago
Published by danez about 7 years ago
Object.keys
in PropType.oneOf()
(#211).Component.propTypes = { foo: PropTypes.oneOf(Object.keys({ a: 1, b: 2 }))};
// react-docgen will now correctly extract the type of foo being "a" or "b"
Classes that define a render
public class field are now considered React components. For example:
class Component extends SomeBaseComponent {
render = someFunction;
}
See #193 and fe55485. Thank you @birjolaxew!
Functions assigned to public class fields are now considered as methods. I.e. both function in the following example will be picked up by react-docgen:
class Component extends React.Component {
method1() {}
method2 = () => {
};
}
See 1ff84b7 and #182.
recast
( 760c426 ).(cherry picked changes from v2.16.0)
-e
, --exclude
now accepts a regular expression to filter out files by name: -e /.*-test\.js/
The argument will only be treated as a regular expression if the parameter is only passed once ( #164).You can install this version via npm install react-docgen@next
.
You can install this version via npm install react-docgen@next
.
developit/proptypes
( #163, @eduardoboucas) and prop-types
( #172, @sawyerh) packages.React.Children.only
as React components ( #169, @damian )coverage/
folder when publishing to npm, reducing package size by more than 50%! ( #166, @fabiosantoscode )While this a new major version, there shouldn't be any breaking changes. We switched to babylon v7(beta) ( #158 ) internally, which supports most flow type annotations. It is published as a prerelease so you can test it on your codebase first.
Other changes:
proptypes
package is recognized as proptypes definition provider ( #163 ).You can install this release via
npm install react-docgen@next
# or
yarn add react-docgen@next
__mocks__
directories by default (#135) (@aitherios)React.cloneElement
as stateless components (#138) (@khankuan)objectOf
prop type (86b167f) (reported as #74)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
}
(eb0edaa) (reported as #87)
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)
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.
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)
To guard ourselves better against regressions, we are using jest’s snapshot tests to test component definitions that are reported as broken.
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 )-e, --exclude PATTERN
, allows you to skip files that match the provided pattern ( #102, @wallaroo )MemberExpression
s (such as propTypes
of a stateless component) to the correct object ( #111, @ZauberNerd )import
ed value, the value of the prop will now be the variable name ( #99 , @nathanmarks )@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!