/** * 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. * * * @format */ 'use strict'; const _require = require('./Utils'), getModules = _require.getModules; const ModuleClassDeclarationTemplate = ({hasteModuleName}) => { return `/** * JNI C++ class for module '${hasteModuleName}' */ class JSI_EXPORT ${hasteModuleName}SpecJSI : public JavaTurboModule { public: ${hasteModuleName}SpecJSI(const JavaTurboModule::InitParams ¶ms); }; `; }; const HeaderFileTemplate = ({modules, libraryName}) => { return ` /** * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). * * Do not edit this file as changes may cause incorrect behavior and will be lost * once the code is regenerated. * * ${'@'}generated by codegen project: GenerateModuleJniH.js */ #pragma once #include #include #include namespace facebook { namespace react { ${modules} JSI_EXPORT std::shared_ptr ${libraryName}_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams ¶ms); } // namespace react } // namespace facebook `; }; // Note: this CMakeLists.txt template includes dependencies for both NativeModule and components. const CMakeListsTemplate = ({libraryName}) => { return `# 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. cmake_minimum_required(VERSION 3.13) set(CMAKE_VERBOSE_MAKEFILE on) file(GLOB react_codegen_SRCS CONFIGURE_DEPENDS *.cpp react/renderer/components/${libraryName}/*.cpp) add_library( react_codegen_${libraryName} SHARED \${react_codegen_SRCS} ) target_include_directories(react_codegen_${libraryName} PUBLIC . react/renderer/components/${libraryName}) target_link_libraries( react_codegen_${libraryName} fbjni folly_runtime glog jsi ${libraryName !== 'rncore' ? 'react_codegen_rncore' : ''} react_debug react_nativemodule_core react_render_core react_render_debug react_render_graphics react_render_imagemanager rrc_image rrc_view turbomodulejsijni yoga ) target_compile_options( react_codegen_${libraryName} PRIVATE -DLOG_TAG=\\"ReactNative\\" -fexceptions -frtti -std=c++17 -Wall ) `; }; module.exports = { generate(libraryName, schema, packageName, assumeNonnull = false) { const nativeModules = getModules(schema); const modules = Object.keys(nativeModules) .filter(hasteModuleName => { const module = nativeModules[hasteModuleName]; return !( module.excludedPlatforms != null && module.excludedPlatforms.includes('android') ); }) .sort() .map(hasteModuleName => ModuleClassDeclarationTemplate({ hasteModuleName, }), ) .join('\n'); const fileName = `${libraryName}.h`; const replacedTemplate = HeaderFileTemplate({ modules: modules, libraryName: libraryName.replace(/-/g, '_'), }); return new Map([ [`jni/${fileName}`, replacedTemplate], [ 'jni/CMakeLists.txt', CMakeListsTemplate({ libraryName: libraryName, }), ], ]); }, };