diff --git a/packages/react-native-codegen/src/CodegenSchema.js b/packages/react-native-codegen/src/CodegenSchema.js index a10b8d29510..c66dc81b9b1 100644 --- a/packages/react-native-codegen/src/CodegenSchema.js +++ b/packages/react-native-codegen/src/CodegenSchema.js @@ -148,11 +148,11 @@ export type FunctionTypeAnnotationParamTypeAnnotation = |}> | $ReadOnly<{| type: 'ArrayTypeAnnotation', - elementType: FunctionTypeAnnotationParamTypeAnnotation, + elementType: ?FunctionTypeAnnotationParamTypeAnnotation, |}> | $ReadOnly<{| type: 'ObjectTypeAnnotation', - properties: $ReadOnlyArray, + properties: ?$ReadOnlyArray, |}> | $ReadOnly<{| type: 'FunctionTypeAnnotation', @@ -174,7 +174,7 @@ export type FunctionTypeAnnotationReturn = |}> | $ReadOnly<{| type: 'ArrayTypeAnnotation', - elementType: FunctionTypeAnnotationReturnArrayElementType, + elementType: ?FunctionTypeAnnotationReturnArrayElementType, |}> | $ReadOnly<{| type: 'GenericPromiseTypeAnnotation', @@ -182,7 +182,7 @@ export type FunctionTypeAnnotationReturn = |}> | $ReadOnly<{| type: 'ObjectTypeAnnotation', - properties: $ReadOnlyArray, + properties: ?$ReadOnlyArray, |}>; export type FunctionTypeAnnotationParam = $ReadOnly<{| 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 8342d6a1d77..d94178d74e4 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 @@ -291,6 +291,29 @@ export interface Spec extends TurboModule { export default TurboModuleRegistry.getEnforcing('SampleTurboModule'); +`; +const NATIVE_MODULE_WITH_ARRAY_WITH_UNION_AND_TOUPLE = ` +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + * @format + */ + +'use strict'; + +import type {TurboModule} from '../RCTExport'; +import * as TurboModuleRegistry from '../TurboModuleRegistry'; + +export interface Spec extends TurboModule { + +getArray: (arg: Array<[string, string]>) => Array; +} + +export default TurboModuleRegistry.getEnforcing('SampleTurboModule'); + `; const NATIVE_MODULE_WITH_ARRAY_WITH_ALIAS = ` @@ -400,6 +423,7 @@ export default TurboModuleRegistry.getEnforcing('SampleTurboModule'); module.exports = { NATIVE_MODULE_WITH_OBJECT_WITH_OBJECT_DEIFNED_IN_FILE_AS_PROPERTY, + NATIVE_MODULE_WITH_ARRAY_WITH_UNION_AND_TOUPLE, NATIVE_MODULE_WITH_WITH_FLOAT_AND_INT32, NATIVE_MODULE_WITH_WITH_ALIASES, NATIVE_MODULE_WITH_PROMISE, diff --git a/packages/react-native-codegen/src/parsers/flow/modules/__tests__/__snapshots__/module-parser-test.js.snap b/packages/react-native-codegen/src/parsers/flow/modules/__tests__/__snapshots__/module-parser-test.js.snap index 3dac11c9d9c..41c15d7d216 100644 --- a/packages/react-native-codegen/src/parsers/flow/modules/__tests__/__snapshots__/module-parser-test.js.snap +++ b/packages/react-native-codegen/src/parsers/flow/modules/__tests__/__snapshots__/module-parser-test.js.snap @@ -73,6 +73,42 @@ Object { } `; +exports[`RN Codegen Flow Parser can generate fixture NATIVE_MODULE_WITH_ARRAY_WITH_UNION_AND_TOUPLE 1`] = ` +Object { + "modules": Object { + "NativeSampleTurboModule": Object { + "nativeModules": Object { + "SampleTurboModule": Object { + "properties": Array [ + Object { + "name": "getArray", + "typeAnnotation": Object { + "optional": false, + "params": Array [ + Object { + "name": "arg", + "nullable": false, + "typeAnnotation": Object { + "elementType": undefined, + "type": "ArrayTypeAnnotation", + }, + }, + ], + "returnTypeAnnotation": Object { + "elementType": undefined, + "type": "ArrayTypeAnnotation", + }, + "type": "FunctionTypeAnnotation", + }, + }, + ], + }, + }, + }, + }, +} +`; + exports[`RN Codegen Flow Parser can generate fixture NATIVE_MODULE_WITH_BASIC_ARRAY 1`] = ` Object { "modules": Object { diff --git a/packages/react-native-codegen/src/parsers/flow/modules/methods.js b/packages/react-native-codegen/src/parsers/flow/modules/methods.js index 1d0ffb3dac2..b66f52bbbdc 100644 --- a/packages/react-native-codegen/src/parsers/flow/modules/methods.js +++ b/packages/react-native-codegen/src/parsers/flow/modules/methods.js @@ -55,7 +55,7 @@ function getElementTypeForArrayOrObject( arrayParam, paramName, types: TypeMap, -): FunctionTypeAnnotationParamTypeAnnotation { +): FunctionTypeAnnotationParamTypeAnnotation | typeof undefined { const typeAnnotation = getValueFromTypes(arrayParam, types); const type = typeAnnotation.type === 'GenericTypeAnnotation' @@ -113,6 +113,9 @@ function getElementTypeForArrayOrObject( return { type: 'FloatTypeAnnotation', }; + case 'TupleTypeAnnotation': + case 'UnionTypeAnnotation': + return undefined; default: throw new Error( `Unsupported param type for method "${name}", param "${paramName}". Found ${type}`,