diff --git a/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js b/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js index d56905285be..5cc4912aeec 100644 --- a/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js +++ b/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js @@ -36,7 +36,7 @@ const moduleTemplate = ` Native::_MODULE_NAME_::SpecJSI::Native::_MODULE_NAME_::SpecJSI(id instance, std::shared_ptr jsInvoker) : ObjCTurboModule("::_MODULE_NAME_::", instance, jsInvoker) { -::_PROPERTIES_MAP_:: +::_PROPERTIES_MAP_::::_CONVERSION_SELECTORS_:: }`.trim(); const getterTemplate = ` @@ -48,6 +48,9 @@ const getterTemplate = ` @end `.trim(); +const argConvertionTemplate = + '\n setMethodArgConversionSelector(@"::_ARG_NAME_::", ::_ARG_NUMBER_::, @"JS_Native::_MODULE_NAME_::_Spec::_SELECTOR_NAME_:::");'; + const template = ` /** * Copyright (c) Facebook, Inc. and its affiliates. @@ -221,6 +224,28 @@ module.exports = { ) .join('\n'), ) + .replace( + '::_CONVERSION_SELECTORS_::', + properties + .map(({name: propertyName, typeAnnotation: {params}}) => + params + .map((param, index) => + param.typeAnnotation.type === 'ObjectTypeAnnotation' && + param.typeAnnotation.properties + ? argConvertionTemplate + .replace( + '::_SELECTOR_NAME_::', + capitalizeFirstLetter(propertyName) + + capitalizeFirstLetter(param.name), + ) + .replace('::_ARG_NUMBER_::', index.toString()) + .replace('::_ARG_NAME_::', propertyName) + : '', + ) + .join(''), + ) + .join(''), + ) .replace(/::_MODULE_NAME_::/g, name); }) .join('\n'); diff --git a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleMm-test.js.snap b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleMm-test.js.snap index 7ce647467ad..2ae851ffa5f 100644 --- a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleMm-test.js.snap +++ b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleMm-test.js.snap @@ -40,6 +40,7 @@ static facebook::jsi::Value __hostFunction_NativeSampleTurboModuleSpecJSI_diffic NativeSampleTurboModuleSpecJSI::NativeSampleTurboModuleSpecJSI(id instance, std::shared_ptr jsInvoker) : ObjCTurboModule(\\"SampleTurboModule\\", instance, jsInvoker) { methodMap_[\\"difficult\\"] = MethodMetadata {1, __hostFunction_NativeSampleTurboModuleSpecJSI_difficult}; + setMethodArgConversionSelector(@\\"difficult\\", 0, @\\"JS_NativeSampleTurboModule_SpecDifficultA:\\"); }