diff --git a/packages/react-native/ReactCommon/react/renderer/core/RawProps.cpp b/packages/react-native/ReactCommon/react/renderer/core/RawProps.cpp index 5a5b405d9516..bf1849ffa10c 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/RawProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/core/RawProps.cpp @@ -116,4 +116,26 @@ const RawValue* RawProps::at(const char* name) const noexcept { return parser_->at(*this, name); } +const RawValue* RawProps::at( + const char* name, + const char* prefix, + const char* suffix) const noexcept { + if (prefix == nullptr && suffix == nullptr) { + return at(name); + } + + std::string concatenated; + if (prefix != nullptr) { + concatenated += prefix; + } + concatenated += name; + if (suffix != nullptr) { + concatenated += suffix; + } + react_native_assert( + parser_ && + "The object is not parsed. `parse` must be called before `at`."); + return parser_->at(*this, concatenated); +} + } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/core/RawProps.h b/packages/react-native/ReactCommon/react/renderer/core/RawProps.h index e1ffd6265d35..0abfce1c8256 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/RawProps.h +++ b/packages/react-native/ReactCommon/react/renderer/core/RawProps.h @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -92,6 +93,10 @@ class RawProps final { */ const RawValue *at(const char *name) const noexcept; + // Deprecated: Use at(name) instead. This overload exists for backwards + // compatibility with callers that pass prefix/suffix separately. + const RawValue *at(const char *name, const char *prefix, const char *suffix) const noexcept; + private: friend class RawPropsParser; diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api index 4a5ea93ebca9..72f79ffef2ba 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api @@ -4190,6 +4190,7 @@ class facebook::react::RawProps { public RawProps(folly::dynamic dynamic) noexcept; public bool isEmpty() const noexcept; public const facebook::react::RawValue* at(const char* name) const noexcept; + public const facebook::react::RawValue* at(const char* name, const char* prefix, const char* suffix) const noexcept; public facebook::react::RawProps& operator=(const facebook::react::RawProps& other) noexcept = delete; public facebook::react::RawProps& operator=(facebook::react::RawProps&& other) noexcept = delete; public folly::dynamic toDynamic(const std::function& filterObjectKeys = nullptr) const; diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api index 6e821b751f6d..aebc1608e3b6 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api @@ -4034,6 +4034,7 @@ class facebook::react::RawProps { public RawProps(folly::dynamic dynamic) noexcept; public bool isEmpty() const noexcept; public const facebook::react::RawValue* at(const char* name) const noexcept; + public const facebook::react::RawValue* at(const char* name, const char* prefix, const char* suffix) const noexcept; public facebook::react::RawProps& operator=(const facebook::react::RawProps& other) noexcept = delete; public facebook::react::RawProps& operator=(facebook::react::RawProps&& other) noexcept = delete; public folly::dynamic toDynamic(const std::function& filterObjectKeys = nullptr) const; diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api index 77a90677d4cf..8ab8a2db045d 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api @@ -4187,6 +4187,7 @@ class facebook::react::RawProps { public RawProps(folly::dynamic dynamic) noexcept; public bool isEmpty() const noexcept; public const facebook::react::RawValue* at(const char* name) const noexcept; + public const facebook::react::RawValue* at(const char* name, const char* prefix, const char* suffix) const noexcept; public facebook::react::RawProps& operator=(const facebook::react::RawProps& other) noexcept = delete; public facebook::react::RawProps& operator=(facebook::react::RawProps&& other) noexcept = delete; public folly::dynamic toDynamic(const std::function& filterObjectKeys = nullptr) const; diff --git a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api index cb3c73c37a16..752b0c362de0 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api @@ -6407,6 +6407,7 @@ class facebook::react::RawProps { public RawProps(folly::dynamic dynamic) noexcept; public bool isEmpty() const noexcept; public const facebook::react::RawValue* at(const char* name) const noexcept; + public const facebook::react::RawValue* at(const char* name, const char* prefix, const char* suffix) const noexcept; public facebook::react::RawProps& operator=(const facebook::react::RawProps& other) noexcept = delete; public facebook::react::RawProps& operator=(facebook::react::RawProps&& other) noexcept = delete; public folly::dynamic toDynamic(const std::function& filterObjectKeys = nullptr) const; diff --git a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api index 87d6ca7aa0d8..1f69e353a99a 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api @@ -6279,6 +6279,7 @@ class facebook::react::RawProps { public RawProps(folly::dynamic dynamic) noexcept; public bool isEmpty() const noexcept; public const facebook::react::RawValue* at(const char* name) const noexcept; + public const facebook::react::RawValue* at(const char* name, const char* prefix, const char* suffix) const noexcept; public facebook::react::RawProps& operator=(const facebook::react::RawProps& other) noexcept = delete; public facebook::react::RawProps& operator=(facebook::react::RawProps&& other) noexcept = delete; public folly::dynamic toDynamic(const std::function& filterObjectKeys = nullptr) const; diff --git a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api index cff79303f844..cb09094812c9 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api @@ -6404,6 +6404,7 @@ class facebook::react::RawProps { public RawProps(folly::dynamic dynamic) noexcept; public bool isEmpty() const noexcept; public const facebook::react::RawValue* at(const char* name) const noexcept; + public const facebook::react::RawValue* at(const char* name, const char* prefix, const char* suffix) const noexcept; public facebook::react::RawProps& operator=(const facebook::react::RawProps& other) noexcept = delete; public facebook::react::RawProps& operator=(facebook::react::RawProps&& other) noexcept = delete; public folly::dynamic toDynamic(const std::function& filterObjectKeys = nullptr) const; diff --git a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api index 87aaa9ae2891..3281cfbee5b3 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api @@ -2772,6 +2772,7 @@ class facebook::react::RawProps { public RawProps(folly::dynamic dynamic) noexcept; public bool isEmpty() const noexcept; public const facebook::react::RawValue* at(const char* name) const noexcept; + public const facebook::react::RawValue* at(const char* name, const char* prefix, const char* suffix) const noexcept; public facebook::react::RawProps& operator=(const facebook::react::RawProps& other) noexcept = delete; public facebook::react::RawProps& operator=(facebook::react::RawProps&& other) noexcept = delete; public folly::dynamic toDynamic(const std::function& filterObjectKeys = nullptr) const; diff --git a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api index ed97d3fdcb84..949bcea697a0 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api @@ -2656,6 +2656,7 @@ class facebook::react::RawProps { public RawProps(folly::dynamic dynamic) noexcept; public bool isEmpty() const noexcept; public const facebook::react::RawValue* at(const char* name) const noexcept; + public const facebook::react::RawValue* at(const char* name, const char* prefix, const char* suffix) const noexcept; public facebook::react::RawProps& operator=(const facebook::react::RawProps& other) noexcept = delete; public facebook::react::RawProps& operator=(facebook::react::RawProps&& other) noexcept = delete; public folly::dynamic toDynamic(const std::function& filterObjectKeys = nullptr) const; diff --git a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api index 9a6ba873336c..5231c2b2c05e 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api @@ -2769,6 +2769,7 @@ class facebook::react::RawProps { public RawProps(folly::dynamic dynamic) noexcept; public bool isEmpty() const noexcept; public const facebook::react::RawValue* at(const char* name) const noexcept; + public const facebook::react::RawValue* at(const char* name, const char* prefix, const char* suffix) const noexcept; public facebook::react::RawProps& operator=(const facebook::react::RawProps& other) noexcept = delete; public facebook::react::RawProps& operator=(facebook::react::RawProps&& other) noexcept = delete; public folly::dynamic toDynamic(const std::function& filterObjectKeys = nullptr) const; diff --git a/scripts/js-api/build-types/buildApiSnapshot.js b/scripts/js-api/build-types/buildApiSnapshot.js index c808012ebe2b..c2c7bd37f30e 100644 --- a/scripts/js-api/build-types/buildApiSnapshot.js +++ b/scripts/js-api/build-types/buildApiSnapshot.js @@ -148,7 +148,7 @@ async function validateSnapshots( // $FlowFixMe[prop-missing] // $FlowFixMe[incompatible-type] const diffResult = diff(prevSnapshot, newSnapshot, options); - const rerunCommand = isGitRepo() ? 'yarn build-types' : 'js1 build-js-api'; + const rerunCommand = isGitRepo() ? 'yarn build-types' : 'js1 build js-api'; console.error( `${styleText(['bold', 'inverse', 'red'], ' FAIL ')} ReactNativeApi.d.ts has changed. Please re-run '${rerunCommand}' and commit the updated snapshot.\n`, );