diff --git a/android/src/main/cpp/cpp-adapter.cpp b/android/src/main/cpp/cpp-adapter.cpp index 3bd44be..8476b5d 100644 --- a/android/src/main/cpp/cpp-adapter.cpp +++ b/android/src/main/cpp/cpp-adapter.cpp @@ -1,6 +1,9 @@ +#include #include #include "clustererOnLoad.hpp" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) { - return margelo::nitro::clusterer::initialize(vm); + return facebook::jni::initialize(vm, []() { + margelo::nitro::clusterer::registerAllNatives(); + }); } diff --git a/android/src/main/java/com/margelo/nitro/clusterer/ClustererPackage.kt b/android/src/main/java/com/margelo/nitro/clusterer/ClustererPackage.kt index d22339a..1babb0d 100644 --- a/android/src/main/java/com/margelo/nitro/clusterer/ClustererPackage.kt +++ b/android/src/main/java/com/margelo/nitro/clusterer/ClustererPackage.kt @@ -1,22 +1,18 @@ package com.margelo.nitro.clusterer -import com.facebook.react.TurboReactPackage import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.module.model.ReactModuleInfoProvider +import com.facebook.react.BaseReactPackage -class ClustererPackage : TurboReactPackage() { - override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? { - return null - } +class ClustererPackage : BaseReactPackage() { + override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? = null - override fun getReactModuleInfoProvider(): ReactModuleInfoProvider { - return ReactModuleInfoProvider { HashMap() } - } + override fun getReactModuleInfoProvider(): ReactModuleInfoProvider = ReactModuleInfoProvider { HashMap() } companion object { init { - System.loadLibrary("clusterer") + clustererOnLoad.initializeNative() } } } diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index bb37ac3..4e707b0 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1,6 +1,6 @@ PODS: - boost (1.84.0) - - Clusterer (5.0.1): + - Clusterer (5.0.2): - boost - DoubleConversion - fast_float @@ -38,7 +38,7 @@ PODS: - hermes-engine (0.81.4): - hermes-engine/Pre-built (= 0.81.4) - hermes-engine/Pre-built (0.81.4) - - NitroModules (0.31.5): + - NitroModules (0.35.2): - boost - DoubleConversion - fast_float @@ -1807,9 +1807,9 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - react-native-maps (1.26.17): - - react-native-maps/Maps (= 1.26.17) - - react-native-maps/Generated (1.26.17): + - react-native-maps (1.27.2): + - react-native-maps/Maps (= 1.27.2) + - react-native-maps/Generated (1.27.2): - boost - DoubleConversion - fast_float @@ -1837,7 +1837,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - react-native-maps/Maps (1.26.17): + - react-native-maps/Maps (1.27.2): - boost - DoubleConversion - fast_float @@ -2609,15 +2609,15 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 - Clusterer: aea3257409cae6a812404f2a511a3a609247d379 + Clusterer: 36faca62b79315e97774a06f75b07fd0c3c9795d DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 FBLazyVector: 941bef1c8eeabd9fe1f501e30a5220beee913886 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 hermes-engine: 35c763d57c9832d0eef764316ca1c4d043581394 - NitroModules: edd5870885e786b0f2119836cf47e8b28d5b9c1f - RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f + NitroModules: 17f56ebb3581e74931c870a789834582ce75470c + RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCTDeprecation: c0ed3249a97243002615517dff789bf4666cf585 RCTRequired: 58719f5124f9267b5f9649c08bf23d9aea845b23 RCTTypeSafety: 4aefa8328ab1f86da273f08517f1f6b343f6c2cc @@ -2650,7 +2650,7 @@ SPEC CHECKSUMS: React-logger: a3cb5b29c32b8e447b5a96919340e89334062b48 React-Mapbuffer: 9d2434a42701d6144ca18f0ca1c4507808ca7696 React-microtasksnativemodule: 75b6604b667d297292345302cc5bfb6b6aeccc1b - react-native-maps: 87180249e42c05aa7bdebe5ae713cb94803c7f1f + react-native-maps: b5af575a371e57847c6d8490e726c08036f7c80f React-NativeModulesApple: 879fbdc5dcff7136abceb7880fe8a2022a1bd7c3 React-oscompat: 93b5535ea7f7dff46aaee4f78309a70979bdde9d React-perflogger: 5536d2df3d18fe0920263466f7b46a56351c0510 diff --git a/example/package.json b/example/package.json index 2e53a33..91c7648 100644 --- a/example/package.json +++ b/example/package.json @@ -15,7 +15,7 @@ "react": "19.1.0", "react-native": "0.81.4", "react-native-maps": "^1.26.17", - "react-native-nitro-modules": "^0.31.5", + "react-native-nitro-modules": "^0.35.2", "supercluster": "^8.0.1" }, "devDependencies": { diff --git a/nitro.json b/nitro.json index 29e0d8f..875ecde 100644 --- a/nitro.json +++ b/nitro.json @@ -9,7 +9,10 @@ }, "autolinking": { "Clusterer": { - "cpp": "HybridClusterer" + "all": { + "language": "c++", + "implementationClassName": "HybridClusterer" + } } }, "ignorePaths": ["node_modules", "example", "lib"] diff --git a/nitrogen/generated/android/clusterer+autolinking.cmake b/nitrogen/generated/android/clusterer+autolinking.cmake index 8d4cdad..28a6498 100644 --- a/nitrogen/generated/android/clusterer+autolinking.cmake +++ b/nitrogen/generated/android/clusterer+autolinking.cmake @@ -2,7 +2,7 @@ # clusterer+autolinking.cmake # This file was generated by nitrogen. DO NOT MODIFY THIS FILE. # https://github.com/mrousavy/nitro -# Copyright © 2025 Marc Rousavy @ Margelo +# Copyright © Marc Rousavy @ Margelo # # This is a CMake file that adds all files generated by Nitrogen diff --git a/nitrogen/generated/android/clusterer+autolinking.gradle b/nitrogen/generated/android/clusterer+autolinking.gradle index 8c4bdca..03f925f 100644 --- a/nitrogen/generated/android/clusterer+autolinking.gradle +++ b/nitrogen/generated/android/clusterer+autolinking.gradle @@ -2,7 +2,7 @@ /// clusterer+autolinking.gradle /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// /// This is a Gradle file that adds all files generated by Nitrogen diff --git a/nitrogen/generated/android/clustererOnLoad.cpp b/nitrogen/generated/android/clustererOnLoad.cpp index bb015a3..26ebf1c 100644 --- a/nitrogen/generated/android/clustererOnLoad.cpp +++ b/nitrogen/generated/android/clustererOnLoad.cpp @@ -2,7 +2,7 @@ /// clustererOnLoad.cpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #ifndef BUILDING_CLUSTERER_WITH_GENERATED_CMAKE_PROJECT @@ -20,25 +20,30 @@ namespace margelo::nitro::clusterer { int initialize(JavaVM* vm) { + return facebook::jni::initialize(vm, []() { + ::margelo::nitro::clusterer::registerAllNatives(); + }); +} + + + +void registerAllNatives() { using namespace margelo::nitro; using namespace margelo::nitro::clusterer; - using namespace facebook; - - return facebook::jni::initialize(vm, [] { - // Register native JNI methods - - - // Register Nitro Hybrid Objects - HybridObjectRegistry::registerHybridObjectConstructor( - "Clusterer", - []() -> std::shared_ptr { - static_assert(std::is_default_constructible_v, - "The HybridObject \"HybridClusterer\" is not default-constructible! " - "Create a public constructor that takes zero arguments to be able to autolink this HybridObject."); - return std::make_shared(); - } - ); - }); + + // Register native JNI methods + + + // Register Nitro Hybrid Objects + HybridObjectRegistry::registerHybridObjectConstructor( + "Clusterer", + []() -> std::shared_ptr { + static_assert(std::is_default_constructible_v, + "The HybridObject \"HybridClusterer\" is not default-constructible! " + "Create a public constructor that takes zero arguments to be able to autolink this HybridObject."); + return std::make_shared(); + } + ); } } // namespace margelo::nitro::clusterer diff --git a/nitrogen/generated/android/clustererOnLoad.hpp b/nitrogen/generated/android/clustererOnLoad.hpp index 9becdc7..4bfe6f3 100644 --- a/nitrogen/generated/android/clustererOnLoad.hpp +++ b/nitrogen/generated/android/clustererOnLoad.hpp @@ -2,24 +2,33 @@ /// clustererOnLoad.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #include +#include #include namespace margelo::nitro::clusterer { + [[deprecated("Use registerNatives() instead.")]] + int initialize(JavaVM* vm); + /** - * Initializes the native (C++) part of clusterer, and autolinks all Hybrid Objects. - * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`). + * Register the native (C++) part of clusterer, and autolinks all Hybrid Objects. + * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`), + * inside a `facebook::jni::initialize(vm, ...)` call. * Example: * ```cpp (cpp-adapter.cpp) * JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) { - * return margelo::nitro::clusterer::initialize(vm); + * return facebook::jni::initialize(vm, []() { + * // register all clusterer HybridObjects + * margelo::nitro::clusterer::registerNatives(); + * // any other custom registrations go here. + * }); * } * ``` */ - int initialize(JavaVM* vm); + void registerAllNatives(); } // namespace margelo::nitro::clusterer diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/clusterer/clustererOnLoad.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/clusterer/clustererOnLoad.kt index a45f177..476eb43 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/clusterer/clustererOnLoad.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/clusterer/clustererOnLoad.kt @@ -2,7 +2,7 @@ /// clustererOnLoad.kt /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// package com.margelo.nitro.clusterer diff --git a/nitrogen/generated/ios/Clusterer+autolinking.rb b/nitrogen/generated/ios/Clusterer+autolinking.rb index f803617..69eb8ff 100644 --- a/nitrogen/generated/ios/Clusterer+autolinking.rb +++ b/nitrogen/generated/ios/Clusterer+autolinking.rb @@ -2,7 +2,7 @@ # Clusterer+autolinking.rb # This file was generated by nitrogen. DO NOT MODIFY THIS FILE. # https://github.com/mrousavy/nitro -# Copyright © 2025 Marc Rousavy @ Margelo +# Copyright © Marc Rousavy @ Margelo # # This is a Ruby script that adds all files generated by Nitrogen @@ -52,7 +52,7 @@ def add_nitrogen_files(spec) spec.pod_target_xcconfig = current_pod_target_xcconfig.merge({ # Use C++ 20 "CLANG_CXX_LANGUAGE_STANDARD" => "c++20", - # Enables C++ <-> Swift interop (by default it's only C) + # Enables C++ <-> Swift interop (by default it's only ObjC) "SWIFT_OBJC_INTEROP_MODE" => "objcxx", # Enables stricter modular headers "DEFINES_MODULE" => "YES", diff --git a/nitrogen/generated/ios/Clusterer-Swift-Cxx-Bridge.cpp b/nitrogen/generated/ios/Clusterer-Swift-Cxx-Bridge.cpp index 8e01b34..3a22411 100644 --- a/nitrogen/generated/ios/Clusterer-Swift-Cxx-Bridge.cpp +++ b/nitrogen/generated/ios/Clusterer-Swift-Cxx-Bridge.cpp @@ -2,7 +2,7 @@ /// Clusterer-Swift-Cxx-Bridge.cpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #include "Clusterer-Swift-Cxx-Bridge.hpp" diff --git a/nitrogen/generated/ios/Clusterer-Swift-Cxx-Bridge.hpp b/nitrogen/generated/ios/Clusterer-Swift-Cxx-Bridge.hpp index 1c5bd25..5419678 100644 --- a/nitrogen/generated/ios/Clusterer-Swift-Cxx-Bridge.hpp +++ b/nitrogen/generated/ios/Clusterer-Swift-Cxx-Bridge.hpp @@ -2,7 +2,7 @@ /// Clusterer-Swift-Cxx-Bridge.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once diff --git a/nitrogen/generated/ios/Clusterer-Swift-Cxx-Umbrella.hpp b/nitrogen/generated/ios/Clusterer-Swift-Cxx-Umbrella.hpp index 3959b32..48ce616 100644 --- a/nitrogen/generated/ios/Clusterer-Swift-Cxx-Umbrella.hpp +++ b/nitrogen/generated/ios/Clusterer-Swift-Cxx-Umbrella.hpp @@ -2,7 +2,7 @@ /// Clusterer-Swift-Cxx-Umbrella.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once diff --git a/nitrogen/generated/ios/ClustererAutolinking.mm b/nitrogen/generated/ios/ClustererAutolinking.mm index a038bba..035afad 100644 --- a/nitrogen/generated/ios/ClustererAutolinking.mm +++ b/nitrogen/generated/ios/ClustererAutolinking.mm @@ -2,7 +2,7 @@ /// ClustererAutolinking.mm /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #import diff --git a/nitrogen/generated/ios/ClustererAutolinking.swift b/nitrogen/generated/ios/ClustererAutolinking.swift index 003f167..0753e66 100644 --- a/nitrogen/generated/ios/ClustererAutolinking.swift +++ b/nitrogen/generated/ios/ClustererAutolinking.swift @@ -2,9 +2,13 @@ /// ClustererAutolinking.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// +import NitroModules + +// TODO: Use empty enums once Swift supports exporting them as namespaces +// See: https://github.com/swiftlang/swift/pull/83616 public final class ClustererAutolinking { public typealias bridge = margelo.nitro.clusterer.bridge.swift diff --git a/nitrogen/generated/shared/c++/HybridClustererSpec.cpp b/nitrogen/generated/shared/c++/HybridClustererSpec.cpp index 502f95f..db7d37c 100644 --- a/nitrogen/generated/shared/c++/HybridClustererSpec.cpp +++ b/nitrogen/generated/shared/c++/HybridClustererSpec.cpp @@ -2,7 +2,7 @@ /// HybridClustererSpec.cpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #include "HybridClustererSpec.hpp" diff --git a/nitrogen/generated/shared/c++/HybridClustererSpec.hpp b/nitrogen/generated/shared/c++/HybridClustererSpec.hpp index ea7e7af..062681d 100644 --- a/nitrogen/generated/shared/c++/HybridClustererSpec.hpp +++ b/nitrogen/generated/shared/c++/HybridClustererSpec.hpp @@ -2,7 +2,7 @@ /// HybridClustererSpec.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once diff --git a/package.json b/package.json index ffb6873..67c3c1f 100644 --- a/package.json +++ b/package.json @@ -81,12 +81,12 @@ "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", "jest": "^29.7.0", - "nitrogen": "^0.31.5", + "nitrogen": "^0.35.2", "prettier": "^3.6.2", "react": "19.1.0", "react-native": "0.81.4", "react-native-builder-bob": "^0.40.13", - "react-native-nitro-modules": "^0.31.5", + "react-native-nitro-modules": "^0.35.2", "release-it": "^19.0.4", "turbo": "^2.5.6", "typescript": "^5.9.2" @@ -94,7 +94,7 @@ "peerDependencies": { "react": "*", "react-native": "*", - "react-native-nitro-modules": "^0.31.5" + "react-native-nitro-modules": "^0.35.2" }, "workspaces": [ "example" diff --git a/yarn.lock b/yarn.lock index 3030cac..0b1902f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9286,18 +9286,18 @@ __metadata: languageName: node linkType: hard -"nitrogen@npm:^0.31.5": - version: 0.31.5 - resolution: "nitrogen@npm:0.31.5" +"nitrogen@npm:^0.35.2": + version: 0.35.2 + resolution: "nitrogen@npm:0.35.2" dependencies: chalk: ^5.3.0 - react-native-nitro-modules: ^0.31.5 + react-native-nitro-modules: ^0.35.2 ts-morph: ^27.0.0 yargs: ^18.0.0 zod: ^4.0.5 bin: nitrogen: lib/index.js - checksum: defb6948f1f5727ae4e6412870226fb52a2b6ebe96fe5501a4093c5c513d55c465ae20f066c914d8540125818d55ab03b156b4e085213667724425b730c11ab3 + checksum: 1cdadce91ce15df3134f401428f6b9f6b8f1ffdd6b9be98e94759bbfe09d19c96abfa96a811fce72856b2bb82ebec0fc6815489e4290f6ba4645616cba84f2f6 languageName: node linkType: hard @@ -10258,7 +10258,7 @@ __metadata: react-native-builder-bob: ^0.40.13 react-native-maps: ^1.26.17 react-native-monorepo-config: ^0.1.9 - react-native-nitro-modules: ^0.31.5 + react-native-nitro-modules: ^0.35.2 supercluster: ^8.0.1 languageName: unknown linkType: soft @@ -10286,25 +10286,25 @@ __metadata: eslint-config-prettier: ^10.1.8 eslint-plugin-prettier: ^5.5.4 jest: ^29.7.0 - nitrogen: ^0.31.5 + nitrogen: ^0.35.2 prettier: ^3.6.2 react: 19.1.0 react-native: 0.81.4 react-native-builder-bob: ^0.40.13 - react-native-nitro-modules: ^0.31.5 + react-native-nitro-modules: ^0.35.2 release-it: ^19.0.4 turbo: ^2.5.6 typescript: ^5.9.2 peerDependencies: react: "*" react-native: "*" - react-native-nitro-modules: ^0.31.5 + react-native-nitro-modules: ^0.35.2 languageName: unknown linkType: soft "react-native-maps@npm:^1.26.17": - version: 1.26.17 - resolution: "react-native-maps@npm:1.26.17" + version: 1.27.2 + resolution: "react-native-maps@npm:1.27.2" dependencies: "@types/geojson": ^7946.0.13 peerDependencies: @@ -10314,7 +10314,7 @@ __metadata: peerDependenciesMeta: react-native-web: optional: true - checksum: d718139d33a0ea1a00d80271db0c022719ff11c00932f1429d1830b905fa9c1958bd22c58966445b549c1db079557ed2a7a2cdc2d9c16b97152d3626f98d48ab + checksum: e6cf3faa7ce5d28ba66679781732ad429386773b1528b34c96c0a5bdd29d276af05a5058badbe03290b7eb89ded179b2768b9e8518946ff31741d2fc46ebd9e6 languageName: node linkType: hard @@ -10328,13 +10328,13 @@ __metadata: languageName: node linkType: hard -"react-native-nitro-modules@npm:^0.31.5": - version: 0.31.5 - resolution: "react-native-nitro-modules@npm:0.31.5" +"react-native-nitro-modules@npm:^0.35.2": + version: 0.35.2 + resolution: "react-native-nitro-modules@npm:0.35.2" peerDependencies: react: "*" react-native: "*" - checksum: 957c1c264d5a7bb791ca7aa0c97b577c0ba60bb5765f4bf6fdf64a6f414d33702d94909823b33a4fc1b01f3d51175669c779212e645c21ccd204197ea66ed701 + checksum: 7cf629d4d0d6025b06c766b043374c71eb1771da98a50fb34a4630704ab6252792fc03beda26f21d8cbfe6cd4ec286ce059e7824e4cf344b20e1808aebb298b9 languageName: node linkType: hard