diff --git a/packages/react-native-codegen/src/CodegenSchema.d.ts b/packages/react-native-codegen/src/CodegenSchema.d.ts index e3487768b66..6b06670f4b1 100644 --- a/packages/react-native-codegen/src/CodegenSchema.d.ts +++ b/packages/react-native-codegen/src/CodegenSchema.d.ts @@ -368,6 +368,7 @@ export type NativeModuleEventEmitterBaseTypeAnnotation = | NativeModuleNumberTypeAnnotation | NativeModuleStringTypeAnnotation | NativeModuleTypeAliasTypeAnnotation + | NativeModuleGenericObjectTypeAnnotation | VoidTypeAnnotation; export type NativeModuleEventEmitterTypeAnnotation = diff --git a/packages/react-native-codegen/src/CodegenSchema.js b/packages/react-native-codegen/src/CodegenSchema.js index 3d13164dc6e..25dc03eff64 100644 --- a/packages/react-native-codegen/src/CodegenSchema.js +++ b/packages/react-native-codegen/src/CodegenSchema.js @@ -374,6 +374,7 @@ type NativeModuleEventEmitterBaseTypeAnnotation = | NativeModuleNumberTypeAnnotation | NativeModuleStringTypeAnnotation | NativeModuleTypeAliasTypeAnnotation + | NativeModuleGenericObjectTypeAnnotation | VoidTypeAnnotation; export type NativeModuleEventEmitterTypeAnnotation = diff --git a/packages/react-native-codegen/src/generators/modules/GenerateModuleJavaSpec.js b/packages/react-native-codegen/src/generators/modules/GenerateModuleJavaSpec.js index 86f94fbcee4..35a257b13c8 100644 --- a/packages/react-native-codegen/src/generators/modules/GenerateModuleJavaSpec.js +++ b/packages/react-native-codegen/src/generators/modules/GenerateModuleJavaSpec.js @@ -137,6 +137,7 @@ function translateEventEmitterTypeToJavaType( return 'double'; case 'BooleanTypeAnnotation': return 'boolean'; + case 'GenericObjectTypeAnnotation': case 'ObjectTypeAnnotation': case 'TypeAliasTypeAnnotation': imports.add('com.facebook.react.bridge.ReadableMap'); diff --git a/packages/react-native-codegen/src/generators/modules/GenerateModuleObjCpp/serializeEventEmitter.js b/packages/react-native-codegen/src/generators/modules/GenerateModuleObjCpp/serializeEventEmitter.js index aa8e2bb7526..b486563cc3a 100644 --- a/packages/react-native-codegen/src/generators/modules/GenerateModuleObjCpp/serializeEventEmitter.js +++ b/packages/react-native-codegen/src/generators/modules/GenerateModuleObjCpp/serializeEventEmitter.js @@ -22,6 +22,7 @@ function getEventEmitterTypeObjCType( return 'NSNumber *_Nonnull'; case 'BooleanTypeAnnotation': return 'BOOL'; + case 'GenericObjectTypeAnnotation': case 'ObjectTypeAnnotation': case 'TypeAliasTypeAnnotation': return 'NSDictionary *'; diff --git a/packages/react-native-codegen/src/parsers/flow/modules/__test_fixtures__/fixtures.js b/packages/react-native-codegen/src/parsers/flow/modules/__test_fixtures__/fixtures.js index 25c692ccd5b..a555772d09e 100644 --- a/packages/react-native-codegen/src/parsers/flow/modules/__test_fixtures__/fixtures.js +++ b/packages/react-native-codegen/src/parsers/flow/modules/__test_fixtures__/fixtures.js @@ -643,6 +643,8 @@ export type ObjectStruct = { c?: ?string, }; +export type MappedObject = {[string]: string}; + export interface Spec extends TurboModule { +onEvent1: EventEmitter; +onEvent2: EventEmitter; @@ -650,6 +652,7 @@ export interface Spec extends TurboModule { +onEvent4: EventEmitter; +onEvent5: EventEmitter; +onEvent6: EventEmitter; + +onEvent7: EventEmitter; } export default TurboModuleRegistry.getEnforcing('SampleTurboModule'); diff --git a/packages/react-native-codegen/src/parsers/flow/modules/__tests__/__snapshots__/module-parser-snapshot-test.js.snap b/packages/react-native-codegen/src/parsers/flow/modules/__tests__/__snapshots__/module-parser-snapshot-test.js.snap index 48dbda72558..aa318c18c2c 100644 --- a/packages/react-native-codegen/src/parsers/flow/modules/__tests__/__snapshots__/module-parser-snapshot-test.js.snap +++ b/packages/react-native-codegen/src/parsers/flow/modules/__tests__/__snapshots__/module-parser-snapshot-test.js.snap @@ -1527,6 +1527,19 @@ exports[`RN Codegen Flow Parser can generate fixture NATIVE_MODULE_WITH_EVENT_EM } } } + }, + { + 'name': 'onEvent7', + 'optional': false, + 'typeAnnotation': { + 'type': 'EventEmitterTypeAnnotation', + 'typeAnnotation': { + 'type': 'GenericObjectTypeAnnotation', + 'dictionaryValueType': { + 'type': 'StringTypeAnnotation' + } + } + } } ], 'methods': [] diff --git a/packages/react-native-codegen/src/parsers/typescript/modules/__test_fixtures__/fixtures.js b/packages/react-native-codegen/src/parsers/typescript/modules/__test_fixtures__/fixtures.js index 7faff4f0a69..7ebbe9846ad 100644 --- a/packages/react-native-codegen/src/parsers/typescript/modules/__test_fixtures__/fixtures.js +++ b/packages/react-native-codegen/src/parsers/typescript/modules/__test_fixtures__/fixtures.js @@ -742,6 +742,8 @@ export type ObjectStruct = { c?: string | null; }; +export type MappedObject = {[key: string]: string}; + export interface Spec extends TurboModule { readonly onEvent1: EventEmitter; readonly onEvent2: EventEmitter; @@ -749,6 +751,7 @@ export interface Spec extends TurboModule { readonly onEvent4: EventEmitter; readonly onEvent5: EventEmitter; readonly onEvent6: EventEmitter; + readonly onEvent7: EventEmitter; } export default TurboModuleRegistry.getEnforcing('SampleTurboModule'); diff --git a/packages/react-native-codegen/src/parsers/typescript/modules/__tests__/__snapshots__/typescript-module-parser-snapshot-test.js.snap b/packages/react-native-codegen/src/parsers/typescript/modules/__tests__/__snapshots__/typescript-module-parser-snapshot-test.js.snap index bc7eb2ba00b..55befcf241c 100644 --- a/packages/react-native-codegen/src/parsers/typescript/modules/__tests__/__snapshots__/typescript-module-parser-snapshot-test.js.snap +++ b/packages/react-native-codegen/src/parsers/typescript/modules/__tests__/__snapshots__/typescript-module-parser-snapshot-test.js.snap @@ -1727,6 +1727,19 @@ exports[`RN Codegen TypeScript Parser can generate fixture NATIVE_MODULE_WITH_EV } } } + }, + { + 'name': 'onEvent7', + 'optional': false, + 'typeAnnotation': { + 'type': 'EventEmitterTypeAnnotation', + 'typeAnnotation': { + 'type': 'GenericObjectTypeAnnotation', + 'dictionaryValueType': { + 'type': 'StringTypeAnnotation' + } + } + } } ], 'methods': []