From d059b5f63e430998ef05caf592c54773b6cd8870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 21 Aug 2026 01:23:19 -0700 Subject: [PATCH] Add stable public MapBuffer C++ entry point (#58013) Summary: Add `` as the public C++ entry point for MapBuffer and MapBufferBuilder. Guard direct leaf-header inclusion for strict API consumers while preserving existing React Native builds and legacy include paths. Export and stage the umbrella consistently through Buck, CMake, Android Prefab, CocoaPods, and the Apple prebuilt-header inventory. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D116632721 --- .../ReactAndroid/build.gradle.kts | 1 + .../ReactCommon/React-Mapbuffer.podspec | 9 ++++++- .../react/renderer/mapbuffer/CMakeLists.txt | 2 +- .../react/renderer/mapbuffer/MapBuffer.h | 1 + .../renderer/mapbuffer/MapBufferBuilder.h | 1 + .../renderer/mapbuffer/React/MapBuffer.h | 27 +++++++++++++++++++ .../scripts/ios-prebuild/headers-config.js | 16 +++++++++++ 7 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 packages/react-native/ReactCommon/react/renderer/mapbuffer/React/MapBuffer.h diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 35d649309b60..3ed3fbe9d3c1 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -252,6 +252,7 @@ val preparePrefab by "react/renderer/leakchecker/", ), Pair("../ReactCommon/react/renderer/mapbuffer/", "react/renderer/mapbuffer/"), + Pair("../ReactCommon/react/renderer/mapbuffer/React/", "React/"), Pair("../ReactCommon/react/renderer/mounting/", "react/renderer/mounting/"), Pair( "../ReactCommon/react/renderer/runtimescheduler/", diff --git a/packages/react-native/ReactCommon/React-Mapbuffer.podspec b/packages/react-native/ReactCommon/React-Mapbuffer.podspec index 74cef67a4e40..133f9e5010f0 100644 --- a/packages/react-native/ReactCommon/React-Mapbuffer.podspec +++ b/packages/react-native/ReactCommon/React-Mapbuffer.podspec @@ -26,14 +26,21 @@ Pod::Spec.new do |s| s.platforms = min_supported_versions s.source = source s.source_files = podspec_sources("react/renderer/mapbuffer/*.{cpp,h}", "react/renderer/mapbuffer/*.h") - s.exclude_files = "react/renderer/mapbuffer/tests" + s.exclude_files = ["react/renderer/mapbuffer/tests", "react/renderer/mapbuffer/React"] s.public_header_files = 'react/renderer/mapbuffer/*.h' s.header_dir = "react/renderer/mapbuffer" s.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => ["\"$(PODS_TARGET_SRCROOT)\""], "USE_HEADERMAP" => "YES", "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard() } + s.subspec "MapBufferUmbrella" do |ss| + ss.source_files = "react/renderer/mapbuffer/React/*.h" + ss.header_dir = "React" + ss.header_mappings_dir = "react/renderer/mapbuffer/React" + end + resolve_use_frameworks(s, header_mappings_dir: './', module_name: "React_Mapbuffer") + s.dependency "React-cxxstableapi" add_dependency(s, "React-debug") add_rn_third_party_dependencies(s) add_rncore_dependency(s) diff --git a/packages/react-native/ReactCommon/react/renderer/mapbuffer/CMakeLists.txt b/packages/react-native/ReactCommon/react/renderer/mapbuffer/CMakeLists.txt index 0930ec9ee1b2..0d0ef6c27be2 100644 --- a/packages/react-native/ReactCommon/react/renderer/mapbuffer/CMakeLists.txt +++ b/packages/react-native/ReactCommon/react/renderer/mapbuffer/CMakeLists.txt @@ -11,6 +11,6 @@ file(GLOB react_renderer_mapbuffer_SRC CONFIGURE_DEPENDS *.cpp) add_library(react_renderer_mapbuffer OBJECT ${react_renderer_mapbuffer_SRC}) target_include_directories(react_renderer_mapbuffer PUBLIC ${REACT_COMMON_DIR}) -target_link_libraries(react_renderer_mapbuffer glog glog_init react_debug) +target_link_libraries(react_renderer_mapbuffer glog glog_init react_cxxstableapi react_debug) target_compile_reactnative_options(react_renderer_mapbuffer PRIVATE) target_compile_options(react_renderer_mapbuffer PRIVATE -Wpedantic) diff --git a/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBuffer.h b/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBuffer.h index 07b64bdfba99..d57b5ef2e9a7 100644 --- a/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBuffer.h +++ b/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBuffer.h @@ -7,6 +7,7 @@ #pragma once +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.h b/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.h index 2963c77a9b36..66a36a94b2f7 100644 --- a/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.h +++ b/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.h @@ -7,6 +7,7 @@ #pragma once +#include #include #include #include "MapBuffer.h" diff --git a/packages/react-native/ReactCommon/react/renderer/mapbuffer/React/MapBuffer.h b/packages/react-native/ReactCommon/react/renderer/mapbuffer/React/MapBuffer.h new file mode 100644 index 000000000000..898a7befe37e --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/mapbuffer/React/MapBuffer.h @@ -0,0 +1,27 @@ +/* + * 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/renderer/mapbuffer` module - public entry point. +// +// #include +// +// Re-exports the module's public interface headers. React Native's own code +// should keep using the fine-grained `` includes; +// only outside consumers use this umbrella. +// ============================================================================= + +// Marks that the following headers are pulled in through the umbrella, so their +// shared guard () accepts them. +#define RN_UMBRELLA_CONTEXT + +#include +#include + +#undef RN_UMBRELLA_CONTEXT diff --git a/packages/react-native/scripts/ios-prebuild/headers-config.js b/packages/react-native/scripts/ios-prebuild/headers-config.js index d794aad3b174..ccf4d23a6ac4 100644 --- a/packages/react-native/scripts/ios-prebuild/headers-config.js +++ b/packages/react-native/scripts/ios-prebuild/headers-config.js @@ -466,6 +466,22 @@ const PodspecExceptions /*: {[key: string]: PodSpecConfiguration} */ = { }, ], }, + 'ReactCommon/React-Mapbuffer.podspec': { + name: 'React-Mapbuffer', + headerPatterns: ['react/renderer/mapbuffer/**/*.h'], + excludePatterns: [ + 'react/renderer/mapbuffer/tests', + 'react/renderer/mapbuffer/React', + ], + headerDir: 'react/renderer/mapbuffer', + subSpecs: [ + { + name: 'MapBufferUmbrella', + headerPatterns: ['react/renderer/mapbuffer/React/*.h'], + headerDir: 'React', + }, + ], + }, 'ReactCommon/React-FabricImage.podspec': { name: 'React-FabricImage', headerPatterns: ['react/renderer/components/image/**/*.h'],