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 717897c350c..8248eeb2af3 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 @@ -19,8 +19,12 @@ const { throwIfWrongNumberOfCallExpressionArgs, throwIfIncorrectModuleRegistryCallTypeParameterParserError, throwIfUnsupportedFunctionReturnTypeAnnotationParserError, + throwIfMoreThanOneModuleInterfaceParserError, + throwIfModuleTypeIsUnsupported, + throwIfUntypedModule, } = require('../error-utils'); const { + UnsupportedModulePropertyParserError, ModuleInterfaceNotFoundParserError, MoreThanOneModuleRegistryCallsParserError, MisnamedModuleInterfaceParserError, @@ -28,6 +32,8 @@ const { IncorrectModuleRegistryCallArityParserError, IncorrectModuleRegistryCallTypeParameterParserError, UnsupportedFunctionReturnTypeAnnotationParserError, + UntypedModuleRegistryCallParserError, + MoreThanOneModuleInterfaceParserError, } = require('../errors'); describe('throwIfModuleInterfaceIsMisnamed', () => { @@ -484,8 +490,6 @@ describe('throwIfIncorrectModuleRegistryCallTypeParameterParserError', () => { }); describe('throwIfUntypedModule', () => { - const {throwIfUntypedModule} = require('../error-utils'); - const {UntypedModuleRegistryCallParserError} = require('../errors'); const hasteModuleName = 'moduleName'; const methodName = 'methodName'; const moduleName = 'moduleName'; @@ -527,8 +531,6 @@ describe('throwIfUntypedModule', () => { }); describe('throwIfModuleTypeIsUnsupported', () => { - const {throwIfModuleTypeIsUnsupported} = require('../error-utils.js'); - const {UnsupportedModulePropertyParserError} = require('../errors.js'); const hasteModuleName = 'moduleName'; const property = {value: 'value', key: {name: 'name'}}; it("don't throw error if module type is FunctionTypeAnnotation in Flow", () => { @@ -602,3 +604,32 @@ describe('throwIfModuleTypeIsUnsupported', () => { }).toThrow(UnsupportedModulePropertyParserError); }); }); + +describe('throwIfMoreThanOneModuleInterfaceParserError', () => { + it("don't throw error if module specs length is <= 1", () => { + const nativeModuleName = 'moduleName'; + const moduleSpecs = []; + const parserType = 'Flow'; + + expect(() => { + throwIfMoreThanOneModuleInterfaceParserError( + nativeModuleName, + moduleSpecs, + parserType, + ); + }).not.toThrow(MoreThanOneModuleInterfaceParserError); + }); + it('throw error if module specs is > 1 ', () => { + const nativeModuleName = 'moduleName'; + const moduleSpecs = [{id: {name: 'Name-1'}}, {id: {name: 'Name-2'}}]; + const parserType = 'TypeScript'; + + expect(() => { + throwIfMoreThanOneModuleInterfaceParserError( + nativeModuleName, + moduleSpecs, + parserType, + ); + }).toThrow(MoreThanOneModuleInterfaceParserError); + }); +}); diff --git a/packages/react-native-codegen/src/parsers/error-utils.js b/packages/react-native-codegen/src/parsers/error-utils.js index 31d134345e0..4bfd2042f6c 100644 --- a/packages/react-native-codegen/src/parsers/error-utils.js +++ b/packages/react-native-codegen/src/parsers/error-utils.js @@ -23,6 +23,7 @@ const { UnsupportedObjectPropertyValueTypeAnnotationParserError, UntypedModuleRegistryCallParserError, UnsupportedModulePropertyParserError, + MoreThanOneModuleInterfaceParserError, } = require('./errors.js'); function throwIfModuleInterfaceIsMisnamed( @@ -233,6 +234,21 @@ function throwIfPropertyValueTypeIsUnsupported( ); } +function throwIfMoreThanOneModuleInterfaceParserError( + nativeModuleName: string, + moduleSpecs: $ReadOnlyArray<$FlowFixMe>, + parserType: ParserType, +) { + if (moduleSpecs.length > 1) { + throw new MoreThanOneModuleInterfaceParserError( + nativeModuleName, + moduleSpecs, + moduleSpecs.map(node => node.id.name), + parserType, + ); + } +} + module.exports = { throwIfModuleInterfaceIsMisnamed, throwIfUnsupportedFunctionReturnTypeAnnotationParserError, @@ -244,4 +260,5 @@ module.exports = { throwIfIncorrectModuleRegistryCallTypeParameterParserError, throwIfUntypedModule, throwIfModuleTypeIsUnsupported, + throwIfMoreThanOneModuleInterfaceParserError, }; 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 0a4ffe69b8a..9e9f3e6abe3 100644 --- a/packages/react-native-codegen/src/parsers/flow/modules/index.js +++ b/packages/react-native-codegen/src/parsers/flow/modules/index.js @@ -53,8 +53,8 @@ const { emitStringish, typeAliasResolution, } = require('../../parsers-primitives'); + const { - MoreThanOneModuleInterfaceParserError, UnnamedFunctionParamParserError, UnsupportedArrayElementTypeAnnotationParserError, UnsupportedGenericParserError, @@ -65,6 +65,7 @@ const { UnsupportedObjectPropertyTypeAnnotationParserError, IncorrectModuleRegistryCallArgumentTypeParserError, } = require('../../errors.js'); + const {verifyPlatforms} = require('../../utils'); const { @@ -77,6 +78,7 @@ const { throwIfIncorrectModuleRegistryCallTypeParameterParserError, throwIfUntypedModule, throwIfModuleTypeIsUnsupported, + throwIfMoreThanOneModuleInterfaceParserError, } = require('../../error-utils'); const language = 'Flow'; @@ -586,14 +588,11 @@ function buildModuleSchema( language, ); - if (moduleSpecs.length > 1) { - throw new MoreThanOneModuleInterfaceParserError( - hasteModuleName, - moduleSpecs, - moduleSpecs.map(node => node.id.name), - language, - ); - } + throwIfMoreThanOneModuleInterfaceParserError( + hasteModuleName, + moduleSpecs, + language, + ); const [moduleSpec] = moduleSpecs; 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 5b32ff29dc1..448ff4388ab 100644 --- a/packages/react-native-codegen/src/parsers/typescript/modules/index.js +++ b/packages/react-native-codegen/src/parsers/typescript/modules/index.js @@ -54,7 +54,6 @@ const { typeAliasResolution, } = require('../../parsers-primitives'); const { - MoreThanOneModuleInterfaceParserError, UnnamedFunctionParamParserError, UnsupportedArrayElementTypeAnnotationParserError, UnsupportedGenericParserError, @@ -65,6 +64,7 @@ const { UnsupportedObjectPropertyTypeAnnotationParserError, IncorrectModuleRegistryCallArgumentTypeParserError, } = require('../../errors.js'); + const {verifyPlatforms} = require('../../utils'); const { @@ -75,6 +75,7 @@ const { throwIfModuleInterfaceNotFound, throwIfModuleInterfaceIsMisnamed, throwIfWrongNumberOfCallExpressionArgs, + throwIfMoreThanOneModuleInterfaceParserError, throwIfIncorrectModuleRegistryCallTypeParameterParserError, throwIfUnsupportedFunctionReturnTypeAnnotationParserError, } = require('../../error-utils'); @@ -600,14 +601,11 @@ function buildModuleSchema( language, ); - if (moduleSpecs.length > 1) { - throw new MoreThanOneModuleInterfaceParserError( - hasteModuleName, - moduleSpecs, - moduleSpecs.map(node => node.id.name), - language, - ); - } + throwIfMoreThanOneModuleInterfaceParserError( + hasteModuleName, + moduleSpecs, + language, + ); const [moduleSpec] = moduleSpecs;