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 => {