From ce5bb535d4f839bac4e4ab1ae2a8fdcfbe1a93c6 Mon Sep 17 00:00:00 2001 From: Marco Fiorito Date: Mon, 10 Oct 2022 08:35:42 -0300 Subject: [PATCH 1/4] refactor: trigger MoreThanOneModuleInterfaceParserError function --- .../src/parsers/error-utils.js | 17 +++++++++++++++++ .../src/parsers/flow/modules/index.js | 17 +++++++++-------- .../src/parsers/typescript/modules/index.js | 17 +++++++++-------- 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/packages/react-native-codegen/src/parsers/error-utils.js b/packages/react-native-codegen/src/parsers/error-utils.js index 2c3c237328d9..32452eee97a3 100644 --- a/packages/react-native-codegen/src/parsers/error-utils.js +++ b/packages/react-native-codegen/src/parsers/error-utils.js @@ -15,6 +15,7 @@ import type {ParserType} from './errors'; const { MisnamedModuleInterfaceParserError, ModuleInterfaceNotFoundParserError, + MoreThanOneModuleInterfaceParserError, MoreThanOneModuleRegistryCallsParserError, UnusedModuleInterfaceParserError, IncorrectModuleRegistryCallArityParserError, @@ -52,6 +53,21 @@ function throwIfModuleInterfaceNotFound( } } +function throwIfMoreThanOneModuleInterfaceParserError( + nativeModuleName: string, + moduleSpecs: ASTNode[], + parserType: ParserType, +) { + if (moduleSpecs.length > 1) { + throw new MoreThanOneModuleInterfaceParserError( + nativeModuleName, + moduleSpecs, + moduleSpecs.map(node => node.id.name), + parserType, + ); + } +} + function throwIfMoreThanOneModuleRegistryCalls( hasteModuleName: string, callExpressions: $FlowFixMe, @@ -191,6 +207,7 @@ function throwIfModuleTypeIsUnsupported( module.exports = { throwIfModuleInterfaceIsMisnamed, throwIfModuleInterfaceNotFound, + throwIfMoreThanOneModuleInterfaceParserError, throwIfMoreThanOneModuleRegistryCalls, throwIfUnusedModuleInterfaceParserError, throwIfWrongNumberOfCallExpressionArgs, 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 813a90ceb4c0..ab3ad988052a 100644 --- a/packages/react-native-codegen/src/parsers/flow/modules/index.js +++ b/packages/react-native-codegen/src/parsers/flow/modules/index.js @@ -54,6 +54,7 @@ const { } = require('../../parsers-primitives'); const { MoreThanOneModuleInterfaceParserError, + ModuleInterfaceNotFoundParserError, UnnamedFunctionParamParserError, UnsupportedArrayElementTypeAnnotationParserError, UnsupportedGenericParserError, @@ -66,6 +67,9 @@ const { UnsupportedObjectPropertyValueTypeAnnotationParserError, IncorrectModuleRegistryCallArgumentTypeParserError, } = require('../../errors.js'); +const { + throwIfMoreThanOneModuleInterfaceParserError, +} = require('../../error-utils'); const { throwIfModuleInterfaceNotFound, @@ -602,14 +606,11 @@ function buildModuleSchema( language, ); - if (moduleSpecs.length > 1) { - throw new MoreThanOneModuleInterfaceParserError( - hasteModuleName, - moduleSpecs, - moduleSpecs.map(node => node.id.name), - language, - ); - } + throwIfMoreThanOneModuleInterfaceParserError( + hasteModuleName, + moduleSpecs, + 'Flow', + ); 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 438d7462955b..da2eee8c7cb1 100644 --- a/packages/react-native-codegen/src/parsers/typescript/modules/index.js +++ b/packages/react-native-codegen/src/parsers/typescript/modules/index.js @@ -54,6 +54,7 @@ const { } = require('../../parsers-primitives'); const { MoreThanOneModuleInterfaceParserError, + ModuleInterfaceNotFoundParserError, UnnamedFunctionParamParserError, UnsupportedArrayElementTypeAnnotationParserError, UnsupportedGenericParserError, @@ -66,6 +67,9 @@ const { UnsupportedObjectPropertyValueTypeAnnotationParserError, IncorrectModuleRegistryCallArgumentTypeParserError, } = require('../../errors.js'); +const { + throwIfMoreThanOneModuleInterfaceParserError, +} = require('../../error-utils'); const { throwIfUntypedModule, @@ -616,14 +620,11 @@ function buildModuleSchema( language, ); - if (moduleSpecs.length > 1) { - throw new MoreThanOneModuleInterfaceParserError( - hasteModuleName, - moduleSpecs, - moduleSpecs.map(node => node.id.name), - language, - ); - } + throwIfMoreThanOneModuleInterfaceParserError( + hasteModuleName, + moduleSpecs, + 'TypeScript', + ); const [moduleSpec] = moduleSpecs; From 947ee6d152c9f7c4408b994526e8908fe1a0f982 Mon Sep 17 00:00:00 2001 From: Marco Fiorito Date: Mon, 10 Oct 2022 08:42:54 -0300 Subject: [PATCH 2/4] refactor: add tests --- .../src/parsers/__tests__/error-utils-test.js | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) 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 1b16f4a12e91..b5447b659f7e 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 @@ -13,6 +13,7 @@ const { throwIfModuleInterfaceNotFound, + throwIfMoreThanOneModuleInterfaceParserError, throwIfMoreThanOneModuleRegistryCalls, throwIfModuleInterfaceIsMisnamed, throwIfUnusedModuleInterfaceParserError, @@ -543,3 +544,32 @@ describe('throwIfMoreThanOneModuleRegistryCalls', () => { }).toThrow(UnsupportedModulePropertyParserError); }); }); +describe('throwIfMoreThanOneModuleInterfaceParserError', () => { + const {MoreThanOneModuleInterfaceParserError} = require('../errors.js'); + 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); + }); +}); From e63d28fa2d170741287c0bbdba61c2769c8f4295 Mon Sep 17 00:00:00 2001 From: Marco Fiorito Date: Mon, 10 Oct 2022 09:38:55 -0300 Subject: [PATCH 3/4] fix: flow-checks workflows --- packages/react-native-codegen/src/parsers/error-utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native-codegen/src/parsers/error-utils.js b/packages/react-native-codegen/src/parsers/error-utils.js index 32452eee97a3..341eba6b30f1 100644 --- a/packages/react-native-codegen/src/parsers/error-utils.js +++ b/packages/react-native-codegen/src/parsers/error-utils.js @@ -55,7 +55,7 @@ function throwIfModuleInterfaceNotFound( function throwIfMoreThanOneModuleInterfaceParserError( nativeModuleName: string, - moduleSpecs: ASTNode[], + moduleSpecs: $ReadOnlyArray<$FlowFixMe>, parserType: ParserType, ) { if (moduleSpecs.length > 1) { From 9f60605770b5925cc4ba24e6e58b4aa77aaec5ae Mon Sep 17 00:00:00 2001 From: Marco Fiorito Date: Mon, 10 Oct 2022 10:30:18 -0300 Subject: [PATCH 4/4] fix: pr comments --- packages/react-native-codegen/src/parsers/flow/modules/index.js | 2 +- .../src/parsers/typescript/modules/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 ab3ad988052a..762fa7df98aa 100644 --- a/packages/react-native-codegen/src/parsers/flow/modules/index.js +++ b/packages/react-native-codegen/src/parsers/flow/modules/index.js @@ -609,7 +609,7 @@ function buildModuleSchema( throwIfMoreThanOneModuleInterfaceParserError( hasteModuleName, moduleSpecs, - 'Flow', + 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 da2eee8c7cb1..82319c70d11e 100644 --- a/packages/react-native-codegen/src/parsers/typescript/modules/index.js +++ b/packages/react-native-codegen/src/parsers/typescript/modules/index.js @@ -623,7 +623,7 @@ function buildModuleSchema( throwIfMoreThanOneModuleInterfaceParserError( hasteModuleName, moduleSpecs, - 'TypeScript', + language, ); const [moduleSpec] = moduleSpecs;