chore: Create Codegen throwIfPartialWithMoreParameter function (#36300)
Summary: This PR creates a Codegen `throwIfPartialWithMoreParameter` function and extracts the error-emitting code from [Flow](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/parsers/flow/modules/index.js#L165-L169) and [Typescript](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/parsers/typescript/modules/index.js#L246-L250) index files as requested on https://github.com/facebook/react-native/issues/34872. This also adds unit tests to the new function. ## Changelog [Internal] [Changed] - Create codegen `throwIfPartialWithMoreParameter` function and extract the `error-emitting` code from Flow and Typescript index files. Pull Request resolved: https://github.com/facebook/react-native/pull/36300 Test Plan: Run `yarn jest react-native-codegen` and ensure CI is green ![image](https://user-images.githubusercontent.com/11707729/221445922-b2c21ad2-012e-4266-9456-6c781b0de7f0.png) Reviewed By: cipolleschi Differential Revision: D43616254 Pulled By: rshest fbshipit-source-id: 4742aec56598be6bac895809b96d0879c37fcfe1
This commit is contained in:
Родитель
6e28e2dc99
Коммит
5ff8895c27
|
@ -26,6 +26,7 @@ const {
|
||||||
throwIfUnsupportedFunctionParamTypeAnnotationParserError,
|
throwIfUnsupportedFunctionParamTypeAnnotationParserError,
|
||||||
throwIfArrayElementTypeAnnotationIsUnsupported,
|
throwIfArrayElementTypeAnnotationIsUnsupported,
|
||||||
throwIfPartialNotAnnotatingTypeParameter,
|
throwIfPartialNotAnnotatingTypeParameter,
|
||||||
|
throwIfPartialWithMoreParameter,
|
||||||
} = require('../error-utils');
|
} = require('../error-utils');
|
||||||
const {
|
const {
|
||||||
UnsupportedModulePropertyParserError,
|
UnsupportedModulePropertyParserError,
|
||||||
|
@ -796,3 +797,26 @@ describe('throwIfPartialNotAnnotatingTypeParameter', () => {
|
||||||
}).not.toThrowError();
|
}).not.toThrowError();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('throwIfPartialWithMoreParameter', () => {
|
||||||
|
it('throw error if Partial does not have exactly one parameter', () => {
|
||||||
|
const typeAnnotation = {
|
||||||
|
type: '',
|
||||||
|
typeParameters: {params: [{}, {}]},
|
||||||
|
};
|
||||||
|
expect(() => {
|
||||||
|
throwIfPartialWithMoreParameter(typeAnnotation);
|
||||||
|
}).toThrowError('Partials only support annotating exactly one parameter.');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not throw error if Partial has exactly one parameter', () => {
|
||||||
|
const typeAnnotation = {
|
||||||
|
type: '',
|
||||||
|
typeParameters: {params: [{}]},
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(() => {
|
||||||
|
throwIfPartialWithMoreParameter(typeAnnotation);
|
||||||
|
}).not.toThrowError();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -296,6 +296,12 @@ function throwIfPartialNotAnnotatingTypeParameter(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function throwIfPartialWithMoreParameter(typeAnnotation: $FlowFixMe) {
|
||||||
|
if (typeAnnotation.typeParameters.params.length !== 1) {
|
||||||
|
throw new Error('Partials only support annotating exactly one parameter.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
throwIfModuleInterfaceIsMisnamed,
|
throwIfModuleInterfaceIsMisnamed,
|
||||||
throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
|
throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
|
||||||
|
@ -312,4 +318,5 @@ module.exports = {
|
||||||
throwIfArrayElementTypeAnnotationIsUnsupported,
|
throwIfArrayElementTypeAnnotationIsUnsupported,
|
||||||
throwIfIncorrectModuleRegistryCallArgument,
|
throwIfIncorrectModuleRegistryCallArgument,
|
||||||
throwIfPartialNotAnnotatingTypeParameter,
|
throwIfPartialNotAnnotatingTypeParameter,
|
||||||
|
throwIfPartialWithMoreParameter,
|
||||||
};
|
};
|
||||||
|
|
|
@ -70,6 +70,7 @@ const {
|
||||||
throwIfUntypedModule,
|
throwIfUntypedModule,
|
||||||
throwIfMoreThanOneModuleInterfaceParserError,
|
throwIfMoreThanOneModuleInterfaceParserError,
|
||||||
throwIfPartialNotAnnotatingTypeParameter,
|
throwIfPartialNotAnnotatingTypeParameter,
|
||||||
|
throwIfPartialWithMoreParameter,
|
||||||
} = require('../../error-utils');
|
} = require('../../error-utils');
|
||||||
|
|
||||||
const language = 'Flow';
|
const language = 'Flow';
|
||||||
|
@ -163,11 +164,7 @@ function translateTypeAnnotation(
|
||||||
return emitGenericObject(nullable);
|
return emitGenericObject(nullable);
|
||||||
}
|
}
|
||||||
case '$Partial': {
|
case '$Partial': {
|
||||||
if (typeAnnotation.typeParameters.params.length !== 1) {
|
throwIfPartialWithMoreParameter(typeAnnotation);
|
||||||
throw new Error(
|
|
||||||
'Partials only support annotating exactly one parameter.',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const annotatedElement = parser.extractAnnotatedElement(
|
const annotatedElement = parser.extractAnnotatedElement(
|
||||||
typeAnnotation,
|
typeAnnotation,
|
||||||
|
|
|
@ -76,6 +76,7 @@ const {
|
||||||
throwIfIncorrectModuleRegistryCallTypeParameterParserError,
|
throwIfIncorrectModuleRegistryCallTypeParameterParserError,
|
||||||
throwIfIncorrectModuleRegistryCallArgument,
|
throwIfIncorrectModuleRegistryCallArgument,
|
||||||
throwIfPartialNotAnnotatingTypeParameter,
|
throwIfPartialNotAnnotatingTypeParameter,
|
||||||
|
throwIfPartialWithMoreParameter,
|
||||||
} = require('../../error-utils');
|
} = require('../../error-utils');
|
||||||
|
|
||||||
const language = 'TypeScript';
|
const language = 'TypeScript';
|
||||||
|
@ -244,11 +245,7 @@ function translateTypeAnnotation(
|
||||||
return emitGenericObject(nullable);
|
return emitGenericObject(nullable);
|
||||||
}
|
}
|
||||||
case 'Partial': {
|
case 'Partial': {
|
||||||
if (typeAnnotation.typeParameters.params.length !== 1) {
|
throwIfPartialWithMoreParameter(typeAnnotation);
|
||||||
throw new Error(
|
|
||||||
'Partials only support annotating exactly one parameter.',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const annotatedElement = parser.extractAnnotatedElement(
|
const annotatedElement = parser.extractAnnotatedElement(
|
||||||
typeAnnotation,
|
typeAnnotation,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче