react changelog


Hey there, fellow React enthusiasts! 🎉 We've got some exciting updates and fixes coming your way. From improvements in rendering and bundling to new features for React Native, here's a rundown of what's new and improved in our latest update. Let's dive in!

  • New Feature: React Native Document Instances 📝 We've added support for Document instances in React Native, known as ReactNativeDocument instances. This change enhances the React Fabric renderer to manage these instances, making it easier for React Native to access them using container or root tags. It's a step forward in integrating document instances within the React Native framework.

  • Improvement: Suspense Boundaries in Fiber 🚀 Suspense boundaries can now be rendered at any level within a react-dom application, thanks to an update to Fiber. This enhancement treats the document body as the default render scope, offering more flexibility in rendering Suspense components. Note that hydration isn't supported yet, so Fizz and Fiber aren't fully unified just yet.

  • Improvement: Import Maps in React Flight Parcel 📦 We've enhanced the React Flight Parcel bundler by enabling import maps to be passed through client references. This update addresses the limitations of native import maps in client-side navigation scenarios, improving caching strategies and optimizing the performance of React applications using Parcel.

  • Improvement: Parallel DevTools Builds ⚙️ Our CI process just got a speed boost! We've parallelized the build process for React DevTools, reducing the CI job runtime. By building DevTools simultaneously for Chrome, Firefox, and Edge, we're streamlining development and getting faster feedback cycles.

  • Bugfix: React Compiler Healthcheck Script 🐞 We've fixed an issue with the react-compiler-healthcheck script by adding a shebang. This resolves execution problems with npx, allowing the script to run smoothly and compile components without a hitch.

  • Bugfix: Removal of Unused Rust Port 🛠️ We've cleaned up by removing an unused experimental Rust port of the React Compiler. While the experiment showed promise, we're sticking with JavaScript for the React Compiler, focusing on lightweight native wrappers and collaboration with the Hermes team.

  • Chore: Maintainers Update 🔧 Our MAINTAINERS file got a refresh! We've added a new maintainer, "unstubbable," and removed some old entries. This update keeps our contributor list accurate and up-to-date.

  • Bugfix: Typo Correction in CI ✏️ A small typo in the GitHub Actions workflow file has been fixed, ensuring error messages are clear and correctly formatted.

We hope these updates make your React experience even better! Keep building, and stay tuned for more improvements. Happy coding! 🌟

Included Commits

2025-01-24T20:06:15 See commit

This commit addresses a typo in the error message within the GitHub Actions workflow file shared_check_maintainer.yml. The change corrects the formatting of the backticks used to denote the isRemote variable in the error message, ensuring it is properly escaped.

The modification involved one addition and one deletion, resulting in a clearer and more accurate error message that will be displayed if the isRemote input is not a boolean value. This minor fix enhances the readability and correctness of the error handling in the workflow.

Files changed

  • .github/workflows/shared_check_maintainer.yml
2025-01-24T20:19:10 See commit

This commit removes an unused experimental Rust port of the React Compiler that was created to explore the feasibility of translating the compiler to Rust. The initial experiment demonstrated that in-place mutation of the intermediate representation (IR) could be managed effectively in Rust, which was promising. However, as development progressed, it was decided to retain JavaScript for the React Compiler while leveraging some of the Rust code for the Relay Compiler, which now utilizes it for parsing JavaScript files for more precise data extraction. Future plans include collaborating with the Hermes team to compile the React Compiler using Static Hermes.

The removal of the Rust port involved deleting numerous Rust-related files, including dependencies and test fixtures, indicating a significant shift back to JavaScript-centric development for the React Compiler. The author humorously notes the importance of sticking with JavaScript, echoing a sentiment from a colleague, Tomo, reinforcing the commitment to the established JavaScript ecosystem for React Compiler's future enhancements.

