From 9fb3700d359dd38614be73cab9101dacead83f05 Mon Sep 17 00:00:00 2001 From: Mohit Charkha <86604753+mohitcharkha@users.noreply.github.com> Date: Mon, 17 Oct 2022 06:47:13 -0700 Subject: [PATCH] Extract MisnamedModuleInterfaceParserError from Flow and Typescript into error-utils.js (#34916) Summary: This PR is part of https://github.com/facebook/react-native/issues/34872 This PR extracts MisnamedModuleFlowInterfaceParserError exception to a separate function inside an error-utils.js file ## Changelog [Internal] [Changed] - Extract MisnamedModuleInterfaceParserError to a seperate function inside error-utils.js Pull Request resolved: https://github.com/facebook/react-native/pull/34916 Test Plan: yarn jest react-native-codegen Added unit case in `error-utils-test.js` file Extract MisnamedModuleInterfaceParserError test Screenshot Reviewed By: cipolleschi Differential Revision: D40226541 Pulled By: motiz88 fbshipit-source-id: 6698ceff192c592383aa3419ac31de524c605919 --- .../src/parsers/__tests__/error-utils-test.js | 23 +++++++++++++++++++ .../src/parsers/error-utils.js | 16 +++++++++++++ .../src/parsers/errors.js | 1 - .../src/parsers/flow/modules/index.js | 10 ++------ .../src/parsers/typescript/modules/index.js | 10 ++------ 5 files changed, 43 insertions(+), 17 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 7741600668b..1b16f4a12e9 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 @@ -14,6 +14,7 @@ const { throwIfModuleInterfaceNotFound, throwIfMoreThanOneModuleRegistryCalls, + throwIfModuleInterfaceIsMisnamed, throwIfUnusedModuleInterfaceParserError, throwIfWrongNumberOfCallExpressionArgs, throwIfIncorrectModuleRegistryCallTypeParameterParserError, @@ -21,11 +22,33 @@ const { const { ModuleInterfaceNotFoundParserError, MoreThanOneModuleRegistryCallsParserError, + MisnamedModuleInterfaceParserError, UnusedModuleInterfaceParserError, IncorrectModuleRegistryCallArityParserError, IncorrectModuleRegistryCallTypeParameterParserError, } = require('../errors'); +describe('throwIfModuleInterfaceIsMisnamed', () => { + it("don't throw error if module interface name is Spec", () => { + const nativeModuleName = 'moduleName'; + const specId = {name: 'Spec'}; + const parserType = 'Flow'; + + expect(() => { + throwIfModuleInterfaceIsMisnamed(nativeModuleName, specId, parserType); + }).not.toThrow(MisnamedModuleInterfaceParserError); + }); + it('throw error if module interface is misnamed', () => { + const nativeModuleName = 'moduleName'; + const specId = {name: 'Name'}; + const parserType = 'TypeScript'; + + expect(() => { + throwIfModuleInterfaceIsMisnamed(nativeModuleName, specId, parserType); + }).toThrow(MisnamedModuleInterfaceParserError); + }); +}); + describe('throwIfModuleInterfaceNotFound', () => { it('throw error if there are zero module specs', () => { const nativeModuleName = 'moduleName'; diff --git a/packages/react-native-codegen/src/parsers/error-utils.js b/packages/react-native-codegen/src/parsers/error-utils.js index 2af7a01328f..2c3c237328d 100644 --- a/packages/react-native-codegen/src/parsers/error-utils.js +++ b/packages/react-native-codegen/src/parsers/error-utils.js @@ -13,6 +13,7 @@ import type {ParserType} from './errors'; const { + MisnamedModuleInterfaceParserError, ModuleInterfaceNotFoundParserError, MoreThanOneModuleRegistryCallsParserError, UnusedModuleInterfaceParserError, @@ -22,6 +23,20 @@ const { UnsupportedModulePropertyParserError, } = require('./errors.js'); +function throwIfModuleInterfaceIsMisnamed( + nativeModuleName: string, + moduleSpecId: $FlowFixMe, + parserType: ParserType, +) { + if (moduleSpecId.name !== 'Spec') { + throw new MisnamedModuleInterfaceParserError( + nativeModuleName, + moduleSpecId, + parserType, + ); + } +} + function throwIfModuleInterfaceNotFound( numberOfModuleSpecs: number, nativeModuleName: string, @@ -174,6 +189,7 @@ function throwIfModuleTypeIsUnsupported( } module.exports = { + throwIfModuleInterfaceIsMisnamed, throwIfModuleInterfaceNotFound, throwIfMoreThanOneModuleRegistryCalls, throwIfUnusedModuleInterfaceParserError, diff --git a/packages/react-native-codegen/src/parsers/errors.js b/packages/react-native-codegen/src/parsers/errors.js index e563b35998e..4882a9bdb43 100644 --- a/packages/react-native-codegen/src/parsers/errors.js +++ b/packages/react-native-codegen/src/parsers/errors.js @@ -34,7 +34,6 @@ class ParserError extends Error { Error.captureStackTrace(this, this.constructor); } } - class MisnamedModuleInterfaceParserError extends ParserError { constructor(nativeModuleName: string, id: $FlowFixMe, language: ParserType) { super( 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 49dd0f04e5e..813a90ceb4c 100644 --- a/packages/react-native-codegen/src/parsers/flow/modules/index.js +++ b/packages/react-native-codegen/src/parsers/flow/modules/index.js @@ -53,7 +53,6 @@ const { typeAliasResolution, } = require('../../parsers-primitives'); const { - MisnamedModuleInterfaceParserError, MoreThanOneModuleInterfaceParserError, UnnamedFunctionParamParserError, UnsupportedArrayElementTypeAnnotationParserError, @@ -70,6 +69,7 @@ const { const { throwIfModuleInterfaceNotFound, + throwIfModuleInterfaceIsMisnamed, throwIfUnusedModuleInterfaceParserError, throwIfWrongNumberOfCallExpressionArgs, throwIfIncorrectModuleRegistryCallTypeParameterParserError, @@ -613,13 +613,7 @@ function buildModuleSchema( const [moduleSpec] = moduleSpecs; - if (moduleSpec.id.name !== 'Spec') { - throw new MisnamedModuleInterfaceParserError( - hasteModuleName, - moduleSpec.id, - language, - ); - } + throwIfModuleInterfaceIsMisnamed(hasteModuleName, moduleSpec.id, language); // Parse Module Names const moduleName = tryParse((): string => { 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 32798b49bdb..438d7462955 100644 --- a/packages/react-native-codegen/src/parsers/typescript/modules/index.js +++ b/packages/react-native-codegen/src/parsers/typescript/modules/index.js @@ -53,7 +53,6 @@ const { typeAliasResolution, } = require('../../parsers-primitives'); const { - MisnamedModuleInterfaceParserError, MoreThanOneModuleInterfaceParserError, UnnamedFunctionParamParserError, UnsupportedArrayElementTypeAnnotationParserError, @@ -73,6 +72,7 @@ const { throwIfModuleTypeIsUnsupported, throwIfUnusedModuleInterfaceParserError, throwIfModuleInterfaceNotFound, + throwIfModuleInterfaceIsMisnamed, throwIfWrongNumberOfCallExpressionArgs, throwIfIncorrectModuleRegistryCallTypeParameterParserError, } = require('../../error-utils'); @@ -627,13 +627,7 @@ function buildModuleSchema( const [moduleSpec] = moduleSpecs; - if (moduleSpec.id.name !== 'Spec') { - throw new MisnamedModuleInterfaceParserError( - hasteModuleName, - moduleSpec.id, - language, - ); - } + throwIfModuleInterfaceIsMisnamed(hasteModuleName, moduleSpec.id, language); // Parse Module Names const moduleName = tryParse((): string => {