From f799023abd74917c663a2c224a7cf63bcc97a2dd Mon Sep 17 00:00:00 2001 From: dhruvtailor7 Date: Wed, 12 Oct 2022 12:49:37 +0530 Subject: [PATCH] extracted `UntypedModuleRegistryCallParserError` to a separated file. --- .../src/parsers/__tests__/error-utils-test.js | 55 +++++++++++++++++++ .../src/parsers/error-utils.js | 38 +++++++++++++ .../src/parsers/flow/modules/index.js | 19 +++---- .../src/parsers/typescript/modules/index.js | 19 +++---- 4 files changed, 111 insertions(+), 20 deletions(-) create mode 100644 packages/react-native-codegen/src/parsers/__tests__/error-utils-test.js create mode 100644 packages/react-native-codegen/src/parsers/error-utils.js 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 new file mode 100644 index 000000000000..be415ece27df --- /dev/null +++ b/packages/react-native-codegen/src/parsers/__tests__/error-utils-test.js @@ -0,0 +1,55 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + * @flow strict-local + * @oncall react_native + */ + +'use strict'; + +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 new file mode 100644 index 000000000000..ce720333b33d --- /dev/null +++ b/packages/react-native-codegen/src/parsers/error-utils.js @@ -0,0 +1,38 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + */ + +'use strict'; + +import type {ParserType} from './errors'; + +const {UntypedModuleRegistryCallParserError} = require('./errors'); + +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 = { + 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 ad9de4acf4d0..4031deeb61c5 100644 --- a/packages/react-native-codegen/src/parsers/flow/modules/index.js +++ b/packages/react-native-codegen/src/parsers/flow/modules/index.js @@ -64,11 +64,11 @@ const { UnsupportedObjectPropertyValueTypeAnnotationParserError, UnusedModuleInterfaceParserError, MoreThanOneModuleRegistryCallsParserError, - UntypedModuleRegistryCallParserError, IncorrectModuleRegistryCallTypeParameterParserError, IncorrectModuleRegistryCallArityParserError, IncorrectModuleRegistryCallArgumentTypeParserError, } = require('../../errors.js'); +const {throwIfUntypedModule} = require('../../error-utils'); const language = 'Flow'; @@ -663,15 +663,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, + ); if ( typeArguments.type !== 'TypeParameterInstantiation' || 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 37dc652ffad4..267ee97509e2 100644 --- a/packages/react-native-codegen/src/parsers/typescript/modules/index.js +++ b/packages/react-native-codegen/src/parsers/typescript/modules/index.js @@ -64,11 +64,11 @@ const { UnsupportedObjectPropertyValueTypeAnnotationParserError, UnusedModuleInterfaceParserError, MoreThanOneModuleRegistryCallsParserError, - UntypedModuleRegistryCallParserError, IncorrectModuleRegistryCallTypeParameterParserError, IncorrectModuleRegistryCallArityParserError, IncorrectModuleRegistryCallArgumentTypeParserError, } = require('../../errors.js'); +const {throwIfUntypedModule} = require('../../error-utils'); const language = 'TypeScript'; @@ -697,15 +697,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, + ); if ( typeParameters.type !== 'TSTypeParameterInstantiation' ||