From aba6be694ee9d804877097f6a68248ef9259849b Mon Sep 17 00:00:00 2001 From: dhruvtailor7 Date: Wed, 19 Oct 2022 01:38:28 -0700 Subject: [PATCH] Extract UnsupportedObjectPropertyValueTypeAnnotationParserError to a throwing function (#34917) Summary: This PR is a part of https://github.com/facebook/react-native/issues/34872. Extracted the UnsupportedObjectPropertyValueTypeAnnotationParserError in its own throwing function and reuse that function passing a proper type. ## Changelog [Internal] [Changed] - Extract the UnsupportedObjectPropertyValueTypeAnnotationParserError in its own throwing function and reuse that function passing a proper type. Pull Request resolved: https://github.com/facebook/react-native/pull/34917 Test Plan: Output of yarn jest react-native-codegen. Screenshot 2022-10-10 at 12 55 39 PM Reviewed By: cortinico Differential Revision: D40424885 Pulled By: cipolleschi fbshipit-source-id: 08d4d13ee3959391261fe13c190a4bb893970757 --- .../src/parsers/error-utils.js | 27 +++++++++++ .../src/parsers/flow/modules/index.js | 48 +++++++------------ .../src/parsers/typescript/modules/index.js | 48 +++++++------------ 3 files changed, 59 insertions(+), 64 deletions(-) diff --git a/packages/react-native-codegen/src/parsers/error-utils.js b/packages/react-native-codegen/src/parsers/error-utils.js index 2c3c237328d..ea419933ec8 100644 --- a/packages/react-native-codegen/src/parsers/error-utils.js +++ b/packages/react-native-codegen/src/parsers/error-utils.js @@ -19,6 +19,7 @@ const { UnusedModuleInterfaceParserError, IncorrectModuleRegistryCallArityParserError, IncorrectModuleRegistryCallTypeParameterParserError, + UnsupportedObjectPropertyValueTypeAnnotationParserError, UntypedModuleRegistryCallParserError, UnsupportedModulePropertyParserError, } = require('./errors.js'); @@ -188,10 +189,36 @@ function throwIfModuleTypeIsUnsupported( } } +const UnsupportedObjectPropertyTypeToInvalidPropertyValueTypeMap = { + FunctionTypeAnnotation: 'FunctionTypeAnnotation', + VoidTypeAnnotation: 'void', + PromiseTypeAnnotation: 'Promise', +}; + +function throwIfPropertyValueTypeIsUnsupported( + moduleName: string, + propertyValue: $FlowFixMe, + propertyKey: string, + type: string, + language: ParserType, +) { + const invalidPropertyValueType = + UnsupportedObjectPropertyTypeToInvalidPropertyValueTypeMap[type]; + + throw new UnsupportedObjectPropertyValueTypeAnnotationParserError( + moduleName, + propertyValue, + propertyKey, + invalidPropertyValueType, + language, + ); +} + module.exports = { throwIfModuleInterfaceIsMisnamed, throwIfModuleInterfaceNotFound, throwIfMoreThanOneModuleRegistryCalls, + throwIfPropertyValueTypeIsUnsupported, throwIfUnusedModuleInterfaceParserError, throwIfWrongNumberOfCallExpressionArgs, throwIfIncorrectModuleRegistryCallTypeParameterParserError, diff --git a/packages/react-native-codegen/src/parsers/flow/modules/index.js b/packages/react-native-codegen/src/parsers/flow/modules/index.js index d9e6b13abe0..d69629734aa 100644 --- a/packages/react-native-codegen/src/parsers/flow/modules/index.js +++ b/packages/react-native-codegen/src/parsers/flow/modules/index.js @@ -63,7 +63,6 @@ const { UnsupportedEnumDeclarationParserError, UnsupportedUnionTypeAnnotationParserError, UnsupportedObjectPropertyTypeAnnotationParserError, - UnsupportedObjectPropertyValueTypeAnnotationParserError, IncorrectModuleRegistryCallArgumentTypeParserError, } = require('../../errors.js'); const {verifyPlatforms} = require('../../utils'); @@ -71,6 +70,7 @@ const {verifyPlatforms} = require('../../utils'); const { throwIfModuleInterfaceNotFound, throwIfModuleInterfaceIsMisnamed, + throwIfPropertyValueTypeIsUnsupported, throwIfUnusedModuleInterfaceParserError, throwIfWrongNumberOfCallExpressionArgs, throwIfIncorrectModuleRegistryCallTypeParameterParserError, @@ -309,44 +309,28 @@ function translateTypeAnnotation( ), ); - if (propertyTypeAnnotation.type === 'FunctionTypeAnnotation') { - throw new UnsupportedObjectPropertyValueTypeAnnotationParserError( + if ( + propertyTypeAnnotation.type === 'FunctionTypeAnnotation' || + propertyTypeAnnotation.type === 'PromiseTypeAnnotation' || + propertyTypeAnnotation.type === 'VoidTypeAnnotation' + ) { + throwIfPropertyValueTypeIsUnsupported( hasteModuleName, property.value, property.key, propertyTypeAnnotation.type, language, ); + } else { + return { + name: key.name, + optional, + typeAnnotation: wrapNullable( + isPropertyNullable, + propertyTypeAnnotation, + ), + }; } - - if (propertyTypeAnnotation.type === 'VoidTypeAnnotation') { - throw new UnsupportedObjectPropertyValueTypeAnnotationParserError( - hasteModuleName, - property.value, - property.key, - 'void', - language, - ); - } - - if (propertyTypeAnnotation.type === 'PromiseTypeAnnotation') { - throw new UnsupportedObjectPropertyValueTypeAnnotationParserError( - hasteModuleName, - property.value, - property.key, - 'Promise', - language, - ); - } - - return { - name: key.name, - optional, - typeAnnotation: wrapNullable( - isPropertyNullable, - propertyTypeAnnotation, - ), - }; }); }, ) diff --git a/packages/react-native-codegen/src/parsers/typescript/modules/index.js b/packages/react-native-codegen/src/parsers/typescript/modules/index.js index 90b04f3c38d..a084949635f 100644 --- a/packages/react-native-codegen/src/parsers/typescript/modules/index.js +++ b/packages/react-native-codegen/src/parsers/typescript/modules/index.js @@ -63,13 +63,13 @@ const { UnsupportedEnumDeclarationParserError, UnsupportedUnionTypeAnnotationParserError, UnsupportedObjectPropertyTypeAnnotationParserError, - UnsupportedObjectPropertyValueTypeAnnotationParserError, IncorrectModuleRegistryCallArgumentTypeParserError, } = require('../../errors.js'); const {verifyPlatforms} = require('../../utils'); const { throwIfUntypedModule, + throwIfPropertyValueTypeIsUnsupported, throwIfModuleTypeIsUnsupported, throwIfUnusedModuleInterfaceParserError, throwIfModuleInterfaceNotFound, @@ -324,44 +324,28 @@ function translateTypeAnnotation( ), ); - if (propertyTypeAnnotation.type === 'FunctionTypeAnnotation') { - throw new UnsupportedObjectPropertyValueTypeAnnotationParserError( + if ( + propertyTypeAnnotation.type === 'FunctionTypeAnnotation' || + propertyTypeAnnotation.type === 'PromiseTypeAnnotation' || + propertyTypeAnnotation.type === 'VoidTypeAnnotation' + ) { + throwIfPropertyValueTypeIsUnsupported( hasteModuleName, property.typeAnnotation.typeAnnotation, property.key, propertyTypeAnnotation.type, language, ); + } else { + return { + name: key.name, + optional, + typeAnnotation: wrapNullable( + isPropertyNullable, + propertyTypeAnnotation, + ), + }; } - - if (propertyTypeAnnotation.type === 'VoidTypeAnnotation') { - throw new UnsupportedObjectPropertyValueTypeAnnotationParserError( - hasteModuleName, - property.typeAnnotation.typeAnnotation, - property.key, - 'void', - language, - ); - } - - if (propertyTypeAnnotation.type === 'PromiseTypeAnnotation') { - throw new UnsupportedObjectPropertyValueTypeAnnotationParserError( - hasteModuleName, - property.typeAnnotation.typeAnnotation, - property.key, - 'Promise', - language, - ); - } - - return { - name: key.name, - optional, - typeAnnotation: wrapNullable( - isPropertyNullable, - propertyTypeAnnotation, - ), - }; }); }, )