nitro-codegen
Version:
The code-generator for react-native-nitro-modules.
33 lines (32 loc) • 1.23 kB
JavaScript
import { NitroConfig } from '../../config/NitroConfig.js';
import { getHybridObjectName } from '../getHybridObjectName.js';
export function createJNIHybridObjectRegistration({ hybridObjectName, jniClassName, }) {
const { JHybridTSpec } = getHybridObjectName(hybridObjectName);
const jniNamespace = NitroConfig.getAndroidPackage('c++/jni', jniClassName);
return {
requiredImports: [
{ name: `${JHybridTSpec}.hpp`, language: 'c++', space: 'user' },
{
name: 'NitroModules/JNISharedPtr.hpp',
language: 'c++',
space: 'system',
},
{
name: 'NitroModules/DefaultConstructableObject.hpp',
language: 'c++',
space: 'system',
},
],
cppCode: `
HybridObjectRegistry::registerHybridObjectConstructor(
"${hybridObjectName}",
[]() -> std::shared_ptr<HybridObject> {
static DefaultConstructableObject<${JHybridTSpec}::javaobject> object("${jniNamespace}");
auto instance = object.create();
auto globalRef = jni::make_global(instance);
return JNISharedPtr::make_shared_from_jni<${JHybridTSpec}>(globalRef);
}
);
`.trim(),
};
}