diff --git a/package.json b/package.json index 663538b506c..aafb48ecb9f 100644 --- a/package.json +++ b/package.json @@ -63,14 +63,14 @@ "eslint-plugin-react-internal": "link:./scripts/eslint-rules", "fbjs-scripts": "^3.0.1", "filesize": "^6.0.1", - "flow-bin": "^0.232.0", - "flow-remove-types": "^2.232.0", + "flow-bin": "^0.235.0", + "flow-remove-types": "^2.235.0", "glob": "^7.1.6", "glob-stream": "^6.1.0", "google-closure-compiler": "^20230206.0.0", "gzip-size": "^5.1.1", - "hermes-eslint": "^0.20.1", - "hermes-parser": "^0.20.1", + "hermes-eslint": "^0.22.0", + "hermes-parser": "^0.22.0", "jest": "^29.4.2", "jest-cli": "^29.4.2", "jest-diff": "^29.4.2", diff --git a/packages/react-client/src/ReactClientConsoleConfigBrowser.js b/packages/react-client/src/ReactClientConsoleConfigBrowser.js index da87324b6df..a8a375debdc 100644 --- a/packages/react-client/src/ReactClientConsoleConfigBrowser.js +++ b/packages/react-client/src/ReactClientConsoleConfigBrowser.js @@ -70,7 +70,7 @@ export function printToConsole( } else if (methodName === 'warn') { warn.apply(console, newArgs); } else { - // eslint-disable-next-line react-internal/no-production-logging - console[methodName].apply(console, newArgs); + // $FlowFixMe[invalid-computed-prop] + console[methodName].apply(console, newArgs); // eslint-disable-line react-internal/no-production-logging } } diff --git a/packages/react-client/src/ReactClientConsoleConfigPlain.js b/packages/react-client/src/ReactClientConsoleConfigPlain.js index a4e7c3c6d7e..64b61d6ed6f 100644 --- a/packages/react-client/src/ReactClientConsoleConfigPlain.js +++ b/packages/react-client/src/ReactClientConsoleConfigPlain.js @@ -51,7 +51,7 @@ export function printToConsole( } else if (methodName === 'warn') { warn.apply(console, newArgs); } else { - // eslint-disable-next-line react-internal/no-production-logging - console[methodName].apply(console, newArgs); + // $FlowFixMe[invalid-computed-prop] + console[methodName].apply(console, newArgs); // eslint-disable-line react-internal/no-production-logging } } diff --git a/packages/react-client/src/ReactClientConsoleConfigServer.js b/packages/react-client/src/ReactClientConsoleConfigServer.js index f6ecad92f3e..0a62707cf64 100644 --- a/packages/react-client/src/ReactClientConsoleConfigServer.js +++ b/packages/react-client/src/ReactClientConsoleConfigServer.js @@ -71,7 +71,7 @@ export function printToConsole( } else if (methodName === 'warn') { warn.apply(console, newArgs); } else { - // eslint-disable-next-line react-internal/no-production-logging - console[methodName].apply(console, newArgs); + // $FlowFixMe[invalid-computed-prop] + console[methodName].apply(console, newArgs); // eslint-disable-line react-internal/no-production-logging } } diff --git a/packages/react-debug-tools/src/ReactDebugHooks.js b/packages/react-debug-tools/src/ReactDebugHooks.js index 09ba351235e..d7ffc6626c6 100644 --- a/packages/react-debug-tools/src/ReactDebugHooks.js +++ b/packages/react-debug-tools/src/ReactDebugHooks.js @@ -774,6 +774,7 @@ const Dispatcher: DispatcherType = { const DispatcherProxyHandler = { get(target: DispatcherType, prop: string) { if (target.hasOwnProperty(prop)) { + // $FlowFixMe[invalid-computed-prop] return target[prop]; } const error = new Error('Missing method in Dispatcher: ' + prop); diff --git a/packages/react-devtools-shared/src/backend/console.js b/packages/react-devtools-shared/src/backend/console.js index e1b98b91901..3aedfa6e395 100644 --- a/packages/react-devtools-shared/src/backend/console.js +++ b/packages/react-devtools-shared/src/backend/console.js @@ -97,6 +97,7 @@ const injectedRenderers: Map< let targetConsole: Object = console; let targetConsoleMethods: {[string]: $FlowFixMe} = {}; for (const method in console) { + // $FlowFixMe[invalid-computed-prop] targetConsoleMethods[method] = console[method]; } @@ -110,6 +111,7 @@ export function dangerous_setTargetConsoleForTesting( targetConsoleMethods = ({}: {[string]: $FlowFixMe}); for (const method in targetConsole) { + // $FlowFixMe[invalid-computed-prop] targetConsoleMethods[method] = console[method]; } } diff --git a/packages/react-devtools-shared/src/backend/renderer.js b/packages/react-devtools-shared/src/backend/renderer.js index 4ec7de95295..80ec9a05a57 100644 --- a/packages/react-devtools-shared/src/backend/renderer.js +++ b/packages/react-devtools-shared/src/backend/renderer.js @@ -3386,6 +3386,7 @@ export function attach( // Temporarily disable all console logging before re-running the hook. for (const method in console) { try { + // $FlowFixMe[invalid-computed-prop] originalConsoleMethods[method] = console[method]; // $FlowFixMe[prop-missing] console[method] = () => {}; diff --git a/packages/react-devtools-shared/src/hook.js b/packages/react-devtools-shared/src/hook.js index 0dd96dc471c..c16409e3d92 100644 --- a/packages/react-devtools-shared/src/hook.js +++ b/packages/react-devtools-shared/src/hook.js @@ -32,6 +32,7 @@ export function installHook(target: any): DevToolsHook | null { let targetConsole: Object = console; let targetConsoleMethods: {[string]: $FlowFixMe} = {}; for (const method in console) { + // $FlowFixMe[invalid-computed-prop] targetConsoleMethods[method] = console[method]; } @@ -42,6 +43,7 @@ export function installHook(target: any): DevToolsHook | null { targetConsoleMethods = ({}: {[string]: $FlowFixMe}); for (const method in targetConsole) { + // $FlowFixMe[invalid-computed-prop] targetConsoleMethods[method] = console[method]; } } diff --git a/packages/react-dom-bindings/src/client/DOMAccessibilityRoles.js b/packages/react-dom-bindings/src/client/DOMAccessibilityRoles.js index 0a6bbb4c5d5..4c1091f2455 100644 --- a/packages/react-dom-bindings/src/client/DOMAccessibilityRoles.js +++ b/packages/react-dom-bindings/src/client/DOMAccessibilityRoles.js @@ -60,6 +60,7 @@ const tagToRoleMappings = { }; function getImplicitRole(element: Element): string | null { + // $FlowFixMe[invalid-computed-prop] const mappedByTag = tagToRoleMappings[element.tagName]; if (mappedByTag !== undefined) { return mappedByTag; diff --git a/packages/react-dom-bindings/src/client/DOMPropertyOperations.js b/packages/react-dom-bindings/src/client/DOMPropertyOperations.js index 1d5211e451f..da928058bbc 100644 --- a/packages/react-dom-bindings/src/client/DOMPropertyOperations.js +++ b/packages/react-dom-bindings/src/client/DOMPropertyOperations.js @@ -196,6 +196,7 @@ export function setValueForPropertyOnCustomComponent( const eventName = name.slice(2, useCapture ? name.length - 7 : undefined); const prevProps = getFiberCurrentPropsFromNode(node); + // $FlowFixMe[invalid-computed-prop] const prevValue = prevProps != null ? prevProps[name] : null; if (typeof prevValue === 'function') { node.removeEventListener(eventName, prevValue, useCapture); diff --git a/packages/react-dom-bindings/src/events/getListener.js b/packages/react-dom-bindings/src/events/getListener.js index 68ab23e2194..d6c7bab6d01 100644 --- a/packages/react-dom-bindings/src/events/getListener.js +++ b/packages/react-dom-bindings/src/events/getListener.js @@ -62,6 +62,7 @@ export default function getListener( // Work in progress. return null; } + // $FlowFixMe[invalid-computed-prop] const listener = props[registrationName]; if (shouldPreventMouseEvent(registrationName, inst.type, props)) { return null; diff --git a/packages/react-dom-bindings/src/server/ReactDOMFlightServerHostDispatcher.js b/packages/react-dom-bindings/src/server/ReactDOMFlightServerHostDispatcher.js index 3303c07cfb4..c2a9227737e 100644 --- a/packages/react-dom-bindings/src/server/ReactDOMFlightServerHostDispatcher.js +++ b/packages/react-dom-bindings/src/server/ReactDOMFlightServerHostDispatcher.js @@ -238,6 +238,7 @@ function trimOptions< let hasProperties = false; const trimmed: T = ({}: any); for (const key in options) { + // $FlowFixMe[invalid-computed-prop] if (options[key] != null) { hasProperties = true; (trimmed: any)[key] = options[key]; diff --git a/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js b/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js index 731b6f2483d..3424b8722d4 100644 --- a/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js +++ b/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js @@ -6071,6 +6071,7 @@ function getPreloadAsHeader( let value = `<${escapedHref}>; rel=preload; as="${escapedAs}"`; for (const paramName in params) { if (hasOwnProperty.call(params, paramName)) { + // $FlowFixMe[invalid-computed-prop] const paramValue = params[paramName]; if (typeof paramValue === 'string') { value += `; ${paramName.toLowerCase()}="${escapeStringForLinkHeaderQuotedParamValueContext( diff --git a/packages/react-native-renderer/src/legacy-events/EventPluginRegistry.js b/packages/react-native-renderer/src/legacy-events/EventPluginRegistry.js index 7d96a1eb1bd..48cfd5759b3 100644 --- a/packages/react-native-renderer/src/legacy-events/EventPluginRegistry.js +++ b/packages/react-native-renderer/src/legacy-events/EventPluginRegistry.js @@ -107,6 +107,7 @@ function publishEventForPlugin( if (phasedRegistrationNames) { for (const phaseName in phasedRegistrationNames) { if (phasedRegistrationNames.hasOwnProperty(phaseName)) { + // $FlowFixMe[invalid-computed-prop] const phasedRegistrationName = phasedRegistrationNames[phaseName]; publishRegistrationName( phasedRegistrationName, diff --git a/packages/react-reconciler/src/ReactFiberThenable.js b/packages/react-reconciler/src/ReactFiberThenable.js index 8c302e99a32..2f0ac5637af 100644 --- a/packages/react-reconciler/src/ReactFiberThenable.js +++ b/packages/react-reconciler/src/ReactFiberThenable.js @@ -214,7 +214,7 @@ export function trackUsedThenable( } // Check one more time in case the thenable resolved synchronously. - switch (thenable.status) { + switch ((thenable: Thenable).status) { case 'fulfilled': { const fulfilledThenable: FulfilledThenable = (thenable: any); return fulfilledThenable.value; diff --git a/packages/react-server/src/ReactFizzThenable.js b/packages/react-server/src/ReactFizzThenable.js index 1494b4188e0..60117a6f526 100644 --- a/packages/react-server/src/ReactFizzThenable.js +++ b/packages/react-server/src/ReactFizzThenable.js @@ -107,7 +107,7 @@ export function trackUsedThenable( } // Check one more time in case the thenable resolved synchronously - switch (thenable.status) { + switch ((thenable: Thenable).status) { case 'fulfilled': { const fulfilledThenable: FulfilledThenable = (thenable: any); return fulfilledThenable.value; diff --git a/packages/react-server/src/ReactFlightThenable.js b/packages/react-server/src/ReactFlightThenable.js index cfda818f19f..d4b1f273952 100644 --- a/packages/react-server/src/ReactFlightThenable.js +++ b/packages/react-server/src/ReactFlightThenable.js @@ -107,7 +107,7 @@ export function trackUsedThenable( } // Check one more time in case the thenable resolved synchronously - switch (thenable.status) { + switch ((thenable: Thenable).status) { case 'fulfilled': { const fulfilledThenable: FulfilledThenable = (thenable: any); return fulfilledThenable.value; diff --git a/packages/react/src/ReactChildren.js b/packages/react/src/ReactChildren.js index 7296a452c00..8fcc83dea4b 100644 --- a/packages/react/src/ReactChildren.js +++ b/packages/react/src/ReactChildren.js @@ -42,6 +42,7 @@ function escape(key: string): string { ':': '=2', }; const escapedString = key.replace(escapeRegex, function (match) { + // $FlowFixMe[invalid-computed-prop] return escaperLookup[match]; }); @@ -127,7 +128,7 @@ function resolveThenable(thenable: Thenable): T { } // Check one more time in case the thenable resolved synchronously. - switch (thenable.status) { + switch ((thenable: Thenable).status) { case 'fulfilled': { const fulfilledThenable: FulfilledThenable = (thenable: any); return fulfilledThenable.value; diff --git a/packages/react/src/ReactLazy.js b/packages/react/src/ReactLazy.js index e1b222ad8b2..d1d1088aaeb 100644 --- a/packages/react/src/ReactLazy.js +++ b/packages/react/src/ReactLazy.js @@ -61,7 +61,10 @@ function lazyInitializer(payload: Payload): T { // end up fixing it if the resolution was a concurrency bug. thenable.then( moduleObject => { - if (payload._status === Pending || payload._status === Uninitialized) { + if ( + (payload: Payload)._status === Pending || + payload._status === Uninitialized + ) { // Transition to the next state. const resolved: ResolvedPayload = (payload: any); resolved._status = Resolved; @@ -69,7 +72,10 @@ function lazyInitializer(payload: Payload): T { } }, error => { - if (payload._status === Pending || payload._status === Uninitialized) { + if ( + (payload: Payload)._status === Pending || + payload._status === Uninitialized + ) { // Transition to the next state. const rejected: RejectedPayload = (payload: any); rejected._status = Rejected; diff --git a/packages/shared/enqueueTask.js b/packages/shared/enqueueTask.js index f2d18e7584b..f7e1c746e1f 100644 --- a/packages/shared/enqueueTask.js +++ b/packages/shared/enqueueTask.js @@ -16,6 +16,7 @@ export default function enqueueTask(task: () => void): void { // read require off the module object to get around the bundlers. // we don't want them to detect a require and bundle a Node polyfill. const requireString = ('require' + Math.random()).slice(0, 7); + // $FlowFixMe[invalid-computed-prop] const nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's // version of setImmediate, bypassing fake timers if any. diff --git a/scripts/flow/react-native-host-hooks.js b/scripts/flow/react-native-host-hooks.js index 4012f78c474..64f77e6dbdf 100644 --- a/scripts/flow/react-native-host-hooks.js +++ b/scripts/flow/react-native-host-hooks.js @@ -97,7 +97,7 @@ declare module 'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface' setChildren: (containerTag: number, reactTags: Array) => void, updateView: (reactTag: number, viewName: string, props: ?Object) => void, __takeSnapshot: ( - view?: 'window' | Element | number, + view?: 'window' | Element | number, options?: { width?: number, height?: number, diff --git a/yarn.lock b/yarn.lock index b4a5640f3ca..ea0d17ca3f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7202,6 +7202,7 @@ eslint-plugin-no-unsanitized@3.1.2: "eslint-plugin-react-internal@link:./scripts/eslint-rules": version "0.0.0" + uid "" eslint-plugin-react@^6.7.1: version "6.10.3" @@ -8320,17 +8321,17 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== -flow-bin@^0.232.0: - version "0.232.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.232.0.tgz#80587406cbb3a74577151ad27c6058b2a468c215" - integrity sha512-7uOycTN+Ys2nYRJRig5S2yN41ZokW7bC4K1GC4nCDa/3FAZLP5/mQbee6UjxFBP9MC4yUYi17bdFTFzCH8bHeg== +flow-bin@^0.235.0: + version "0.235.1" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.235.1.tgz#7dfca9c480bb7cb83fa3caca58386e9beca09bc3" + integrity sha512-SuXw5NQDIdSBMg/NgvS5mzdI6dPEYWubnucnYno9wWLd6xoK1nkH6t2Dn2GsML9bIoVqp3E/ni1jo18A4G4FrQ== -flow-remove-types@^2.232.0: - version "2.232.0" - resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-2.232.0.tgz#a4333fee2524b57220791a130955f48e0b107f1a" - integrity sha512-t7B6axPRmSGeWU1m2j+LOBocw9ORXcomoykfMoZedd8snGum3QQpzro3eQpDoutnqKRtJliAvX6PJtFCNEjpMQ== +flow-remove-types@^2.235.0: + version "2.238.2" + resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-2.238.2.tgz#85c9d26e83ba395f0206a23bce438223bc035609" + integrity sha512-WJXRomjPiZ34nG14y7AceoPxg1L00FxjPSA3TDBTG2OPt8QFNtiYEmO4/3WG58n3C4wjxyVuoE6KjxQIvCDyjw== dependencies: - hermes-parser "0.20.1" + hermes-parser "0.22.0" pirates "^3.0.2" vlq "^0.2.1" @@ -9116,26 +9117,26 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" -hermes-eslint@^0.20.1: - version "0.20.1" - resolved "https://registry.yarnpkg.com/hermes-eslint/-/hermes-eslint-0.20.1.tgz#4a731b47a6d169bbd4514aaa74bd812fd90f3554" - integrity sha512-EhdvFV6RkPIJvbqN8oqFZO1oF4NlPWMjhMjCWkUJX1YL1MZMfkF7nSdx6RKTq6xK17yo+Bgv88L21xuH9GtRpw== +hermes-eslint@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/hermes-eslint/-/hermes-eslint-0.22.0.tgz#b4b9a58a546f9b2f33536a977bcea3f026057f67" + integrity sha512-WnD0xPY1Clvd4F68g2esS89C0NGeu/pn3sdqGXXdnlgr3jZtG5lugscRATS+0+mXOtZ6PTxSClVr2JL4BNor2Q== dependencies: esrecurse "^4.3.0" - hermes-estree "0.20.1" - hermes-parser "0.20.1" + hermes-estree "0.22.0" + hermes-parser "0.22.0" -hermes-estree@0.20.1: - version "0.20.1" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.20.1.tgz#0b9a544cf883a779a8e1444b915fa365bef7f72d" - integrity sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg== +hermes-estree@0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.22.0.tgz#38559502b119f728901d2cfe2ef422f277802a1d" + integrity sha512-FLBt5X9OfA8BERUdc6aZS36Xz3rRuB0Y/mfocSADWEJfomc1xfene33GdyAmtTkKTBXTN/EgAy+rjTKkkZJHlw== -hermes-parser@0.20.1, hermes-parser@^0.20.1: - version "0.20.1" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.20.1.tgz#ad10597b99f718b91e283f81cbe636c50c3cff92" - integrity sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA== +hermes-parser@0.22.0, hermes-parser@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.22.0.tgz#fc8e0e6c7bfa8db85b04c9f9544a102c4fcb4040" + integrity sha512-gn5RfZiEXCsIWsFGsKiykekktUoh0PdFWYocXsUdZIyWSckT6UIyPcyyUIPSR3kpnELWeK3n3ztAse7Mat6PSA== dependencies: - hermes-estree "0.20.1" + hermes-estree "0.22.0" homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: version "1.0.3"