Skip to content

Commit

Permalink
added 'remove-runtime-proptypes' option
Browse files Browse the repository at this point in the history
  • Loading branch information
Keyan Zhang committed Jul 5, 2016
1 parent 62978f4 commit ee36b61
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 2 deletions.
41 changes: 41 additions & 0 deletions transforms/__testfixtures__/class-flow7.input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/* @flow */

var React = require('react');

const justNeedKeys = {
a: 12,
b: 23,
};

var Component = React.createClass({
propTypes: {
optionalMessage: React.PropTypes.instanceOf(Message),
optionalMessageOops: React.PropTypes.instanceOf(foo()),
optionalEnum: React.PropTypes.oneOf(Object.keys(justNeedKeys)),
optionalEnumOops: React.PropTypes.oneOf(bar),
optionalUnion: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.number,
React.PropTypes.instanceOf(Message),
]),
optionalUnionOops: React.PropTypes.oneOfType(foo()),
optionalUnionOops2: React.PropTypes.oneOfType(Bar),
optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),
optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),
optionalObjectWithShape: React.PropTypes.shape({
color: React.PropTypes.string,
fontSize: foo,
name: bla(),
}),
optionalObjectWithShapeOops: React.PropTypes.shape(foo()),
optionalObjectWithShapeOops2: React.PropTypes.shape(bla),
'is-literal-cool': React.PropTypes.bool,
'well-fine': React.PropTypes.number.isRequired,
},

render: function() {
return (
<div>type safety</div>
);
},
});
37 changes: 37 additions & 0 deletions transforms/__testfixtures__/class-flow7.output.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/* @flow */

var React = require('react');

const justNeedKeys = {
a: 12,
b: 23,
};

class Component extends React.Component {
props: {
optionalMessage?: Message,
optionalMessageOops?: $FlowFixMe,
optionalEnum?: $FlowFixMe,
optionalEnumOops?: $FlowFixMe,
optionalUnion?: string | number | Message,
optionalUnionOops?: $FlowFixMe,
optionalUnionOops2?: $FlowFixMe,
optionalArrayOf?: Array<number>,
optionalObjectOf?: {[key: string]: number},
optionalObjectWithShape?: {
color?: string,
fontSize?: $FlowFixMe,
name?: $FlowFixMe,
},
optionalObjectWithShapeOops?: $FlowFixMe,
optionalObjectWithShapeOops2?: $FlowFixMe,
'is-literal-cool'?: boolean,
'well-fine': number,
};

render() {
return (
<div>type safety</div>
);
}
}
9 changes: 8 additions & 1 deletion transforms/__tests__/class-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ defineTest(__dirname, 'class', enableFlowOption, 'class-anonymous');
defineTest(__dirname, 'class', pureMixinAlternativeOption, 'class-test2');
defineTest(__dirname, 'class', enableFlowOption, 'export-default-class');
defineTest(__dirname, 'class', pureMixinAlternativeOption, 'class-pure-mixin1');
defineTest(__dirname, 'class', {...enableFlowOption, 'pure-component': true}, 'class-pure-mixin2');
defineTest(__dirname, 'class', {
...enableFlowOption,
'pure-component': true,
}, 'class-pure-mixin2');
defineTest(__dirname, 'class', null, 'class-pure-mixin3');
defineTest(__dirname, 'class', enableFlowOption, 'class-initial-state');
defineTest(__dirname, 'class', enableFlowOption, 'class-property-field');
Expand All @@ -34,3 +37,7 @@ defineTest(__dirname, 'class', enableFlowOption, 'class-flow3');
defineTest(__dirname, 'class', enableFlowOption, 'class-flow4');
defineTest(__dirname, 'class', enableFlowOption, 'class-flow5');
defineTest(__dirname, 'class', enableFlowOption, 'class-flow6');
defineTest(__dirname, 'class', {
...enableFlowOption,
'remove-runtime-proptypes': true,
}, 'class-flow7');
8 changes: 7 additions & 1 deletion transforms/class.js
Original file line number Diff line number Diff line change
Expand Up @@ -938,13 +938,19 @@ module.exports = (file, api, options) => {
) :
[];

let finalStaticProperties = staticProperties;

if (shouldTransformFlow && options['remove-runtime-proptypes']) {
finalStaticProperties = staticProperties.filter((prop) => prop.key.name !== 'propTypes');
}

return withComments(j.classDeclaration(
name ? j.identifier(name) : null,
j.classBody(
[].concat(
flowPropsAnnotation,
maybeFlowStateAnnotation,
staticProperties,
finalStaticProperties,
maybeConstructor,
repositionStateProperty(initialStateProperty, propertiesAndMethods)
)
Expand Down

0 comments on commit ee36b61

Please sign in to comment.