Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41984
Changelog: [Internal]
this is unused anywhere, delete. for some reason we only have the spec file in oss but no native implementation
Reviewed By: christophpurrer
Differential Revision: D51968870
fbshipit-source-id: a4931d08c50954bfa557451e5e4d79a10dfeaefe
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41976
Progress towards an opt-in setup for our new CDP backend.
- Wires up D51563107 to conditionally disable the legacy Hermes debugger via `ReactNativeConfig`.
- **Configuration covered**: iOS, for the `RCTAppDelegate` code path.
- Create C++-only overload of `RCTAppSetupPrepareApp`, deprecate the previous function.
Changelog:
[iOS][Deprecated] - Deprecate `RCTAppSetupPrepareApp`, replaced with C++ overload
Reviewed By: motiz88
Differential Revision: D51589221
fbshipit-source-id: 1688f97c69abb06d271b4d26b875365a8d86ba77
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42002
Adds an E2E test on top of the RNTester example for this (as a practice we should probably do this for new examples).
I didn't add unit tests for this originally, but probably should do that as well if it gets more interesting...
Changelog: [Internal]
Reviewed By: joevilches
Differential Revision: D51639134
fbshipit-source-id: 379d95dfc676252e10b7076e294ac5534c6f06bf
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41994
X-link: https://github.com/facebook/yoga/pull/1529
Reorganizes the header according to common C++ convnetions. Public first, then private. Constructors, then functions, then member variables.
Reviewed By: joevilches
Differential Revision: D52106056
fbshipit-source-id: 0095cf7caa58dc79c1803b3b231911e4fc66ddaf
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41995
X-link: https://github.com/facebook/yoga/pull/1526
This function has made quite the journey from something that originally made more sense. This renames, refactors, and adds documentation for what it actually does.
This should eventually make its way into `yoga::Style` once computed style is moved into that structure.
bypass-github-export-checks
Reviewed By: joevilches
Differential Revision: D52105718
fbshipit-source-id: 6492224dd2e10cef3c5fc6a139323ad189a0925c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41939
X-link: https://github.com/facebook/yoga/pull/1520
This code originates as `YGValueResolve`, used to compute a YGValue to a length in points, using a reference for 100%.
This moves it to `Style::Length`, so we can encapsulate parts of it (for style value functions), and make the API more cohesive now that we can do C++ style OOP with it.
Changelog: [Internal]
Reviewed By: joevilches
Differential Revision: D51796973
fbshipit-source-id: a7c359c7544f4bd2066a80d976dde67a0d16f1dd
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41776
X-link: https://github.com/facebook/yoga/pull/1492
# Summary
In preparation to replace `CompactValue`, this fully encapsulates it as an implementation detail of `yoga::Style`.
The internal API now always operates on `Style::Length`, converted to `YGValue` at the public API boundary.
In the next step, we can plug in a new representation within `Style`, which should enable 64 bit values, and lower memory usage.
# Test Plan
1. Existing tests (inc for style, invalidation, CompactValue) pass
2. Check that constexpr `yoga::isinf()` produces same assembly under Clang as `std::isinf()`
3. Fabric Android builds
4. Yoga benchmark does style reads
# Performance
Checking whether a style is defined, then reading after, is a hot path, and we are doubling any space style lengths take in the stack (but not long-term on the node). After a naive move, on one system, the Yoga benchmark creating, laying out, and destroying a tree, ran about 8-10% slower in the "Huge nested flex" example. We are converting in many more cases instead of doing undefined check, but operating on accessed style values no longer needs to do the conversion multiple times.
I changed the `CompactValue` conversion to YGValue/StyleLength path to check for undefined as the common case (since we always convert, instead of calling `isUndefined` directly on CompactValue. That seemed to get the difference down to ~5-6% when I was playing with it then. We can optimistically make some of this up with ValuePool giving better locality, and fix this more holistically if we reduce edge and value resolution.
On another machine where I tested this, the new revision went the opposite direction, and was about 5% faster, so this isn't really a cut and dry regression, but we see different characteristics than before.
# Changelog
[Internal]
Reviewed By: rozele
Differential Revision: D51775346
fbshipit-source-id: c618af41b4882b4a227c917fcad07375806faf78
Summary:
This PR optimises RCTKeyWindow() calls in `RCTForceTouchAvailable` method. This method was calling RCTKeyWindow hundreds of times while scrolling on the screen.
Before:
On the video you can see that this function is being called **350 times** just from simple list scrolling. RCTKeyWindow is looping over app windows so it's not a cheap operation.
https://github.com/facebook/react-native/assets/52801365/5b69cbd6-d148-4d06-b672-bd7b60472c13
After: the function is called only few times at the start of the app to get initial layout measurements.
Solution: I think we can check just once for the force touch capabilities as devices can't change it on the fly
bypass-github-export-checks
## Changelog:
[IOS] [FIXED] - Optimise RCTKeyWindow() calls in RCTForceTouchAvailable method
Pull Request resolved: https://github.com/facebook/react-native/pull/41935
Test Plan: CI Green
Reviewed By: dmytrorykun
Differential Revision: D52172510
Pulled By: cipolleschi
fbshipit-source-id: 881a3125a2af4376ce65d785d8eee09c7d8f1f16
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41655
This diff adds support for checked-in codegen artifacts for libraries.
It introduces a new property to `codegenConfig`, called `includesGeneratedCode`. If codegen sees `includesGeneratedCode: true` in a project's dependency, it assumes that the library has codegen artifacts in it, and will not generate any code.
Changelog: [General][Added] - Introduce "codegenConfig.includesGeneratedCode" property.
Reviewed By: cipolleschi
Differential Revision: D51207265
fbshipit-source-id: 65855fd846e24a53cb18008839121e99eeb59309
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41924
`utils.parseArgs` are only available in Node >=18.3, we can't use this function because we target Node >=18.0.
This diff replaces `utils.parseArgs` with `yargs`.
Changelog: [Internal]
Reviewed By: cipolleschi
Differential Revision: D52117818
fbshipit-source-id: 79223997874b6cfdea2ce38243b615a0dbb704a6
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41982
Moving the check for Fabric i.e. `ReactFeatureFlags.enableFabricRenderer` to old JSI Module path logic instead of new UIManagerProvider path for Fabric initialization and changing the default of UIManagerProvider from `null` -> `reactApplicationContext -> null;` since we are adding null check on the returned `UIManager`
Slight change of design of API for JSI Module in order to address the issues faced due to `ReactFeatureFlags.enableFabricRenderer`,
1. Getting rid of this check for the new Fabric initialization and keeping the old JSI Module path intact.
2. Allowing the UIManager to be nullable so as to allow Twilight surface not have UIManager set even though they it succeeds in initializing the TwilightJSIModule.
3. As made the UIManager nullable, added the null check for the same.
4. This eradicates the dependency on this flag for Anna as well.
Reviewed By: christophpurrer
Differential Revision: D52273097
fbshipit-source-id: bdf8b1de3771250c987c8f8bd4e48192f67a1afa
Summary:
Passed `--mode HermesDebug` to `run-android` command when running from watch mode by pressing `a` on terminal running a dev server. The flag is the same as in the `package.json`:
27f38f6f06/packages/rn-tester/package.json (L17)
## Changelog:
[INTERNAL] [CHANGED] - Add missing params when running Android app from watch mode by pressing `a`
Pull Request resolved: https://github.com/facebook/react-native/pull/41979
Test Plan: Run `yarn start` press `a` in the watch mode, and Android app should be build and launch correctly.
Reviewed By: cipolleschi
Differential Revision: D52265462
Pulled By: lunaleaps
fbshipit-source-id: b2fbe6c889d8067876e160a8ce64dedcc4ce24d7
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41656
This change makes all the legacy components to go through the interop layer.
It also introduce the `RCTFabricInteropLayerEnabled()` and the `RCTEnableFabricInteropLayer(BOOL)` functions to work as feature flags behind the change to completely disable the Interop layer.
## Changelog
[iOS][Changed] - Make the Fabric Interop Layer automatic when the Nw architecture is enabled.
Reviewed By: cortinico
Differential Revision: D51586461
fbshipit-source-id: 8f92a76e6dbbee93055a1ebe49779dd64e484d95
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41972
This diff adds the `DoubleConversion` dependency to the `install_modules_dependencies` function, that installs all the dependencies that third-party libraries might need.
The libraries will need the `DoubleConversion` pod if they include the generated Fabric files.
Changelog: [Internal]
Reviewed By: cipolleschi
Differential Revision: D51848314
fbshipit-source-id: ae2ce022c6f51ce392852494c61e26ff810d30d0
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41936
This argument was removed in D51303793. This diff removes all remaining usages of it.
Changelog: [Internal]
Reviewed By: cipolleschi
Differential Revision: D52035346
fbshipit-source-id: 99886be7ed810f58d8fb31fb22a44b2471e974ce
Summary:
Adds changelog for the 0.73.1 patch.
## Changelog:
<!-- Help reviewers and the release process by writing your own changelog entry.
Pick one each for the category and type tags:
[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message
For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->
[Internal] [Changed] - Add 0.73.1 changelog
Pull Request resolved: https://github.com/facebook/react-native/pull/41970
Reviewed By: christophpurrer
Differential Revision: D52253474
Pulled By: huntie
fbshipit-source-id: 18fb45afcbb4fa0f864916922c0e9d69cc6d213f
Summary:
I believe it's valuable to be able to initialise the React Native template into a mono-repo and have it work with zero updates to the configuration.
In its current form the template's Xcode project makes assumptions on the relative location of the `react-native` package, while it could instead use the `REACT_NATIVE_PATH` variable set in the `scripts/cocoapods/utils.rb` script:
2441fa2847/packages/react-native/scripts/cocoapods/utils.rb (L82)
via
2441fa2847/packages/react-native/template/ios/Podfile (L35)
## Changelog:
[IOS] [ADDED] - Add use of the `REACT_NATIVE_PATH` in the "Bundle React Native code and images" shell script build phase. This will help apps initialized into a mono-repo which hoists the `react-native` package.
Pull Request resolved: https://github.com/facebook/react-native/pull/41968
Test Plan: I initialized the React Native template into an NPM workspaces mono-repo and experienced a failure running the script phase. I updated it to the code in this PR, which resolved the issue.
Reviewed By: christophpurrer, cipolleschi
Differential Revision: D52240559
Pulled By: robhogan
fbshipit-source-id: 1c5710c8ffe9d289f32c5ed83cb58ae27f3c931a
Summary:
X-link: https://github.com/facebook/yoga/pull/1525
Accidentally left this inconsistent with some of the refactoring. Rename the lone usage of `Length` within Style class to `Style::Length` to match the rest of the code.
This is functionally identical as before.
Changelog: [Internal]
bypass-github-export-checks
Reviewed By: yungsters
Differential Revision: D52096820
fbshipit-source-id: d6c569a02fb27a6e7548a9c12ff764afb823a282
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41964
X-link: https://github.com/facebook/yoga/pull/1524
D52087013 (#1513) fixed some issues, including where measuring under max-content or fit-content, align-content stretch would consume the entire available cross-dimensions, instead of only sizing to definite dimension, like the spec dicates.
I missed a case, where flexbox considers a container as having a definite cross-size if it is being stretched, even if it doesn't have a definite length.
https://www.w3.org/TR/css-flexbox-1/#definite-sizes
> 3. Once the cross size of a flex line has been determined, items in auto-sized flex containers are also considered definite for the purpose of layout;
> 1. If a single-line flex container has a definite cross size, the outer cross size of any stretched flex items is the flex container’s inner cross size (clamped to the flex item’s min and max cross size) and is considered definite.
We handle `align-items: stretch` of a flex container after cross-size determination by laying out the child under stretch-fit (previously YGMeasureModeExactly) constraint. This checks that case, and sizing the line container to specified cross-dim if we are told to stretch to it.
We could probably afford to merge this a bit with later with what is currently step 9, where we end up redoing some of this same math.
Reviewed By: yungsters
Differential Revision: D52234980
fbshipit-source-id: 475773a352fd01f63a4b21e93a55519726dc0da7
Summary: I've noticed that Bridge and Bridgeless initialize the list of ReactPackages using a different order, we are fixing it in this diff
Reviewed By: philIip
Differential Revision: D52145148
fbshipit-source-id: 6ad85bd0903f9beab455783e8deaf5c529b87a2e
Summary:
Since yesterday evening (why it is always friday evening???) CircleCI or Gem decided to update the default bundler version that is installed with `gem bundle install`.
Therefore, CI for iOS stopped working.
This change installs bundler's versions so that they are compatible with the Ruby version.
## Changelog:
[Internal] - Fix CI for iOS installing versions of bundler that are compatible with Ruby
Pull Request resolved: https://github.com/facebook/react-native/pull/41962
Test Plan: CircleCI is green
Reviewed By: GijsWeterings
Differential Revision: D52230544
Pulled By: cipolleschi
fbshipit-source-id: 2f96e16ecb94159953056e8de757ea4d249f80f0
Summary:
X-link: https://github.com/facebook/yoga/pull/1513
Pull Request resolved: https://github.com/facebook/react-native/pull/41916
Fixes https://github.com/facebook/yoga/issues/1300
Fixes https://github.com/facebook/yoga/issues/1008
This fixes a smattering of issues related to both sizing and aligment of multi-line-containers:
1. We were previously incorrectly bounding the size of each flex line to the min/max of the entire container.
2. Per-line leads were sometimes incorrectly contributing to alignment within the line
3. The cross dim size used for multi-line alignment is not correct, or correctly clamped. If the available size comes from a max constraint, that was incorrectly used instead of a definite size, or size of content. Leads were entirely skipped for min constraint.
Need to test how breaking this is, to see if it might need to go behind an errata.
See related PRs:
1. https://github.com/facebook/yoga/pull/1491
2. https://github.com/facebook/yoga/pull/1493
3. https://github.com/facebook/yoga/pull/1013
Changelog:
[General][Fixed] - Fix Yoga sizing and alignment issues with multi-line containers
Reviewed By: joevilches
Differential Revision: D52087013
fbshipit-source-id: 8d95ad17e58c1fec1cceab9756413d0b3bd4cd8f
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41931
`GenericStyleProp` is defined as
```
type GenericStyleProp<+T> =
| null
| void
| T
| false
| ''
| $ReadOnlyArray<GenericStyleProp<T>>;
```
and `____FlattenStyleProp_Internal` is designed to reverse it. We can use conditional type to achieve it instead of $Call:
`null | void | false | ''` doesn't contribute to anything doing reversal, so they are mapped to empty. When we encounter $ReadOnlyArray, we recursively apply `____FlattenStyleProp_Internal`. Otherwise, we return the input type.
Changelog: [Internal]
Reviewed By: jbrown215
Differential Revision: D52142082
fbshipit-source-id: 590c71c6400498730675e20c67b173c3bc285d00
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41782
This diff adds `outputDir` property to `codegenConfig`.
Now codegen output dir is resolved like this:
1. It is set to `outputDir` argument of `generate-codegen-artifacts.js` if it is present.
2. *[New]* It is set to `outputDir` property of `codegenConfig` if it is present.
3. It is set to the project root.
Changelog: [General][Added] - Introduce "outputDir" property of "codegenConfig"
Reviewed By: cipolleschi
Differential Revision: D51494009
fbshipit-source-id: 0f6e3607b29a3c6d228a88a9460d55bb65c7e55a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41944
Changelog: [iOS][Deprecated]
i think we can now communicate the deprecation of this selector.
after removing all of the synthesize methodQueue callsites in our codebase, our native modules are still stable, save for one native module, RCTNetworking. so i feel comfortable recommending users to create their own queues.
and after removing `methodQueue` overrides to support synchronous void methods, those modules are also still stable, so i'm also comfortable we can recommend handling the dispatch_async in the product layer.
Reviewed By: arushikesarwani94, cipolleschi
Differential Revision: D52150696
fbshipit-source-id: ff6b90fc685796e5560167f1377a76526ee07744
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41942
Previously, every time a component was updated, we were passing all the props to the interoperated component.
With this change, we are going to only pass the props that are changed.
As a safety feature, if the new codepath is not able to detect the type of the prop properly, it will fall back to the previous behavior.
## Changelog:
[Internal] - Only pass props to the interoperated component when they changes
Reviewed By: sammy-SC
Differential Revision: D51755764
fbshipit-source-id: 0185d2cceeab2a1e45b87d5a1e82ab06e00aa82d
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41941
While working on the interop layer, I realized that htis code is duplicated.
## Changelog
[Internal] - Use the same method for View And ShadowView in the Interop layer
Reviewed By: sammy-SC
Differential Revision: D51752171
fbshipit-source-id: 579652de262fea7edb13a1329cb07683eab78124
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41923
Changelog: [Internal][BREAKING] Use C++ enum classes in C++ Turbo Modules
Problem:
Using **C styles** `enums` can easily cause compiliation errors if symbol names collide. This code does not compile:
```
enum CustomEnumInt { A = 23, B = 42 };
static int A = 22;
```
This **C++ code**, using `enum classes` compiles:
```
enum class CustomEnumInt : int32_t { A = 23, B = 42 };
static int A = 22;
```
Reviewed By: rshest
Differential Revision: D52098598
fbshipit-source-id: c919bd2e41970c83a032fec91b0537cd6fae8397
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41903
These offset methods are supposed to be in reference to the node's nearest positioned (non-static) ancestor: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent. Right now, because static did not exist, they return the offset from the parent. This changes it so that the API is spec compliant and will look at the position of its ancestors before settling on the right offset. I added a helper `getNewestPositionedAncestorOfShadowNode` to get the correct node. Then I use that to calculate the proper offset
Changelog: [Internal]
Reviewed By: rubennorte, NickGerleman
Differential Revision: D51414950
fbshipit-source-id: ebc8de1d3a0f3e9485f63e792b5bef5b9151460d
Summary:
When using `RCT_EXTERN_REMAP_MODULE` a warning is produced with the following message: "A function declaration without a prototype is deprecated in all versions of C". This warning can be silenced by setting the `CLANG_WARN_STRICT_PROTOTYPES ` build setting. However this PR addresses the underlying problem resulting in no warning messages.
## Changelog:
[IOS] [FIXED] - Fixed strict prototype warning when using the RCT_EXTERN_REMAP_MODULE macro.
Pull Request resolved: https://github.com/facebook/react-native/pull/41805
Reviewed By: NickGerleman
Differential Revision: D51891880
Pulled By: dmytrorykun
fbshipit-source-id: 7804d624b248b568643956a8a7b7e0f8540b5ae2
Summary:
When Codegen generates interop components it reformats `RCTLegacyInteropComponents.mm` to have each component in a new line. This creates this unnecessary diff every time I run `pod install`. This PR aims to commit a formatted version of the codegen-generated file to avoid creating this diff every time. Here is a reference of Codegen function generating this: 44d6e4310c/packages/react-native/scripts/codegen/generate-legacy-interop-components.js (L53)
![CleanShot 2023-12-12 at 14 09 34@2x](https://github.com/facebook/react-native/assets/52801365/2d5454d0-3bcb-484c-aa45-b5286c3ac5ba)
## Changelog:
[INTERNAL] [CHANGED] - Reformat `RCTLegacyInteropComponents` to follow Codegen generated formatting
Pull Request resolved: https://github.com/facebook/react-native/pull/41908
Test Plan: CI Green
Reviewed By: cipolleschi
Differential Revision: D52077611
Pulled By: cortinico
fbshipit-source-id: 12fbbfacc7e73147a988d321c8bc771acaaad8bb
Summary:
When publishing my RN fork I hit this issue where a RCTThirdPartyFabricComponentsProvider module would end up in the npm tarball which causes build issues. This file is generated by codegen and should never be included.
## Changelog:
[INTERNAL] [FIXED] - Ignore RCTThirdPartyFabricComponentsProvider for npm publish
Pull Request resolved: https://github.com/facebook/react-native/pull/41868
Test Plan: Tested that the file is no longer included when publishing my RN fork
Reviewed By: christophpurrer
Differential Revision: D52032223
Pulled By: dmytrorykun
fbshipit-source-id: a846813176d60119d97261131fd9d9a6aa919e62
Summary:
The height returned by TextInput's 'onContentSizeChange' callback method is incorrect
Because, the borderwidth and horizontal padding are not subtracted from the content width used to calculate the height of the text.
I have seen many people in the same situation in many issues. When I solved, some people suggested I submit a PR.
More information can be found here [https://github.com/facebook/react-native/issues/35234](https://github.com/facebook/react-native/issues/35234#issuecomment-1831141903)
## Changelog:
[IOS] [FIXED] - the wrong height result of onContentSizeChange callback
<!-- Help reviewers and the release process by writing your own changelog entry.
Pick one each for the category and type tags:
[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message
For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
Pull Request resolved: https://github.com/facebook/react-native/pull/41803
Test Plan: CI Green
Reviewed By: NickGerleman
Differential Revision: D51891909
Pulled By: dmytrorykun
fbshipit-source-id: fa297155ebdfc933cf0ea6bcdab37d7410809e8c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41914
If the user does not specify which engine they're using, we still default to loading JSC first and then attempting to load Hermes.
This has a small performance hit (as we attempt to load an existing library) + it prints an inactionable log for the user every time.
Changelog:
[Android] [Fixed] - Update getDefaultJSExecutorFactory to load Hermes first and fallback to JSC
Reviewed By: luluwu2032
Differential Revision: D52080545
fbshipit-source-id: 95f37304d713da7d7079eabbd2dfdf230d29a1b9
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41912
Progress towards an opt-in setup for our new CDP backend.
- For `DevSupportManagerBase` on Android: Conditionally omit sending `Debugger.disable` CDP message when new CDP backend is enabled.
Reviewed By: motiz88
Differential Revision: D52040149
fbshipit-source-id: 452f46395261d2d9670bd38192d06e6fa8e1f93f
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41913
Progress towards an opt-in setup for our new CDP backend.
- Adds and configures an [fbjni](https://github.com/facebookincubator/fbjni) interface for reading `jsinspector_modern::InspectorFlags`, allowing access in Java contexts.
Changelog: [Internal]
Reviewed By: motiz88
Differential Revision: D52040150
fbshipit-source-id: 5459eda2747279633a8312a3979ba29a1e0d1bde