From 1e15e213483c850bd5eee54a32023814e817de62 Mon Sep 17 00:00:00 2001 From: dhruvtailor7 Date: Fri, 14 Oct 2022 03:09:51 -0700 Subject: [PATCH] extracted `UntypedModuleRegistryCallParserError` to a throwing function in error-utils.js (#34953) Summary: This PR is part of https://github.com/facebook/react-native/issues/34872. As a part of this PR, `UntypedModuleRegistryCallParserError` is separated into its own throwing function in `error-utils.js` file and is used in both Flow and TypeScript parsers ## Changelog [Internal] [Changed] - Extract `UntypedModuleRegistryCallParserError` to a separate function inside `error-utils.js` file. Pull Request resolved: https://github.com/facebook/react-native/pull/34953 Test Plan: Added unit case in error-utils-test.js file to test the new function. Output of `yarn jest react-native-codegen` ensures all passed test cases. Screenshot 2022-10-12 at 12 44 36 PM Reviewed By: christophpurrer Differential Revision: D40297017 Pulled By: cipolleschi fbshipit-source-id: b02dcf0e110ab903a0d1831783194ae4a543075b --- .../src/parsers/__tests__/error-utils-test.js | 43 +++++++++++++++++++ .../src/parsers/error-utils.js | 21 +++++++++ .../src/parsers/flow/modules/index.js | 19 ++++---- .../src/parsers/typescript/modules/index.js | 19 ++++---- 4 files changed, 82 insertions(+), 20 deletions(-) diff --git a/packages/react-native-codegen/src/parsers/__tests__/error-utils-test.js b/packages/react-native-codegen/src/parsers/__tests__/error-utils-test.js index 1f0ee9a7185c2e..24e0fb761f8b25 100644 --- a/packages/react-native-codegen/src/parsers/__tests__/error-utils-test.js +++ b/packages/react-native-codegen/src/parsers/__tests__/error-utils-test.js @@ -400,3 +400,46 @@ describe('throwIfIncorrectModuleRegistryCallTypeParameterParserError', () => { }).not.toThrow(IncorrectModuleRegistryCallTypeParameterParserError); }); }); + +describe('throwIfUntypedModule', () => { + const {throwIfUntypedModule} = require('../error-utils'); + const {UntypedModuleRegistryCallParserError} = require('../errors'); + const hasteModuleName = 'moduleName'; + const methodName = 'methodName'; + const moduleName = 'moduleName'; + const callExpressions = []; + + it('should throw error if module does not have a type', () => { + const typeArguments = null; + const language = 'Flow'; + expect(() => + throwIfUntypedModule( + typeArguments, + hasteModuleName, + callExpressions, + methodName, + moduleName, + language, + ), + ).toThrowError(UntypedModuleRegistryCallParserError); + }); + + it('should not throw error if module have a type', () => { + const typeArguments = { + type: 'TSTypeParameterInstantiations', + params: [], + }; + + const language = 'TypeScript'; + expect(() => + throwIfUntypedModule( + typeArguments, + hasteModuleName, + callExpressions, + methodName, + moduleName, + language, + ), + ).not.toThrowError(UntypedModuleRegistryCallParserError); + }); +}); diff --git a/packages/react-native-codegen/src/parsers/error-utils.js b/packages/react-native-codegen/src/parsers/error-utils.js index d19d50681ebbcb..832e7211c91179 100644 --- a/packages/react-native-codegen/src/parsers/error-utils.js +++ b/packages/react-native-codegen/src/parsers/error-utils.js @@ -18,6 +18,7 @@ const { UnusedModuleInterfaceParserError, IncorrectModuleRegistryCallArityParserError, IncorrectModuleRegistryCallTypeParameterParserError, + UntypedModuleRegistryCallParserError, } = require('./errors.js'); function throwIfModuleInterfaceNotFound( @@ -122,10 +123,30 @@ function throwIfIncorrectModuleRegistryCallTypeParameterParserError( } } +function throwIfUntypedModule( + typeArguments: $FlowFixMe, + hasteModuleName: string, + callExpression: $FlowFixMe, + methodName: string, + $moduleName: string, + language: ParserType, +) { + if (typeArguments == null) { + throw new UntypedModuleRegistryCallParserError( + hasteModuleName, + callExpression, + methodName, + $moduleName, + language, + ); + } +} + module.exports = { throwIfModuleInterfaceNotFound, throwIfMoreThanOneModuleRegistryCalls, throwIfUnusedModuleInterfaceParserError, throwIfWrongNumberOfCallExpressionArgs, throwIfIncorrectModuleRegistryCallTypeParameterParserError, + throwIfUntypedModule, }; 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 cd2305eb3258fb..2f34d4298e4531 100644 --- a/packages/react-native-codegen/src/parsers/flow/modules/index.js +++ b/packages/react-native-codegen/src/parsers/flow/modules/index.js @@ -66,9 +66,9 @@ const { UnsupportedModulePropertyParserError, UnsupportedObjectPropertyTypeAnnotationParserError, UnsupportedObjectPropertyValueTypeAnnotationParserError, - UntypedModuleRegistryCallParserError, IncorrectModuleRegistryCallArgumentTypeParserError, } = require('../../errors.js'); +const {throwIfUntypedModule} = require('../../error-utils'); const { throwIfModuleInterfaceNotFound, @@ -673,15 +673,14 @@ function buildModuleSchema( const $moduleName = callExpression.arguments[0].value; - if (typeArguments == null) { - throw new UntypedModuleRegistryCallParserError( - hasteModuleName, - callExpression, - methodName, - $moduleName, - language, - ); - } + throwIfUntypedModule( + typeArguments, + hasteModuleName, + callExpression, + methodName, + $moduleName, + language, + ); throwIfIncorrectModuleRegistryCallTypeParameterParserError( hasteModuleName, 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 b480bc2a61d2a1..71e474b5f81ca7 100644 --- a/packages/react-native-codegen/src/parsers/typescript/modules/index.js +++ b/packages/react-native-codegen/src/parsers/typescript/modules/index.js @@ -66,9 +66,9 @@ const { UnsupportedModulePropertyParserError, UnsupportedObjectPropertyTypeAnnotationParserError, UnsupportedObjectPropertyValueTypeAnnotationParserError, - UntypedModuleRegistryCallParserError, IncorrectModuleRegistryCallArgumentTypeParserError, } = require('../../errors.js'); +const {throwIfUntypedModule} = require('../../error-utils'); const { throwIfUnusedModuleInterfaceParserError, @@ -688,15 +688,14 @@ function buildModuleSchema( const $moduleName = callExpression.arguments[0].value; - if (typeParameters == null) { - throw new UntypedModuleRegistryCallParserError( - hasteModuleName, - callExpression, - methodName, - $moduleName, - language, - ); - } + throwIfUntypedModule( + typeParameters, + hasteModuleName, + callExpression, + methodName, + $moduleName, + language, + ); throwIfIncorrectModuleRegistryCallTypeParameterParserError( hasteModuleName,