From 85dc2e393f93511307a53ea2bd515921fe7be2e2 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Fri, 5 Jul 2024 12:37:47 -0700 Subject: [PATCH] Allow map type objects in Java/ObjC TM EventEmitter (#45271) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/45271 Changelog: [Internal] Allow map type objects in Java/ObjC TM EventEmitter Reviewed By: rshest Differential Revision: D59360044 fbshipit-source-id: 6fce094586ed2ad55a0d83a8a83ff554e2ba000e --- .../react-native-codegen/src/CodegenSchema.d.ts | 1 + packages/react-native-codegen/src/CodegenSchema.js | 1 + .../generators/modules/GenerateModuleJavaSpec.js | 1 + .../GenerateModuleObjCpp/serializeEventEmitter.js | 1 + .../flow/modules/__test_fixtures__/fixtures.js | 3 +++ .../module-parser-snapshot-test.js.snap | 13 +++++++++++++ .../modules/__test_fixtures__/fixtures.js | 3 +++ .../typescript-module-parser-snapshot-test.js.snap | 13 +++++++++++++ 8 files changed, 36 insertions(+) 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': []