Skip to content

Commit 80ad00b

Browse files
authored
Merge branch 'main' into feat/devtools/unwrap-useformstate
2 parents 13c058a + dc31781 commit 80ad00b

228 files changed

Lines changed: 803 additions & 582 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/react-art/src/__tests__/ReactART-test.js

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,21 @@ import Circle from 'react-art/Circle';
2222
import Rectangle from 'react-art/Rectangle';
2323
import Wedge from 'react-art/Wedge';
2424

25-
let ReactDOMClient;
26-
let act;
27-
let ReactTestRenderer;
28-
let ReactNoop;
29-
let Scheduler;
25+
// Isolate DOM renderer.
26+
jest.resetModules();
27+
28+
const ReactDOMClient = require('react-dom/client');
29+
const act = require('internal-test-utils').act;
30+
31+
// Isolate test renderer.
32+
jest.resetModules();
33+
const ReactTestRenderer = require('react-test-renderer');
34+
35+
// Isolate the noop renderer
36+
jest.resetModules();
37+
const ReactNoop = require('react-noop-renderer');
38+
const Scheduler = require('scheduler');
39+
3040
let Group;
3141
let Shape;
3242
let Surface;
@@ -63,21 +73,6 @@ describe('ReactART', () => {
6373
let container;
6474

6575
beforeEach(() => {
66-
// Isolate DOM renderer.
67-
jest.resetModules();
68-
69-
ReactDOMClient = require('react-dom/client');
70-
act = require('internal-test-utils').act;
71-
72-
// Isolate test renderer.
73-
jest.resetModules();
74-
ReactTestRenderer = require('react-test-renderer');
75-
76-
// Isolate the noop renderer
77-
jest.resetModules();
78-
ReactNoop = require('react-noop-renderer');
79-
Scheduler = require('scheduler');
80-
8176
container = document.createElement('div');
8277
document.body.appendChild(container);
8378

packages/react-client/src/ReactFlightReplyClient.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ import type {
1414
RejectedThenable,
1515
ReactCustomFormAction,
1616
} from 'shared/ReactTypes';
17+
import {enableRenderableContext} from 'shared/ReactFeatureFlags';
1718

1819
import {
1920
REACT_ELEMENT_TYPE,
2021
REACT_LAZY_TYPE,
22+
REACT_CONTEXT_TYPE,
2123
REACT_PROVIDER_TYPE,
2224
getIteratorFn,
2325
} from 'shared/ReactSymbols';
@@ -302,7 +304,10 @@ export function processReply(
302304
'React Lazy cannot be passed to Server Functions from the Client.%s',
303305
describeObjectForErrorMessage(parent, key),
304306
);
305-
} else if ((value: any).$$typeof === REACT_PROVIDER_TYPE) {
307+
} else if (
308+
(value: any).$$typeof ===
309+
(enableRenderableContext ? REACT_CONTEXT_TYPE : REACT_PROVIDER_TYPE)
310+
) {
306311
console.error(
307312
'React Context Providers cannot be passed to Server Functions from the Client.%s',
308313
describeObjectForErrorMessage(parent, key),

packages/react-client/src/__tests__/ReactFlight-test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ let assertLog;
4242

4343
describe('ReactFlight', () => {
4444
beforeEach(() => {
45+
jest.resetModules();
4546
jest.mock('react', () => require('react/react.react-server'));
4647
ReactServer = require('react');
4748
ReactNoopFlightServer = require('react-noop-renderer/flight-server');

packages/react-debug-tools/src/ReactDebugHooks.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import type {
1111
Awaited,
1212
ReactContext,
13-
ReactProviderType,
1413
StartTransitionOptions,
1514
Usable,
1615
Thenable,
@@ -976,8 +975,11 @@ function setupContexts(contextMap: Map<ReactContext<any>, any>, fiber: Fiber) {
976975
let current: null | Fiber = fiber;
977976
while (current) {
978977
if (current.tag === ContextProvider) {
979-
const providerType: ReactProviderType<any> = current.type;
980-
const context: ReactContext<any> = providerType._context;
978+
let context: ReactContext<any> = current.type;
979+
if ((context: any)._context !== undefined) {
980+
// Support inspection of pre-19+ providers.
981+
context = (context: any)._context;
982+
}
981983
if (!contextMap.has(context)) {
982984
// Store the current value that we're going to restore later.
983985
contextMap.set(context, context._currentValue);

packages/react-debug-tools/src/__tests__/ReactDevToolsHooksIntegration-test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ describe('React hooks DevTools integration', () => {
3434
onCommitFiberUnmount: () => {},
3535
};
3636

37+
jest.resetModules();
38+
3739
React = require('react');
3840
ReactDebugTools = require('react-debug-tools');
3941
ReactTestRenderer = require('react-test-renderer');

packages/react-debug-tools/src/__tests__/ReactHooksInspection-test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ let ReactDebugTools;
1515

1616
describe('ReactHooksInspection', () => {
1717
beforeEach(() => {
18+
jest.resetModules();
1819
React = require('react');
1920
ReactDebugTools = require('react-debug-tools');
2021
});

packages/react-debug-tools/src/__tests__/ReactHooksInspectionIntegration-test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ let useMemoCache;
1919

2020
describe('ReactHooksInspectionIntegration', () => {
2121
beforeEach(() => {
22+
jest.resetModules();
2223
React = require('react');
2324
ReactTestRenderer = require('react-test-renderer');
2425
ReactDOM = require('react-dom');

packages/react-devtools-shared/src/__tests__/console-test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -924,6 +924,8 @@ describe('console', () => {
924924

925925
describe('console error', () => {
926926
beforeEach(() => {
927+
jest.resetModules();
928+
927929
const Console = require('react-devtools-shared/src/backend/console');
928930
patchConsole = Console.patch;
929931
unpatchConsole = Console.unpatch;

packages/react-devtools-shared/src/backend/ReactSymbols.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ export const PROFILER_SYMBOL_STRING = 'Symbol(react.profiler)';
5151
export const PROVIDER_NUMBER = 0xeacd;
5252
export const PROVIDER_SYMBOL_STRING = 'Symbol(react.provider)';
5353

54+
export const CONSUMER_SYMBOL_STRING = 'Symbol(react.consumer)';
55+
5456
export const SCOPE_NUMBER = 0xead7;
5557
export const SCOPE_SYMBOL_STRING = 'Symbol(react.scope)';
5658

packages/react-devtools-shared/src/backend/renderer.js

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import {
7979
PROVIDER_SYMBOL_STRING,
8080
CONTEXT_NUMBER,
8181
CONTEXT_SYMBOL_STRING,
82+
CONSUMER_SYMBOL_STRING,
8283
STRICT_MODE_NUMBER,
8384
STRICT_MODE_SYMBOL_STRING,
8485
PROFILER_NUMBER,
@@ -525,6 +526,15 @@ export function getInternalReactConstants(version: string): {
525526
case CONTEXT_NUMBER:
526527
case CONTEXT_SYMBOL_STRING:
527528
case SERVER_CONTEXT_SYMBOL_STRING:
529+
if (
530+
fiber.type._context === undefined &&
531+
fiber.type.Provider === fiber.type
532+
) {
533+
// In 19+, Context.Provider === Context, so this is a provider.
534+
resolvedContext = fiber.type;
535+
return `${resolvedContext.displayName || 'Context'}.Provider`;
536+
}
537+
528538
// 16.3-16.5 read from "type" because the Consumer is the actual context object.
529539
// 16.6+ should read from "type._context" because Consumer can be different (in DEV).
530540
// NOTE Keep in sync with inspectElementRaw()
@@ -533,6 +543,10 @@ export function getInternalReactConstants(version: string): {
533543
// NOTE: TraceUpdatesBackendManager depends on the name ending in '.Consumer'
534544
// If you change the name, figure out a more resilient way to detect it.
535545
return `${resolvedContext.displayName || 'Context'}.Consumer`;
546+
case CONSUMER_SYMBOL_STRING:
547+
// 19+
548+
resolvedContext = fiber.type._context;
549+
return `${resolvedContext.displayName || 'Context'}.Consumer`;
536550
case STRICT_MODE_NUMBER:
537551
case STRICT_MODE_SYMBOL_STRING:
538552
return null;
@@ -3178,8 +3192,14 @@ export function attach(
31783192
}
31793193
}
31803194
} else if (
3181-
typeSymbol === CONTEXT_NUMBER ||
3182-
typeSymbol === CONTEXT_SYMBOL_STRING
3195+
// Detect pre-19 Context Consumers
3196+
(typeSymbol === CONTEXT_NUMBER || typeSymbol === CONTEXT_SYMBOL_STRING) &&
3197+
!(
3198+
// In 19+, CONTEXT_SYMBOL_STRING means a Provider instead.
3199+
// It will be handled in a different branch below.
3200+
// Eventually, this entire branch can be removed.
3201+
(type._context === undefined && type.Provider === type)
3202+
)
31833203
) {
31843204
// 16.3-16.5 read from "type" because the Consumer is the actual context object.
31853205
// 16.6+ should read from "type._context" because Consumer can be different (in DEV).
@@ -3209,6 +3229,35 @@ export function attach(
32093229
}
32103230
}
32113231

3232+
current = current.return;
3233+
}
3234+
} else if (
3235+
// Detect 19+ Context Consumers
3236+
typeSymbol === CONSUMER_SYMBOL_STRING
3237+
) {
3238+
// This branch is 19+ only, where Context.Provider === Context.
3239+
// NOTE Keep in sync with getDisplayNameForFiber()
3240+
const consumerResolvedContext = type._context;
3241+
3242+
// Global context value.
3243+
context = consumerResolvedContext._currentValue || null;
3244+
3245+
// Look for overridden value.
3246+
let current = ((fiber: any): Fiber).return;
3247+
while (current !== null) {
3248+
const currentType = current.type;
3249+
const currentTypeSymbol = getTypeSymbol(currentType);
3250+
if (
3251+
// In 19+, these are Context Providers
3252+
currentTypeSymbol === CONTEXT_SYMBOL_STRING
3253+
) {
3254+
const providerResolvedContext = currentType;
3255+
if (providerResolvedContext === consumerResolvedContext) {
3256+
context = current.memoizedProps.value;
3257+
break;
3258+
}
3259+
}
3260+
32123261
current = current.return;
32133262
}
32143263
}

0 commit comments

Comments
 (0)