Compare commits

...
Author SHA1 Message Date
CodemodService Bot b39ecde1fc Fix CQS signal modernize-concat-nested-namespaces in xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/jni/react/hermes/instrumentation
Reviewed By: cortinico

Differential Revision: D77359122
2025-06-26 00:55:18 -07:00
Nick Lefever c6608685cb Mark prop diffing availability for codegen props (#52246)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52246

This diff adds the required override to codegen props to make the `FabricMountingManager` aware of the availability of a prop diffing implementation for native components using codegen props.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D77234066

fbshipit-source-id: 8e95628348f491c5ee08609bc7d7b3d30bc7151b
2025-06-25 18:28:22 -07:00
Nick Lefever 53ce247dbd Add codegen for MixedType diffing (#52266)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52266

Native components may use `MixedType` properties in rare cases to hold untyped data. This diff adds support for serializing and prop diffing these types of props so that all of the props and object fields would be included in prop diffing results.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D77307169

fbshipit-source-id: ae6b00207ef857c9cfa4bdf9c235972915410a29
2025-06-25 18:28:22 -07:00
Nick Lefever e441954c82 Add codegen for ArrayType diffing (#52244)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52244

The ArrayType props converts to std::vector. This prompted the need for `toDynamic(const T&)` conversion functions as this breaks to potential reliance on all type instances having a `toDynamic()` function available. This includes:
- array of arrays types
- array of objects types
- object with arrays

The ArrayType conversion uses the availability of the `toDynamic` conversion methods for all supported types to convert the values stored by the `std::vector` to `folly::dynamic` values to be stored on a `folly::dynamic::array`.

The diff removes unnecessary conversion methods implemented previously for the core components prop diffing. These are now handled by the generic `toDynamic(const std::vector<T>&)` conversion method.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D77234065

fbshipit-source-id: 97a3b175ff07fe4a6de3adb14ee6cb42db1a2cfe
2025-06-25 18:28:22 -07:00
Nick Lefever b50ad49a4d Add codegen for ObjectType diffing (#52243)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52243

Building on the availability of `toDynamic` conversion methods for all supported property types, this diff adds support for diffing of `ObjectType` props.

The template adds the generation of a default comparator for the generated C++ struct. The struct also gains a `toDynamic` conversion method that will convert each property of the object type to a `folly::dynamic` value.

Primitive types make use of the implicit conversion supported by `folly::dynamic`, all other types are converted using `toDynamic`.

The `toDynamic` logic is implemented as a method defined on the struct to avoid increased binary size when required multiple times by the prop diffing implementation.

The external `toDynamic` conversion function calls the struct method directly. This enables support for converting object types using object types within their props.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D77234064

fbshipit-source-id: 21deb3104303aa374fb65b969af57a6aca6db38c
2025-06-25 18:28:22 -07:00
Nick Lefever 8c806ec31b Add codegen for DimensionType diffing (#52242)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52242

Codegen supports `DimensionType` props which represents a YGValue. This diff adds a conversion to `folly::dynamic` supporting all the existing value types `YGValue` can represent.

This completes codegen support for all allowed `ReservedPropTypeAnnotation` prop types.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D77234061

fbshipit-source-id: 6c3aef5e3ab0459d8a68ebd8efaccfecb83b0b08
2025-06-25 18:28:22 -07:00
Nick Lefever a164874b1a Add codegen for EnumType diffing (#52241)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52241

Add support for converting string and int32 enum types to `folly::dynamic` and generating the correct property diffing for it conditionally adding the prop value to the prop diff result.

This diff updates the template to convert the enum back to the original string representation provided from the JS side based on the current generated C++ enum value.

The string enum re-uses the existing `toString` conversion. The number enum generates the switch-case mapping required to map back the C++ enum value to the original value assigned to it.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D77234070

fbshipit-source-id: 8c669d5b2e21bd6022c6ba36149465495e4d4bf3
2025-06-25 18:28:22 -07:00
Moti Zilberman 0031377ae6 Correctly synchronise access to WebSocketDelegate
Summary:
Changelog: [Internal]

Fixes a thread safety bug in the C++ platform's `InspectorPackagerConnectionDelegate::WebSocket` implementation. Since D60520747 `IWebSocketDelegate` event calls have been required to be made on the inspector thread, but the C++ platform was making them on the platform's WebSocket thread instead.

Reviewed By: christophpurrer

Differential Revision: D77150289

fbshipit-source-id: f57de05eaccbbe9db674076fc9e60f8d0dd243c5
2025-06-25 13:49:00 -07:00
Sam Zhou 6b85c54ef4 Add annotations to array and object literal declarations to fix future natural inference errors (#52267)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52267

Changelog: [Internal]

Reviewed By: marcoww6

Differential Revision: D77308192

fbshipit-source-id: 21fa2f6d3df632941327b9b2d7910b035f16b7d2
2025-06-25 13:44:09 -07:00
Joe Vilches 7e8eadc041 Fix accessibility order example (#52271)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52271

In my haste I messed up a few of these. Either type in the text, or giving them props they should not have.

Changelog: [Internal]

Reviewed By: jorge-cab

Differential Revision: D77310876

fbshipit-source-id: 9c5a28285d4bb3673fe99630fa7ed97033b17904
2025-06-25 13:06:08 -07:00
Moti Zilberman bc7a9d9c4e Add dev server host/port settings to ReactInstanceConfig (#52263)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52263

Changelog: [Internal]

Adds a bare-bones API to set the dev server host and port at the time of creating a `ReactInstance` in the C++ platform.

Reviewed By: rshest

Differential Revision: D77050457

fbshipit-source-id: 642dc96d3cb486a2e7faa177adcbf8a15b8fb668
2025-06-25 12:02:22 -07:00
Pieter De Baets 167ec92f86 Consume ReactNativeAttributePayloadFabric from ReactNativePrivateInterface (#33616) (#52256)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52256

## Summary

ReactNativeAttributePayloadFabric was synced to react-native in
https://github.com/facebook/react-native/commit/0e42d33cbcfadcf5d787108da785d56a83d07a9f.
We should now consume these methods from the
ReactNativePrivateInterface.

Moving these methods to the React Native repo gives us more flexibility
to experiment with new techniques for bridging and diffing props
payloads.

I did have to leave some stub implementations for existing unit tests,
but moved all detailed tests to the React Native repo.

## How did you test this change?

* `yarn prettier`
* `yarn test ReactFabric-test`

DiffTrain build for [7a3ffef70339c10f8d65a27b88cd73bfbe13eb8a](https://github.com/facebook/react/commit/7a3ffef70339c10f8d65a27b88cd73bfbe13eb8a)

Reviewed By: rubennorte

Differential Revision: D77296286

fbshipit-source-id: a26aa0fe0f7f1c8a42407d759351734a4c85f970
2025-06-25 09:30:08 -07:00
generatedunixname89002005287564 1348d7ee78 Fix CQS signal modernize-concat-nested-namespaces in xplat/js/react-native-github/packages/react-native/ReactCommon/jsc (#52250)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52250

Reviewed By: javache

Differential Revision: D77290996

fbshipit-source-id: 582a090ea0b0ab6171f625b7a2147607abef1cab
2025-06-25 08:23:43 -07:00
generatedunixname89002005287564 2ae154f650 Fix CQS signal modernize-concat-nested-namespaces in xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/jni/first-party/fbgloginit/fb (#52251)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52251

Reviewed By: javache

Differential Revision: D77289931

fbshipit-source-id: ff61aa3a92a96492027c111ea2db25d5b86a777e
2025-06-25 08:08:12 -07:00
Vitali Zaidman 5ba0e1f97a Improve how throws from components are reported to the console (#52050)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52050

Uncaught errors are currently raising a custom error to `console.error`:
* With somewhat unclear messaging.
* Only the **component stack** is reported.
* The top-most stack leads to the component where the throw occurred and not to the actual error being thrown.
* The actual error being thrown is never logged

After this change:
* We print the actual error thrown
* The *Owner stack* is attached

(see test plan for examples)

## Changelog:
[General][Breaking] Improve messaging and add error stack trace in console errors generated on throws from components.

----

This is a breaking change because someone might be monkey-patching console.errors, or just listens to them.

Reviewed By: rickhanlonii

Differential Revision: D75080385

fbshipit-source-id: 824f30a804a3bb836ea1be7257784e56c00077c1
2025-06-25 07:54:55 -07:00
Jakub Piasecki 482f737ee1 Move stripping unstable identifiers earlier in the API Snapshot pipeline (#52260)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52260

Changelog: [Internal]

Reviewed By: huntie

Differential Revision: D77304456

fbshipit-source-id: 2c623fa6d5b6c75e985dc8aa79872019582c50d5
2025-06-25 07:47:38 -07:00
Christian Falch 02203f8608 revert changes in ReactCodegen template (#52257)
Summary:
After switching to the new backwards compatible cocoapods structure with prebuilts, we no longer need any change in the ReactCodegen template.

This commit fixes this.

## Changelog:

[IOS] [FIXED] - revert changes in ReactCodegen template

Pull Request resolved: https://github.com/facebook/react-native/pull/52257

Test Plan: Build RN-tester with prebuilt

Reviewed By: cortinico

Differential Revision: D77303429

Pulled By: cipolleschi

fbshipit-source-id: d251d7d67b1c902082891ba705db5158c558e842
2025-06-25 07:36:56 -07:00
Mateo Guzmán d6efe9a56f Migrate ReactContextBaseJavaModule to Kotlin (#52210)
Summary:
Migrate com.facebook.react.bridge.ReactContextBaseJavaModule to Kotlin.

## Changelog:

[INTERNAL] - Migrate com.facebook.react.bridge.ReactContextBaseJavaModule to Kotlin

Pull Request resolved: https://github.com/facebook/react-native/pull/52210

Test Plan:
```bash
yarn test-android
yarn android
```

Reviewed By: rshest

Differential Revision: D77290330

Pulled By: cortinico

fbshipit-source-id: 1218af30c8a94ed11cc4db557ba34c7bfff2fc0c
2025-06-25 07:21:27 -07:00
Andrew Datsenko 0b4429a33e Use RegExp instead of micromatch (#52234)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52234

Changelog: [Internal]

Use raw regex instead of micromatch as it depends on node imports.

Reviewed By: christophpurrer

Differential Revision: D77241819

fbshipit-source-id: c579b42f064f67c2e44e15e40ab6262f45a90797
2025-06-25 06:20:10 -07:00
Ruslan Lesiutin ca647c13c2 Avoid copying strings when serializing TraceEvent / lock only on buffer operations (#52220)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52220

# Changelog: [Internal]

Mainly, 2 changes:
1. `PerformanceTracer::serializeTraceEvent(const TraceEvent& event)` -> `PerformanceTracer::serializeTraceEvent(TraceEvent&& event)` for less copies, actually move strings from the `TraceEvent` into the serialized `folly:object`.
2. When collecting events from the buffer, only lock when accessing buffer, not when serializing.

Reviewed By: rubennorte

Differential Revision: D77164969

fbshipit-source-id: c7dd84dd3c94dae22b89ffd4b229974e6d8084de
2025-06-25 05:38:31 -07:00
Ruslan Lesiutin 448fe573e0 Avoid potential copies of TraceEvent before serialization (#52196)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52196

# Changelog: [Internal]

Probably been overlooked for quite some time, but shouldn't be a bottleneck.

Reviewed By: motiz88

Differential Revision: D77148271

fbshipit-source-id: e8eb32137086d6c280aab2ec5903be03f96175ad
2025-06-25 05:38:31 -07:00
Ruslan Lesiutin 823414e691 Avoid potential copies of TraceEvent when buffering (#52188)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52188

# Changelog: [Internal]

`buffer_.push_back` -> `buffer_.emplace_back`

I didn't measure if there were any runtime wins from this, because I don't expect there would be. Let's avoid potential copies, if possible.

Reviewed By: rubennorte

Differential Revision: D77053032

fbshipit-source-id: 80a0d3759bf95b1945ebe560806712bfa6a4f924
2025-06-25 05:38:31 -07:00
Ruslan Lesiutin e5049091c5 refactor: well-defined behaviour (#52187)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52187

# Changelog: [Internal]

- `bool tracing_` -> `std::atomic<bool> tracingAtomic_`.
- More doc-comments to explain the usage of mutex and atomics.
- `PerformanceTracer::isTracing()` -> `inline PerformanceTracer::isTracing()`.
- `uint64_t processId_` -> `const uint64_t processId_`.

The main change is that the boolean flag that controls "if we are tracing" is now atomic, which should eliminate potential data races. To avoid "logic" races, we are still going to lock mutex, and then check again. The use of `std::atomic` allows us to perform cheaper check first to avoid potentially unnecessary serializations from other systems that report events into `PerformanceTracer`.

Reviewed By: rubennorte

Differential Revision: D77053030

fbshipit-source-id: 82966055db0d75f828e7b95ad4c6cd7f18902265
2025-06-25 05:38:31 -07:00
Samuel Susla 818e62e977 fix crash in view culling when culling context is incorrectly compared (#52254)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52254

changelog: [internal]

View culling would generate incorrect mounting instructions because view culling context is checked before it is changed by a view.

Reviewed By: javache

Differential Revision: D77298889

fbshipit-source-id: 2f98dc4de90f34673ff6f627b597942d80fda865
2025-06-25 05:33:49 -07:00
Nick Lefever 3d97bac5f2 Add codegen for EdgeInset type diffing (#52239)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52239

Add `toDynamic` conversion function for `EdgeInset` which allowed for removing the custom conversion implemented for the `ViewProps`.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D77234069

fbshipit-source-id: 3aecad8a6d78468f0056167fa1523ccdfb68f369
2025-06-25 04:33:12 -07:00
Nick Lefever 9b82e706fb Add codegen for PointPrimitive prop type diffing (#52238)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52238

Add prop diffing codegen for `PointPrimitive` prop type by adding a `toDynamic` conversion for the struct and the prop diffing conditional result update.

The addition of the `toDynamic` function will allow for converting the type when used in array and object types.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D77234062

fbshipit-source-id: d0f52e8fd78ac7712925ea2a47cdd0fe3392d5b0
2025-06-25 04:33:12 -07:00
Nick Lefever da0938edfd Add toDynamic conversion function for ImageSource (#52237)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52237

For array props conversion following later in this stack, each type should have a toDynamic conversion available that can be called upon to convert all supported types to a `folly::dynamic` result.

This diff adds the toDynamic conversion function for `ImageSource`

 Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D77234063

fbshipit-source-id: 392cbaf172595936f7f66faa824900dadd58bdcf
2025-06-25 04:33:12 -07:00
Jakub Piasecki dca83bc158 Move remaining transform to the typescript dir (#52247)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52247

Changelog: [Internal]

Reviewed By: huntie

Differential Revision: D77284561

fbshipit-source-id: 46a5a9d00223283423b791456db3613abfc063aa
2025-06-25 04:17:28 -07:00
52 changed files with 1655 additions and 437 deletions
@@ -9,6 +9,7 @@
*/
import type {JsonPagesListResponse} from '../inspector-proxy/types';
import type {BrowserLauncher} from '../types/BrowserLauncher';
import DefaultBrowserLauncher from '../utils/DefaultBrowserLauncher';
import {fetchJson, requestLocal} from './FetchUtils';
@@ -22,7 +23,7 @@ const PAGES_POLLING_DELAY = 2100;
jest.useFakeTimers();
describe('enableStandaloneFuseboxShell experiment', () => {
const BrowserLauncherWithFuseboxShell = {
const BrowserLauncherWithFuseboxShell: BrowserLauncher = {
...DefaultBrowserLauncher,
unstable_showFuseboxShell: () => {
throw new Error('Not implemented');
@@ -40,6 +40,10 @@ ArrayPropsNativeComponentViewProps::ArrayPropsNativeComponentViewProps(
arrayOfMixed(convertRawProp(context, rawProps, \\"arrayOfMixed\\", sourceProps.arrayOfMixed, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ArrayPropsNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"ArrayPropsNativeComponentView\\";
}
folly::dynamic ArrayPropsNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ArrayPropsNativeComponentViewProps();
@@ -51,18 +55,57 @@ folly::dynamic ArrayPropsNativeComponentViewProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (names != oldProps->names) {
result[\\"names\\"] = toDynamic(names);
}
if (disableds != oldProps->disableds) {
result[\\"disableds\\"] = toDynamic(disableds);
}
if (progress != oldProps->progress) {
result[\\"progress\\"] = toDynamic(progress);
}
if (radii != oldProps->radii) {
result[\\"radii\\"] = toDynamic(radii);
}
if (colors != oldProps->colors) {
result[\\"colors\\"] = toDynamic(colors);
}
if (srcs != oldProps->srcs) {
result[\\"srcs\\"] = toDynamic(srcs);
}
if (points != oldProps->points) {
result[\\"points\\"] = toDynamic(points);
}
if (edgeInsets != oldProps->edgeInsets) {
result[\\"edgeInsets\\"] = toDynamic(edgeInsets);
}
if (dimensions != oldProps->dimensions) {
result[\\"dimensions\\"] = toDynamic(dimensions);
}
if (sizes != oldProps->sizes) {
result[\\"sizes\\"] = toDynamic(sizes);
}
if (object != oldProps->object) {
result[\\"object\\"] = toDynamic(object);
}
if (arrayOfObjects != oldProps->arrayOfObjects) {
result[\\"arrayOfObjects\\"] = toDynamic(arrayOfObjects);
}
if (arrayOfMixed != oldProps->arrayOfMixed) {
result[\\"arrayOfMixed\\"] = toDynamic(arrayOfMixed);
}
return result;
}
#endif
@@ -99,6 +142,10 @@ BooleanPropNativeComponentViewProps::BooleanPropNativeComponentViewProps(
disabledNullable(convertRawProp(context, rawProps, \\"disabledNullable\\", sourceProps.disabledNullable, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName BooleanPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"BooleanPropNativeComponentView\\";
}
folly::dynamic BooleanPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = BooleanPropNativeComponentViewProps();
@@ -152,6 +199,10 @@ ColorPropNativeComponentViewProps::ColorPropNativeComponentViewProps(
tintColor(convertRawProp(context, rawProps, \\"tintColor\\", sourceProps.tintColor, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ColorPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"ColorPropNativeComponentView\\";
}
folly::dynamic ColorPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ColorPropNativeComponentViewProps();
@@ -202,6 +253,10 @@ DimensionPropNativeComponentViewProps::DimensionPropNativeComponentViewProps(
marginBack(convertRawProp(context, rawProps, \\"marginBack\\", sourceProps.marginBack, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName DimensionPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"DimensionPropNativeComponentView\\";
}
folly::dynamic DimensionPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = DimensionPropNativeComponentViewProps();
@@ -213,6 +268,9 @@ folly::dynamic DimensionPropNativeComponentViewProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (marginBack != oldProps->marginBack) {
result[\\"marginBack\\"] = toDynamic(marginBack);
}
return result;
}
#endif
@@ -248,6 +306,10 @@ EdgeInsetsPropNativeComponentViewProps::EdgeInsetsPropNativeComponentViewProps(
{}
#ifdef RN_SERIALIZABLE_STATE
ComponentName EdgeInsetsPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"EdgeInsetsPropNativeComponentView\\";
}
folly::dynamic EdgeInsetsPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = EdgeInsetsPropNativeComponentViewProps();
@@ -295,6 +357,10 @@ EnumPropNativeComponentViewProps::EnumPropNativeComponentViewProps(
intervals(convertRawProp(context, rawProps, \\"intervals\\", sourceProps.intervals, {EnumPropNativeComponentViewIntervals::Intervals0})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName EnumPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"EnumPropNativeComponentView\\";
}
folly::dynamic EnumPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = EnumPropNativeComponentViewProps();
@@ -306,7 +372,13 @@ folly::dynamic EnumPropNativeComponentViewProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (alignment != oldProps->alignment) {
result[\\"alignment\\"] = toDynamic(alignment);
}
if (intervals != oldProps->intervals) {
result[\\"intervals\\"] = toDynamic(intervals);
}
return result;
}
#endif
@@ -342,6 +414,10 @@ EventNestedObjectPropsNativeComponentViewProps::EventNestedObjectPropsNativeComp
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {false})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName EventNestedObjectPropsNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"EventNestedObjectPropsNativeComponentView\\";
}
folly::dynamic EventNestedObjectPropsNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = EventNestedObjectPropsNativeComponentViewProps();
@@ -391,6 +467,10 @@ EventPropsNativeComponentViewProps::EventPropsNativeComponentViewProps(
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {false})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName EventPropsNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"EventPropsNativeComponentView\\";
}
folly::dynamic EventPropsNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = EventPropsNativeComponentViewProps();
@@ -446,6 +526,10 @@ FloatPropsNativeComponentViewProps::FloatPropsNativeComponentViewProps(
blurRadiusNullable(convertRawProp(context, rawProps, \\"blurRadiusNullable\\", sourceProps.blurRadiusNullable, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName FloatPropsNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"FloatPropsNativeComponentView\\";
}
folly::dynamic FloatPropsNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = FloatPropsNativeComponentViewProps();
@@ -520,6 +604,10 @@ ImagePropNativeComponentViewProps::ImagePropNativeComponentViewProps(
thumbImage(convertRawProp(context, rawProps, \\"thumbImage\\", sourceProps.thumbImage, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ImagePropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"ImagePropNativeComponentView\\";
}
folly::dynamic ImagePropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ImagePropNativeComponentViewProps();
@@ -532,7 +620,7 @@ folly::dynamic ImagePropNativeComponentViewProps::getDiffProps(
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (thumbImage != oldProps->thumbImage) {
result[\\"thumbImage\\"] = thumbImage.toDynamic();
result[\\"thumbImage\\"] = toDynamic(thumbImage);
}
return result;
}
@@ -571,6 +659,10 @@ IntegerPropNativeComponentViewProps::IntegerPropNativeComponentViewProps(
progress3(convertRawProp(context, rawProps, \\"progress3\\", sourceProps.progress3, {10})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName IntegerPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"IntegerPropNativeComponentView\\";
}
folly::dynamic IntegerPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = IntegerPropNativeComponentViewProps();
@@ -628,6 +720,10 @@ InterfaceOnlyNativeComponentViewProps::InterfaceOnlyNativeComponentViewProps(
title(convertRawProp(context, rawProps, \\"title\\", sourceProps.title, {\\"\\"})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName InterfaceOnlyNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"InterfaceOnlyNativeComponentView\\";
}
folly::dynamic InterfaceOnlyNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = InterfaceOnlyNativeComponentViewProps();
@@ -678,6 +774,10 @@ MixedPropNativeComponentViewProps::MixedPropNativeComponentViewProps(
mixedProp(convertRawProp(context, rawProps, \\"mixedProp\\", sourceProps.mixedProp, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName MixedPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"MixedPropNativeComponentView\\";
}
folly::dynamic MixedPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = MixedPropNativeComponentViewProps();
@@ -689,6 +789,9 @@ folly::dynamic MixedPropNativeComponentViewProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (mixedProp != oldProps->mixedProp) {
result[\\"mixedProp\\"] = mixedProp;
}
return result;
}
#endif
@@ -728,6 +831,10 @@ MultiNativePropNativeComponentViewProps::MultiNativePropNativeComponentViewProps
point(convertRawProp(context, rawProps, \\"point\\", sourceProps.point, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName MultiNativePropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"MultiNativePropNativeComponentView\\";
}
folly::dynamic MultiNativePropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = MultiNativePropNativeComponentViewProps();
@@ -740,7 +847,7 @@ folly::dynamic MultiNativePropNativeComponentViewProps::getDiffProps(
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (thumbImage != oldProps->thumbImage) {
result[\\"thumbImage\\"] = thumbImage.toDynamic();
result[\\"thumbImage\\"] = toDynamic(thumbImage);
}
if (color != oldProps->color) {
@@ -752,10 +859,7 @@ folly::dynamic MultiNativePropNativeComponentViewProps::getDiffProps(
}
if (point != oldProps->point) {
folly::dynamic pointResult = folly::dynamic::object();
pointResult[\\"x\\"] = point.x;
pointResult[\\"y\\"] = point.y;
result[\\"point\\"] = pointResult;
result[\\"point\\"] = toDynamic(point);
}
return result;
}
@@ -792,6 +896,10 @@ NoPropsNoEventsNativeComponentViewProps::NoPropsNoEventsNativeComponentViewProps
{}
#ifdef RN_SERIALIZABLE_STATE
ComponentName NoPropsNoEventsNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"NoPropsNoEventsNativeComponentView\\";
}
folly::dynamic NoPropsNoEventsNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = NoPropsNoEventsNativeComponentViewProps();
@@ -841,6 +949,10 @@ ObjectPropsNativeComponentProps::ObjectPropsNativeComponentProps(
objectPrimitiveRequiredProp(convertRawProp(context, rawProps, \\"objectPrimitiveRequiredProp\\", sourceProps.objectPrimitiveRequiredProp, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ObjectPropsNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"ObjectPropsNativeComponent\\";
}
folly::dynamic ObjectPropsNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ObjectPropsNativeComponentProps();
@@ -852,8 +964,17 @@ folly::dynamic ObjectPropsNativeComponentProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (objectProp != oldProps->objectProp) {
result[\\"objectProp\\"] = toDynamic(objectProp);
}
if (objectArrayProp != oldProps->objectArrayProp) {
result[\\"objectArrayProp\\"] = toDynamic(objectArrayProp);
}
if (objectPrimitiveRequiredProp != oldProps->objectPrimitiveRequiredProp) {
result[\\"objectPrimitiveRequiredProp\\"] = toDynamic(objectPrimitiveRequiredProp);
}
return result;
}
#endif
@@ -889,6 +1010,10 @@ PointPropNativeComponentViewProps::PointPropNativeComponentViewProps(
startPoint(convertRawProp(context, rawProps, \\"startPoint\\", sourceProps.startPoint, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName PointPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"PointPropNativeComponentView\\";
}
folly::dynamic PointPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = PointPropNativeComponentViewProps();
@@ -901,10 +1026,7 @@ folly::dynamic PointPropNativeComponentViewProps::getDiffProps(
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (startPoint != oldProps->startPoint) {
folly::dynamic pointResult = folly::dynamic::object();
pointResult[\\"x\\"] = startPoint.x;
pointResult[\\"y\\"] = startPoint.y;
result[\\"startPoint\\"] = pointResult;
result[\\"startPoint\\"] = toDynamic(startPoint);
}
return result;
}
@@ -942,6 +1064,10 @@ StringPropNativeComponentViewProps::StringPropNativeComponentViewProps(
defaultValue(convertRawProp(context, rawProps, \\"defaultValue\\", sourceProps.defaultValue, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName StringPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"StringPropNativeComponentView\\";
}
folly::dynamic StringPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = StringPropNativeComponentViewProps();
@@ -16,6 +16,7 @@ Object {
#include <cinttypes>
#include <react/renderer/components/view/ViewProps.h>
#include <react/renderer/core/PropsParserContext.h>
#include <react/renderer/core/graphicsConversions.h>
#include <react/renderer/core/propsConversions.h>
#include <react/renderer/graphics/Color.h>
#include <react/renderer/graphics/Point.h>
@@ -87,6 +88,16 @@ static inline std::string toString(const ArrayPropsNativeComponentViewSizesMaskW
}
struct ArrayPropsNativeComponentViewObjectStruct {
std::string prop{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ArrayPropsNativeComponentViewObjectStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"prop\\"] = prop;
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ArrayPropsNativeComponentViewObjectStruct &result) {
@@ -102,6 +113,12 @@ static inline std::string toString(const ArrayPropsNativeComponentViewObjectStru
return \\"[Object ArrayPropsNativeComponentViewObjectStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ArrayPropsNativeComponentViewObjectStruct &value) {
return value.toDynamic();
}
#endif
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, std::vector<ArrayPropsNativeComponentViewObjectStruct> &result) {
auto items = (std::vector<RawValue>)value;
for (const auto &item : items) {
@@ -115,6 +132,17 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
struct ArrayPropsNativeComponentViewArrayOfObjectsStruct {
Float prop1{0.0};
int prop2{0};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ArrayPropsNativeComponentViewArrayOfObjectsStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"prop1\\"] = prop1;
result[\\"prop2\\"] = prop2;
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ArrayPropsNativeComponentViewArrayOfObjectsStruct &result) {
@@ -134,6 +162,12 @@ static inline std::string toString(const ArrayPropsNativeComponentViewArrayOfObj
return \\"[Object ArrayPropsNativeComponentViewArrayOfObjectsStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ArrayPropsNativeComponentViewArrayOfObjectsStruct &value) {
return value.toDynamic();
}
#endif
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, std::vector<ArrayPropsNativeComponentViewArrayOfObjectsStruct> &result) {
auto items = (std::vector<RawValue>)value;
for (const auto &item : items) {
@@ -165,6 +199,8 @@ class ArrayPropsNativeComponentViewProps final : public ViewProps {
std::vector<folly::dynamic> arrayOfMixed{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -203,6 +239,8 @@ class BooleanPropNativeComponentViewProps final : public ViewProps {
bool disabledNullable{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -241,6 +279,8 @@ class ColorPropNativeComponentViewProps final : public ViewProps {
SharedColor tintColor{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -265,6 +305,7 @@ Object {
#include <react/renderer/components/view/ViewProps.h>
#include <react/renderer/core/PropsParserContext.h>
#include <react/renderer/core/graphicsConversions.h>
#include <yoga/Yoga.h>
namespace facebook::react {
@@ -279,6 +320,8 @@ class DimensionPropNativeComponentViewProps final : public ViewProps {
YGValue marginBack{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -316,6 +359,8 @@ class EdgeInsetsPropNativeComponentViewProps final : public ViewProps {
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -360,6 +405,12 @@ static inline std::string toString(const EnumPropNativeComponentViewAlignment &v
case EnumPropNativeComponentViewAlignment::BottomRight: return \\"bottom-right\\";
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const EnumPropNativeComponentViewAlignment &value) {
return toString(value);
}
#endif
enum class EnumPropNativeComponentViewIntervals { Intervals0 = 0, Intervals15 = 15, Intervals30 = 30, Intervals60 = 60 };
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, EnumPropNativeComponentViewIntervals &result) {
@@ -391,6 +442,17 @@ static inline std::string toString(const EnumPropNativeComponentViewIntervals &v
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const EnumPropNativeComponentViewIntervals &value) {
switch (value) {
case EnumPropNativeComponentViewIntervals::Intervals0: return 0;
case EnumPropNativeComponentViewIntervals::Intervals15: return 15;
case EnumPropNativeComponentViewIntervals::Intervals30: return 30;
case EnumPropNativeComponentViewIntervals::Intervals60: return 60;
}
}
#endif
class EnumPropNativeComponentViewProps final : public ViewProps {
public:
EnumPropNativeComponentViewProps() = default;
@@ -402,6 +464,8 @@ class EnumPropNativeComponentViewProps final : public ViewProps {
EnumPropNativeComponentViewIntervals intervals{EnumPropNativeComponentViewIntervals::Intervals0};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -439,6 +503,8 @@ class EventNestedObjectPropsNativeComponentViewProps final : public ViewProps {
bool disabled{false};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -476,6 +542,8 @@ class EventPropsNativeComponentViewProps final : public ViewProps {
bool disabled{false};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -519,6 +587,8 @@ class FloatPropsNativeComponentViewProps final : public ViewProps {
Float blurRadiusNullable{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -557,6 +627,8 @@ class ImagePropNativeComponentViewProps final : public ViewProps {
ImageSource thumbImage{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -596,6 +668,8 @@ class IntegerPropNativeComponentViewProps final : public ViewProps {
int progress3{10};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -633,6 +707,8 @@ class InterfaceOnlyNativeComponentViewProps final : public ViewProps {
std::string title{\\"\\"};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -670,6 +746,8 @@ class MixedPropNativeComponentViewProps final : public ViewProps {
folly::dynamic mixedProp{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -713,6 +791,8 @@ class MultiNativePropNativeComponentViewProps final : public ViewProps {
Point point{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -750,6 +830,8 @@ class NoPropsNoEventsNativeComponentViewProps final : public ViewProps {
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -798,6 +880,12 @@ static inline std::string toString(const ObjectPropsNativeComponentStringEnumPro
case ObjectPropsNativeComponentStringEnumProp::Large: return \\"large\\";
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsNativeComponentStringEnumProp &value) {
return toString(value);
}
#endif
enum class ObjectPropsNativeComponentIntEnumProp { IntEnumProp0 = 0, IntEnumProp1 = 1 };
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsNativeComponentIntEnumProp &result) {
@@ -820,6 +908,15 @@ static inline std::string toString(const ObjectPropsNativeComponentIntEnumProp &
case ObjectPropsNativeComponentIntEnumProp::IntEnumProp1: return \\"1\\";
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsNativeComponentIntEnumProp &value) {
switch (value) {
case ObjectPropsNativeComponentIntEnumProp::IntEnumProp0: return 0;
case ObjectPropsNativeComponentIntEnumProp::IntEnumProp1: return 1;
}
}
#endif
struct ObjectPropsNativeComponentObjectPropStruct {
std::string stringProp{\\"\\"};
bool booleanProp{false};
@@ -827,6 +924,21 @@ struct ObjectPropsNativeComponentObjectPropStruct {
int intProp{0};
ObjectPropsNativeComponentStringEnumProp stringEnumProp{ObjectPropsNativeComponentStringEnumProp::Small};
ObjectPropsNativeComponentIntEnumProp intEnumProp{ObjectPropsNativeComponentIntEnumProp::IntEnumProp0};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsNativeComponentObjectPropStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"stringProp\\"] = stringProp;
result[\\"booleanProp\\"] = booleanProp;
result[\\"floatProp\\"] = floatProp;
result[\\"intProp\\"] = intProp;
result[\\"stringEnumProp\\"] = ::facebook::react::toDynamic(stringEnumProp);
result[\\"intEnumProp\\"] = ::facebook::react::toDynamic(intEnumProp);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsNativeComponentObjectPropStruct &result) {
@@ -862,8 +974,24 @@ static inline std::string toString(const ObjectPropsNativeComponentObjectPropStr
return \\"[Object ObjectPropsNativeComponentObjectPropStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsNativeComponentObjectPropStruct &value) {
return value.toDynamic();
}
#endif
struct ObjectPropsNativeComponentObjectArrayPropStruct {
std::vector<std::string> array{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsNativeComponentObjectArrayPropStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"array\\"] = ::facebook::react::toDynamic(array);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsNativeComponentObjectArrayPropStruct &result) {
@@ -879,10 +1007,28 @@ static inline std::string toString(const ObjectPropsNativeComponentObjectArrayPr
return \\"[Object ObjectPropsNativeComponentObjectArrayPropStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsNativeComponentObjectArrayPropStruct &value) {
return value.toDynamic();
}
#endif
struct ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct {
ImageSource image{};
SharedColor color{};
Point point{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"image\\"] = ::facebook::react::toDynamic(image);
result[\\"color\\"] = ::facebook::react::toDynamic(color);
result[\\"point\\"] = ::facebook::react::toDynamic(point);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct &result) {
@@ -905,6 +1051,12 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
static inline std::string toString(const ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct &value) {
return \\"[Object ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct &value) {
return value.toDynamic();
}
#endif
class ObjectPropsNativeComponentProps final : public ViewProps {
public:
ObjectPropsNativeComponentProps() = default;
@@ -917,6 +1069,8 @@ class ObjectPropsNativeComponentProps final : public ViewProps {
ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct objectPrimitiveRequiredProp{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -955,6 +1109,8 @@ class PointPropNativeComponentViewProps final : public ViewProps {
Point startPoint{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -993,6 +1149,8 @@ class StringPropNativeComponentViewProps final : public ViewProps {
std::string defaultValue{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -40,6 +40,10 @@ ArrayPropsNativeComponentViewProps::ArrayPropsNativeComponentViewProps(
arrayOfMixed(convertRawProp(context, rawProps, \\"arrayOfMixed\\", sourceProps.arrayOfMixed, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ArrayPropsNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"ArrayPropsNativeComponentView\\";
}
folly::dynamic ArrayPropsNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ArrayPropsNativeComponentViewProps();
@@ -51,18 +55,57 @@ folly::dynamic ArrayPropsNativeComponentViewProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (names != oldProps->names) {
result[\\"names\\"] = toDynamic(names);
}
if (disableds != oldProps->disableds) {
result[\\"disableds\\"] = toDynamic(disableds);
}
if (progress != oldProps->progress) {
result[\\"progress\\"] = toDynamic(progress);
}
if (radii != oldProps->radii) {
result[\\"radii\\"] = toDynamic(radii);
}
if (colors != oldProps->colors) {
result[\\"colors\\"] = toDynamic(colors);
}
if (srcs != oldProps->srcs) {
result[\\"srcs\\"] = toDynamic(srcs);
}
if (points != oldProps->points) {
result[\\"points\\"] = toDynamic(points);
}
if (edgeInsets != oldProps->edgeInsets) {
result[\\"edgeInsets\\"] = toDynamic(edgeInsets);
}
if (dimensions != oldProps->dimensions) {
result[\\"dimensions\\"] = toDynamic(dimensions);
}
if (sizes != oldProps->sizes) {
result[\\"sizes\\"] = toDynamic(sizes);
}
if (object != oldProps->object) {
result[\\"object\\"] = toDynamic(object);
}
if (arrayOfObjects != oldProps->arrayOfObjects) {
result[\\"arrayOfObjects\\"] = toDynamic(arrayOfObjects);
}
if (arrayOfMixed != oldProps->arrayOfMixed) {
result[\\"arrayOfMixed\\"] = toDynamic(arrayOfMixed);
}
return result;
}
#endif
@@ -99,6 +142,10 @@ BooleanPropNativeComponentViewProps::BooleanPropNativeComponentViewProps(
disabledNullable(convertRawProp(context, rawProps, \\"disabledNullable\\", sourceProps.disabledNullable, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName BooleanPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"BooleanPropNativeComponentView\\";
}
folly::dynamic BooleanPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = BooleanPropNativeComponentViewProps();
@@ -152,6 +199,10 @@ ColorPropNativeComponentViewProps::ColorPropNativeComponentViewProps(
tintColor(convertRawProp(context, rawProps, \\"tintColor\\", sourceProps.tintColor, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ColorPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"ColorPropNativeComponentView\\";
}
folly::dynamic ColorPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ColorPropNativeComponentViewProps();
@@ -202,6 +253,10 @@ DimensionPropNativeComponentViewProps::DimensionPropNativeComponentViewProps(
marginBack(convertRawProp(context, rawProps, \\"marginBack\\", sourceProps.marginBack, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName DimensionPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"DimensionPropNativeComponentView\\";
}
folly::dynamic DimensionPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = DimensionPropNativeComponentViewProps();
@@ -213,6 +268,9 @@ folly::dynamic DimensionPropNativeComponentViewProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (marginBack != oldProps->marginBack) {
result[\\"marginBack\\"] = toDynamic(marginBack);
}
return result;
}
#endif
@@ -248,6 +306,10 @@ EdgeInsetsPropNativeComponentViewProps::EdgeInsetsPropNativeComponentViewProps(
{}
#ifdef RN_SERIALIZABLE_STATE
ComponentName EdgeInsetsPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"EdgeInsetsPropNativeComponentView\\";
}
folly::dynamic EdgeInsetsPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = EdgeInsetsPropNativeComponentViewProps();
@@ -295,6 +357,10 @@ EnumPropNativeComponentViewProps::EnumPropNativeComponentViewProps(
intervals(convertRawProp(context, rawProps, \\"intervals\\", sourceProps.intervals, {EnumPropNativeComponentViewIntervals::Intervals0})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName EnumPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"EnumPropNativeComponentView\\";
}
folly::dynamic EnumPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = EnumPropNativeComponentViewProps();
@@ -306,7 +372,13 @@ folly::dynamic EnumPropNativeComponentViewProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (alignment != oldProps->alignment) {
result[\\"alignment\\"] = toDynamic(alignment);
}
if (intervals != oldProps->intervals) {
result[\\"intervals\\"] = toDynamic(intervals);
}
return result;
}
#endif
@@ -342,6 +414,10 @@ EventNestedObjectPropsNativeComponentViewProps::EventNestedObjectPropsNativeComp
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {false})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName EventNestedObjectPropsNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"EventNestedObjectPropsNativeComponentView\\";
}
folly::dynamic EventNestedObjectPropsNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = EventNestedObjectPropsNativeComponentViewProps();
@@ -391,6 +467,10 @@ EventPropsNativeComponentViewProps::EventPropsNativeComponentViewProps(
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {false})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName EventPropsNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"EventPropsNativeComponentView\\";
}
folly::dynamic EventPropsNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = EventPropsNativeComponentViewProps();
@@ -446,6 +526,10 @@ FloatPropsNativeComponentViewProps::FloatPropsNativeComponentViewProps(
blurRadiusNullable(convertRawProp(context, rawProps, \\"blurRadiusNullable\\", sourceProps.blurRadiusNullable, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName FloatPropsNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"FloatPropsNativeComponentView\\";
}
folly::dynamic FloatPropsNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = FloatPropsNativeComponentViewProps();
@@ -520,6 +604,10 @@ ImagePropNativeComponentViewProps::ImagePropNativeComponentViewProps(
thumbImage(convertRawProp(context, rawProps, \\"thumbImage\\", sourceProps.thumbImage, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ImagePropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"ImagePropNativeComponentView\\";
}
folly::dynamic ImagePropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ImagePropNativeComponentViewProps();
@@ -532,7 +620,7 @@ folly::dynamic ImagePropNativeComponentViewProps::getDiffProps(
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (thumbImage != oldProps->thumbImage) {
result[\\"thumbImage\\"] = thumbImage.toDynamic();
result[\\"thumbImage\\"] = toDynamic(thumbImage);
}
return result;
}
@@ -571,6 +659,10 @@ IntegerPropNativeComponentViewProps::IntegerPropNativeComponentViewProps(
progress3(convertRawProp(context, rawProps, \\"progress3\\", sourceProps.progress3, {10})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName IntegerPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"IntegerPropNativeComponentView\\";
}
folly::dynamic IntegerPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = IntegerPropNativeComponentViewProps();
@@ -628,6 +720,10 @@ InterfaceOnlyNativeComponentViewProps::InterfaceOnlyNativeComponentViewProps(
title(convertRawProp(context, rawProps, \\"title\\", sourceProps.title, {\\"\\"})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName InterfaceOnlyNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"InterfaceOnlyNativeComponentView\\";
}
folly::dynamic InterfaceOnlyNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = InterfaceOnlyNativeComponentViewProps();
@@ -678,6 +774,10 @@ MixedPropNativeComponentViewProps::MixedPropNativeComponentViewProps(
mixedProp(convertRawProp(context, rawProps, \\"mixedProp\\", sourceProps.mixedProp, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName MixedPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"MixedPropNativeComponentView\\";
}
folly::dynamic MixedPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = MixedPropNativeComponentViewProps();
@@ -689,6 +789,9 @@ folly::dynamic MixedPropNativeComponentViewProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (mixedProp != oldProps->mixedProp) {
result[\\"mixedProp\\"] = mixedProp;
}
return result;
}
#endif
@@ -728,6 +831,10 @@ MultiNativePropNativeComponentViewProps::MultiNativePropNativeComponentViewProps
point(convertRawProp(context, rawProps, \\"point\\", sourceProps.point, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName MultiNativePropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"MultiNativePropNativeComponentView\\";
}
folly::dynamic MultiNativePropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = MultiNativePropNativeComponentViewProps();
@@ -740,7 +847,7 @@ folly::dynamic MultiNativePropNativeComponentViewProps::getDiffProps(
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (thumbImage != oldProps->thumbImage) {
result[\\"thumbImage\\"] = thumbImage.toDynamic();
result[\\"thumbImage\\"] = toDynamic(thumbImage);
}
if (color != oldProps->color) {
@@ -752,10 +859,7 @@ folly::dynamic MultiNativePropNativeComponentViewProps::getDiffProps(
}
if (point != oldProps->point) {
folly::dynamic pointResult = folly::dynamic::object();
pointResult[\\"x\\"] = point.x;
pointResult[\\"y\\"] = point.y;
result[\\"point\\"] = pointResult;
result[\\"point\\"] = toDynamic(point);
}
return result;
}
@@ -792,6 +896,10 @@ NoPropsNoEventsNativeComponentViewProps::NoPropsNoEventsNativeComponentViewProps
{}
#ifdef RN_SERIALIZABLE_STATE
ComponentName NoPropsNoEventsNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"NoPropsNoEventsNativeComponentView\\";
}
folly::dynamic NoPropsNoEventsNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = NoPropsNoEventsNativeComponentViewProps();
@@ -841,6 +949,10 @@ ObjectPropsNativeComponentProps::ObjectPropsNativeComponentProps(
objectPrimitiveRequiredProp(convertRawProp(context, rawProps, \\"objectPrimitiveRequiredProp\\", sourceProps.objectPrimitiveRequiredProp, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ObjectPropsNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"ObjectPropsNativeComponent\\";
}
folly::dynamic ObjectPropsNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ObjectPropsNativeComponentProps();
@@ -852,8 +964,17 @@ folly::dynamic ObjectPropsNativeComponentProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (objectProp != oldProps->objectProp) {
result[\\"objectProp\\"] = toDynamic(objectProp);
}
if (objectArrayProp != oldProps->objectArrayProp) {
result[\\"objectArrayProp\\"] = toDynamic(objectArrayProp);
}
if (objectPrimitiveRequiredProp != oldProps->objectPrimitiveRequiredProp) {
result[\\"objectPrimitiveRequiredProp\\"] = toDynamic(objectPrimitiveRequiredProp);
}
return result;
}
#endif
@@ -889,6 +1010,10 @@ PointPropNativeComponentViewProps::PointPropNativeComponentViewProps(
startPoint(convertRawProp(context, rawProps, \\"startPoint\\", sourceProps.startPoint, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName PointPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"PointPropNativeComponentView\\";
}
folly::dynamic PointPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = PointPropNativeComponentViewProps();
@@ -901,10 +1026,7 @@ folly::dynamic PointPropNativeComponentViewProps::getDiffProps(
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (startPoint != oldProps->startPoint) {
folly::dynamic pointResult = folly::dynamic::object();
pointResult[\\"x\\"] = startPoint.x;
pointResult[\\"y\\"] = startPoint.y;
result[\\"startPoint\\"] = pointResult;
result[\\"startPoint\\"] = toDynamic(startPoint);
}
return result;
}
@@ -942,6 +1064,10 @@ StringPropNativeComponentViewProps::StringPropNativeComponentViewProps(
defaultValue(convertRawProp(context, rawProps, \\"defaultValue\\", sourceProps.defaultValue, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName StringPropNativeComponentViewProps::getDiffPropsImplementationTarget() const {
return \\"StringPropNativeComponentView\\";
}
folly::dynamic StringPropNativeComponentViewProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = StringPropNativeComponentViewProps();
@@ -16,6 +16,7 @@ Object {
#include <cinttypes>
#include <react/renderer/components/view/ViewProps.h>
#include <react/renderer/core/PropsParserContext.h>
#include <react/renderer/core/graphicsConversions.h>
#include <react/renderer/core/propsConversions.h>
#include <react/renderer/graphics/Color.h>
#include <react/renderer/graphics/Point.h>
@@ -87,6 +88,16 @@ static inline std::string toString(const ArrayPropsNativeComponentViewSizesMaskW
}
struct ArrayPropsNativeComponentViewObjectStruct {
std::string prop{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ArrayPropsNativeComponentViewObjectStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"prop\\"] = prop;
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ArrayPropsNativeComponentViewObjectStruct &result) {
@@ -102,6 +113,12 @@ static inline std::string toString(const ArrayPropsNativeComponentViewObjectStru
return \\"[Object ArrayPropsNativeComponentViewObjectStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ArrayPropsNativeComponentViewObjectStruct &value) {
return value.toDynamic();
}
#endif
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, std::vector<ArrayPropsNativeComponentViewObjectStruct> &result) {
auto items = (std::vector<RawValue>)value;
for (const auto &item : items) {
@@ -115,6 +132,17 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
struct ArrayPropsNativeComponentViewArrayOfObjectsStruct {
Float prop1{0.0};
int prop2{0};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ArrayPropsNativeComponentViewArrayOfObjectsStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"prop1\\"] = prop1;
result[\\"prop2\\"] = prop2;
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ArrayPropsNativeComponentViewArrayOfObjectsStruct &result) {
@@ -134,6 +162,12 @@ static inline std::string toString(const ArrayPropsNativeComponentViewArrayOfObj
return \\"[Object ArrayPropsNativeComponentViewArrayOfObjectsStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ArrayPropsNativeComponentViewArrayOfObjectsStruct &value) {
return value.toDynamic();
}
#endif
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, std::vector<ArrayPropsNativeComponentViewArrayOfObjectsStruct> &result) {
auto items = (std::vector<RawValue>)value;
for (const auto &item : items) {
@@ -165,6 +199,8 @@ class ArrayPropsNativeComponentViewProps final : public ViewProps {
std::vector<folly::dynamic> arrayOfMixed{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -203,6 +239,8 @@ class BooleanPropNativeComponentViewProps final : public ViewProps {
bool disabledNullable{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -241,6 +279,8 @@ class ColorPropNativeComponentViewProps final : public ViewProps {
SharedColor tintColor{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -265,6 +305,7 @@ Object {
#include <react/renderer/components/view/ViewProps.h>
#include <react/renderer/core/PropsParserContext.h>
#include <react/renderer/core/graphicsConversions.h>
#include <yoga/Yoga.h>
namespace facebook::react {
@@ -279,6 +320,8 @@ class DimensionPropNativeComponentViewProps final : public ViewProps {
YGValue marginBack{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -316,6 +359,8 @@ class EdgeInsetsPropNativeComponentViewProps final : public ViewProps {
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -360,6 +405,12 @@ static inline std::string toString(const EnumPropNativeComponentViewAlignment &v
case EnumPropNativeComponentViewAlignment::BottomRight: return \\"bottom-right\\";
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const EnumPropNativeComponentViewAlignment &value) {
return toString(value);
}
#endif
enum class EnumPropNativeComponentViewIntervals { Intervals0 = 0, Intervals15 = 15, Intervals30 = 30, Intervals60 = 60 };
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, EnumPropNativeComponentViewIntervals &result) {
@@ -391,6 +442,17 @@ static inline std::string toString(const EnumPropNativeComponentViewIntervals &v
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const EnumPropNativeComponentViewIntervals &value) {
switch (value) {
case EnumPropNativeComponentViewIntervals::Intervals0: return 0;
case EnumPropNativeComponentViewIntervals::Intervals15: return 15;
case EnumPropNativeComponentViewIntervals::Intervals30: return 30;
case EnumPropNativeComponentViewIntervals::Intervals60: return 60;
}
}
#endif
class EnumPropNativeComponentViewProps final : public ViewProps {
public:
EnumPropNativeComponentViewProps() = default;
@@ -402,6 +464,8 @@ class EnumPropNativeComponentViewProps final : public ViewProps {
EnumPropNativeComponentViewIntervals intervals{EnumPropNativeComponentViewIntervals::Intervals0};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -439,6 +503,8 @@ class EventNestedObjectPropsNativeComponentViewProps final : public ViewProps {
bool disabled{false};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -476,6 +542,8 @@ class EventPropsNativeComponentViewProps final : public ViewProps {
bool disabled{false};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -519,6 +587,8 @@ class FloatPropsNativeComponentViewProps final : public ViewProps {
Float blurRadiusNullable{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -557,6 +627,8 @@ class ImagePropNativeComponentViewProps final : public ViewProps {
ImageSource thumbImage{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -596,6 +668,8 @@ class IntegerPropNativeComponentViewProps final : public ViewProps {
int progress3{10};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -633,6 +707,8 @@ class InterfaceOnlyNativeComponentViewProps final : public ViewProps {
std::string title{\\"\\"};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -670,6 +746,8 @@ class MixedPropNativeComponentViewProps final : public ViewProps {
folly::dynamic mixedProp{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -713,6 +791,8 @@ class MultiNativePropNativeComponentViewProps final : public ViewProps {
Point point{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -750,6 +830,8 @@ class NoPropsNoEventsNativeComponentViewProps final : public ViewProps {
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -798,6 +880,12 @@ static inline std::string toString(const ObjectPropsNativeComponentStringEnumPro
case ObjectPropsNativeComponentStringEnumProp::Large: return \\"large\\";
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsNativeComponentStringEnumProp &value) {
return toString(value);
}
#endif
enum class ObjectPropsNativeComponentIntEnumProp { IntEnumProp0 = 0, IntEnumProp1 = 1 };
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsNativeComponentIntEnumProp &result) {
@@ -820,6 +908,15 @@ static inline std::string toString(const ObjectPropsNativeComponentIntEnumProp &
case ObjectPropsNativeComponentIntEnumProp::IntEnumProp1: return \\"1\\";
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsNativeComponentIntEnumProp &value) {
switch (value) {
case ObjectPropsNativeComponentIntEnumProp::IntEnumProp0: return 0;
case ObjectPropsNativeComponentIntEnumProp::IntEnumProp1: return 1;
}
}
#endif
struct ObjectPropsNativeComponentObjectPropStruct {
std::string stringProp{\\"\\"};
bool booleanProp{false};
@@ -827,6 +924,21 @@ struct ObjectPropsNativeComponentObjectPropStruct {
int intProp{0};
ObjectPropsNativeComponentStringEnumProp stringEnumProp{ObjectPropsNativeComponentStringEnumProp::Small};
ObjectPropsNativeComponentIntEnumProp intEnumProp{ObjectPropsNativeComponentIntEnumProp::IntEnumProp0};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsNativeComponentObjectPropStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"stringProp\\"] = stringProp;
result[\\"booleanProp\\"] = booleanProp;
result[\\"floatProp\\"] = floatProp;
result[\\"intProp\\"] = intProp;
result[\\"stringEnumProp\\"] = ::facebook::react::toDynamic(stringEnumProp);
result[\\"intEnumProp\\"] = ::facebook::react::toDynamic(intEnumProp);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsNativeComponentObjectPropStruct &result) {
@@ -862,8 +974,24 @@ static inline std::string toString(const ObjectPropsNativeComponentObjectPropStr
return \\"[Object ObjectPropsNativeComponentObjectPropStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsNativeComponentObjectPropStruct &value) {
return value.toDynamic();
}
#endif
struct ObjectPropsNativeComponentObjectArrayPropStruct {
std::vector<std::string> array{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsNativeComponentObjectArrayPropStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"array\\"] = ::facebook::react::toDynamic(array);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsNativeComponentObjectArrayPropStruct &result) {
@@ -879,10 +1007,28 @@ static inline std::string toString(const ObjectPropsNativeComponentObjectArrayPr
return \\"[Object ObjectPropsNativeComponentObjectArrayPropStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsNativeComponentObjectArrayPropStruct &value) {
return value.toDynamic();
}
#endif
struct ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct {
ImageSource image{};
SharedColor color{};
Point point{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"image\\"] = ::facebook::react::toDynamic(image);
result[\\"color\\"] = ::facebook::react::toDynamic(color);
result[\\"point\\"] = ::facebook::react::toDynamic(point);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct &result) {
@@ -905,6 +1051,12 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
static inline std::string toString(const ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct &value) {
return \\"[Object ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct &value) {
return value.toDynamic();
}
#endif
class ObjectPropsNativeComponentProps final : public ViewProps {
public:
ObjectPropsNativeComponentProps() = default;
@@ -917,6 +1069,8 @@ class ObjectPropsNativeComponentProps final : public ViewProps {
ObjectPropsNativeComponentObjectPrimitiveRequiredPropStruct objectPrimitiveRequiredProp{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -955,6 +1109,8 @@ class PointPropNativeComponentViewProps final : public ViewProps {
Point startPoint{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -993,6 +1149,8 @@ class StringPropNativeComponentViewProps final : public ViewProps {
std::string defaultValue{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -245,6 +245,7 @@ function getLocalImports(
return;
case 'DimensionPrimitive':
imports.add('#include <yoga/Yoga.h>');
imports.add('#include <react/renderer/core/graphicsConversions.h>');
return;
default:
(name: empty);
@@ -105,7 +105,7 @@ function generatePropsDiffString(
case 'ImageSourcePrimitive':
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = ${prop.name}.toDynamic();
result["${prop.name}"] = toDynamic(${prop.name});
}`;
case 'ImageRequestPrimitive':
// Shouldn't be used in props
@@ -115,24 +115,47 @@ function generatePropsDiffString(
case 'PointPrimitive':
return `
if (${prop.name} != oldProps->${prop.name}) {
folly::dynamic pointResult = folly::dynamic::object();
pointResult["x"] = ${prop.name}.x;
pointResult["y"] = ${prop.name}.y;
result["${prop.name}"] = pointResult;
result["${prop.name}"] = toDynamic(${prop.name});
}`;
case 'EdgeInsetsPrimitive':
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = toDynamic(${prop.name});
}`;
case 'DimensionPrimitive':
// TODO: Implement diffProps for complex types
return '';
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = toDynamic(${prop.name});
}`;
default:
(typeAnnotation.name: empty);
throw new Error('Received unknown ReservedPropTypeAnnotation');
}
case 'ArrayTypeAnnotation':
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = toDynamic(${prop.name});
}`;
case 'ObjectTypeAnnotation':
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = toDynamic(${prop.name});
}`;
case 'StringEnumTypeAnnotation':
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = toDynamic(${prop.name});
}`;
case 'Int32EnumTypeAnnotation':
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = toDynamic(${prop.name});
}`;
case 'MixedTypeAnnotation':
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = ${prop.name};
}`;
default:
// TODO: Implement diffProps for complex types
return '';
@@ -142,6 +165,10 @@ function generatePropsDiffString(
return `
#ifdef RN_SERIALIZABLE_STATE
ComponentName ${className}::getDiffPropsImplementationTarget() const {
return "${componentName}";
}
folly::dynamic ${className}::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ${className}();
@@ -85,6 +85,8 @@ class ${className} final${extendClasses} {
${props}
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -115,6 +117,12 @@ static inline std::string toString(const ${enumName} &value) {
${toCases}
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ${enumName} &value) {
return toString(value);
}
#endif
`.trim();
const IntEnumTemplate = ({
@@ -122,11 +130,13 @@ const IntEnumTemplate = ({
values,
fromCases,
toCases,
toDynamicCases,
}: {
enumName: string,
values: string,
fromCases: string,
toCases: string,
toDynamicCases: string,
}) =>
`
enum class ${enumName} { ${values} };
@@ -144,19 +154,39 @@ static inline std::string toString(const ${enumName} &value) {
${toCases}
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ${enumName} &value) {
switch (value) {
${toDynamicCases}
}
}
#endif
`.trim();
const StructTemplate = ({
structName,
fields,
fromCases,
toDynamicCases,
}: {
structName: string,
fields: string,
fromCases: string,
toDynamicCases: string,
}) =>
`struct ${structName} {
${fields}
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ${structName}&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
${toDynamicCases}
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ${structName} &result) {
@@ -168,6 +198,12 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
static inline std::string toString(const ${structName} &value) {
return "[Object ${structName}]";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ${structName} &value) {
return value.toDynamic();
}
#endif
`.trim();
const ArrayConversionFunctionTemplate = ({
@@ -401,6 +437,16 @@ function generateIntEnum(
)
.join('\n' + ' ');
const toDynamicCases = values
.map(
value =>
`case ${enumName}::${toIntEnumValueName(
prop.name,
value,
)}: return ${value};`,
)
.join('\n' + ' ');
const valueVariables = values
.map(val => `${toIntEnumValueName(prop.name, val)} = ${val}`)
.join(', ');
@@ -410,6 +456,7 @@ function generateIntEnum(
values: valueVariables,
fromCases,
toCases,
toDynamicCases,
});
}
@@ -701,12 +748,30 @@ function generateStruct(
})
.join('\n ');
const toDynamicCases = properties
.map((property: NamedShape<PropTypeAnnotation>) => {
const name = property.name;
switch (property.typeAnnotation.type) {
case 'BooleanTypeAnnotation':
case 'StringTypeAnnotation':
case 'Int32TypeAnnotation':
case 'DoubleTypeAnnotation':
case 'FloatTypeAnnotation':
case 'MixedTypeAnnotation':
return `result["${name}"] = ${name};`;
default:
return `result["${name}"] = ::facebook::react::toDynamic(${name});`;
}
})
.join('\n ');
structs.set(
structName,
StructTemplate({
structName,
fields,
fromCases,
toDynamicCases,
}),
);
}
@@ -40,6 +40,10 @@ ArrayPropsNativeComponentProps::ArrayPropsNativeComponentProps(
arrayOfMixed(convertRawProp(context, rawProps, \\"arrayOfMixed\\", sourceProps.arrayOfMixed, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ArrayPropsNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"ArrayPropsNativeComponent\\";
}
folly::dynamic ArrayPropsNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ArrayPropsNativeComponentProps();
@@ -51,18 +55,57 @@ folly::dynamic ArrayPropsNativeComponentProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (names != oldProps->names) {
result[\\"names\\"] = toDynamic(names);
}
if (disableds != oldProps->disableds) {
result[\\"disableds\\"] = toDynamic(disableds);
}
if (progress != oldProps->progress) {
result[\\"progress\\"] = toDynamic(progress);
}
if (radii != oldProps->radii) {
result[\\"radii\\"] = toDynamic(radii);
}
if (colors != oldProps->colors) {
result[\\"colors\\"] = toDynamic(colors);
}
if (srcs != oldProps->srcs) {
result[\\"srcs\\"] = toDynamic(srcs);
}
if (points != oldProps->points) {
result[\\"points\\"] = toDynamic(points);
}
if (dimensions != oldProps->dimensions) {
result[\\"dimensions\\"] = toDynamic(dimensions);
}
if (sizes != oldProps->sizes) {
result[\\"sizes\\"] = toDynamic(sizes);
}
if (object != oldProps->object) {
result[\\"object\\"] = toDynamic(object);
}
if (array != oldProps->array) {
result[\\"array\\"] = toDynamic(array);
}
if (arrayOfArrayOfObject != oldProps->arrayOfArrayOfObject) {
result[\\"arrayOfArrayOfObject\\"] = toDynamic(arrayOfArrayOfObject);
}
if (arrayOfMixed != oldProps->arrayOfMixed) {
result[\\"arrayOfMixed\\"] = toDynamic(arrayOfMixed);
}
return result;
}
#endif
@@ -98,6 +141,10 @@ ArrayPropsNativeComponentProps::ArrayPropsNativeComponentProps(
nativePrimitives(convertRawProp(context, rawProps, \\"nativePrimitives\\", sourceProps.nativePrimitives, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ArrayPropsNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"ArrayPropsNativeComponent\\";
}
folly::dynamic ArrayPropsNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ArrayPropsNativeComponentProps();
@@ -109,6 +156,9 @@ folly::dynamic ArrayPropsNativeComponentProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (nativePrimitives != oldProps->nativePrimitives) {
result[\\"nativePrimitives\\"] = toDynamic(nativePrimitives);
}
return result;
}
#endif
@@ -144,6 +194,10 @@ BooleanPropNativeComponentProps::BooleanPropNativeComponentProps(
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {false})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName BooleanPropNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"BooleanPropNativeComponent\\";
}
folly::dynamic BooleanPropNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = BooleanPropNativeComponentProps();
@@ -193,6 +247,10 @@ ColorPropNativeComponentProps::ColorPropNativeComponentProps(
tintColor(convertRawProp(context, rawProps, \\"tintColor\\", sourceProps.tintColor, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ColorPropNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"ColorPropNativeComponent\\";
}
folly::dynamic ColorPropNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ColorPropNativeComponentProps();
@@ -242,6 +300,10 @@ CommandNativeComponentProps::CommandNativeComponentProps(
{}
#ifdef RN_SERIALIZABLE_STATE
ComponentName CommandNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"CommandNativeComponent\\";
}
folly::dynamic CommandNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = CommandNativeComponentProps();
@@ -288,6 +350,10 @@ CommandNativeComponentProps::CommandNativeComponentProps(
accessibilityHint(convertRawProp(context, rawProps, \\"accessibilityHint\\", sourceProps.accessibilityHint, {\\"\\"})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName CommandNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"CommandNativeComponent\\";
}
folly::dynamic CommandNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = CommandNativeComponentProps();
@@ -338,6 +404,10 @@ DimensionPropNativeComponentProps::DimensionPropNativeComponentProps(
marginBack(convertRawProp(context, rawProps, \\"marginBack\\", sourceProps.marginBack, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName DimensionPropNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"DimensionPropNativeComponent\\";
}
folly::dynamic DimensionPropNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = DimensionPropNativeComponentProps();
@@ -349,6 +419,9 @@ folly::dynamic DimensionPropNativeComponentProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (marginBack != oldProps->marginBack) {
result[\\"marginBack\\"] = toDynamic(marginBack);
}
return result;
}
#endif
@@ -389,6 +462,10 @@ DoublePropNativeComponentProps::DoublePropNativeComponentProps(
blurRadius6(convertRawProp(context, rawProps, \\"blurRadius6\\", sourceProps.blurRadius6, {0.0})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName DoublePropNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"DoublePropNativeComponent\\";
}
folly::dynamic DoublePropNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = DoublePropNativeComponentProps();
@@ -458,6 +535,10 @@ EventsNestedObjectNativeComponentProps::EventsNestedObjectNativeComponentProps(
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {false})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName EventsNestedObjectNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"EventsNestedObjectNativeComponent\\";
}
folly::dynamic EventsNestedObjectNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = EventsNestedObjectNativeComponentProps();
@@ -507,6 +588,10 @@ EventsNativeComponentProps::EventsNativeComponentProps(
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {false})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName EventsNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"EventsNativeComponent\\";
}
folly::dynamic EventsNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = EventsNativeComponentProps();
@@ -556,6 +641,10 @@ InterfaceOnlyComponentProps::InterfaceOnlyComponentProps(
{}
#ifdef RN_SERIALIZABLE_STATE
ComponentName InterfaceOnlyComponentProps::getDiffPropsImplementationTarget() const {
return \\"InterfaceOnlyComponent\\";
}
folly::dynamic InterfaceOnlyComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = InterfaceOnlyComponentProps();
@@ -602,6 +691,10 @@ ExcludedAndroidComponentProps::ExcludedAndroidComponentProps(
{}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ExcludedAndroidComponentProps::getDiffPropsImplementationTarget() const {
return \\"ExcludedAndroidComponent\\";
}
folly::dynamic ExcludedAndroidComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ExcludedAndroidComponentProps();
@@ -648,6 +741,10 @@ ExcludedAndroidIosComponentProps::ExcludedAndroidIosComponentProps(
{}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ExcludedAndroidIosComponentProps::getDiffPropsImplementationTarget() const {
return \\"ExcludedAndroidIosComponent\\";
}
folly::dynamic ExcludedAndroidIosComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ExcludedAndroidIosComponentProps();
@@ -694,6 +791,10 @@ ExcludedIosComponentProps::ExcludedIosComponentProps(
{}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ExcludedIosComponentProps::getDiffPropsImplementationTarget() const {
return \\"ExcludedIosComponent\\";
}
folly::dynamic ExcludedIosComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ExcludedIosComponentProps();
@@ -716,6 +817,10 @@ MultiFileIncludedNativeComponentProps::MultiFileIncludedNativeComponentProps(
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {true})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName MultiFileIncludedNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"MultiFileIncludedNativeComponent\\";
}
folly::dynamic MultiFileIncludedNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = MultiFileIncludedNativeComponentProps();
@@ -770,6 +875,10 @@ FloatPropNativeComponentProps::FloatPropNativeComponentProps(
blurRadius6(convertRawProp(context, rawProps, \\"blurRadius6\\", sourceProps.blurRadius6, {0.0})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName FloatPropNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"FloatPropNativeComponent\\";
}
folly::dynamic FloatPropNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = FloatPropNativeComponentProps();
@@ -840,6 +949,10 @@ ImagePropNativeComponentProps::ImagePropNativeComponentProps(
thumbImage(convertRawProp(context, rawProps, \\"thumbImage\\", sourceProps.thumbImage, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ImagePropNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"ImagePropNativeComponent\\";
}
folly::dynamic ImagePropNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ImagePropNativeComponentProps();
@@ -852,7 +965,7 @@ folly::dynamic ImagePropNativeComponentProps::getDiffProps(
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (thumbImage != oldProps->thumbImage) {
result[\\"thumbImage\\"] = thumbImage.toDynamic();
result[\\"thumbImage\\"] = toDynamic(thumbImage);
}
return result;
}
@@ -889,6 +1002,10 @@ InsetsPropNativeComponentProps::InsetsPropNativeComponentProps(
contentInset(convertRawProp(context, rawProps, \\"contentInset\\", sourceProps.contentInset, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName InsetsPropNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"InsetsPropNativeComponent\\";
}
folly::dynamic InsetsPropNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = InsetsPropNativeComponentProps();
@@ -900,6 +1017,9 @@ folly::dynamic InsetsPropNativeComponentProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (contentInset != oldProps->contentInset) {
result[\\"contentInset\\"] = toDynamic(contentInset);
}
return result;
}
#endif
@@ -935,6 +1055,10 @@ Int32EnumPropsNativeComponentProps::Int32EnumPropsNativeComponentProps(
maxInterval(convertRawProp(context, rawProps, \\"maxInterval\\", sourceProps.maxInterval, {Int32EnumPropsNativeComponentMaxInterval::MaxInterval0})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName Int32EnumPropsNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"Int32EnumPropsNativeComponent\\";
}
folly::dynamic Int32EnumPropsNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = Int32EnumPropsNativeComponentProps();
@@ -946,6 +1070,9 @@ folly::dynamic Int32EnumPropsNativeComponentProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (maxInterval != oldProps->maxInterval) {
result[\\"maxInterval\\"] = toDynamic(maxInterval);
}
return result;
}
#endif
@@ -983,6 +1110,10 @@ IntegerPropNativeComponentProps::IntegerPropNativeComponentProps(
progress3(convertRawProp(context, rawProps, \\"progress3\\", sourceProps.progress3, {10})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName IntegerPropNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"IntegerPropNativeComponent\\";
}
folly::dynamic IntegerPropNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = IntegerPropNativeComponentProps();
@@ -1040,6 +1171,10 @@ InterfaceOnlyComponentProps::InterfaceOnlyComponentProps(
accessibilityHint(convertRawProp(context, rawProps, \\"accessibilityHint\\", sourceProps.accessibilityHint, {\\"\\"})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName InterfaceOnlyComponentProps::getDiffPropsImplementationTarget() const {
return \\"InterfaceOnlyComponent\\";
}
folly::dynamic InterfaceOnlyComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = InterfaceOnlyComponentProps();
@@ -1090,6 +1225,10 @@ MixedPropNativeComponentProps::MixedPropNativeComponentProps(
mixedProp(convertRawProp(context, rawProps, \\"mixedProp\\", sourceProps.mixedProp, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName MixedPropNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"MixedPropNativeComponent\\";
}
folly::dynamic MixedPropNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = MixedPropNativeComponentProps();
@@ -1101,6 +1240,9 @@ folly::dynamic MixedPropNativeComponentProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (mixedProp != oldProps->mixedProp) {
result[\\"mixedProp\\"] = mixedProp;
}
return result;
}
#endif
@@ -1140,6 +1282,10 @@ ImageColorPropNativeComponentProps::ImageColorPropNativeComponentProps(
point(convertRawProp(context, rawProps, \\"point\\", sourceProps.point, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ImageColorPropNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"ImageColorPropNativeComponent\\";
}
folly::dynamic ImageColorPropNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ImageColorPropNativeComponentProps();
@@ -1152,7 +1298,7 @@ folly::dynamic ImageColorPropNativeComponentProps::getDiffProps(
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (thumbImage != oldProps->thumbImage) {
result[\\"thumbImage\\"] = thumbImage.toDynamic();
result[\\"thumbImage\\"] = toDynamic(thumbImage);
}
if (color != oldProps->color) {
@@ -1164,10 +1310,7 @@ folly::dynamic ImageColorPropNativeComponentProps::getDiffProps(
}
if (point != oldProps->point) {
folly::dynamic pointResult = folly::dynamic::object();
pointResult[\\"x\\"] = point.x;
pointResult[\\"y\\"] = point.y;
result[\\"point\\"] = pointResult;
result[\\"point\\"] = toDynamic(point);
}
return result;
}
@@ -1204,6 +1347,10 @@ NoPropsNoEventsComponentProps::NoPropsNoEventsComponentProps(
{}
#ifdef RN_SERIALIZABLE_STATE
ComponentName NoPropsNoEventsComponentProps::getDiffPropsImplementationTarget() const {
return \\"NoPropsNoEventsComponent\\";
}
folly::dynamic NoPropsNoEventsComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = NoPropsNoEventsComponentProps();
@@ -1251,6 +1398,10 @@ ObjectPropsProps::ObjectPropsProps(
objectProp(convertRawProp(context, rawProps, \\"objectProp\\", sourceProps.objectProp, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName ObjectPropsProps::getDiffPropsImplementationTarget() const {
return \\"ObjectProps\\";
}
folly::dynamic ObjectPropsProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = ObjectPropsProps();
@@ -1262,6 +1413,9 @@ folly::dynamic ObjectPropsProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (objectProp != oldProps->objectProp) {
result[\\"objectProp\\"] = toDynamic(objectProp);
}
return result;
}
#endif
@@ -1297,6 +1451,10 @@ PointPropNativeComponentProps::PointPropNativeComponentProps(
startPoint(convertRawProp(context, rawProps, \\"startPoint\\", sourceProps.startPoint, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName PointPropNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"PointPropNativeComponent\\";
}
folly::dynamic PointPropNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = PointPropNativeComponentProps();
@@ -1309,10 +1467,7 @@ folly::dynamic PointPropNativeComponentProps::getDiffProps(
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (startPoint != oldProps->startPoint) {
folly::dynamic pointResult = folly::dynamic::object();
pointResult[\\"x\\"] = startPoint.x;
pointResult[\\"y\\"] = startPoint.y;
result[\\"startPoint\\"] = pointResult;
result[\\"startPoint\\"] = toDynamic(startPoint);
}
return result;
}
@@ -1349,6 +1504,10 @@ StringEnumPropsNativeComponentProps::StringEnumPropsNativeComponentProps(
alignment(convertRawProp(context, rawProps, \\"alignment\\", sourceProps.alignment, {StringEnumPropsNativeComponentAlignment::Center})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName StringEnumPropsNativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"StringEnumPropsNativeComponent\\";
}
folly::dynamic StringEnumPropsNativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = StringEnumPropsNativeComponentProps();
@@ -1360,6 +1519,9 @@ folly::dynamic StringEnumPropsNativeComponentProps::getDiffProps(
}
folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps);
if (alignment != oldProps->alignment) {
result[\\"alignment\\"] = toDynamic(alignment);
}
return result;
}
#endif
@@ -1396,6 +1558,10 @@ StringPropComponentProps::StringPropComponentProps(
accessibilityRole(convertRawProp(context, rawProps, \\"accessibilityRole\\", sourceProps.accessibilityRole, {})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName StringPropComponentProps::getDiffPropsImplementationTarget() const {
return \\"StringPropComponent\\";
}
folly::dynamic StringPropComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = StringPropComponentProps();
@@ -1449,6 +1615,10 @@ MultiFile1NativeComponentProps::MultiFile1NativeComponentProps(
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {false})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName MultiFile1NativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"MultiFile1NativeComponent\\";
}
folly::dynamic MultiFile1NativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = MultiFile1NativeComponentProps();
@@ -1474,6 +1644,10 @@ MultiFile2NativeComponentProps::MultiFile2NativeComponentProps(
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {true})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName MultiFile2NativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"MultiFile2NativeComponent\\";
}
folly::dynamic MultiFile2NativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = MultiFile2NativeComponentProps();
@@ -1523,6 +1697,10 @@ MultiComponent1NativeComponentProps::MultiComponent1NativeComponentProps(
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {false})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName MultiComponent1NativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"MultiComponent1NativeComponent\\";
}
folly::dynamic MultiComponent1NativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = MultiComponent1NativeComponentProps();
@@ -1548,6 +1726,10 @@ MultiComponent2NativeComponentProps::MultiComponent2NativeComponentProps(
disabled(convertRawProp(context, rawProps, \\"disabled\\", sourceProps.disabled, {true})) {}
#ifdef RN_SERIALIZABLE_STATE
ComponentName MultiComponent2NativeComponentProps::getDiffPropsImplementationTarget() const {
return \\"MultiComponent2NativeComponent\\";
}
folly::dynamic MultiComponent2NativeComponentProps::getDiffProps(
const Props* prevProps) const {
static const auto defaultProps = MultiComponent2NativeComponentProps();
@@ -16,6 +16,7 @@ Map {
#include <cinttypes>
#include <react/renderer/components/view/ViewProps.h>
#include <react/renderer/core/PropsParserContext.h>
#include <react/renderer/core/graphicsConversions.h>
#include <react/renderer/core/propsConversions.h>
#include <react/renderer/graphics/Color.h>
#include <react/renderer/graphics/Point.h>
@@ -86,6 +87,16 @@ static inline std::string toString(const ArrayPropsNativeComponentSizesMaskWrapp
}
struct ArrayPropsNativeComponentObjectStruct {
std::string stringProp{\\"\\"};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ArrayPropsNativeComponentObjectStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"stringProp\\"] = stringProp;
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ArrayPropsNativeComponentObjectStruct &result) {
@@ -101,6 +112,12 @@ static inline std::string toString(const ArrayPropsNativeComponentObjectStruct &
return \\"[Object ArrayPropsNativeComponentObjectStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ArrayPropsNativeComponentObjectStruct &value) {
return value.toDynamic();
}
#endif
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, std::vector<ArrayPropsNativeComponentObjectStruct> &result) {
auto items = (std::vector<RawValue>)value;
for (const auto &item : items) {
@@ -113,6 +130,16 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
struct ArrayPropsNativeComponentArrayObjectStruct {
std::string stringProp{\\"\\"};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ArrayPropsNativeComponentArrayObjectStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"stringProp\\"] = stringProp;
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ArrayPropsNativeComponentArrayObjectStruct &result) {
@@ -128,6 +155,12 @@ static inline std::string toString(const ArrayPropsNativeComponentArrayObjectStr
return \\"[Object ArrayPropsNativeComponentArrayObjectStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ArrayPropsNativeComponentArrayObjectStruct &value) {
return value.toDynamic();
}
#endif
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, std::vector<ArrayPropsNativeComponentArrayObjectStruct> &result) {
auto items = (std::vector<RawValue>)value;
for (const auto &item : items) {
@@ -140,6 +173,16 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
struct ArrayPropsNativeComponentArrayStruct {
std::vector<ArrayPropsNativeComponentArrayObjectStruct> object{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ArrayPropsNativeComponentArrayStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"object\\"] = ::facebook::react::toDynamic(object);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ArrayPropsNativeComponentArrayStruct &result) {
@@ -155,6 +198,12 @@ static inline std::string toString(const ArrayPropsNativeComponentArrayStruct &v
return \\"[Object ArrayPropsNativeComponentArrayStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ArrayPropsNativeComponentArrayStruct &value) {
return value.toDynamic();
}
#endif
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, std::vector<ArrayPropsNativeComponentArrayStruct> &result) {
auto items = (std::vector<RawValue>)value;
for (const auto &item : items) {
@@ -167,6 +216,16 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
struct ArrayPropsNativeComponentArrayOfArrayOfObjectStruct {
std::string stringProp{\\"\\"};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ArrayPropsNativeComponentArrayOfArrayOfObjectStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"stringProp\\"] = stringProp;
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ArrayPropsNativeComponentArrayOfArrayOfObjectStruct &result) {
@@ -182,6 +241,12 @@ static inline std::string toString(const ArrayPropsNativeComponentArrayOfArrayOf
return \\"[Object ArrayPropsNativeComponentArrayOfArrayOfObjectStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ArrayPropsNativeComponentArrayOfArrayOfObjectStruct &value) {
return value.toDynamic();
}
#endif
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, std::vector<std::vector<ArrayPropsNativeComponentArrayOfArrayOfObjectStruct>> &result) {
auto items = (std::vector<std::vector<RawValue>>)value;
for (const std::vector<RawValue> &item : items) {
@@ -217,6 +282,8 @@ class ArrayPropsNativeComponentProps final : public ViewProps {
std::vector<folly::dynamic> arrayOfMixed{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -254,6 +321,18 @@ struct ArrayPropsNativeComponentNativePrimitivesStruct {
std::vector<SharedColor> colors{};
std::vector<ImageSource> srcs{};
std::vector<Point> points{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ArrayPropsNativeComponentNativePrimitivesStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"colors\\"] = ::facebook::react::toDynamic(colors);
result[\\"srcs\\"] = ::facebook::react::toDynamic(srcs);
result[\\"points\\"] = ::facebook::react::toDynamic(points);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ArrayPropsNativeComponentNativePrimitivesStruct &result) {
@@ -277,6 +356,12 @@ static inline std::string toString(const ArrayPropsNativeComponentNativePrimitiv
return \\"[Object ArrayPropsNativeComponentNativePrimitivesStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ArrayPropsNativeComponentNativePrimitivesStruct &value) {
return value.toDynamic();
}
#endif
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, std::vector<ArrayPropsNativeComponentNativePrimitivesStruct> &result) {
auto items = (std::vector<RawValue>)value;
for (const auto &item : items) {
@@ -296,6 +381,8 @@ class ArrayPropsNativeComponentProps final : public ViewProps {
std::vector<ArrayPropsNativeComponentNativePrimitivesStruct> nativePrimitives{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -333,6 +420,8 @@ class BooleanPropNativeComponentProps final : public ViewProps {
bool disabled{false};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -371,6 +460,8 @@ class ColorPropNativeComponentProps final : public ViewProps {
SharedColor tintColor{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -408,6 +499,8 @@ class CommandNativeComponentProps final : public ViewProps {
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -445,6 +538,8 @@ class CommandNativeComponentProps final : public ViewProps {
std::string accessibilityHint{\\"\\"};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -469,6 +564,7 @@ Map {
#include <react/renderer/components/view/ViewProps.h>
#include <react/renderer/core/PropsParserContext.h>
#include <react/renderer/core/graphicsConversions.h>
#include <yoga/Yoga.h>
namespace facebook::react {
@@ -483,6 +579,8 @@ class DimensionPropNativeComponentProps final : public ViewProps {
YGValue marginBack{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -525,6 +623,8 @@ class DoublePropNativeComponentProps final : public ViewProps {
double blurRadius6{0.0};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -562,6 +662,8 @@ class EventsNestedObjectNativeComponentProps final : public ViewProps {
bool disabled{false};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -599,6 +701,8 @@ class EventsNativeComponentProps final : public ViewProps {
bool disabled{false};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -636,6 +740,8 @@ class InterfaceOnlyComponentProps final : public ViewProps {
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -673,6 +779,8 @@ class ExcludedAndroidComponentProps final : public ViewProps {
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -710,6 +818,8 @@ class ExcludedAndroidIosComponentProps final : public ViewProps {
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -747,6 +857,8 @@ class ExcludedIosComponentProps final : public ViewProps {
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -761,6 +873,8 @@ class MultiFileIncludedNativeComponentProps final : public ViewProps {
bool disabled{true};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -803,6 +917,8 @@ class FloatPropNativeComponentProps final : public ViewProps {
Float blurRadius6{0.0};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -841,6 +957,8 @@ class ImagePropNativeComponentProps final : public ViewProps {
ImageSource thumbImage{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -879,6 +997,8 @@ class InsetsPropNativeComponentProps final : public ViewProps {
EdgeInsets contentInset{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -933,6 +1053,16 @@ static inline std::string toString(const Int32EnumPropsNativeComponentMaxInterva
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const Int32EnumPropsNativeComponentMaxInterval &value) {
switch (value) {
case Int32EnumPropsNativeComponentMaxInterval::MaxInterval0: return 0;
case Int32EnumPropsNativeComponentMaxInterval::MaxInterval1: return 1;
case Int32EnumPropsNativeComponentMaxInterval::MaxInterval2: return 2;
}
}
#endif
class Int32EnumPropsNativeComponentProps final : public ViewProps {
public:
Int32EnumPropsNativeComponentProps() = default;
@@ -943,6 +1073,8 @@ class Int32EnumPropsNativeComponentProps final : public ViewProps {
Int32EnumPropsNativeComponentMaxInterval maxInterval{Int32EnumPropsNativeComponentMaxInterval::MaxInterval0};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -982,6 +1114,8 @@ class IntegerPropNativeComponentProps final : public ViewProps {
int progress3{10};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1019,6 +1153,8 @@ class InterfaceOnlyComponentProps final : public ViewProps {
std::string accessibilityHint{\\"\\"};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1056,6 +1192,8 @@ class MixedPropNativeComponentProps final : public ViewProps {
folly::dynamic mixedProp{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1099,6 +1237,8 @@ class ImageColorPropNativeComponentProps final : public ViewProps {
Point point{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1136,6 +1276,8 @@ class NoPropsNoEventsComponentProps final : public ViewProps {
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1182,6 +1324,12 @@ static inline std::string toString(const ObjectPropsStringEnumProp &value) {
case ObjectPropsStringEnumProp::Option1: return \\"option1\\";
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsStringEnumProp &value) {
return toString(value);
}
#endif
enum class ObjectPropsIntEnumProp { IntEnumProp0 = 0 };
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsIntEnumProp &result) {
@@ -1200,8 +1348,26 @@ static inline std::string toString(const ObjectPropsIntEnumProp &value) {
case ObjectPropsIntEnumProp::IntEnumProp0: return \\"0\\";
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsIntEnumProp &value) {
switch (value) {
case ObjectPropsIntEnumProp::IntEnumProp0: return 0;
}
}
#endif
struct ObjectPropsObjectPropObjectArrayPropStruct {
std::vector<std::string> array{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsObjectPropObjectArrayPropStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"array\\"] = ::facebook::react::toDynamic(array);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsObjectPropObjectArrayPropStruct &result) {
@@ -1217,10 +1383,28 @@ static inline std::string toString(const ObjectPropsObjectPropObjectArrayPropStr
return \\"[Object ObjectPropsObjectPropObjectArrayPropStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsObjectPropObjectArrayPropStruct &value) {
return value.toDynamic();
}
#endif
struct ObjectPropsObjectPropObjectPrimitiveRequiredPropStruct {
ImageSource image{};
SharedColor color{};
Point point{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsObjectPropObjectPrimitiveRequiredPropStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"image\\"] = ::facebook::react::toDynamic(image);
result[\\"color\\"] = ::facebook::react::toDynamic(color);
result[\\"point\\"] = ::facebook::react::toDynamic(point);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsObjectPropObjectPrimitiveRequiredPropStruct &result) {
@@ -1244,8 +1428,24 @@ static inline std::string toString(const ObjectPropsObjectPropObjectPrimitiveReq
return \\"[Object ObjectPropsObjectPropObjectPrimitiveRequiredPropStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsObjectPropObjectPrimitiveRequiredPropStruct &value) {
return value.toDynamic();
}
#endif
struct ObjectPropsObjectPropNestedPropANestedPropBStruct {
std::string nestedPropC{\\"\\"};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsObjectPropNestedPropANestedPropBStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"nestedPropC\\"] = nestedPropC;
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsObjectPropNestedPropANestedPropBStruct &result) {
@@ -1261,8 +1461,24 @@ static inline std::string toString(const ObjectPropsObjectPropNestedPropANestedP
return \\"[Object ObjectPropsObjectPropNestedPropANestedPropBStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsObjectPropNestedPropANestedPropBStruct &value) {
return value.toDynamic();
}
#endif
struct ObjectPropsObjectPropNestedPropAStruct {
ObjectPropsObjectPropNestedPropANestedPropBStruct nestedPropB{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsObjectPropNestedPropAStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"nestedPropB\\"] = ::facebook::react::toDynamic(nestedPropB);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsObjectPropNestedPropAStruct &result) {
@@ -1278,8 +1494,24 @@ static inline std::string toString(const ObjectPropsObjectPropNestedPropAStruct
return \\"[Object ObjectPropsObjectPropNestedPropAStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsObjectPropNestedPropAStruct &value) {
return value.toDynamic();
}
#endif
struct ObjectPropsObjectPropNestedArrayAsPropertyArrayPropStruct {
std::string stringProp{\\"\\"};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsObjectPropNestedArrayAsPropertyArrayPropStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"stringProp\\"] = stringProp;
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsObjectPropNestedArrayAsPropertyArrayPropStruct &result) {
@@ -1295,6 +1527,12 @@ static inline std::string toString(const ObjectPropsObjectPropNestedArrayAsPrope
return \\"[Object ObjectPropsObjectPropNestedArrayAsPropertyArrayPropStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsObjectPropNestedArrayAsPropertyArrayPropStruct &value) {
return value.toDynamic();
}
#endif
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, std::vector<ObjectPropsObjectPropNestedArrayAsPropertyArrayPropStruct> &result) {
auto items = (std::vector<RawValue>)value;
for (const auto &item : items) {
@@ -1307,6 +1545,16 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
struct ObjectPropsObjectPropNestedArrayAsPropertyStruct {
std::vector<ObjectPropsObjectPropNestedArrayAsPropertyArrayPropStruct> arrayProp{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsObjectPropNestedArrayAsPropertyStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"arrayProp\\"] = ::facebook::react::toDynamic(arrayProp);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsObjectPropNestedArrayAsPropertyStruct &result) {
@@ -1322,6 +1570,12 @@ static inline std::string toString(const ObjectPropsObjectPropNestedArrayAsPrope
return \\"[Object ObjectPropsObjectPropNestedArrayAsPropertyStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsObjectPropNestedArrayAsPropertyStruct &value) {
return value.toDynamic();
}
#endif
struct ObjectPropsObjectPropStruct {
std::string stringProp{\\"\\"};
bool booleanProp{false};
@@ -1337,6 +1591,29 @@ struct ObjectPropsObjectPropStruct {
ObjectPropsObjectPropObjectPrimitiveRequiredPropStruct objectPrimitiveRequiredProp{};
ObjectPropsObjectPropNestedPropAStruct nestedPropA{};
ObjectPropsObjectPropNestedArrayAsPropertyStruct nestedArrayAsProperty{};
#ifdef RN_SERIALIZABLE_STATE
bool operator==(const ObjectPropsObjectPropStruct&) const = default;
folly::dynamic toDynamic() const {
folly::dynamic result = folly::dynamic::object();
result[\\"stringProp\\"] = stringProp;
result[\\"booleanProp\\"] = booleanProp;
result[\\"floatProp\\"] = floatProp;
result[\\"intProp\\"] = intProp;
result[\\"stringUserDefaultProp\\"] = stringUserDefaultProp;
result[\\"booleanUserDefaultProp\\"] = booleanUserDefaultProp;
result[\\"floatUserDefaultProp\\"] = floatUserDefaultProp;
result[\\"intUserDefaultProp\\"] = intUserDefaultProp;
result[\\"stringEnumProp\\"] = ::facebook::react::toDynamic(stringEnumProp);
result[\\"intEnumProp\\"] = ::facebook::react::toDynamic(intEnumProp);
result[\\"objectArrayProp\\"] = ::facebook::react::toDynamic(objectArrayProp);
result[\\"objectPrimitiveRequiredProp\\"] = ::facebook::react::toDynamic(objectPrimitiveRequiredProp);
result[\\"nestedPropA\\"] = ::facebook::react::toDynamic(nestedPropA);
result[\\"nestedArrayAsProperty\\"] = ::facebook::react::toDynamic(nestedArrayAsProperty);
return result;
}
#endif
};
static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, ObjectPropsObjectPropStruct &result) {
@@ -1403,6 +1680,12 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
static inline std::string toString(const ObjectPropsObjectPropStruct &value) {
return \\"[Object ObjectPropsObjectPropStruct]\\";
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const ObjectPropsObjectPropStruct &value) {
return value.toDynamic();
}
#endif
class ObjectPropsProps final : public ViewProps {
public:
ObjectPropsProps() = default;
@@ -1413,6 +1696,8 @@ class ObjectPropsProps final : public ViewProps {
ObjectPropsObjectPropStruct objectProp{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1451,6 +1736,8 @@ class PointPropNativeComponentProps final : public ViewProps {
Point startPoint{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1496,6 +1783,12 @@ static inline std::string toString(const StringEnumPropsNativeComponentAlignment
}
}
#ifdef RN_SERIALIZABLE_STATE
static inline folly::dynamic toDynamic(const StringEnumPropsNativeComponentAlignment &value) {
return toString(value);
}
#endif
class StringEnumPropsNativeComponentProps final : public ViewProps {
public:
StringEnumPropsNativeComponentProps() = default;
@@ -1506,6 +1799,8 @@ class StringEnumPropsNativeComponentProps final : public ViewProps {
StringEnumPropsNativeComponentAlignment alignment{StringEnumPropsNativeComponentAlignment::Center};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1544,6 +1839,8 @@ class StringPropComponentProps final : public ViewProps {
std::string accessibilityRole{};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1581,6 +1878,8 @@ class MultiFile1NativeComponentProps final : public ViewProps {
bool disabled{false};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1595,6 +1894,8 @@ class MultiFile2NativeComponentProps final : public ViewProps {
bool disabled{true};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1632,6 +1933,8 @@ class MultiComponent1NativeComponentProps final : public ViewProps {
bool disabled{false};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
@@ -1646,6 +1949,8 @@ class MultiComponent2NativeComponentProps final : public ViewProps {
bool disabled{true};
#ifdef RN_SERIALIZABLE_STATE
ComponentName getDiffPropsImplementationTarget() const override;
folly::dynamic getDiffProps(const Props* prevProps) const override;
#endif
};
+1 -1
View File
@@ -105,7 +105,7 @@ function reportException(
// we feed back into console.error, to make sure any methods that are
// monkey patched on top of console.error are called when coming from
// handleException
console.error(data.message);
console.error(e);
}
if (__DEV__) {
@@ -133,7 +133,7 @@ function runExceptionsManagerTests() {
);
expect(exceptionData.isFatal).toBe(false);
expect(logToConsoleInReact).toBe(false);
expect(console.error).toBeCalledWith(formattedMessage);
expect(console.error).toBeCalledWith(error);
});
test('does not pop frames off the stack with framesToPop', () => {
@@ -163,16 +163,10 @@ function runExceptionsManagerTests() {
expect(nativeReportException).toBeCalledTimes(1);
exceptionData = nativeReportException.mock.calls[0][0];
}
const formattedMessage =
'Error: ' +
error.message +
'\n\n' +
'This error is located at:' +
capturedErrorDefaults.componentStack;
expect(getLineFromFrame(exceptionData.stack[0])).toBe(
"const error = new Error('Some error happened');",
);
expect(console.error).toBeCalledWith(formattedMessage);
expect(console.error).toBeCalledWith(error);
});
test('wraps string in an Error and sends to handleException', () => {
@@ -211,7 +205,13 @@ function runExceptionsManagerTests() {
);
expect(exceptionData.isFatal).toBe(false);
expect(logToConsoleInReact).toBe(false);
expect(console.error).toBeCalledWith(formattedMessage);
expect(console.error).toBeCalledTimes(1);
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0][0]).toBeInstanceOf(
ExceptionsManager.SyntheticError,
);
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0][0].toString()).toBe(message);
});
test('reports "Unspecified error" if error is null', () => {
@@ -249,7 +249,15 @@ function runExceptionsManagerTests() {
);
expect(exceptionData.isFatal).toBe(false);
expect(logToConsoleInReact).toBe(false);
expect(console.error).toBeCalledWith(formattedMessage);
expect(console.error).toBeCalledTimes(1);
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0][0]).toBeInstanceOf(
ExceptionsManager.SyntheticError,
);
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0][0].toString()).toBe(
'Unspecified error',
);
});
test('works with a frozen error object', () => {
@@ -280,7 +288,7 @@ function runExceptionsManagerTests() {
// No component stack.
const formattedMessage = 'Error: ' + error.message;
expect(exceptionData.message).toBe(formattedMessage);
expect(console.error).toBeCalledWith(formattedMessage);
expect(console.error).toBeCalledWith(error);
});
test('does not mutate the message', () => {
@@ -312,7 +320,7 @@ function runExceptionsManagerTests() {
'This error is located at:' +
capturedErrorDefaults.componentStack;
expect(exceptionData.message).toBe(formattedMessage);
expect(console.error).toBeCalledWith(formattedMessage);
expect(console.error).toBeCalledWith(error);
});
test('can safely process the same error multiple times', () => {
@@ -360,7 +368,7 @@ function runExceptionsManagerTests() {
);
expect(exceptionData.isFatal).toBe(false);
expect(logToConsoleInReact).toBe(false);
expect(console.error).toBeCalledWith(formattedMessage);
expect(console.error).toBeCalledWith(error);
}
});
});
@@ -664,7 +672,7 @@ function runExceptionsManagerTests() {
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0]).toHaveLength(1);
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0][0]).toBe(formattedMessage);
expect(console.error.mock.calls[0][0]).toBe(error);
});
test('handling a non-fatal Error', () => {
@@ -697,7 +705,7 @@ function runExceptionsManagerTests() {
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0]).toHaveLength(1);
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0][0]).toBe(formattedMessage);
expect(console.error.mock.calls[0][0]).toBe(error);
});
test('handling a thrown string', () => {
@@ -726,7 +734,11 @@ function runExceptionsManagerTests() {
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0]).toHaveLength(1);
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0]).toEqual([message]);
expect(console.error.mock.calls[0][0]).toBeInstanceOf(
ExceptionsManager.SyntheticError,
);
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0][0].toString()).toBe(message);
});
test('does not pop frames off the stack with framesToPop', () => {
@@ -759,9 +771,7 @@ function runExceptionsManagerTests() {
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0]).toHaveLength(1);
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0]).toEqual([
'Error: ' + error.message,
]);
expect(console.error.mock.calls[0][0]).toBe(error);
});
test('logs fatal "warn"-type errors', () => {
@@ -783,19 +793,17 @@ function runExceptionsManagerTests() {
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0]).toHaveLength(1);
// $FlowFixMe[prop-missing]
expect(console.error.mock.calls[0]).toEqual([
'Error: ' + error.message,
]);
expect(console.error.mock.calls[0][0]).toBe(error);
});
});
describe('unstable_setExceptionDecorator', () => {
let mockError;
let mockConsoleError;
beforeEach(() => {
// NOTE: We initialise a fresh mock every time using spyOn, above.
// We can't use `console._errorOriginal` for this, because that's a bound
// (=wrapped) version of the mock and Jest does not approve.
mockError = console.error;
mockConsoleError = console.error;
ExceptionsManager.installConsoleErrorReporter();
});
@@ -861,15 +869,11 @@ function runExceptionsManagerTests() {
...beforeDecorator,
message: 'decorated: ' + beforeDecorator.message,
});
expect(mockError).toBeCalledTimes(2);
expect(mockConsoleError).toBeCalledTimes(2);
// $FlowFixMe[prop-missing]
expect(mockError.mock.calls[0][0]).toEqual(
'Error: Some error happened',
);
expect(mockConsoleError.mock.calls[0][0]).toBe(error);
// $FlowFixMe[prop-missing]
expect(mockError.mock.calls[1][0]).toMatch(
'decorated: Error: Some error happened',
);
expect(mockConsoleError.mock.calls[1][0]).toBe(error);
});
test('clearing a decorator', () => {
@@ -893,11 +897,9 @@ function runExceptionsManagerTests() {
expect(logBoxAddException).not.toBeCalled();
expect(nativeReportException).toBeCalledTimes(1);
}
expect(mockError).toBeCalledTimes(1);
expect(mockConsoleError).toBeCalledTimes(1);
// $FlowFixMe[prop-missing]
expect(mockError.mock.calls[0][0]).toEqual(
'Error: Some error happened',
);
expect(mockConsoleError.mock.calls[0][0]).toBe(error);
});
test('prevents decorator recursion from error handler', () => {
@@ -928,15 +930,13 @@ function runExceptionsManagerTests() {
/decorated: .*Some error happened/,
);
}
expect(mockError).toBeCalledTimes(2);
expect(mockConsoleError).toBeCalledTimes(2);
// $FlowFixMe[prop-missing]
expect(mockError.mock.calls[0][0]).toMatch(
expect(mockConsoleError.mock.calls[0][0]).toMatch(
/Logging an error within the decorator/,
);
// $FlowFixMe[prop-missing]
expect(mockError.mock.calls[1][0]).toMatch(
/decorated: .*Some error happened/,
);
expect(mockConsoleError.mock.calls[1][0]).toBe(error);
});
test('prevents decorator recursion from console.error', () => {
@@ -974,14 +974,14 @@ function runExceptionsManagerTests() {
/decorated: .*Some error happened/,
);
}
expect(mockError).toBeCalledTimes(2);
expect(mockConsoleError).toBeCalledTimes(2);
// console.error calls are chained without exception pre-processing, so decorator doesn't apply
// $FlowFixMe[prop-missing]
expect(mockError.mock.calls[0][0].toString()).toMatch(
expect(mockConsoleError.mock.calls[0][0].toString()).toMatch(
/Error: Some error happened/,
);
// $FlowFixMe[prop-missing]
expect(mockError.mock.calls[1][0]).toMatch(
expect(mockConsoleError.mock.calls[1][0]).toMatch(
/Logging an error within the decorator/,
);
});
@@ -1012,11 +1012,9 @@ function runExceptionsManagerTests() {
/Error: Some error happened/,
);
}
expect(mockError).toBeCalledTimes(1);
expect(mockConsoleError).toBeCalledTimes(1);
// $FlowFixMe[prop-missing]
expect(mockError.mock.calls[0][0]).toMatch(
/Error: Some error happened/,
);
expect(mockConsoleError.mock.calls[0][0]).toBe(error);
});
test('can handle throwing decorators recursion when exception is logged', () => {
@@ -1044,9 +1042,9 @@ function runExceptionsManagerTests() {
/Error: Some error happened/,
);
}
expect(mockError).toBeCalledTimes(1);
expect(mockConsoleError).toBeCalledTimes(1);
// $FlowFixMe[prop-missing]
expect(mockError.mock.calls[0][0].toString()).toMatch(
expect(mockConsoleError.mock.calls[0][0].toString()).toMatch(
/Error: Some error happened/,
);
});
@@ -9,8 +9,8 @@
*/
'use strict';
import type {StackFrame} from '../../../Core/NativeExceptionsManager';
import type {ExtendedExceptionData} from '../parseLogBoxLog';
const {
parseLogBoxException,
@@ -296,7 +296,7 @@ describe('parseLogBoxLog', () => {
});
it('parses a babel transform syntax error', () => {
const error = {
const error: ExtendedExceptionData = {
message: `
197 | });
@@ -344,7 +344,7 @@ describe('parseLogBoxLog', () => {
});
it('parses an invalid require syntax error', () => {
const error = {
const error: ExtendedExceptionData = {
message: `Unable to resolve module \`ListCellx\` from /path/to/file.js: ListCellx could not be found within the project.
If you are sure the module exists, try these steps:
@@ -414,7 +414,7 @@ If you are sure the module exists, try these steps:
});
it('parses a reference error', () => {
const error = {
const error: ExtendedExceptionData = {
message: `
197 | });
@@ -462,7 +462,7 @@ If you are sure the module exists, try these steps:
});
it('parses a babel codeframe error', () => {
const error = {
const error: ExtendedExceptionData = {
message: `TransformError RKJSModules/Apps/CrashReact/CrashReactApp.js: /path/to/RKJSModules/Apps/CrashReact/CrashReactApp.js: The first argument to \`fbRemoteAsset\` is "null_state_glyphs", but the requested asset is missing from the local metadata. Either the asset does not exist or the metadata is not up-to-date.
Please follow the instructions at: fburl.com/rn-remote-assets
@@ -514,7 +514,7 @@ Please follow the instructions at: fburl.com/rn-remote-assets`,
});
it('parses a babel codeframe error with ansi', () => {
const error = {
const error: ExtendedExceptionData = {
message: `TransformError RKJSModules/Apps/CrashReact/CrashReactApp.js: /path/to/RKJSModules/Apps/CrashReact/CrashReactApp.js: The first argument to \`fbRemoteAsset\` is "null_state_glyphs", but the requested asset is missing from the local metadata. Either the asset does not exist or the metadata is not up-to-date.
Please follow the instructions at: fburl.com/rn-remote-assets
@@ -8,7 +8,7 @@
* @format
*/
import type {PartialAttributeConfiguration as AttributeConfiguration} from '../../Renderer/shims/ReactNativeTypes';
import type {AttributeConfiguration} from '../../Renderer/shims/ReactNativeTypes';
import flattenStyle from '../../StyleSheet/flattenStyle';
import deepDiffer from '../../Utilities/differ/deepDiffer';
@@ -10,7 +10,7 @@
'use strict';
import type {PartialAttributeConfiguration as AttributeConfiguration} from '../../../Renderer/shims/ReactNativeTypes';
import type {AttributeConfiguration} from '../../../Renderer/shims/ReactNativeTypes';
const {create, diff} = require('../ReactNativeAttributePayload');
@@ -7,7 +7,7 @@
* @noformat
* @nolint
* @flow strict
* @generated SignedSource<<4216c04f5a8c40a833b0146588fab5fa>>
* @generated SignedSource<<6166de7ecbfb5d83e56c11a3b6cde9ba>>
*/
import type {
@@ -35,15 +35,6 @@ export type AttributeType<T, V> =
export type AnyAttributeType = AttributeType<$FlowFixMe, $FlowFixMe>;
export type AttributeConfiguration = $ReadOnly<{
[propName: string]: AnyAttributeType,
style: $ReadOnly<{
[propName: string]: AnyAttributeType,
...
}>,
...
}>;
export type PartialAttributeConfiguration = $ReadOnly<{
[propName: string]: AnyAttributeType,
style?: $ReadOnly<{
[propName: string]: AnyAttributeType,
@@ -84,7 +75,7 @@ export type PartialViewConfig = $ReadOnly<{
directEventTypes?: ViewConfig['directEventTypes'],
supportsRawText?: boolean,
uiViewClassName: string,
validAttributes?: PartialAttributeConfiguration,
validAttributes?: AttributeConfiguration,
}>;
type InspectorDataProps = $ReadOnly<{
@@ -8,6 +8,8 @@
* @format
*/
import type {BackgroundImageValue} from '../StyleSheetTypes';
import processBackgroundImage from '../processBackgroundImage';
const {OS} = require('../../Utilities/Platform').default;
@@ -121,7 +123,7 @@ describe('processBackgroundImage', () => {
});
it('should process a linear gradient object style with case-insensitive direction keyword', () => {
const input = [
const input: $ReadOnlyArray<BackgroundImageValue> | string = [
{
type: 'linear-gradient' as const,
direction: 'To Bottom',
@@ -138,7 +140,7 @@ describe('processBackgroundImage', () => {
});
it('should process a linear gradient object style with case-insensitive angle', () => {
const input = [
const input: $ReadOnlyArray<BackgroundImageValue> | string = [
{
type: 'linear-gradient' as const,
direction: '45DEG',
@@ -350,7 +352,7 @@ describe('processBackgroundImage', () => {
});
it('should process an array of style objects', () => {
const input = [
const input: $ReadOnlyArray<BackgroundImageValue> | string = [
{
type: 'linear-gradient' as const,
direction: 'to bottom right',
@@ -374,7 +376,7 @@ describe('processBackgroundImage', () => {
});
it('should process an style object with default direction', () => {
const input = [
const input: $ReadOnlyArray<BackgroundImageValue> | string = [
{
type: 'linear-gradient' as const,
colorStops: [{color: 'red'}, {color: 'blue'}],
@@ -388,7 +390,7 @@ describe('processBackgroundImage', () => {
});
it('should process style object with direction enum', () => {
const input = [
const input: $ReadOnlyArray<BackgroundImageValue> | string = [
{
type: 'linear-gradient' as const,
direction: 'to right',
@@ -403,7 +405,7 @@ describe('processBackgroundImage', () => {
});
it('should process style object with direction angle', () => {
const input = [
const input: $ReadOnlyArray<BackgroundImageValue> | string = [
{
type: 'linear-gradient' as const,
direction: '45deg',
@@ -418,7 +420,7 @@ describe('processBackgroundImage', () => {
});
it('should fix up stop positions #1', () => {
const input = [
const input: $ReadOnlyArray<BackgroundImageValue> | string = [
{
type: 'linear-gradient' as const,
colorStops: [
@@ -456,7 +458,7 @@ describe('processBackgroundImage', () => {
});
it('should process multiple stop positions', () => {
const input = [
const input: $ReadOnlyArray<BackgroundImageValue> | string = [
{
type: 'linear-gradient' as const,
colorStops: [
@@ -493,7 +495,7 @@ describe('processBackgroundImage', () => {
});
it('should fix up stop positions #2', () => {
const input = [
const input: $ReadOnlyArray<BackgroundImageValue> | string = [
{
type: 'linear-gradient' as const,
colorStops: [
@@ -526,7 +528,7 @@ describe('processBackgroundImage', () => {
});
it('should fix up stop positions #3', () => {
const input = [
const input: $ReadOnlyArray<BackgroundImageValue> | string = [
{
type: 'linear-gradient' as const,
colorStops: [
@@ -559,7 +561,7 @@ describe('processBackgroundImage', () => {
});
it('should fix up stop positions #4', () => {
const input = [
const input: $ReadOnlyArray<BackgroundImageValue> | string = [
{
type: 'linear-gradient' as const,
colorStops: [
@@ -1,44 +0,0 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.react.bridge;
import android.app.Activity;
import androidx.annotation.Nullable;
import com.facebook.infer.annotation.Nullsafe;
/**
* Base class for Catalyst native modules that require access to the {@link ReactContext} instance.
*/
@Nullsafe(Nullsafe.Mode.LOCAL)
public abstract class ReactContextBaseJavaModule extends BaseJavaModule {
public ReactContextBaseJavaModule() {
super(null);
}
public ReactContextBaseJavaModule(@Nullable ReactApplicationContext reactContext) {
super(reactContext);
}
/**
* Get the activity to which this context is currently attached, or {@code null} if not attached.
*
* <p>DO NOT HOLD LONG-LIVED REFERENCES TO THE OBJECT RETURNED BY THIS METHOD, AS THIS WILL CAUSE
* MEMORY LEAKS.
*
* <p>For example, never store the value returned by this method in a member variable. Instead,
* call this method whenever you actually need the Activity and make sure to check for {@code
* null}.
*
* @deprecated "Use 'getReactApplicationContext.getCurrentActivity() instead."
*/
@Deprecated(forRemoval = true, since = "0.80.0")
protected @Nullable final Activity getCurrentActivity() {
return getReactApplicationContext().getCurrentActivity();
}
}
@@ -0,0 +1,33 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.react.bridge
import android.app.Activity
/** Base class for Catalyst native modules that require access to the [ReactContext] instance. */
public abstract class ReactContextBaseJavaModule : BaseJavaModule {
public constructor() : super(null)
public constructor(reactContext: ReactApplicationContext?) : super(reactContext)
/**
* Get the activity to which this context is currently attached, or `null` if not attached.
*
* DO NOT HOLD LONG-LIVED REFERENCES TO THE OBJECT RETURNED BY THIS METHOD, AS THIS WILL CAUSE
* MEMORY LEAKS.
*
* For example, never store the value returned by this method in a member variable. Instead, call
* this method whenever you actually need the Activity and make sure to check for `null`.
*/
@Deprecated(
"Deprecated in 0.80.0. Use getReactApplicationContext.getCurrentActivity() instead.",
ReplaceWith("reactApplicationContext.currentActivity"))
protected fun getCurrentActivity(): Activity? {
return reactApplicationContext.currentActivity
}
}
@@ -9,10 +9,8 @@
#include <string>
namespace facebook {
namespace gloginit {
namespace facebook::gloginit {
void initialize(const char* tag = "ReactNativeJNI");
}
} // namespace facebook
@@ -9,9 +9,7 @@
#include <hermes/hermes.h>
namespace facebook {
namespace jsi {
namespace jni {
namespace facebook::jsi::jni {
void HermesSamplingProfiler::enable(jni::alias_ref<jclass>) {
auto* hermesAPI =
@@ -43,6 +41,4 @@ void HermesSamplingProfiler::registerNatives() {
});
}
} // namespace jni
} // namespace jsi
} // namespace facebook
} // namespace facebook::jsi::jni
@@ -11,9 +11,7 @@
#include <fbjni/fbjni.h>
#include <jsi/jsi.h>
namespace facebook {
namespace jsi {
namespace jni {
namespace facebook::jsi::jni {
namespace jni = ::facebook::jni;
@@ -33,8 +31,6 @@ class HermesSamplingProfiler : public jni::JavaClass<HermesSamplingProfiler> {
HermesSamplingProfiler();
};
} // namespace jni
} // namespace jsi
} // namespace facebook
} // namespace facebook::jsi::jni
#endif /* HERMESSAMPLINGPROFILER_H_ */
@@ -18,8 +18,7 @@
#include <sstream>
#include <thread>
namespace facebook {
namespace jsc {
namespace facebook::jsc {
namespace detail {
class ArgsConverter;
@@ -1582,5 +1581,4 @@ std::unique_ptr<jsi::Runtime> makeJSCRuntime() {
return std::make_unique<JSCRuntime>();
}
} // namespace jsc
} // namespace facebook
} // namespace facebook::jsc
@@ -10,10 +10,8 @@
#include <jsi/jsi.h>
#include <memory.h>
namespace facebook {
namespace jsc {
namespace facebook::jsc {
std::unique_ptr<jsi::Runtime> makeJSCRuntime();
} // namespace jsc
} // namespace facebook
} // namespace facebook::jsc
@@ -28,19 +28,21 @@ PerformanceTracer::PerformanceTracer()
bool PerformanceTracer::startTracing() {
{
std::lock_guard lock(mutex_);
if (tracing_) {
std::lock_guard lock(tracingMutex_);
if (isTracing()) {
return false;
}
tracing_ = true;
}
reportProcess(processId_, "React Native");
{
std::lock_guard lock(mutex_);
buffer_.push_back(TraceEvent{
std::lock_guard lock(tracingMutex_);
if (!isTracing()) {
return false;
}
buffer_.emplace_back(TraceEvent{
.name = "TracingStartedInPage",
.cat = "disabled-by-default-devtools.timeline",
.ph = 'I',
@@ -49,16 +51,17 @@ bool PerformanceTracer::startTracing() {
.tid = oscompat::getCurrentThreadId(),
.args = folly::dynamic::object("data", folly::dynamic::object()),
});
return true;
}
return true;
}
bool PerformanceTracer::stopTracing() {
std::lock_guard lock(mutex_);
if (!tracing_) {
std::lock_guard lock(tracingMutex_);
if (!isTracing()) {
return false;
}
tracing_ = false;
// This is synthetic Trace Event, which should not be represented on a
// timeline. CDT is not using Profile or ProfileChunk events for determining
@@ -66,7 +69,7 @@ bool PerformanceTracer::stopTracing() {
// samples will be displayed as empty. We use this event to avoid that.
// This could happen for non-bridgeless apps, where Performance interface is
// not supported and no spec-compliant Event Loop implementation.
buffer_.push_back(TraceEvent{
buffer_.emplace_back(TraceEvent{
.name = "ReactNative-TracingStopped",
.cat = "disabled-by-default-devtools.timeline",
.ph = 'I',
@@ -75,8 +78,8 @@ bool PerformanceTracer::stopTracing() {
.tid = oscompat::getCurrentThreadId(),
});
// Potential increments of this counter are covered by tracing_ atomic flag.
performanceMeasureCount_ = 0;
tracing_ = false;
return true;
}
@@ -84,42 +87,44 @@ void PerformanceTracer::collectEvents(
const std::function<void(const folly::dynamic& eventsChunk)>&
resultCallback,
uint16_t chunkSize) {
std::lock_guard lock(mutex_);
std::vector<TraceEvent> localBuffer;
{
std::lock_guard lock(tracingMutex_);
buffer_.swap(localBuffer);
}
if (buffer_.empty()) {
if (localBuffer.empty()) {
return;
}
auto traceEvents = folly::dynamic::array();
for (auto event : buffer_) {
auto serializedTraceEvents = folly::dynamic::array();
for (auto&& event : localBuffer) {
// Emit trace events
traceEvents.push_back(serializeTraceEvent(event));
serializedTraceEvents.push_back(serializeTraceEvent(std::move(event)));
if (traceEvents.size() == chunkSize) {
resultCallback(traceEvents);
traceEvents = folly::dynamic::array();
if (serializedTraceEvents.size() == chunkSize) {
resultCallback(serializedTraceEvents);
serializedTraceEvents = folly::dynamic::array();
}
}
if (!traceEvents.empty()) {
resultCallback(traceEvents);
if (!serializedTraceEvents.empty()) {
resultCallback(serializedTraceEvents);
}
buffer_.clear();
}
void PerformanceTracer::reportMark(
const std::string_view& name,
HighResTimeStamp start) {
if (!tracing_) {
if (!isTracing()) {
return;
}
std::lock_guard<std::mutex> lock(mutex_);
if (!tracing_) {
std::lock_guard<std::mutex> lock(tracingMutex_);
if (!isTracing()) {
return;
}
buffer_.push_back(TraceEvent{
buffer_.emplace_back(TraceEvent{
.name = std::string(name),
.cat = "blink.user_timing",
.ph = 'I',
@@ -134,12 +139,7 @@ void PerformanceTracer::reportMeasure(
HighResTimeStamp start,
HighResDuration duration,
const std::optional<DevToolsTrackEntryPayload>& trackMetadata) {
if (!tracing_) {
return;
}
std::lock_guard<std::mutex> lock(mutex_);
if (!tracing_) {
if (!isTracing()) {
return;
}
@@ -152,10 +152,16 @@ void PerformanceTracer::reportMeasure(
folly::dynamic::object("detail", folly::toJson(devtoolsObject));
}
++performanceMeasureCount_;
auto currentThreadId = oscompat::getCurrentThreadId();
buffer_.push_back(TraceEvent{
.id = performanceMeasureCount_,
std::lock_guard<std::mutex> lock(tracingMutex_);
if (!isTracing()) {
return;
}
auto eventId = ++performanceMeasureCount_;
buffer_.emplace_back(TraceEvent{
.id = eventId,
.name = std::string(name),
.cat = "blink.user_timing",
.ph = 'b',
@@ -164,8 +170,8 @@ void PerformanceTracer::reportMeasure(
.tid = currentThreadId,
.args = beginEventArgs,
});
buffer_.push_back(TraceEvent{
.id = performanceMeasureCount_,
buffer_.emplace_back(TraceEvent{
.id = eventId,
.name = std::string(name),
.cat = "blink.user_timing",
.ph = 'e',
@@ -176,16 +182,16 @@ void PerformanceTracer::reportMeasure(
}
void PerformanceTracer::reportProcess(uint64_t id, const std::string& name) {
if (!tracing_) {
if (!isTracing()) {
return;
}
std::lock_guard<std::mutex> lock(mutex_);
if (!tracing_) {
std::lock_guard<std::mutex> lock(tracingMutex_);
if (!isTracing()) {
return;
}
buffer_.push_back(TraceEvent{
buffer_.emplace_back(TraceEvent{
.name = "process_name",
.cat = "__metadata",
.ph = 'M',
@@ -201,16 +207,16 @@ void PerformanceTracer::reportJavaScriptThread() {
}
void PerformanceTracer::reportThread(uint64_t id, const std::string& name) {
if (!tracing_) {
if (!isTracing()) {
return;
}
std::lock_guard<std::mutex> lock(mutex_);
if (!tracing_) {
std::lock_guard<std::mutex> lock(tracingMutex_);
if (!isTracing()) {
return;
}
buffer_.push_back(TraceEvent{
buffer_.emplace_back(TraceEvent{
.name = "thread_name",
.cat = "__metadata",
.ph = 'M',
@@ -225,7 +231,7 @@ void PerformanceTracer::reportThread(uint64_t id, const std::string& name) {
// no timeline events or user timings. We use this event to avoid that.
// This could happen for non-bridgeless apps, where Performance interface is
// not supported and no spec-compliant Event Loop implementation.
buffer_.push_back(TraceEvent{
buffer_.emplace_back(TraceEvent{
.name = "ReactNative-ThreadRegistered",
.cat = "disabled-by-default-devtools.timeline",
.ph = 'I',
@@ -238,16 +244,16 @@ void PerformanceTracer::reportThread(uint64_t id, const std::string& name) {
void PerformanceTracer::reportEventLoopTask(
HighResTimeStamp start,
HighResTimeStamp end) {
if (!tracing_) {
if (!isTracing()) {
return;
}
std::lock_guard lock(mutex_);
if (!tracing_) {
std::lock_guard<std::mutex> lock(tracingMutex_);
if (!isTracing()) {
return;
}
buffer_.push_back(TraceEvent{
buffer_.emplace_back(TraceEvent{
.name = "RunTask",
.cat = "disabled-by-default-devtools.timeline",
.ph = 'X',
@@ -261,16 +267,16 @@ void PerformanceTracer::reportEventLoopTask(
void PerformanceTracer::reportEventLoopMicrotasks(
HighResTimeStamp start,
HighResTimeStamp end) {
if (!tracing_) {
if (!isTracing()) {
return;
}
std::lock_guard lock(mutex_);
if (!tracing_) {
std::lock_guard<std::mutex> lock(tracingMutex_);
if (!isTracing()) {
return;
}
buffer_.push_back(TraceEvent{
buffer_.emplace_back(TraceEvent{
.name = "RunMicrotasks",
.cat = "v8.execute",
.ph = 'X',
@@ -322,7 +328,7 @@ folly::dynamic PerformanceTracer::getSerializedRuntimeProfileChunkTraceEvent(
}
folly::dynamic PerformanceTracer::serializeTraceEvent(
const TraceEvent& event) const {
TraceEvent&& event) const {
folly::dynamic result = folly::dynamic::object;
if (event.id.has_value()) {
@@ -330,13 +336,13 @@ folly::dynamic PerformanceTracer::serializeTraceEvent(
snprintf(buffer.data(), buffer.size(), "0x%x", event.id.value());
result["id"] = buffer.data();
}
result["name"] = event.name;
result["cat"] = event.cat;
result["name"] = std::move(event.name);
result["cat"] = std::move(event.cat);
result["ph"] = std::string(1, event.ph);
result["ts"] = highResTimeStampToTracingClockTimeStamp(event.ts);
result["pid"] = event.pid;
result["tid"] = event.tid;
result["args"] = event.args;
result["args"] = std::move(event.args);
if (event.dur.has_value()) {
result["dur"] = highResDurationToTracingClockDuration(event.dur.value());
}
@@ -14,6 +14,7 @@
#include <react/timing/primitives.h>
#include <folly/dynamic.h>
#include <atomic>
#include <functional>
#include <mutex>
#include <optional>
@@ -47,9 +48,7 @@ class PerformanceTracer {
* avoid doing expensive work (like formatting strings) if tracing is not
* enabled.
*/
bool isTracing() const {
// This is not thread safe but it's only a performance optimization. The
// call to report marks and measures is already thread safe.
inline bool isTracing() const {
return tracing_;
}
@@ -133,14 +132,22 @@ class PerformanceTracer {
PerformanceTracer& operator=(const PerformanceTracer&) = delete;
~PerformanceTracer() = default;
folly::dynamic serializeTraceEvent(const TraceEvent& event) const;
bool tracing_{false};
/**
* Serialize a TraceEvent into a folly::dynamic object.
* \param event rvalue reference to the TraceEvent object.
* \return folly::dynamic object that represents a serialized into JSON Trace
* Event for CDP.
*/
folly::dynamic serializeTraceEvent(TraceEvent&& event) const;
uint64_t processId_;
uint32_t performanceMeasureCount_{0};
std::atomic<bool> tracing_{false};
std::atomic<uint32_t> performanceMeasureCount_{0};
std::vector<TraceEvent> buffer_;
std::mutex mutex_;
// Protects buffer_ operations and tracing_ modifications.
std::mutex tracingMutex_;
};
} // namespace facebook::react::jsinspector_modern::tracing
@@ -201,17 +201,17 @@ folly::dynamic ImageProps::getDiffProps(const Props* prevProps) const {
if (sources != oldProps->sources) {
auto sourcesArray = folly::dynamic::array();
for (const auto& source : sources) {
sourcesArray.push_back(source.toDynamic());
sourcesArray.push_back(toDynamic(source));
}
result["source"] = sourcesArray;
}
if (defaultSource != oldProps->defaultSource) {
result["defaultSource"] = defaultSource.toDynamic();
result["defaultSource"] = toDynamic(defaultSource);
}
if (loadingIndicatorSource != oldProps->loadingIndicatorSource) {
result["loadingIndicatorSource"] = loadingIndicatorSource.toDynamic();
result["loadingIndicatorSource"] = toDynamic(loadingIndicatorSource);
}
if (resizeMode != oldProps->resizeMode) {
@@ -357,15 +357,6 @@ SharedDebugStringConvertibleList AndroidTextInputProps::getDebugProps() const {
}
#endif
static folly::dynamic toDynamic(
const std::vector<std::string>& acceptDragAndDropTypes) {
folly::dynamic acceptDragAndDropTypesArray = folly::dynamic::array();
for (const auto& acceptDragAndDropType : acceptDragAndDropTypes) {
acceptDragAndDropTypesArray.push_back(acceptDragAndDropType);
}
return acceptDragAndDropTypesArray;
}
ComponentName AndroidTextInputProps::getDiffPropsImplementationTarget() const {
return "TextInput";
}
@@ -530,15 +530,6 @@ static folly::dynamic toDynamic(const std::vector<FilterFunction>& filter) {
return filterResult;
}
static folly::dynamic toDynamic(const EdgeInsets& edgeInsets) {
folly::dynamic edgeInsetsResult = folly::dynamic::object();
edgeInsetsResult["left"] = edgeInsets.left;
edgeInsetsResult["top"] = edgeInsets.top;
edgeInsetsResult["right"] = edgeInsets.right;
edgeInsetsResult["bottom"] = edgeInsets.bottom;
return edgeInsetsResult;
}
ComponentName HostPlatformViewProps::getDiffPropsImplementationTarget() const {
return "View";
}
@@ -24,6 +24,7 @@ target_link_libraries(react_renderer_core
react_renderer_mapbuffer
react_renderer_runtimescheduler
react_utils
runtimeexecutor)
runtimeexecutor
yoga)
target_compile_reactnative_options(react_renderer_core PRIVATE)
target_compile_options(react_renderer_core PRIVATE -Wpedantic)
@@ -24,6 +24,10 @@
#include <react/renderer/graphics/RectangleEdges.h>
#include <react/renderer/graphics/Size.h>
#ifdef RN_SERIALIZABLE_STATE
#include <yoga/Yoga.h>
#endif
namespace facebook::react {
#pragma mark - Color
@@ -39,9 +43,6 @@ inline void fromRawValue(
inline int toAndroidRepr(const SharedColor& color) {
return *color;
}
inline folly::dynamic toDynamic(const SharedColor& color) {
return *color;
}
#endif
inline std::string toString(const SharedColor& value) {
@@ -60,6 +61,36 @@ inline std::string toString(const SharedColor& value) {
#pragma mark - Geometry
#ifdef RN_SERIALIZABLE_STATE
inline folly::dynamic toDynamic(const YGValue& dimension) {
switch (dimension.unit) {
case YGUnitUndefined:
return nullptr;
case YGUnitAuto:
return "auto";
case YGUnitMaxContent:
return "max-content";
case YGUnitFitContent:
return "fit-content";
case YGUnitStretch:
return "stretch";
case YGUnitPoint:
return dimension.value;
case YGUnitPercent:
return std::format("{}%", dimension.value);
}
return nullptr;
}
inline folly::dynamic toDynamic(const Point& point) {
folly::dynamic pointResult = folly::dynamic::object();
pointResult["x"] = point.x;
pointResult["y"] = point.y;
return pointResult;
}
#endif
inline void fromRawValue(
const PropsParserContext& context,
const RawValue& value,
@@ -169,6 +200,17 @@ inline void fromRawValue(
}
}
#ifdef RN_SERIALIZABLE_STATE
inline folly::dynamic toDynamic(const EdgeInsets& edgeInsets) {
folly::dynamic edgeInsetsResult = folly::dynamic::object();
edgeInsetsResult["left"] = edgeInsets.left;
edgeInsetsResult["top"] = edgeInsets.top;
edgeInsetsResult["right"] = edgeInsets.right;
edgeInsetsResult["bottom"] = edgeInsets.bottom;
return edgeInsetsResult;
}
#endif
inline void fromRawValue(
const PropsParserContext& context,
const RawValue& value,
@@ -16,6 +16,43 @@
namespace facebook::react {
#ifdef RN_SERIALIZABLE_STATE
inline folly::dynamic toDynamic(const std::vector<bool>& arrayValue) {
folly::dynamic resultArray = folly::dynamic::array();
for (auto value : arrayValue) {
resultArray.push_back(value);
}
return resultArray;
}
inline folly::dynamic toDynamic(const std::vector<std::string>& arrayValue) {
folly::dynamic resultArray = folly::dynamic::array();
for (auto& value : arrayValue) {
resultArray.push_back(value);
}
return resultArray;
}
inline folly::dynamic toDynamic(const std::vector<folly::dynamic>& arrayValue) {
folly::dynamic resultArray = folly::dynamic::array();
for (auto& value : arrayValue) {
resultArray.push_back(value);
}
return resultArray;
}
template <typename T>
folly::dynamic toDynamic(const std::vector<T>& arrayValue) {
folly::dynamic resultArray = folly::dynamic::array();
for (const auto& value : arrayValue) {
resultArray.push_back(toDynamic(value));
}
return resultArray;
}
#endif
/**
* Use this only when a prop update has definitely been sent from JS;
* essentially, cases where rawValue is virtually guaranteed to not be a
@@ -13,6 +13,10 @@
#include <react/renderer/graphics/ColorComponents.h>
#include <react/renderer/graphics/HostPlatformColor.h>
#ifdef RN_SERIALIZABLE_STATE
#include <folly/dynamic.h>
#endif
namespace facebook::react {
/*
@@ -67,6 +71,12 @@ SharedColor clearColor();
SharedColor blackColor();
SharedColor whiteColor();
#ifdef RN_SERIALIZABLE_STATE
inline folly::dynamic toDynamic(const SharedColor& sharedColor) {
return *sharedColor;
}
#endif
} // namespace facebook::react
template <>
@@ -92,6 +92,12 @@ class ImageSource {
#endif
};
#ifdef RN_SERIALIZABLE_STATE
inline folly::dynamic toDynamic(const ImageSource& imageSource) {
return imageSource.toDynamic();
}
#endif
using ImageSources = std::vector<ImageSource>;
enum class ImageResizeMode {
@@ -938,20 +938,20 @@ static void calculateShadowViewMutations(
oldChildPair.shadowView, newChildPair.shadowView, parentTag));
}
auto adjustedOldCullingContext =
oldCullingContext.adjustCullingContextIfNeeded(oldChildPair);
auto adjustedNewCullingContext =
newCullingContext.adjustCullingContextIfNeeded(newChildPair);
// Recursively update tree if ShadowNode pointers are not equal
if (!oldChildPair.flattened &&
(oldChildPair.shadowNode != newChildPair.shadowNode ||
oldCullingContext != newCullingContext)) {
auto oldCullingContextCopy =
oldCullingContext.adjustCullingContextIfNeeded(oldChildPair);
auto newCullingContextCopy =
newCullingContext.adjustCullingContextIfNeeded(newChildPair);
adjustedOldCullingContext != adjustedNewCullingContext)) {
ViewNodePairScope innerScope{};
auto oldGrandChildPairs = sliceChildShadowNodeViewPairsFromViewNodePair(
oldChildPair, innerScope, false, oldCullingContextCopy);
oldChildPair, innerScope, false, adjustedOldCullingContext);
auto newGrandChildPairs = sliceChildShadowNodeViewPairsFromViewNodePair(
newChildPair, innerScope, false, newCullingContextCopy);
newChildPair, innerScope, false, adjustedNewCullingContext);
const size_t newGrandChildPairsSize = newGrandChildPairs.size();
@@ -963,8 +963,8 @@ static void calculateShadowViewMutations(
oldChildPair.shadowView.tag,
std::move(oldGrandChildPairs),
std::move(newGrandChildPairs),
oldCullingContextCopy,
newCullingContextCopy);
adjustedOldCullingContext,
adjustedNewCullingContext);
}
}
@@ -45,10 +45,14 @@ namespace facebook::react {
DevServerHelper::DevServerHelper(
std::string appId,
std::string deviceName,
std::string devServerHost,
uint32_t devServerPort,
const HttpClientFactory& httpClientFactory,
JavaScriptModuleCallback javaScriptModuleCallback) noexcept
: appId_(std::move(appId)),
deviceName_(std::move(deviceName)),
devServerHost_(std::move(devServerHost)),
devServerPort_(devServerPort),
httpClient_(httpClientFactory()),
javaScriptModuleCallback_(std::move(javaScriptModuleCallback)) {
deviceId_ = SHA256(fmt::format("{}-{}", deviceName_, appId_));
@@ -101,8 +105,8 @@ std::string DevServerHelper::getInspectorUrl() const {
return fmt::format(
"ws://{}:{}/inspector/device?name={}&app={}&device={}&profiling={}",
DEFAULT_DEV_SERVER_HOST,
DEFAULT_DEV_SERVER_PORT,
devServerHost_,
devServerPort_,
urlEscape(deviceName_),
appId_,
deviceId_,
@@ -122,8 +126,8 @@ std::string DevServerHelper::getBundleUrl() const {
bool runModule = !splitBundle;
return fmt::format(
"http://{}:{}/{}.bundle?platform={}&dev={}&lazy={}&minify={}&app={}&modulesOnly={}&runModule={}&inlineSourceMap=false&excludeSource=true&sourcePaths=url-server",
DEFAULT_DEV_SERVER_HOST,
DEFAULT_DEV_SERVER_PORT,
devServerHost_,
devServerPort_,
sourcePath_,
DEFAULT_PLATFORM,
dev,
@@ -135,15 +139,14 @@ std::string DevServerHelper::getBundleUrl() const {
};
std::string DevServerHelper::getPackagerConnectionUrl() const {
return fmt::format(
"ws://{}:{}/message", DEFAULT_DEV_SERVER_HOST, DEFAULT_DEV_SERVER_PORT);
return fmt::format("ws://{}:{}/message", devServerHost_, devServerPort_);
}
void DevServerHelper::openDebugger() const {
auto requestUrl = fmt::format(
"http://{}:{}/open-debugger?device={}",
DEFAULT_DEV_SERVER_HOST,
DEFAULT_DEV_SERVER_PORT,
devServerHost_,
devServerPort_,
deviceId_);
httpClient_->sendRequest({}, "POST", requestUrl);
}
@@ -152,8 +155,8 @@ void DevServerHelper::setupHMRClient() const {
folly::dynamic params = folly::dynamic::array(
DEFAULT_PLATFORM,
sourcePath_,
DEFAULT_DEV_SERVER_HOST,
DEFAULT_DEV_SERVER_PORT,
devServerHost_,
devServerPort_,
true /*enable*/);
javaScriptModuleCallback_("HMRClient", "setup", std::move(params));
}
@@ -16,13 +16,6 @@
namespace facebook::react {
namespace {
constexpr std::string_view DEFAULT_DEV_SERVER_HOST = "localhost";
constexpr uint32_t DEFAULT_DEV_SERVER_PORT = 8081;
} // namespace
class DevServerHelper {
public:
enum class DownloadProgressStatus : short { STARTED, FAILED, FINISHED };
@@ -31,6 +24,8 @@ class DevServerHelper {
DevServerHelper(
std::string appId,
std::string deviceName,
std::string devServerHost,
uint32_t devServerPort,
const HttpClientFactory& httpClientFactory,
JavaScriptModuleCallback javaScriptModuleCallback) noexcept;
~DevServerHelper() noexcept = default;
@@ -56,6 +51,8 @@ class DevServerHelper {
private:
std::string appId_;
std::string deviceName_;
std::string devServerHost_;
uint32_t devServerPort_;
std::unique_ptr<IHttpClient> httpClient_;
JavaScriptModuleCallback javaScriptModuleCallback_;
std::string deviceId_;
@@ -21,29 +21,49 @@ InspectorPackagerConnectionDelegate::WebSocket::WebSocket(
inspectorThread_(std::move(inspectorThread)) {
websocket_ = webSocketClientFactory();
websocket_->setOnMessageCallback(
[webSocketDelegate](const std::string& message) {
if (const auto strongDelegate = webSocketDelegate.lock()) {
strongDelegate->didReceiveMessage(message);
}
});
websocket_->setOnClosedCallback(
[webSocketDelegate](const std::string& /*message*/) {
if (const auto strongDelegate = webSocketDelegate.lock()) {
strongDelegate->didClose();
}
});
websocket_->connect(
url, [webSocketDelegate](bool success, const std::string& message) {
const auto strongDelegate = webSocketDelegate.lock();
if (!strongDelegate) {
[webSocketDelegate,
inspectorThread = inspectorThread_](const std::string& message) {
auto strongInspectorThread = inspectorThread.lock();
if (!strongInspectorThread) {
return;
}
if (success) {
strongDelegate->didOpen();
} else {
strongDelegate->didFailWithError(std::nullopt, message);
strongInspectorThread->invokeElsePost([webSocketDelegate, message]() {
if (const auto strongDelegate = webSocketDelegate.lock()) {
strongDelegate->didReceiveMessage(message);
}
});
});
websocket_->setOnClosedCallback(
[webSocketDelegate,
inspectorThread = inspectorThread_](const std::string& /*message*/) {
auto strongInspectorThread = inspectorThread.lock();
if (!strongInspectorThread) {
return;
}
strongInspectorThread->invokeElsePost([webSocketDelegate]() {
if (const auto strongDelegate = webSocketDelegate.lock()) {
strongDelegate->didClose();
}
});
});
websocket_->connect(
url,
[webSocketDelegate, inspectorThread = inspectorThread_](
bool success, const std::string& message) {
auto strongInspectorThread = inspectorThread.lock();
if (!strongInspectorThread) {
return;
}
strongInspectorThread->invokeElsePost(
[webSocketDelegate, success, message]() {
if (auto strongDelegate = webSocketDelegate.lock()) {
if (success) {
strongDelegate->didOpen();
} else {
strongDelegate->didFailWithError(std::nullopt, message);
}
}
});
});
}
@@ -144,6 +144,8 @@ void ReactHost::createReactInstance() {
devServerHelper_ = std::make_shared<DevServerHelper>(
reactInstanceConfig_.appId,
reactInstanceConfig_.deviceName,
reactInstanceConfig_.devServerHost,
reactInstanceConfig_.devServerPort,
httpClientFactory,
[this](
const std::string& moduleName,
@@ -20,6 +20,8 @@ struct ReactInstanceConfig {
#endif
std::string appId;
std::string deviceName;
std::string devServerHost{"localhost"};
uint32_t devServerPort{8081};
};
} // namespace facebook::react
@@ -459,32 +459,25 @@ Pod::Spec.new do |s|
\\"OTHER_CPLUSPLUSFLAGS\\" => \\"$(inherited) #{folly_compiler_flags} #{boost_compiler_flags}\\"
}
if ReactNativeCoreUtils.build_rncore_from_source()
s.dependency \\"React-jsiexecutor\\"
s.dependency \\"RCTRequired\\"
s.dependency \\"RCTTypeSafety\\"
s.dependency \\"React-Core\\"
s.dependency \\"React-jsi\\"
s.dependency \\"ReactCommon/turbomodule/bridging\\"
s.dependency \\"ReactCommon/turbomodule/core\\"
s.dependency \\"React-NativeModulesApple\\"
s.dependency 'React-graphics'
s.dependency 'React-rendererdebug'
s.dependency 'React-Fabric'
s.dependency 'React-FabricImage'
s.dependency 'React-debug'
s.dependency 'React-utils'
s.dependency 'React-featureflags'
s.dependency 'React-RCTAppDelegate'
s.dependency \\"React-jsiexecutor\\"
s.dependency \\"RCTRequired\\"
s.dependency \\"RCTTypeSafety\\"
s.dependency \\"React-Core\\"
s.dependency \\"React-jsi\\"
s.dependency \\"ReactCommon/turbomodule/bridging\\"
s.dependency \\"ReactCommon/turbomodule/core\\"
s.dependency \\"React-NativeModulesApple\\"
s.dependency 'React-graphics'
s.dependency 'React-rendererdebug'
s.dependency 'React-Fabric'
s.dependency 'React-FabricImage'
s.dependency 'React-debug'
s.dependency 'React-utils'
s.dependency 'React-featureflags'
s.dependency 'React-RCTAppDelegate'
depend_on_js_engine(s)
add_rn_third_party_dependencies(s)
else
s.dependency 'React-Core-prebuilt'
s.dependency 'ReactNativeDependencies'
end
depend_on_js_engine(s)
add_rn_third_party_dependencies(s)
s.script_phases = {
'name' => 'Generate Specs',
@@ -943,32 +936,25 @@ Pod::Spec.new do |s|
\\"OTHER_CPLUSPLUSFLAGS\\" => \\"$(inherited) #{folly_compiler_flags} #{boost_compiler_flags}\\"
}
if ReactNativeCoreUtils.build_rncore_from_source()
s.dependency \\"React-jsiexecutor\\"
s.dependency \\"RCTRequired\\"
s.dependency \\"RCTTypeSafety\\"
s.dependency \\"React-Core\\"
s.dependency \\"React-jsi\\"
s.dependency \\"ReactCommon/turbomodule/bridging\\"
s.dependency \\"ReactCommon/turbomodule/core\\"
s.dependency \\"React-NativeModulesApple\\"
s.dependency 'React-graphics'
s.dependency 'React-rendererdebug'
s.dependency 'React-Fabric'
s.dependency 'React-FabricImage'
s.dependency 'React-debug'
s.dependency 'React-utils'
s.dependency 'React-featureflags'
s.dependency 'React-RCTAppDelegate'
s.dependency \\"React-jsiexecutor\\"
s.dependency \\"RCTRequired\\"
s.dependency \\"RCTTypeSafety\\"
s.dependency \\"React-Core\\"
s.dependency \\"React-jsi\\"
s.dependency \\"ReactCommon/turbomodule/bridging\\"
s.dependency \\"ReactCommon/turbomodule/core\\"
s.dependency \\"React-NativeModulesApple\\"
s.dependency 'React-graphics'
s.dependency 'React-rendererdebug'
s.dependency 'React-Fabric'
s.dependency 'React-FabricImage'
s.dependency 'React-debug'
s.dependency 'React-utils'
s.dependency 'React-featureflags'
s.dependency 'React-RCTAppDelegate'
depend_on_js_engine(s)
add_rn_third_party_dependencies(s)
else
s.dependency 'React-Core-prebuilt'
s.dependency 'ReactNativeDependencies'
end
depend_on_js_engine(s)
add_rn_third_party_dependencies(s)
s.script_phases = {
'name' => 'Generate Specs',
@@ -63,32 +63,25 @@ Pod::Spec.new do |s|
"OTHER_CPLUSPLUSFLAGS" => "$(inherited) #{folly_compiler_flags} #{boost_compiler_flags}"
}
if ReactNativeCoreUtils.build_rncore_from_source()
s.dependency "React-jsiexecutor"
s.dependency "RCTRequired"
s.dependency "RCTTypeSafety"
s.dependency "React-Core"
s.dependency "React-jsi"
s.dependency "ReactCommon/turbomodule/bridging"
s.dependency "ReactCommon/turbomodule/core"
s.dependency "React-NativeModulesApple"
s.dependency 'React-graphics'
s.dependency 'React-rendererdebug'
s.dependency 'React-Fabric'
s.dependency 'React-FabricImage'
s.dependency 'React-debug'
s.dependency 'React-utils'
s.dependency 'React-featureflags'
s.dependency 'React-RCTAppDelegate'
s.dependency "React-jsiexecutor"
s.dependency "RCTRequired"
s.dependency "RCTTypeSafety"
s.dependency "React-Core"
s.dependency "React-jsi"
s.dependency "ReactCommon/turbomodule/bridging"
s.dependency "ReactCommon/turbomodule/core"
s.dependency "React-NativeModulesApple"
s.dependency 'React-graphics'
s.dependency 'React-rendererdebug'
s.dependency 'React-Fabric'
s.dependency 'React-FabricImage'
s.dependency 'React-debug'
s.dependency 'React-utils'
s.dependency 'React-featureflags'
s.dependency 'React-RCTAppDelegate'
depend_on_js_engine(s)
add_rn_third_party_dependencies(s)
else
s.dependency 'React-Core-prebuilt'
s.dependency 'ReactNativeDependencies'
end
depend_on_js_engine(s)
add_rn_third_party_dependencies(s)
s.script_phases = {
'name' => 'Generate Specs',
@@ -1741,12 +1741,8 @@ function AccessibilityOrderExample(): React.Node {
/>
<View
nativeID="c"
accessibilityLabel="c"
style={[{backgroundColor: 'yellow'}, styles.boxSize]}>
<RNTesterText style={{color: 'black', fontSize: 10}}>
Not accessible, in the order
</RNTesterText>
</View>
style={[{backgroundColor: 'yellow'}, styles.boxSize]}
/>
</View>
<RNTesterText style={{marginBottom: 8}}>
Accessibility order can reference containers: accessibilityOrder=['b',
@@ -1757,7 +1753,6 @@ function AccessibilityOrderExample(): React.Node {
experimental_accessibilityOrder={['b', 'c', 'a']}>
<View
nativeID="a"
accessibilityLabel="a"
style={[
{backgroundColor: 'red', flexWrap: 'wrap', flexDirection: 'row'},
styles.boxSize,
@@ -1850,8 +1845,8 @@ function AccessibilityOrderExample(): React.Node {
/>
</View>
<RNTesterText style={{marginBottom: 8}}>
Accessibility order can reference the root: accessibilityOrder=['b',
'c', 'root', 'a'].
Accessibility order cannot order the root, but it can still be
accessible: accessibilityOrder=['b', 'c', 'root', 'a'].
</RNTesterText>
<View
accessible={true}
@@ -1881,7 +1876,7 @@ function AccessibilityOrderExample(): React.Node {
<RNTesterText style={{marginBottom: 8}}>
Accessibility order can reference parents and their decendants in any
order: accessibilityOrder=[child 2, child 1, child 2.3, child 3.2, child
4, child 2.4, parent, child 2.1, child 2.4]
4, child 2.4, parent, child 2.1]
</RNTesterText>
<View
style={{flexDirection: 'row', gap: 10, marginBottom: 8}}
@@ -1894,7 +1889,6 @@ function AccessibilityOrderExample(): React.Node {
'child2.4',
'parent',
'child2.1',
'child2.4',
]}>
<View
accessible={true}
@@ -1994,7 +1988,7 @@ function AccessibilityOrderExample(): React.Node {
<View
accessible={true}
accessibilityLabel="I am a view with a label that got co-opted"
style={[{backgroundColor: 'red'}, styles.smallBoxSize]}
style={[{backgroundColor: 'blue'}, styles.smallBoxSize]}
/>
</View>
<View
@@ -2019,7 +2013,7 @@ function AccessibilityOrderExample(): React.Node {
</View>
<RNTesterText style={{marginBottom: 8}}>
Accessibility order let's you focus links, but the text needs to be
included: accessibilityOrder=[b, a, c, text]
included: accessibilityOrder=[c, a, b, text]
</RNTesterText>
<View
style={{flexDirection: 'row', gap: 10, marginBottom: 8}}
@@ -2033,10 +2027,7 @@ function AccessibilityOrderExample(): React.Node {
accessible={true}
nativeID="b"
style={[{backgroundColor: 'green'}, styles.boxSize]}>
<RNTesterText
accessible={true}
style={{fontSize: 10}}
nativeID="text">
<RNTesterText style={{fontSize: 10}} nativeID="text">
I am a{' '}
<RNTesterText accessibilityRole="link" style={styles.link}>
link!
@@ -2050,8 +2041,7 @@ function AccessibilityOrderExample(): React.Node {
style={[{backgroundColor: 'yellow'}, styles.boxSize]}>
<RNTesterText
accessible={true}
style={{color: 'black', fontSize: 10}}
nativeID="text">
style={{color: 'black', fontSize: 10}}>
I am a{' '}
<RNTesterText accessibilityRole="link" style={styles.link}>
non-discoverable link!
@@ -65,7 +65,7 @@ const relevantEvents = [
'pointerLeave',
];
const expected = [
const expected: Array<{optional?: boolean, target: string, type: string}> = [
{type: 'pointerOver', target: 'a'},
{type: 'pointerEnter', target: 'c'},
{type: 'pointerEnter', target: 'b'},
@@ -47,7 +47,7 @@ const relevantEvents = [
'pointerLeave',
];
const expected = [
const expected: Array<{optional?: boolean, target: string, type: string}> = [
{type: 'pointerOver', target: 'a'},
{type: 'pointerEnter', target: 'a'},
{type: 'pointerMove', target: 'a', optional: true},
@@ -8,13 +8,15 @@
* @format
*/
import type {CellMetricProps} from '../ListMetricsAggregator';
import ViewabilityHelper from '../ViewabilityHelper';
let rowFrames: ?{
[string]: $ReadOnly<{height: number, y: number}>,
};
let data;
const props = {
const props: CellMetricProps = {
data,
getItem: () => {
throw new Error('Unexpected call to `getItem`.');
@@ -486,7 +488,7 @@ describe('onUpdate', function () {
// This test assures we round down the calculations of the item cell layout
// to avoid cases of imprecison when measuring layout
const helper = new ViewabilityHelper({itemVisiblePercentThreshold: 100});
const testProps = {
const testProps: CellMetricProps = {
getItem: () => {
throw new Error('Unexpected call to `getItem`.');
},
+1 -1
View File
@@ -475,7 +475,7 @@ describe('Fantom', () => {
expect(
root
.getRenderedOutput({
props: ['!width'],
props: ['^(?!width$).*$'],
})
.toJSX(),
).toEqual(<rn-view height="100.000000" />);
+12 -12
View File
@@ -10,8 +10,6 @@
import type {RootTag} from 'react-native';
// $FlowExpectedError[untyped-import]
import micromatch from 'micromatch';
import * as React from 'react';
import NativeFantom from 'react-native/src/private/testing/fantom/specs/NativeFantom';
@@ -30,8 +28,7 @@ type FantomJsonObject = {
type FantomJson = FantomJsonObject | $ReadOnlyArray<FantomJsonObject>;
type FantomRenderedOutputConfig = {
// micromatch pattern to match prop names
// see usage examples in https://github.com/micromatch/micromatch#examples
// RegExp patterns to match prop names
props?: $ReadOnlyArray<string>,
};
@@ -88,17 +85,20 @@ class FantomRenderedOutput {
props: FantomJsonObject['props'],
config: FantomRenderedOutputConfig,
): FantomJsonObject['props'] {
if (config.props == null) {
const patterns = config.props;
if (patterns == null) {
return {...props};
}
return micromatch(Object.keys(props), config.props ?? []).reduce(
(acc, name) => {
acc[name] = props[name];
return acc;
},
{},
);
return Object.keys(props)
.filter(key => patterns.some(pattern => new RegExp(pattern).test(key)))
.reduce(
(acc, name) => {
acc[name] = props[name];
return acc;
},
{} as FantomJsonObject['props'],
);
}
}
+2 -2
View File
@@ -32,13 +32,13 @@ const {styleText} = require('util');
const inputFilesPostTransforms: $ReadOnlyArray<PluginObj<mixed>> = [
require('./transforms/typescript/renameDefaultExportedIdentifiers'),
require('./transforms/typescript/stripUnstableApis'),
];
const postTransforms: $ReadOnlyArray<PluginObj<mixed>> = [
require('./transforms/typescript/stripUnstableApis'),
require('./transforms/typescript/sortProperties'),
require('./transforms/typescript/sortUnions'),
require('./transforms/removeUndefinedFromOptionalMembers'),
require('./transforms/typescript/removeUndefinedFromOptionalMembers'),
require('./transforms/typescript/organizeDeclarations'),
];
@@ -70,6 +70,23 @@ const stripUnstableProperties: PluginObj<mixed> = {
path.remove();
}
},
ExportNamedDeclaration(path) {
if (
path.node.declaration &&
isUnstableSymbol(path.node.declaration?.id?.name)
) {
path.remove();
} else if (path.node.specifiers) {
path.node.specifiers = path.node.specifiers.filter(
specifier => !isUnstableSymbol(specifier.exported.name),
);
}
},
ExportDefaultDeclaration(path) {
if (isUnstableSymbol(path.node.declaration?.id?.name)) {
path.remove();
}
},
},
};