diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 17c320040f8a..cb3a62d95e3c 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -31,27 +31,19 @@ "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.24.7", "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-react-display-name": "^7.24.7", @@ -60,12 +52,8 @@ "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/template": "^7.25.0", "@react-native/babel-plugin-codegen": "0.84.0-main", "babel-plugin-syntax-hermes-parser": "0.32.0", "babel-plugin-transform-flow-enums": "^0.0.2", diff --git a/packages/react-native-babel-preset/src/configs/main.js b/packages/react-native-babel-preset/src/configs/main.js index a2f5e1e53a66..d4fc7e10378b 100644 --- a/packages/react-native-babel-preset/src/configs/main.js +++ b/packages/react-native-babel-preset/src/configs/main.js @@ -49,13 +49,15 @@ const getPreset = (src, options) => { const isHermesCanary = transformProfile === 'hermes-canary'; const isHermes = isHermesStable || isHermesCanary; - // We enable regenerator for !isHermes. Additionally, in dev mode we also - // enable regenerator for the time being because Static Hermes doesn't yet - // support debugging native generators. However, some apps have native - // generators in release mode because it has already yielded perf wins. The - // next release of Static Hermes will close this gap, so this won't be - // permanent. - const enableRegenerator = !isHermes || options.dev; + // We enable regenerator in dev builds for the time being because + // Static Hermes doesn't yet fully support debugging native generators. + // (e.g. - it's not possible to inspect local variables when paused in a + // generator). + // + // Use native generators in release mode because it has already yielded perf + // wins. The next release of Static Hermes will close this gap, so this won't + // be permanent. + const enableRegenerator = isHermes && options.dev; const isNull = src == null; const hasClass = isNull || src.indexOf('class') !== -1; @@ -102,48 +104,20 @@ const getPreset = (src, options) => { extraPlugins.push([require('@babel/plugin-transform-classes')]); } - if (!isHermes && (isNull || src.includes('=>'))) { - extraPlugins.push([require('@babel/plugin-transform-arrow-functions')]); - } - - if (!isHermes) { - extraPlugins.push([require('@babel/plugin-transform-computed-properties')]); - extraPlugins.push([require('@babel/plugin-transform-parameters')]); - extraPlugins.push([ - require('@babel/plugin-transform-shorthand-properties'), - ]); + extraPlugins.push([ + require('@babel/plugin-transform-named-capturing-groups-regex'), + ]); + // Needed for regenerator + if (enableRegenerator) { extraPlugins.push([ require('@babel/plugin-transform-optional-catch-binding'), ]); - extraPlugins.push([require('@babel/plugin-transform-function-name')]); - extraPlugins.push([require('@babel/plugin-transform-literals')]); - extraPlugins.push([require('@babel/plugin-transform-numeric-separator')]); - extraPlugins.push([require('@babel/plugin-transform-sticky-regex')]); - } else { - extraPlugins.push([ - require('@babel/plugin-transform-named-capturing-groups-regex'), - ]); - // Needed for regenerator - if (isHermes && enableRegenerator) { - extraPlugins.push([ - require('@babel/plugin-transform-optional-catch-binding'), - ]); - } } + extraPlugins.push([ require('@babel/plugin-transform-destructuring'), {useBuiltIns: true}, ]); - if (!isHermes && (isNull || hasClass || src.indexOf('...') !== -1)) { - extraPlugins.push( - [require('@babel/plugin-transform-spread')], - [ - require('@babel/plugin-transform-object-rest-spread'), - // Assume no dependence on getters or evaluation order. See https://github.com/babel/babel/pull/11520 - {loose: true, useBuiltIns: true}, - ], - ); - } if (isNull || src.indexOf('async') !== -1) { extraPlugins.push([ require('@babel/plugin-transform-async-generator-functions'), @@ -171,18 +145,6 @@ const getPreset = (src, options) => { {loose: true}, ]); } - if ( - !isHermes && - (isNull || - src.indexOf('??=') !== -1 || - src.indexOf('||=') !== -1 || - src.indexOf('&&=') !== -1) - ) { - extraPlugins.push([ - require('@babel/plugin-transform-logical-assignment-operators'), - {loose: true}, - ]); - } if (options && options.dev && !options.disableDeepImportWarnings) { firstPartyPlugins.push([require('../plugin-warn-on-deep-imports.js')]); @@ -193,16 +155,15 @@ const getPreset = (src, options) => { extraPlugins.push([require('@babel/plugin-transform-react-jsx-self')]); } - if (isHermes && enableRegenerator) { - const hasForOf = - isNull || (src.indexOf('for') !== -1 && src.indexOf('of') !== -1); - if (hasForOf) { - // Needed for regenerator - extraPlugins.push([ - require('@babel/plugin-transform-for-of'), - {loose: true}, - ]); - } + if ( + enableRegenerator && + (isNull || (src.indexOf('for') !== -1 && src.indexOf('of') !== -1)) + ) { + // Needed for regenerator + extraPlugins.push([ + require('@babel/plugin-transform-for-of'), + {loose: true}, + ]); } if (!options || options.enableBabelRuntime !== false) { @@ -217,7 +178,7 @@ const getPreset = (src, options) => { ...(isVersion && {version: options.enableBabelRuntime}), }, ]); - } else if (isHermes && enableRegenerator) { + } else if (enableRegenerator) { extraPlugins.push([require('@babel/plugin-transform-regenerator')]); } diff --git a/packages/react-native/Libraries/StyleSheet/__tests__/__snapshots__/processAspectRatio-test.js.snap b/packages/react-native/Libraries/StyleSheet/__tests__/__snapshots__/processAspectRatio-test.js.snap index d9d5f987b129..2c6ddd3490df 100644 --- a/packages/react-native/Libraries/StyleSheet/__tests__/__snapshots__/processAspectRatio-test.js.snap +++ b/packages/react-native/Libraries/StyleSheet/__tests__/__snapshots__/processAspectRatio-test.js.snap @@ -6,7 +6,7 @@ exports[`processAspectRatio should not accept invalid formats 2`] = `"aspectRati exports[`processAspectRatio should not accept invalid formats 3`] = `"aspectRatio must either be a number, a ratio string or \`auto\`. You passed: auto 1/1"`; -exports[`processAspectRatio should not accept non string truthy types 1`] = `"aspectRatio must either be a number, a ratio string or \`auto\`. You passed: function () {}"`; +exports[`processAspectRatio should not accept non string truthy types 1`] = `"aspectRatio must either be a number, a ratio string or \`auto\`. You passed: () => {}"`; exports[`processAspectRatio should not accept non string truthy types 2`] = `"aspectRatio must either be a number, a ratio string or \`auto\`. You passed: 1,2,3"`; diff --git a/packages/react-native/jest/mockComponent.js b/packages/react-native/jest/mockComponent.js index a218d5feb2e2..30045abe8994 100644 --- a/packages/react-native/jest/mockComponent.js +++ b/packages/react-native/jest/mockComponent.js @@ -39,7 +39,7 @@ export default function mockComponent< const SuperClass: typeof React.Component<{...}> = typeof RealComponent === 'function' && - RealComponent.prototype.constructor instanceof React.Component + RealComponent.prototype?.constructor instanceof React.Component ? RealComponent : React.Component; diff --git a/yarn.lock b/yarn.lock index f8084135fbc6..67c193cbc5fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -462,7 +462,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.24.7", "@babel/plugin-transform-arrow-functions@^7.25.9": +"@babel/plugin-transform-arrow-functions@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== @@ -529,7 +529,7 @@ "@babel/traverse" "^7.25.9" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.24.7", "@babel/plugin-transform-computed-properties@^7.25.9": +"@babel/plugin-transform-computed-properties@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== @@ -604,7 +604,7 @@ "@babel/helper-plugin-utils" "^7.26.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-function-name@^7.25.1", "@babel/plugin-transform-function-name@^7.25.9": +"@babel/plugin-transform-function-name@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== @@ -620,14 +620,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-literals@^7.25.2", "@babel/plugin-transform-literals@^7.25.9": +"@babel/plugin-transform-literals@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-logical-assignment-operators@^7.24.7", "@babel/plugin-transform-logical-assignment-operators@^7.25.9": +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== @@ -697,7 +697,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-transform-numeric-separator@^7.24.7", "@babel/plugin-transform-numeric-separator@^7.25.9": +"@babel/plugin-transform-numeric-separator@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== @@ -736,7 +736,7 @@ "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-parameters@^7.24.7", "@babel/plugin-transform-parameters@^7.25.9": +"@babel/plugin-transform-parameters@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== @@ -834,14 +834,14 @@ babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.24.7", "@babel/plugin-transform-shorthand-properties@^7.25.9": +"@babel/plugin-transform-shorthand-properties@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-spread@^7.24.7", "@babel/plugin-transform-spread@^7.25.9": +"@babel/plugin-transform-spread@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== @@ -849,7 +849,7 @@ "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-sticky-regex@^7.24.7", "@babel/plugin-transform-sticky-regex@^7.25.9": +"@babel/plugin-transform-sticky-regex@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==