From fed5bef46c0edbc8cb8b68af01b9ea695894d88e Mon Sep 17 00:00:00 2001 From: Satyajit Sahoo Date: Thu, 15 Jan 2026 18:31:26 +0100 Subject: [PATCH] refactor: cleanup module templates --- .../src/template.ts | 3 + .../common/$.github/workflows/ci.yml | 2 +- .../templates/common/$package.json | 6 +- .../example-common/example/metro.config.js | 6 +- .../expo-library/example/metro.config.js | 20 ----- .../{%- project.name %}Module.kt | 10 +-- .../{%- project.name %}Package.kt | 16 ++-- .../native-common/android/build.gradle | 76 ++++++++----------- .../native-common/android/gradle.properties | 5 -- .../android/CMakeLists.txt | 0 .../android/src/main/cpp/cpp-adapter.cpp | 0 .../{nitro-view => nitro-common}/nitro.json | 4 +- .../templates/nitro-module/nitro.json | 17 ----- .../nitro-view/android/CMakeLists.txt | 24 ------ .../android/src/main/cpp/cpp-adapter.cpp | 6 -- 15 files changed, 55 insertions(+), 140 deletions(-) delete mode 100644 packages/create-react-native-library/templates/expo-library/example/metro.config.js delete mode 100644 packages/create-react-native-library/templates/native-common/android/gradle.properties rename packages/create-react-native-library/templates/{nitro-module => nitro-common}/android/CMakeLists.txt (100%) rename packages/create-react-native-library/templates/{nitro-module => nitro-common}/android/src/main/cpp/cpp-adapter.cpp (100%) rename packages/create-react-native-library/templates/{nitro-view => nitro-common}/nitro.json (63%) delete mode 100644 packages/create-react-native-library/templates/nitro-module/nitro.json delete mode 100644 packages/create-react-native-library/templates/nitro-view/android/CMakeLists.txt delete mode 100644 packages/create-react-native-library/templates/nitro-view/android/src/main/cpp/cpp-adapter.cpp diff --git a/packages/create-react-native-library/src/template.ts b/packages/create-react-native-library/src/template.ts index 8e0583896..087aed51a 100644 --- a/packages/create-react-native-library/src/template.ts +++ b/packages/create-react-native-library/src/template.ts @@ -72,6 +72,7 @@ const NATIVE_COMMON_EXAMPLE_FILES = path.resolve( __dirname, '../templates/native-common-example' ); +const NITRO_COMMON_FILES = path.resolve(__dirname, '../templates/nitro-common'); const NATIVE_FILES = { module_new: path.resolve(__dirname, '../templates/native-library-new'), @@ -211,11 +212,13 @@ export async function applyTemplates( } if (config.project.moduleConfig === 'nitro-modules') { + await applyTemplate(config, NITRO_COMMON_FILES, folder); await applyTemplate(config, NATIVE_FILES['module_nitro'], folder); return; } if (config.project.viewConfig === 'nitro-view') { + await applyTemplate(config, NITRO_COMMON_FILES, folder); await applyTemplate(config, NATIVE_FILES['view_nitro'], folder); return; } diff --git a/packages/create-react-native-library/templates/common/$.github/workflows/ci.yml b/packages/create-react-native-library/templates/common/$.github/workflows/ci.yml index 14fb29218..58e3d5a9f 100644 --- a/packages/create-react-native-library/templates/common/$.github/workflows/ci.yml +++ b/packages/create-react-native-library/templates/common/$.github/workflows/ci.yml @@ -127,7 +127,7 @@ jobs: runs-on: macos-latest env: - XCODE_VERSION: 16.3 + XCODE_VERSION: 26 TURBO_CACHE_DIR: .turbo/ios RCT_USE_RN_DEP: 1 RCT_USE_PREBUILT_RNCORE: 1 diff --git a/packages/create-react-native-library/templates/common/$package.json b/packages/create-react-native-library/templates/common/$package.json index 8c19b54a2..5a883aba1 100644 --- a/packages/create-react-native-library/templates/common/$package.json +++ b/packages/create-react-native-library/templates/common/$package.json @@ -135,8 +135,10 @@ <% if (project.viewConfig === 'fabric-view') { -%> }, "ios": { - "componentProvider": { - "<%- project.name -%>View": "<%- project.name -%>View" + "components": { + "<%- project.name -%>View": { + "className": "<%- project.name -%>View" + } } <% } -%> } diff --git a/packages/create-react-native-library/templates/example-common/example/metro.config.js b/packages/create-react-native-library/templates/example-common/example/metro.config.js index 2da198e82..565abf361 100644 --- a/packages/create-react-native-library/templates/example-common/example/metro.config.js +++ b/packages/create-react-native-library/templates/example-common/example/metro.config.js @@ -1,5 +1,5 @@ const path = require('path'); -const { getDefaultConfig } = require('@react-native/metro-config'); +const { getDefaultConfig } = require('<% if (example === 'expo') { -%>@expo/metro-config<% } else { -%>@react-native/metro-config<% } -%>'); const { withMetroConfig } = require('react-native-monorepo-config'); const root = path.resolve(__dirname, '..'); @@ -10,7 +10,9 @@ const root = path.resolve(__dirname, '..'); * * @type {import('metro-config').MetroConfig} */ -module.exports = withMetroConfig(getDefaultConfig(__dirname), { +const config = withMetroConfig(getDefaultConfig(__dirname), { root, dirname: __dirname, }); + +module.exports = config; diff --git a/packages/create-react-native-library/templates/expo-library/example/metro.config.js b/packages/create-react-native-library/templates/expo-library/example/metro.config.js deleted file mode 100644 index 097c7e0ae..000000000 --- a/packages/create-react-native-library/templates/expo-library/example/metro.config.js +++ /dev/null @@ -1,20 +0,0 @@ -const path = require('path'); -const { getDefaultConfig } = require('@expo/metro-config'); -const { withMetroConfig } = require('react-native-monorepo-config'); - -const root = path.resolve(__dirname, '..'); - -/** - * Metro configuration - * https://facebook.github.io/metro/docs/configuration - * - * @type {import('metro-config').MetroConfig} - */ -const config = withMetroConfig(getDefaultConfig(__dirname), { - root, - dirname: __dirname, -}); - -config.resolver.unstable_enablePackageExports = true; - -module.exports = config; diff --git a/packages/create-react-native-library/templates/kotlin-library-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Module.kt b/packages/create-react-native-library/templates/kotlin-library-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Module.kt index 5da133031..1c8fd43f7 100644 --- a/packages/create-react-native-library/templates/kotlin-library-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Module.kt +++ b/packages/create-react-native-library/templates/kotlin-library-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Module.kt @@ -1,23 +1,15 @@ package com.<%- project.package %> import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.module.annotations.ReactModule -@ReactModule(name = <%- project.name -%>Module.NAME) class <%- project.name -%>Module(reactContext: ReactApplicationContext) : Native<%- project.name -%>Spec(reactContext) { - override fun getName(): String { - return NAME - } - - // Example method - // See https://reactnative.dev/docs/native-modules-android override fun multiply(a: Double, b: Double): Double { return a * b } companion object { - const val NAME = "<%- project.name -%>" + const val NAME = Native<%- project.name -%>Spec.NAME } } diff --git a/packages/create-react-native-library/templates/kotlin-view-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.kt b/packages/create-react-native-library/templates/kotlin-view-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.kt index 9f3ab9124..929a56c18 100644 --- a/packages/create-react-native-library/templates/kotlin-view-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.kt +++ b/packages/create-react-native-library/templates/kotlin-view-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.kt @@ -1,19 +1,17 @@ package com.<%- project.package %> -import com.facebook.react.ReactPackage +import com.facebook.react.BaseReactPackage import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.module.model.ReactModuleInfoProvider import com.facebook.react.uimanager.ViewManager -import java.util.ArrayList -class <%- project.name -%>ViewPackage : ReactPackage { +class <%- project.name -%>ViewPackage : BaseReactPackage() { override fun createViewManagers(reactContext: ReactApplicationContext): List> { - val viewManagers: MutableList> = ArrayList() - viewManagers.add(<%- project.name -%>ViewManager()) - return viewManagers + return listOf(<%- project.name -%>ViewManager()) } - override fun createNativeModules(reactContext: ReactApplicationContext): List { - return emptyList() - } + override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? = null + + override fun getReactModuleInfoProvider(): ReactModuleInfoProvider = ReactModuleInfoProvider { emptyMap() } } diff --git a/packages/create-react-native-library/templates/native-common/android/build.gradle b/packages/create-react-native-library/templates/native-common/android/build.gradle index 895500f41..909e54458 100644 --- a/packages/create-react-native-library/templates/native-common/android/build.gradle +++ b/packages/create-react-native-library/templates/native-common/android/build.gradle @@ -1,6 +1,17 @@ buildscript { - ext.getExtOrDefault = {name -> - return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['<%- project.name -%>_' + name] + ext.<%- project.name -%> = [ + kotlinVersion: "2.0.21", + minSdkVersion: 24, + compileSdkVersion: 36, + targetSdkVersion: 36 + ] + + ext.getExtOrDefault = { prop -> + if (rootProject.ext.has(prop)) { + return rootProject.ext.get(prop) + } + + return <%- project.name -%>[prop] } repositories { @@ -30,10 +41,6 @@ apply from: '../nitrogen/generated/android/<%- project.package_cpp -%>+autolinki apply plugin: "com.facebook.react" -def getExtOrIntegerDefault(name) { - return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["<%- project.name -%>_" + name]).toInteger() -} - android { <% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%> namespace "com.margelo.nitro.<%- project.package -%>" @@ -41,11 +48,11 @@ android { namespace "com.<%- project.package -%>" <% } -%> - compileSdkVersion getExtOrIntegerDefault("compileSdkVersion") + compileSdkVersion getExtOrDefault("compileSdkVersion") defaultConfig { - minSdkVersion getExtOrIntegerDefault("minSdkVersion") - targetSdkVersion getExtOrIntegerDefault("targetSdkVersion") + minSdkVersion getExtOrDefault("minSdkVersion") + targetSdkVersion getExtOrDefault("targetSdkVersion") <% if (project.cpp || project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%> externalNativeBuild { @@ -78,22 +85,22 @@ android { packagingOptions { excludes = [ - "META-INF", - "META-INF/**", - "**/libc++_shared.so", - "**/libfbjni.so", - "**/libjsi.so", - "**/libfolly_json.so", - "**/libfolly_runtime.so", - "**/libglog.so", - "**/libhermes.so", - "**/libhermes-executor-debug.so", - "**/libhermes_executor.so", - "**/libreactnative.so", - "**/libreactnativejni.so", - "**/libturbomodulejsijni.so", - "**/libreact_nativemodule_core.so", - "**/libjscexecutor.so" + "META-INF", + "META-INF/**", + "**/libc++_shared.so", + "**/libfbjni.so", + "**/libjsi.so", + "**/libfolly_json.so", + "**/libfolly_runtime.so", + "**/libglog.so", + "**/libhermes.so", + "**/libhermes-executor-debug.so", + "**/libhermes_executor.so", + "**/libreactnative.so", + "**/libreactnativejni.so", + "**/libturbomodulejsijni.so", + "**/libreact_nativemodule_core.so", + "**/libjscexecutor.so" ] } <% } -%> @@ -111,7 +118,7 @@ android { } } - lintOptions { + lint { disable "GradleCompatible" } @@ -119,27 +126,10 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } - - sourceSets { - main { - java.srcDirs += [ - "generated/java", - "generated/jni" - ] - } - } } -repositories { - mavenCentral() - google() -} - -def kotlin_version = getExtOrDefault("kotlinVersion") - dependencies { implementation "com.facebook.react:react-android" - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" <% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%> implementation project(":react-native-nitro-modules") <% } -%> diff --git a/packages/create-react-native-library/templates/native-common/android/gradle.properties b/packages/create-react-native-library/templates/native-common/android/gradle.properties deleted file mode 100644 index 88563f3c1..000000000 --- a/packages/create-react-native-library/templates/native-common/android/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -<%- project.name -%>_kotlinVersion=2.0.21 -<%- project.name -%>_minSdkVersion=24 -<%- project.name -%>_targetSdkVersion=34 -<%- project.name -%>_compileSdkVersion=35 -<%- project.name -%>_ndkVersion=27.1.12297006 diff --git a/packages/create-react-native-library/templates/nitro-module/android/CMakeLists.txt b/packages/create-react-native-library/templates/nitro-common/android/CMakeLists.txt similarity index 100% rename from packages/create-react-native-library/templates/nitro-module/android/CMakeLists.txt rename to packages/create-react-native-library/templates/nitro-common/android/CMakeLists.txt diff --git a/packages/create-react-native-library/templates/nitro-module/android/src/main/cpp/cpp-adapter.cpp b/packages/create-react-native-library/templates/nitro-common/android/src/main/cpp/cpp-adapter.cpp similarity index 100% rename from packages/create-react-native-library/templates/nitro-module/android/src/main/cpp/cpp-adapter.cpp rename to packages/create-react-native-library/templates/nitro-common/android/src/main/cpp/cpp-adapter.cpp diff --git a/packages/create-react-native-library/templates/nitro-view/nitro.json b/packages/create-react-native-library/templates/nitro-common/nitro.json similarity index 63% rename from packages/create-react-native-library/templates/nitro-view/nitro.json rename to packages/create-react-native-library/templates/nitro-common/nitro.json index 78941a518..f4b2ecd63 100644 --- a/packages/create-react-native-library/templates/nitro-view/nitro.json +++ b/packages/create-react-native-library/templates/nitro-common/nitro.json @@ -9,8 +9,8 @@ }, "autolinking": { "<%- project.name -%>": { - "swift": "Hybrid<%- project.name -%>", - "kotlin": "Hybrid<%- project.name -%>" + "swift": "<% if (project.viewConfig === 'nitro-view') { -%>Hybrid<% } -%><%- project.name -%>", + "kotlin": "<% if (project.viewConfig === 'nitro-view') { -%>Hybrid<% } -%><%- project.name -%>" } }, "ignorePaths": ["node_modules"] diff --git a/packages/create-react-native-library/templates/nitro-module/nitro.json b/packages/create-react-native-library/templates/nitro-module/nitro.json deleted file mode 100644 index 8a1674a36..000000000 --- a/packages/create-react-native-library/templates/nitro-module/nitro.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "cxxNamespace": ["<%- project.package_cpp -%>"], - "ios": { - "iosModuleName": "<%- project.name -%>" - }, - "android": { - "androidNamespace": <%- JSON.stringify(project.package.split('.')) -%>, - "androidCxxLibName": "<%- project.package_cpp -%>" - }, - "autolinking": { - "<%- project.name -%>": { - "swift": "<%- project.name -%>", - "kotlin": "<%- project.name -%>" - } - }, - "ignorePaths": ["node_modules"] -} diff --git a/packages/create-react-native-library/templates/nitro-view/android/CMakeLists.txt b/packages/create-react-native-library/templates/nitro-view/android/CMakeLists.txt deleted file mode 100644 index 1fa9ed39d..000000000 --- a/packages/create-react-native-library/templates/nitro-view/android/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ -project(<%- project.package_cpp -%>) -cmake_minimum_required(VERSION 3.9.0) - -set(PACKAGE_NAME <%- project.package_cpp -%>) -set(CMAKE_VERBOSE_MAKEFILE ON) -set(CMAKE_CXX_STANDARD 20) - -# Define C++ library and add all sources -add_library(${PACKAGE_NAME} SHARED src/main/cpp/cpp-adapter.cpp) - -# Add Nitrogen specs :) -include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/<%- project.package_cpp -%>+autolinking.cmake) - -# Set up local includes -include_directories("src/main/cpp" "../cpp") - -find_library(LOG_LIB log) - -# Link all libraries together -target_link_libraries( - ${PACKAGE_NAME} - ${LOG_LIB} - android # <-- Android core -) diff --git a/packages/create-react-native-library/templates/nitro-view/android/src/main/cpp/cpp-adapter.cpp b/packages/create-react-native-library/templates/nitro-view/android/src/main/cpp/cpp-adapter.cpp deleted file mode 100644 index 8e1f6123b..000000000 --- a/packages/create-react-native-library/templates/nitro-view/android/src/main/cpp/cpp-adapter.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include "<%- project.package_cpp -%>OnLoad.hpp" - -JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) { - return margelo::nitro::<%- project.package_cpp -%>::initialize(vm); -}