Files changed

  • compiler/Cargo.lock
  • compiler/Cargo.toml
  • compiler/crates/react_build_hir/Cargo.toml
  • compiler/crates/react_build_hir/README.md
  • compiler/crates/react_build_hir/src/build.rs
  • compiler/crates/react_build_hir/src/builder.rs
  • compiler/crates/react_build_hir/src/context.rs
  • compiler/crates/react_build_hir/src/error.rs
  • compiler/crates/react_build_hir/src/lib.rs
  • compiler/crates/react_diagnostics/Cargo.toml
  • compiler/crates/react_diagnostics/README.md
  • compiler/crates/react_diagnostics/src/diagnostic.rs
  • compiler/crates/react_diagnostics/src/lib.rs
  • compiler/crates/react_estree/Cargo.toml
  • compiler/crates/react_estree/README.md
  • compiler/crates/react_estree/build.rs
  • compiler/crates/react_estree/src/binding.rs
  • compiler/crates/react_estree/src/fixtures/for-statement.json
  • compiler/crates/react_estree/src/fixtures/import.json
  • compiler/crates/react_estree/src/fixtures/simple.json
  • compiler/crates/react_estree/src/fixtures/test.json
  • compiler/crates/react_estree/src/generated.rs
  • compiler/crates/react_estree/src/generated_extensions.rs
  • compiler/crates/react_estree/src/js_value.rs
  • compiler/crates/react_estree/src/lib.rs
  • compiler/crates/react_estree/src/range.rs
  • compiler/crates/react_estree/src/snapshots/forget_estree__tests__fixtures@for-statement.json.snap
  • compiler/crates/react_estree/src/snapshots/forget_estree__tests__fixtures@import.json.snap
  • compiler/crates/react_estree/src/snapshots/forget_estree__tests__fixtures@simple.json.snap
  • compiler/crates/react_estree/src/snapshots/forget_estree__tests__fixtures@test.json.snap
  • compiler/crates/react_estree/src/visit.rs
  • compiler/crates/react_estree_codegen/Cargo.toml
  • compiler/crates/react_estree_codegen/README.md
  • compiler/crates/react_estree_codegen/src/codegen.rs
  • compiler/crates/react_estree_codegen/src/ecmascript.json
  • compiler/crates/react_estree_codegen/src/lib.rs
  • compiler/crates/react_fixtures/Cargo.toml
  • compiler/crates/react_fixtures/README.md
  • compiler/crates/react_fixtures/src/lib.rs
  • compiler/crates/react_fixtures/tests/fixtures/constant-propagation-constant-if-condition.js
  • compiler/crates/react_fixtures/tests/fixtures/constant-propagation.js
  • compiler/crates/react_fixtures/tests/fixtures/destructure-array.js
  • compiler/crates/react_fixtures/tests/fixtures/destructure-object.js
  • compiler/crates/react_fixtures/tests/fixtures/error.assign-to-global.js
  • compiler/crates/react_fixtures/tests/fixtures/for-statement.js
  • compiler/crates/react_fixtures/tests/fixtures/function-expressions.js
  • compiler/crates/react_fixtures/tests/fixtures/identifiers.js
  • compiler/crates/react_fixtures/tests/fixtures/if-statement.js
  • compiler/crates/react_fixtures/tests/fixtures/simple-function.js
  • compiler/crates/react_fixtures/tests/fixtures/simple-ssa.js
  • compiler/crates/react_fixtures/tests/fixtures/simple.js
  • compiler/crates/react_fixtures/tests/fixtures/ssa-reassign-if.js
  • compiler/crates/react_fixtures/tests/fixtures/use-memo.js
  • compiler/crates/react_fixtures/tests/fixtures_test.rs
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@constant-propagation-constant-if-condition.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@constant-propagation.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@destructure-array.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@destructure-object.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@error.assign-to-global.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@for-statement.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@function-expressions.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@identifiers.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@if-statement.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@simple-function.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@simple-ssa.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@simple.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@ssa-reassign-if.js.snap
  • compiler/crates/react_fixtures/tests/snapshots/fixtures_test__fixtures@use-memo.js.snap
  • compiler/crates/react_hermes_parser/Cargo.toml
  • compiler/crates/react_hermes_parser/README.md
  • compiler/crates/react_hermes_parser/build.rs
  • compiler/crates/react_hermes_parser/src/generated.rs
  • compiler/crates/react_hermes_parser/src/generated_extension.rs
  • compiler/crates/react_hermes_parser/src/lib.rs
  • compiler/crates/react_hermes_parser/tests/fixtures/alias-capture-in-method-receiver-and-mutate.js
  • compiler/crates/react_hermes_parser/tests/fixtures/alias-capture-in-method-receiver.js
  • compiler/crates/react_hermes_parser/tests/fixtures/alias-computed-load.js
  • compiler/crates/react_hermes_parser/tests/fixtures/alias-nested-member-path-mutate.js
  • compiler/crates/react_hermes_parser/tests/fixtures/alias-nested-member-path.js
  • compiler/crates/react_hermes_parser/tests/fixtures/alias-while.js
  • compiler/crates/react_hermes_parser/tests/fixtures/allocating-primitive-as-dep-nested-scope.js
  • compiler/crates/react_hermes_parser/tests/fixtures/allocating-primitive-as-dep.js
  • compiler/crates/react_hermes_parser/tests/fixtures/allow-passing-refs-as-props.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-access-assignment.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-at-closure.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-at-effect.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-at-mutate-after-capture.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-expression-spread.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-join.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-map-frozen-array.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-map-mutable-array-mutating-lambda.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-pattern-params.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-properties.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-property-call.js
  • compiler/crates/react_hermes_parser/tests/fixtures/array-push-effect.js
  • compiler/crates/react_hermes_parser/tests/fixtures/arrow-function-expr-gating-test.js
  • compiler/crates/react_hermes_parser/tests/fixtures/assignment-expression-computed.js
  • compiler/crates/react_hermes_parser/tests/fixtures/assignment-expression-nested-path.js
  • compiler/crates/react_hermes_parser/tests/fixtures/assignment-in-nested-if.js
  • compiler/crates/react_hermes_parser/tests/fixtures/assignment-variations-complex-lvalue-array.js
  • compiler/crates/react_hermes_parser/tests/fixtures/assignment-variations-complex-lvalue.js
  • compiler/crates/react_hermes_parser/tests/fixtures/assignment-variations.js
  • compiler/crates/react_hermes_parser/tests/fixtures/await-side-effecting-promise.js
  • compiler/crates/react_hermes_parser/tests/fixtures/await.js
  • compiler/crates/react_hermes_parser/tests/fixtures/babel-existing-react-import.js
  • compiler/crates/react_hermes_parser/tests/fixtures/babel-existing-react-kitchensink-import.js
  • compiler/crates/react_hermes_parser/tests/fixtures/bug.useMemo-deps-array-not-cleared.js
  • compiler/crates/react_hermes_parser/tests/fixtures/bug_object-pattern.js
  • compiler/crates/react_hermes_parser/tests/fixtures/builtin-jsx-tag-lowered-between-mutations.js
  • compiler/crates/react_hermes_parser/tests/fixtures/call-args-assignment.js
  • compiler/crates/react_hermes_parser/tests/fixtures/call-args-destructuring-assignment.js
  • compiler/crates/react_hermes_parser/tests/fixtures/call-spread.js
  • compiler/crates/react_hermes_parser/tests/fixtures/call-with-independently-memoizable-arg.js
  • compiler/crates/react_hermes_parser/tests/fixtures/call.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capture-indirect-mutate-alias.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capture-param-mutate.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capture_mutate-across-fns.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-arrow-function-1.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-fun-alias-captured-mutate-2.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-fun-alias-captured-mutate-arr-2.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-func-alias-captured-mutate-arr.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-func-alias-captured-mutate.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-func-alias-computed-mutate.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-func-alias-mutate.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-func-alias-receiver-computed-mutate.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-func-alias-receiver-mutate.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-func-mutate-2.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-func-mutate-3.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-func-mutate-nested.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-func-mutate.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-func-simple-alias.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-1.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-alias-computed-load-2.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-alias-computed-load-3.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-alias-computed-load-4.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-alias-computed-load.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-capture-ref-before-rename.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-conditional-capture-mutate.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-decl.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-member-expr-arguments.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-member-expr-call.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-renamed-ref.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-runs-inference.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-shadow-captured.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-skip-computed-path.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-function-within-block.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-member-expr.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-nested-member-call.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-nested-member-expr-in-nested-func.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-nested-member-expr.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-reference-changes-type.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-variable-in-nested-block.js
  • compiler/crates/react_hermes_parser/tests/fixtures/capturing-variable-in-nested-function.js
  • compiler/crates/react_hermes_parser/tests/fixtures/chained-assignment-context-variable.js
  • compiler/crates/react_hermes_parser/tests/fixtures/chained-assignment-expressions.js
  • compiler/crates/react_hermes_parser/tests/fixtures/codegen-emit-imports-same-source.js
  • compiler/crates/react_hermes_parser/tests/fixtures/codegen-emit-make-read-only.js
  • compiler/crates/react_hermes_parser/tests/fixtures/codegen-instrument-forget-gating-test.js
  • compiler/crates/react_hermes_parser/tests/fixtures/codegen-instrument-forget-test.js
  • compiler/crates/react_hermes_parser/tests/fixtures/complex-while.js
  • compiler/crates/react_hermes_parser/tests/fixtures/component.js
  • compiler/crates/react_hermes_parser/tests/fixtures/computed-call-evaluation-order.js
  • compiler/crates/react_hermes_parser/tests/fixtures/computed-call-spread.js
  • compiler/crates/react_hermes_parser/tests/fixtures/computed-load-primitive-as-dependency.js
  • compiler/crates/react_hermes_parser/tests/fixtures/computed-store-alias.js
  • compiler/crates/react_hermes_parser/tests/fixtures/concise-arrow-expr.js
  • compiler/crates/react_hermes_parser/tests/fixtures/cond-deps-conditional-member-expr.js
  • compiler/crates/react_hermes_parser/tests/fixtures/conditional-break-labeled.js
  • compiler/crates/react_hermes_parser/tests/fixtures/conditional-break.js
  • compiler/crates/react_hermes_parser/tests/fixtures/conditional-on-mutable.js
  • compiler/crates/react_hermes_parser/tests/fixtures/conditional-set-state-in-render.js
  • compiler/crates/react_hermes_parser/tests/fixtures/console-readonly.js
  • compiler/crates/react_hermes_parser/tests/fixtures/const-propagation-into-function-expression-global.js
  • compiler/crates/react_hermes_parser/tests/fixtures/const-propagation-into-function-expression-primitive.js
  • compiler/crates/react_hermes_parser/tests/fixtures/constant-computed.js
  • compiler/crates/react_hermes_parser/tests/fixtures/constant-propagation-for.js
  • compiler/crates/react_hermes_parser/tests/fixtures/constant-propagation-into-function-expressions.js
  • compiler/crates/react_hermes_parser/tests/fixtures/constant-propagation-phi.js
  • compiler/crates/react_hermes_parser/tests/fixtures/constant-propagation-while.js
  • compiler/crates/react_hermes_parser/tests/fixtures/constant-propagation.js
  • compiler/crates/react_hermes_parser/tests/fixtures/constructor.js
  • compiler/crates/react_hermes_parser/tests/fixtures/context-variable-reassigned-outside-of-lambda.js
  • compiler/crates/react_hermes_parser/tests/fixtures/controlled-input.js
  • compiler/crates/react_hermes_parser/tests/fixtures/dce-loop.js
  • compiler/crates/react_hermes_parser/tests/fixtures/debugger-memoized.js
  • compiler/crates/react_hermes_parser/tests/fixtures/debugger.js
  • compiler/crates/react_hermes_parser/tests/fixtures/declare-reassign-variable-in-closure.js
  • compiler/crates/react_hermes_parser/tests/fixtures/delete-computed-property.js
  • compiler/crates/react_hermes_parser/tests/fixtures/delete-property.js
  • compiler/crates/react_hermes_parser/tests/fixtures/dependencies-outputs.js
  • compiler/crates/react_hermes_parser/tests/fixtures/dependencies.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructure-capture-global.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructure-direct-reassignment.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructuring-array-default.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructuring-array-param-default.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructuring-assignment-array-default.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructuring-assignment.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructuring-mixed-scope-and-local-variables-with-default.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructuring-mixed-scope-declarations-and-locals.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructuring-object-default.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructuring-object-param-default.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructuring-property-inference.js
  • compiler/crates/react_hermes_parser/tests/fixtures/destructuring.js
  • compiler/crates/react_hermes_parser/tests/fixtures/disable-jsx-memoization.js
  • compiler/crates/react_hermes_parser/tests/fixtures/do-while-break.js
  • compiler/crates/react_hermes_parser/tests/fixtures/do-while-compound-test.js
  • compiler/crates/react_hermes_parser/tests/fixtures/do-while-conditional-break.js
  • compiler/crates/react_hermes_parser/tests/fixtures/do-while-continue.js
  • compiler/crates/react_hermes_parser/tests/fixtures/do-while-early-unconditional-break.js
  • compiler/crates/react_hermes_parser/tests/fixtures/do-while-simple.js
  • compiler/crates/react_hermes_parser/tests/fixtures/dominator.js
  • compiler/crates/react_hermes_parser/tests/fixtures/early-return.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error._todo.computed-lval-in-destructure.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error._todo.multi-arrow-expr-export-default-gating-test.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.babel-existing-react-namespace-import.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.bug-validate-no-set-state-not-all-mutable-range-extensions-are-bad.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.call-args-destructuring-asignment-complex.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.codegen-error-on-conflicting-imports.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.hoisted-function-declaration.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.hooks-with-React-namespace.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-access-ref-during-render.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-array-push-frozen.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-assign-hook-to-local.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-capture-func-passed-to-jsx.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-computed-store-to-frozen-value.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-delete-computed-property-of-frozen-value.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-delete-property-of-frozen-value.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-destructure-assignment-to-global.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-destructure-to-local-global-variables.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-freeze-conditionally-mutable-lambda.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-freeze-mutable-lambda-mutate-local.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-freeze-mutable-lambda-reassign-local.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-function-expression-mutates-immutable-value.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-mutate-after-aliased-freeze.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-mutate-after-freeze.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-pass-hook-as-call-arg.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-pass-hook-as-prop.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-pass-ref-to-function.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-property-store-to-frozen-value.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-ref-in-callback-invoked-during-render.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-ref-value-as-props.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-set-and-read-ref-during-render.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-sketchy-code-use-forget.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-ternary-with-hook-values.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-unconditional-set-state-in-render.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-use-ref-added-to-dep-without-type-info.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-useMemo-async-callback.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.invalid-useMemo-callback-args.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.mutate-captured-arg-separately.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.mutate-global-increment-op-invalid-react.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.reassignment-to-global.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.todo-kitchensink.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.todo-unconditional-set-state-lambda.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.todo.destructure-assignment-to-context-var.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.useMemo-callback-generator.js
  • compiler/crates/react_hermes_parser/tests/fixtures/error.while-with-assignment-in-test.js
  • compiler/crates/react_hermes_parser/tests/fixtures/escape-analysis-destructured-rest-element.js
  • compiler/crates/react_hermes_parser/tests/fixtures/escape-analysis-jsx-child.js
  • compiler/crates/react_hermes_parser/tests/fixtures/escape-analysis-logical.js
  • compiler/crates/react_hermes_parser/tests/fixtures/escape-analysis-non-escaping-interleaved-allocating-dependency.js
  • compiler/crates/react_hermes_parser/tests/fixtures/escape-analysis-non-escaping-interleaved-allocating-nested-dependency.js
  • compiler/crates/react_hermes_parser/tests/fixtures/escape-analysis-non-escaping-interleaved-primitive-dependency.js
  • compiler/crates/react_hermes_parser/tests/fixtures/escape-analysis-not-conditional-test.js
  • compiler/crates/react_hermes_parser/tests/fixtures/escape-analysis-not-if-test.js
  • compiler/crates/react_hermes_parser/tests/fixtures/escape-analysis-not-switch-case.js
  • compiler/crates/react_hermes_parser/tests/fixtures/escape-analysis-not-switch-test.js
  • compiler/crates/react_hermes_parser/tests/fixtures/expression-with-assignment-dynamic.js
  • compiler/crates/react_hermes_parser/tests/fixtures/expression-with-assignment.js
  • compiler/crates/react_hermes_parser/tests/fixtures/extend-scopes-if.js
  • compiler/crates/react_hermes_parser/tests/fixtures/fbt-call-complex-param-value.js
  • compiler/crates/react_hermes_parser/tests/fixtures/fbt-call.js
  • compiler/crates/react_hermes_parser/tests/fixtures/fbt-params-complex-param-value.js
  • compiler/crates/react_hermes_parser/tests/fixtures/fbt-params.js
  • compiler/crates/react_hermes_parser/tests/fixtures/fbt-template-string-same-scope.js
  • compiler/crates/react_hermes_parser/tests/fixtures/for-empty-update-with-continue.js
  • compiler/crates/react_hermes_parser/tests/fixtures/for-empty-update.js
  • compiler/crates/react_hermes_parser/tests/fixtures/for-logical.js
  • compiler/crates/react_hermes_parser/tests/fixtures/for-of-break.js
  • compiler/crates/react_hermes_parser/tests/fixtures/for-of-conditional-break.js
  • compiler/crates/react_hermes_parser/tests/fixtures/for-of-continue.js
  • compiler/crates/react_hermes_parser/tests/fixtures/for-of-destructure.js
  • compiler/crates/react_hermes_parser/tests/fixtures/for-of-mutate.js
  • compiler/crates/react_hermes_parser/tests/fixtures/for-of-simple.js
  • compiler/crates/react_hermes_parser/tests/fixtures/for-return.js
  • compiler/crates/react_hermes_parser/tests/fixtures/frozen-after-alias.js
  • compiler/crates/react_hermes_parser/tests/fixtures/function-declaration-reassign.js
  • compiler/crates/react_hermes_parser/tests/fixtures/function-declaration-redeclare.js
  • compiler/crates/react_hermes_parser/tests/fixtures/function-declaration-simple.js
  • compiler/crates/react_hermes_parser/tests/fixtures/function-expression-captures-value-later-frozen-jsx.js
  • compiler/crates/react_hermes_parser/tests/fixtures/function-expression-maybe-mutates-hook-return-value.js
  • compiler/crates/react_hermes_parser/tests/fixtures/function-expression-with-store-to-parameter.js
  • compiler/crates/react_hermes_parser/tests/fixtures/function-param-assignment-pattern.js
  • compiler/crates/react_hermes_parser/tests/fixtures/gating-test-export-default-function.js
