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;