@samitouri / QOS-React / commits / 84084153ed

Remove keyMirror in ReactPropTypeLocations (#7592)

This one involves a bit more work as I added "phantom" flow types to a bunch of places where the type is a ReactPropTypeLocations even though those files are not `@flow` yet. A good side effect is that `ReactPropTypeLocationNames` keys are now correctly typed, this means that they cannot go out of sync without breaking flow :)

Christopher Chedeau committed Aug 28, 2016 at 10:30 UTC 84084153edbeab515f9955b4c5b955ef95167787
9 files changed +48 -35
src/addons/link/__tests__/ReactLinkPropTypes-test.js
+2 -3
@@ -14,7 +14,6 @@
14 var emptyFunction = require('emptyFunction');
15 var LinkPropTypes = require('ReactLink').PropTypes;
16 var React = require('React');
17 -var ReactPropTypeLocations = require('ReactPropTypeLocations');
17 var ReactPropTypesSecret = require('ReactPropTypesSecret');
18
19 var invalidMessage = 'Invalid prop `testProp` supplied to `testComponent`.';
@@ -27,7 +26,7 @@ function typeCheckFail(declaration, value, message) {
26 props,
27 'testProp',
28 'testComponent',
30 - ReactPropTypeLocations.prop,
29 + 'prop',
30 null,
31 ReactPropTypesSecret
32 );
@@ -41,7 +40,7 @@ function typeCheckPass(declaration, value) {
40 props,
41 'testProp',
42 'testComponent',
44 - ReactPropTypeLocations.prop,
43 + 'prop',
44 null,
45 ReactPropTypesSecret
46 );
src/isomorphic/classic/class/ReactClass.js
+10 -5
@@ -13,7 +13,6 @@
13
14 var ReactComponent = require('ReactComponent');
15 var ReactElement = require('ReactElement');
16 -var ReactPropTypeLocations = require('ReactPropTypeLocations');
16 var ReactPropTypeLocationNames = require('ReactPropTypeLocationNames');
17 var ReactNoopUpdateQueue = require('ReactNoopUpdateQueue');
18
@@ -23,6 +22,8 @@ var keyMirror = require('keyMirror');
22 var keyOf = require('keyOf');
23 var warning = require('warning');
24
25 +import type { ReactPropTypeLocations } from 'ReactPropTypeLocations';
26 +
27 var MIXINS_KEY = keyOf({mixins: null});
28
29 /**
@@ -325,7 +326,7 @@ var RESERVED_SPEC_KEYS = {
326 validateTypeDef(
327 Constructor,
328 childContextTypes,
328 - ReactPropTypeLocations.childContext
329 + 'childContext'
330 );
331 }
332 Constructor.childContextTypes = Object.assign(
@@ -339,7 +340,7 @@ var RESERVED_SPEC_KEYS = {
340 validateTypeDef(
341 Constructor,
342 contextTypes,
342 - ReactPropTypeLocations.context
343 + 'context'
344 );
345 }
346 Constructor.contextTypes = Object.assign(
@@ -367,7 +368,7 @@ var RESERVED_SPEC_KEYS = {
368 validateTypeDef(
369 Constructor,
370 propTypes,
370 - ReactPropTypeLocations.prop
371 + 'prop'
372 );
373 }
374 Constructor.propTypes = Object.assign(
@@ -382,7 +383,11 @@ var RESERVED_SPEC_KEYS = {
383 autobind: function() {}, // noop
384 };
385
385 -function validateTypeDef(Constructor, typeDef, location) {
386 +function validateTypeDef(
387 + Constructor,
388 + typeDef,
389 + location: ReactPropTypeLocations,
390 +) {
391 for (var propName in typeDef) {
392 if (typeDef.hasOwnProperty(propName)) {
393 // use a warning instead of an invariant so components
src/isomorphic/classic/element/ReactElementValidator.js
+1 -2
@@ -21,7 +21,6 @@
21 var ReactCurrentOwner = require('ReactCurrentOwner');
22 var ReactComponentTreeHook = require('ReactComponentTreeHook');
23 var ReactElement = require('ReactElement');
24 -var ReactPropTypeLocations = require('ReactPropTypeLocations');
24
25 var checkReactTypeSpec = require('checkReactTypeSpec');
26
@@ -166,7 +165,7 @@ function validatePropTypes(element) {
165 checkReactTypeSpec(
166 componentClass.propTypes,
167 element.props,
169 - ReactPropTypeLocations.prop,
168 + 'prop',
169 name,
170 element,
171 null
src/isomorphic/classic/types/__tests__/ReactPropTypes-test.js
+5 -7
@@ -14,7 +14,6 @@
14 var PropTypes;
15 var React;
16 var ReactFragment;
17 -var ReactPropTypeLocations;
17 var ReactTestUtils;
18 var ReactPropTypesSecret;
19
@@ -27,7 +26,7 @@ function typeCheckFail(declaration, value, message) {
26 props,
27 'testProp',
28 'testComponent',
30 - ReactPropTypeLocations.prop,
29 + 'prop',
30 null,
31 ReactPropTypesSecret
32 );
@@ -45,7 +44,7 @@ function typeCheckFailRequiredValues(declaration) {
44 props1,
45 'testProp',
46 'testComponent',
48 - ReactPropTypeLocations.prop,
47 + 'prop',
48 null,
49 ReactPropTypesSecret
50 );
@@ -56,7 +55,7 @@ function typeCheckFailRequiredValues(declaration) {
55 props2,
56 'testProp',
57 'testComponent',
59 - ReactPropTypeLocations.prop,
58 + 'prop',
59 null,
60 ReactPropTypesSecret
61 );
@@ -67,7 +66,7 @@ function typeCheckFailRequiredValues(declaration) {
66 props3,
67 'testProp',
68 'testComponent',
70 - ReactPropTypeLocations.prop,
69 + 'prop',
70 null,
71 ReactPropTypesSecret
72 );
@@ -81,7 +80,7 @@ function typeCheckPass(declaration, value) {
80 props,
81 'testProp',
82 'testComponent',
84 - ReactPropTypeLocations.prop,
83 + 'prop',
84 null,
85 ReactPropTypesSecret
86 );
@@ -112,7 +111,6 @@ describe('ReactPropTypes', function() {
111 PropTypes = require('ReactPropTypes');
112 React = require('React');
113 ReactFragment = require('ReactFragment');
115 - ReactPropTypeLocations = require('ReactPropTypeLocations');
114 ReactTestUtils = require('ReactTestUtils');
115 ReactPropTypesSecret = require('ReactPropTypesSecret');
116 });
src/renderers/dom/client/wrappers/LinkedValueUtils.js
+1 -2
@@ -12,7 +12,6 @@
12 'use strict';
13
14 var React = require('React');
15 -var ReactPropTypeLocations = require('ReactPropTypeLocations');
15 var ReactPropTypesSecret = require('ReactPropTypesSecret');
16
17 var invariant = require('invariant');
@@ -110,7 +109,7 @@ var LinkedValueUtils = {
109 props,
110 propName,
111 tagName,
113 - ReactPropTypeLocations.prop,
112 + 'prop',
113 null,
114 ReactPropTypesSecret
115 );
src/renderers/shared/stack/reconciler/ReactCompositeComponent.js
+9 -4
@@ -21,7 +21,6 @@ var ReactNodeTypes = require('ReactNodeTypes');
21 var ReactReconciler = require('ReactReconciler');
22
23 if (__DEV__) {
24 - var ReactPropTypeLocations = require('ReactPropTypeLocations');
24 var checkReactTypeSpec = require('checkReactTypeSpec');
25 }
26
@@ -31,6 +30,8 @@ var shallowEqual = require('shallowEqual');
30 var shouldUpdateReactComponent = require('shouldUpdateReactComponent');
31 var warning = require('warning');
32
33 +import type { ReactPropTypeLocations } from 'ReactPropTypeLocations';
34 +
35 var CompositeTypes = {
36 ImpureClass: 0,
37 PureClass: 1,
@@ -617,7 +618,7 @@ var ReactCompositeComponentMixin = {
618 this._checkContextTypes(
619 Component.contextTypes,
620 maskedContext,
620 - ReactPropTypeLocations.context
621 + 'context'
622 );
623 }
624 }
@@ -658,7 +659,7 @@ var ReactCompositeComponentMixin = {
659 this._checkContextTypes(
660 Component.childContextTypes,
661 childContext,
661 - ReactPropTypeLocations.childContext
662 + 'childContext'
663 );
664 }
665 for (var name in childContext) {
@@ -682,7 +683,11 @@ var ReactCompositeComponentMixin = {
683 * @param {string} location e.g. "prop", "context", "child context"
684 * @private
685 */
685 - _checkContextTypes: function(typeSpecs, values, location) {
686 + _checkContextTypes: function(
687 + typeSpecs,
688 + values,
689 + location: ReactPropTypeLocations,
690 + ) {
691 if (__DEV__) {
692 checkReactTypeSpec(
693 typeSpecs,
src/shared/types/ReactPropTypeLocationNames.js
+6 -2
@@ -12,14 +12,18 @@
12
13 'use strict';
14
15 +import type { ReactPropTypeLocations } from 'ReactPropTypeLocations';
16 +
17 +type NamesType = {[key: ReactPropTypeLocations]: string};
18 +
19 var ReactPropTypeLocationNames = {};
20
21 if (__DEV__) {
18 - ReactPropTypeLocationNames = {
22 + ReactPropTypeLocationNames = ({
23 prop: 'prop',
24 context: 'context',
25 childContext: 'child context',
22 - };
26 + }: NamesType);
27 }
28
29 module.exports = ReactPropTypeLocationNames;
src/shared/types/ReactPropTypeLocations.js
+4 -9
@@ -12,12 +12,7 @@
12
13 'use strict';
14
15 -var keyMirror = require('keyMirror');
16 -
17 -var ReactPropTypeLocations = keyMirror({
18 - prop: null,
19 - context: null,
20 - childContext: null,
21 -});
22 -
23 -module.exports = ReactPropTypeLocations;
15 +export type ReactPropTypeLocations =
16 + 'prop' |
17 + 'context' |
18 + 'childContext';
src/shared/types/checkReactTypeSpec.js
+10 -1
@@ -17,6 +17,8 @@ var ReactPropTypesSecret = require('ReactPropTypesSecret');
17 var invariant = require('invariant');
18 var warning = require('warning');
19
20 +import type { ReactPropTypeLocations } from 'ReactPropTypeLocations';
21 +
22 var ReactComponentTreeHook;
23
24 if (
@@ -46,7 +48,14 @@ var loggedTypeFailures = {};
48 * @param {?number} debugID The React component instance that is being type-checked
49 * @private
50 */
49 -function checkReactTypeSpec(typeSpecs, values, location, componentName, element, debugID) {
51 +function checkReactTypeSpec(
52 + typeSpecs,
53 + values,
54 + location: ReactPropTypeLocations,
55 + componentName,
56 + element,
57 + debugID,
58 +) {
59 for (var typeSpecName in typeSpecs) {
60 if (typeSpecs.hasOwnProperty(typeSpecName)) {
61 var error;