From 7a083ff07c0b1765f5f4c0373a2dd2944913130d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 11 Sep 2026 05:50:44 -0700 Subject: [PATCH] Make react/bridging public Summary: Expose the Bridging module through a stable public C++ umbrella and enforce that strict API consumers use that supported entry point. Publish the umbrella and guard dependency through the supported build and packaging surfaces. Changelog: [General][Added] - Add the public React/Bridging.h C++ umbrella. Differential Revision: D119658007 --- .../ReactAndroid/build.gradle.kts | 1 + .../ReactCommon/react/bridging/AString.h | 2 + .../ReactCommon/react/bridging/Array.h | 2 + .../ReactCommon/react/bridging/ArrayBuffer.h | 2 + .../ReactCommon/react/bridging/Base.h | 2 + .../ReactCommon/react/bridging/Bool.h | 2 + .../ReactCommon/react/bridging/Bridging.h | 2 + .../ReactCommon/react/bridging/CMakeLists.txt | 2 +- .../react/bridging/CallbackWrapper.h | 2 + .../ReactCommon/react/bridging/Class.h | 2 + .../ReactCommon/react/bridging/Convert.h | 2 + .../ReactCommon/react/bridging/Dynamic.h | 2 + .../ReactCommon/react/bridging/Error.h | 2 + .../ReactCommon/react/bridging/EventEmitter.h | 2 + .../ReactCommon/react/bridging/Function.h | 2 + .../react/bridging/HighResTimeStamp.h | 2 + .../react/bridging/LongLivedObject.h | 2 + .../ReactCommon/react/bridging/Number.h | 2 + .../ReactCommon/react/bridging/Object.h | 2 + .../ReactCommon/react/bridging/Promise.h | 2 + .../react/bridging/React-bridging.podspec | 8 ++++ .../react/bridging/React/Bridging.h | 41 +++++++++++++++++++ .../ReactCommon/react/bridging/Value.h | 2 + .../scripts/ios-prebuild/headers-config.js | 22 +++++++++- 24 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 packages/react-native/ReactCommon/react/bridging/React/Bridging.h diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 8a27e3e4f470..13623dd81c06 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -231,6 +231,7 @@ val preparePrefab by // Exported because the public cxxreact/ErrorUtils.h includes it Pair("../ReactCommon/jserrorhandler/", "jserrorhandler/"), Pair("../ReactCommon/react/bridging/", "react/bridging/"), + Pair("../ReactCommon/react/bridging/React/", "React/"), Pair("../ReactCommon/react/nativemodule/core/", ""), Pair("../ReactCommon/react/nativemodule/core/platform/android/", ""), Pair( diff --git a/packages/react-native/ReactCommon/react/bridging/AString.h b/packages/react-native/ReactCommon/react/bridging/AString.h index b5d48354ef20..1b0cd92ce042 100644 --- a/packages/react-native/ReactCommon/react/bridging/AString.h +++ b/packages/react-native/ReactCommon/react/bridging/AString.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/Array.h b/packages/react-native/ReactCommon/react/bridging/Array.h index 03ee6e464df4..afe605decf92 100644 --- a/packages/react-native/ReactCommon/react/bridging/Array.h +++ b/packages/react-native/ReactCommon/react/bridging/Array.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/ArrayBuffer.h b/packages/react-native/ReactCommon/react/bridging/ArrayBuffer.h index 8739fb2881c1..02c4f466d6c6 100644 --- a/packages/react-native/ReactCommon/react/bridging/ArrayBuffer.h +++ b/packages/react-native/ReactCommon/react/bridging/ArrayBuffer.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/Base.h b/packages/react-native/ReactCommon/react/bridging/Base.h index fcae10f42de0..972ab07c8251 100644 --- a/packages/react-native/ReactCommon/react/bridging/Base.h +++ b/packages/react-native/ReactCommon/react/bridging/Base.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/Bool.h b/packages/react-native/ReactCommon/react/bridging/Bool.h index 10bb7500abd4..06e0c54d87f5 100644 --- a/packages/react-native/ReactCommon/react/bridging/Bool.h +++ b/packages/react-native/ReactCommon/react/bridging/Bool.h @@ -7,6 +7,8 @@ #pragma once +#include + #include namespace facebook::react { diff --git a/packages/react-native/ReactCommon/react/bridging/Bridging.h b/packages/react-native/ReactCommon/react/bridging/Bridging.h index 7507c8ae3048..203769c6e4ca 100644 --- a/packages/react-native/ReactCommon/react/bridging/Bridging.h +++ b/packages/react-native/ReactCommon/react/bridging/Bridging.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/CMakeLists.txt b/packages/react-native/ReactCommon/react/bridging/CMakeLists.txt index 3e5fc47830b8..0f48f499c6f7 100644 --- a/packages/react-native/ReactCommon/react/bridging/CMakeLists.txt +++ b/packages/react-native/ReactCommon/react/bridging/CMakeLists.txt @@ -14,6 +14,6 @@ add_library(react_bridging OBJECT ${react_bridging_SRC}) target_include_directories(react_bridging PUBLIC ${REACT_COMMON_DIR}) -target_link_libraries(react_bridging jsi callinvoker react_timing) +target_link_libraries(react_bridging jsi callinvoker react_cxxstableapi react_timing) target_compile_reactnative_options(react_bridging PRIVATE) target_compile_options(react_bridging PRIVATE -Wpedantic) diff --git a/packages/react-native/ReactCommon/react/bridging/CallbackWrapper.h b/packages/react-native/ReactCommon/react/bridging/CallbackWrapper.h index a6c5083ef267..445b4a0dccf4 100644 --- a/packages/react-native/ReactCommon/react/bridging/CallbackWrapper.h +++ b/packages/react-native/ReactCommon/react/bridging/CallbackWrapper.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/Class.h b/packages/react-native/ReactCommon/react/bridging/Class.h index 16bc0cf0abaa..c54e611c11e4 100644 --- a/packages/react-native/ReactCommon/react/bridging/Class.h +++ b/packages/react-native/ReactCommon/react/bridging/Class.h @@ -7,6 +7,8 @@ #pragma once +#include + #include namespace facebook::react::bridging { diff --git a/packages/react-native/ReactCommon/react/bridging/Convert.h b/packages/react-native/ReactCommon/react/bridging/Convert.h index a34a22ea9ac6..52b07a754e10 100644 --- a/packages/react-native/ReactCommon/react/bridging/Convert.h +++ b/packages/react-native/ReactCommon/react/bridging/Convert.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/Dynamic.h b/packages/react-native/ReactCommon/react/bridging/Dynamic.h index b06266325921..812d451d534f 100644 --- a/packages/react-native/ReactCommon/react/bridging/Dynamic.h +++ b/packages/react-native/ReactCommon/react/bridging/Dynamic.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/Error.h b/packages/react-native/ReactCommon/react/bridging/Error.h index 621fd0bfb083..56003f17f20b 100644 --- a/packages/react-native/ReactCommon/react/bridging/Error.h +++ b/packages/react-native/ReactCommon/react/bridging/Error.h @@ -7,6 +7,8 @@ #pragma once +#include + #include namespace facebook::react { diff --git a/packages/react-native/ReactCommon/react/bridging/EventEmitter.h b/packages/react-native/ReactCommon/react/bridging/EventEmitter.h index 3a76abcc36cd..7fedcff60bda 100644 --- a/packages/react-native/ReactCommon/react/bridging/EventEmitter.h +++ b/packages/react-native/ReactCommon/react/bridging/EventEmitter.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/Function.h b/packages/react-native/ReactCommon/react/bridging/Function.h index eb5d08749b5b..19aaec53c006 100644 --- a/packages/react-native/ReactCommon/react/bridging/Function.h +++ b/packages/react-native/ReactCommon/react/bridging/Function.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/HighResTimeStamp.h b/packages/react-native/ReactCommon/react/bridging/HighResTimeStamp.h index 83807d54e87c..bd988c4e2606 100644 --- a/packages/react-native/ReactCommon/react/bridging/HighResTimeStamp.h +++ b/packages/react-native/ReactCommon/react/bridging/HighResTimeStamp.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/LongLivedObject.h b/packages/react-native/ReactCommon/react/bridging/LongLivedObject.h index 1e3ff3f97bcc..9af43f4598e7 100644 --- a/packages/react-native/ReactCommon/react/bridging/LongLivedObject.h +++ b/packages/react-native/ReactCommon/react/bridging/LongLivedObject.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/Number.h b/packages/react-native/ReactCommon/react/bridging/Number.h index 2fb0c8a9b0d4..b1710a11ccb0 100644 --- a/packages/react-native/ReactCommon/react/bridging/Number.h +++ b/packages/react-native/ReactCommon/react/bridging/Number.h @@ -7,6 +7,8 @@ #pragma once +#include + #include namespace facebook::react { diff --git a/packages/react-native/ReactCommon/react/bridging/Object.h b/packages/react-native/ReactCommon/react/bridging/Object.h index 0ccd3a24e1e2..a24de14cafc6 100644 --- a/packages/react-native/ReactCommon/react/bridging/Object.h +++ b/packages/react-native/ReactCommon/react/bridging/Object.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/Promise.h b/packages/react-native/ReactCommon/react/bridging/Promise.h index a1f17f813adf..cdd023ad9549 100644 --- a/packages/react-native/ReactCommon/react/bridging/Promise.h +++ b/packages/react-native/ReactCommon/react/bridging/Promise.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/bridging/React-bridging.podspec b/packages/react-native/ReactCommon/react/bridging/React-bridging.podspec index 3a47aa4d2915..8fd5130253ab 100644 --- a/packages/react-native/ReactCommon/react/bridging/React-bridging.podspec +++ b/packages/react-native/ReactCommon/react/bridging/React-bridging.podspec @@ -26,6 +26,7 @@ Pod::Spec.new do |s| s.platforms = min_supported_versions s.source = source s.source_files = podspec_sources("*.{cpp,h}", "*.h") + s.exclude_files = "React" s.header_dir = "react/bridging" s.pod_target_xcconfig = { "USE_HEADERMAP" => "YES", @@ -35,8 +36,15 @@ Pod::Spec.new do |s| resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: "React_bridging") + s.subspec "bridgingUmbrella" do |ss| + ss.source_files = "React/*.h" + ss.header_dir = "" + ss.header_mappings_dir = "." + end + s.dependency "React-jsi" s.dependency "React-callinvoker" + s.dependency "React-cxxstableapi" s.dependency "React-timing" add_rn_third_party_dependencies(s) diff --git a/packages/react-native/ReactCommon/react/bridging/React/Bridging.h b/packages/react-native/ReactCommon/react/bridging/React/Bridging.h new file mode 100644 index 000000000000..99b50b4ffbcf --- /dev/null +++ b/packages/react-native/ReactCommon/react/bridging/React/Bridging.h @@ -0,0 +1,41 @@ +/* + * 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. + */ + +#pragma once + +// ============================================================================= +// Umbrella header for the `react/bridging` module - public entry point. +// +// #include +// ============================================================================= + +#pragma push_macro("RN_UMBRELLA_CONTEXT") +#undef RN_UMBRELLA_CONTEXT +#define RN_UMBRELLA_CONTEXT 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#undef RN_UMBRELLA_CONTEXT +#pragma pop_macro("RN_UMBRELLA_CONTEXT") diff --git a/packages/react-native/ReactCommon/react/bridging/Value.h b/packages/react-native/ReactCommon/react/bridging/Value.h index deb99ad5d394..ab81cfca644f 100644 --- a/packages/react-native/ReactCommon/react/bridging/Value.h +++ b/packages/react-native/ReactCommon/react/bridging/Value.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/scripts/ios-prebuild/headers-config.js b/packages/react-native/scripts/ios-prebuild/headers-config.js index f61e1de8bbef..c88adeb8f95c 100644 --- a/packages/react-native/scripts/ios-prebuild/headers-config.js +++ b/packages/react-native/scripts/ios-prebuild/headers-config.js @@ -26,6 +26,19 @@ const PodspecExceptions /*: {[key: string]: PodSpecConfiguration} */ = { headerDir: 'jsi', excludePatterns: ['**/test/*'], }, + 'ReactCommon/react/bridging/React-bridging.podspec': { + name: 'React-bridging', + headerPatterns: ['**/*.h'], + excludePatterns: ['React/**'], + headerDir: 'react/bridging', + subSpecs: [ + { + name: 'bridgingUmbrella', + headerPatterns: ['React/*.h'], + headerDir: 'React', + }, + ], + }, 'ReactCommon/hermes/React-hermes.podspec': { name: 'React-hermes', headerPatterns: [ @@ -247,8 +260,15 @@ const PodspecExceptions /*: {[key: string]: PodSpecConfiguration} */ = { { name: 'bridging', headerPatterns: ['react/bridging/**/*.h'], - excludePatterns: ['react/bridging/tests/**'], + excludePatterns: ['react/bridging/React/**', 'react/bridging/tests/**'], headerDir: 'react/bridging', + subSpecs: [ + { + name: 'bridgingUmbrella', + headerPatterns: ['react/bridging/React/*.h'], + headerDir: 'React', + }, + ], }, { name: 'core',