2025-01-27T16:59:25 See commit

The commit addresses an issue with the react-compiler-healthcheck script that arose after migrating the bundler from Rollup to esbuild. Specifically, the script was missing a shebang, which caused problems when attempting to execute it using npx, leading to errors indicating that the script could not run properly. This fix adds the shebang line to the script's banner, allowing it to be executed correctly.

After implementing the change, tests confirmed that the script now runs successfully, compiling 108 out of 146 components without any issues. The modifications include adding three lines and deleting one in the build.js file of the react-compiler-healthcheck package, ensuring that the script can be executed as intended.

Files changed

  • compiler/packages/react-compiler-healthcheck/scripts/build.js
2025-01-27T19:40:45 See commit

The commit titled "Update MAINTAINERS" (commit #32238) involves modifications to the MAINTAINERS file, which is crucial for tracking contributors and their roles within the project. The update includes the addition of one new maintainer, "unstubbable," while removing four previous entries: "gsathya," "lunaleaps," "noahlemen," and "tyao1."

Additionally, there are five changes made to the existing entries, indicating a reorganization or refinement of the maintainer list. This update reflects ongoing adjustments in the project's maintenance structure, ensuring that the list accurately represents current contributors and their responsibilities.

Files changed

  • MAINTAINERS
2025-01-27T20:39:56 See commit

This commit introduces enhancements to the React Flight Parcel bundler by enabling the passing of import maps through client references. The changes address the limitations of using native import maps in scenarios involving client-side navigation, where a new HTML file is not requested. As a temporary solution, APIs have been added to Parcel to polyfill the functionality, allowing import maps to be sent alongside client references. This allows for dynamic imports and URL dependencies (such as images) to be mapped effectively, preserving the caching benefits associated with bundle management while accommodating client navigations.

The modifications include updates to various files to support the new import map feature, including adding new properties to the ClientReference type and modifying functions to handle the import map data. These changes ensure that when a client reference is resolved, the import map is extended with any new mappings before executing the referenced bundles. By implementing this feature, the commit aims to improve caching strategies and optimize the performance of React applications that utilize the Parcel bundler.

Files changed

  • packages/react-server-dom-parcel/src/ReactFlightParcelReferences.js
  • packages/react-server-dom-parcel/src/client/ReactFlightClientConfigBundlerParcel.js
  • packages/react-server-dom-parcel/src/server/ReactFlightServerConfigParcelBundler.js
  • packages/react-server-dom-parcel/src/shared/ReactFlightImportMetadata.js
  • scripts/flow/environment.js
2025-01-29T06:42:50 See commit

This commit enhances the React Fiber architecture by enabling Suspense boundaries to be rendered at any level within a react-dom application, following a previous update to Fizz. The change treats the document body as the default render scope, allowing for greater flexibility in rendering Suspense components. However, it is important to note that this implementation does not yet support hydration, meaning that the unification of Fizz and Fiber implementations within a single application remains incomplete.

To facilitate this enhancement, the commit involved a reworking of the getHostSibling and getHostParent algorithms, resulting in most HostSingletons becoming invisible from a host positioning perspective. The head tag is treated as a valid host scope, which allows it to act as a parent for any Placements within it, while the body and html tags do not participate in host positioning. Furthermore, the offscreen hiding/unhide logic was updated to allow for the detection of matching hidable node boundaries across singletons, thus improving the handling of fallback HTML in Suspense components.

Files changed

  • packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js
  • packages/react-dom/src/__tests__/ReactDOM-test.js
  • packages/react-dom/src/__tests__/ReactDOMFloat-test.js
  • packages/react-reconciler/src/ReactFiberBeginWork.js
  • packages/react-reconciler/src/ReactFiberCommitHostEffects.js
  • packages/react-reconciler/src/ReactFiberCommitWork.js
  • packages/react-reconciler/src/ReactFiberConfigWithNoSingletons.js
  • packages/react-reconciler/src/forks/ReactFiberConfig.custom.js
2025-01-29T17:07:00 See commit

This commit introduces support for Document instances within React Native, specifically as ReactNativeDocument instances. To facilitate this, modifications were made to the React Fabric renderer to manage the lifecycle of these document instances. The updates include creating document instances associated with the React root and implementing a new method for React Native to access these instances based on their container or root tags. This enhancement aims to improve the integration of document instances in the React Native framework.

Testing for this change was conducted through end-to-end (e2e) tests, which were manually synchronized with the related pull request. The commit involved several modifications across various files, including the addition of new methods and types to handle public root instances, thereby ensuring that the renderer can effectively manage and access these new document instances as needed.

Files changed

  • packages/react-native-renderer/src/ReactFabric.js
  • packages/react-native-renderer/src/ReactFiberConfigFabric.js
  • packages/react-native-renderer/src/ReactFiberConfigNative.js
  • packages/react-native-renderer/src/ReactNativeRenderer.js
  • packages/react-native-renderer/src/ReactNativeTypes.js
  • packages/react-native-renderer/src/__mocks__/react-native/Libraries/ReactPrivate/ReactNativePrivateInterface.js
  • packages/react-native-renderer/src/__mocks__/react-native/Libraries/ReactPrivate/createPublicInstance.js
  • packages/react-native-renderer/src/__mocks__/react-native/Libraries/ReactPrivate/createPublicRootInstance.js
  • scripts/flow/react-native-host-hooks.js
2025-01-30T16:49:04 See commit

This commit aims to optimize the build process for React DevTools within the continuous integration (CI) environment by introducing parallelization. The current build process is identified as a bottleneck, significantly extending the overall runtime for the CI job. To address this, the changes implement a matrix strategy that allows the DevTools to be built simultaneously for multiple browsers—Chrome, Firefox, and Edge—thereby reducing the time taken for this critical step.

The modifications include updates to the GitHub Actions workflow file, which now specifies the browsers in the build matrix, and adjustments to the build script that accommodate browser-specific builds. As a result, the artifacts for each browser are archived separately, improving the organization and accessibility of the build outputs. This parallelization is expected to enhance the efficiency of the CI pipeline, leading to faster feedback cycles for developers.

Files changed

  • .github/workflows/runtime_build_and_test.yml
  • scripts/ci/pack_and_store_devtools_artifacts.sh