@samitouri / QOS-React / commits / cdbfa6b5dd

[react-is] add back proper AsyncMode symbol, for back compat (#13959)

- Partial revert of #13732 - Fixes #13958.

Jordan Harband committed Oct 31, 2018 at 12:03 UTC cdbfa6b5dd692220e5996ec453d46fc10aff046a
4 files changed +15 -5
packages/react-is/src/ReactIs.js
+5 -3
@@ -10,6 +10,7 @@
10 'use strict';
11
12 import {
13 + REACT_ASYNC_MODE_TYPE,
14 REACT_CONCURRENT_MODE_TYPE,
15 REACT_CONTEXT_TYPE,
16 REACT_ELEMENT_TYPE,
@@ -32,6 +33,7 @@ export function typeOf(object: any) {
33 const type = object.type;
34
35 switch (type) {
36 + case REACT_ASYNC_MODE_TYPE:
37 case REACT_CONCURRENT_MODE_TYPE:
38 case REACT_FRAGMENT_TYPE:
39 case REACT_PROFILER_TYPE:
@@ -57,8 +59,8 @@ export function typeOf(object: any) {
59 return undefined;
60 }
61
60 -// AsyncMode alias is deprecated along with isAsyncMode
61 -export const AsyncMode = REACT_CONCURRENT_MODE_TYPE;
62 +// AsyncMode is deprecated along with isAsyncMode
63 +export const AsyncMode = REACT_ASYNC_MODE_TYPE;
64 export const ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
65 export const ContextConsumer = REACT_CONTEXT_TYPE;
66 export const ContextProvider = REACT_PROVIDER_TYPE;
@@ -86,7 +88,7 @@ export function isAsyncMode(object: any) {
88 );
89 }
90 }
89 - return isConcurrentMode(object);
91 + return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
92 }
93 export function isConcurrentMode(object: any) {
94 return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
packages/react-is/src/__tests__/ReactIs-test.js
+1 -1
@@ -69,7 +69,7 @@ describe('ReactIs', () => {
69 expect(ReactIs.isValidElementType({type: 'div', props: {}})).toEqual(false);
70 });
71
72 - it('should identify async mode', () => {
72 + it('should identify concurrent mode', () => {
73 expect(ReactIs.typeOf(<React.unstable_ConcurrentMode />)).toBe(
74 ReactIs.ConcurrentMode,
75 );
packages/shared/ReactSymbols.js
+3
@@ -32,6 +32,9 @@ export const REACT_PROVIDER_TYPE = hasSymbol
32 export const REACT_CONTEXT_TYPE = hasSymbol
33 ? Symbol.for('react.context')
34 : 0xeace;
35 +export const REACT_ASYNC_MODE_TYPE = hasSymbol
36 + ? Symbol.for('react.async_mode')
37 + : 0xeacf;
38 export const REACT_CONCURRENT_MODE_TYPE = hasSymbol
39 ? Symbol.for('react.concurrent_mode')
40 : 0xeacf;
packages/shared/__tests__/ReactSymbols-test.internal.js
+6 -1
@@ -31,7 +31,12 @@ describe('ReactSymbols', () => {
31 const originalSymbolFor = global.Symbol.for;
32 global.Symbol.for = null;
33 try {
34 - expectToBeUnique(Object.entries(require('shared/ReactSymbols')));
34 + const entries = Object.entries(require('shared/ReactSymbols')).filter(
35 + // REACT_ASYNC_MODE_TYPE and REACT_CONCURRENT_MODE_TYPE have the same numeric value
36 + // for legacy backwards compatibility
37 + ([key]) => key !== 'REACT_ASYNC_MODE_TYPE',
38 + );
39 + expectToBeUnique(entries);
40 } finally {
41 global.Symbol.for = originalSymbolFor;
42 }