Skip to content

Commit f1f9cef

Browse files
RSNarafacebook-github-bot
authored andcommitted
Disallow object spreads in ObjectTypeAnnotations
Summary: We don't currently support object spreads in `ObjectTypeAnnotation`s. This diff adds an explicit error for the case in the parser, so that when people use object spreads in ObjectTypeAnnotations, they get feedback from the linter rule and parser. Previously, the Linter would crash, and the parser would fail, but the error wouldn't be immediately obvious. Changelog: [Internal] Reviewed By: fkgozali Differential Revision: D24543650 fbshipit-source-id: 76f389c72f858ee6281c5aff5ce797f3be685096
1 parent 09d4cb7 commit f1f9cef

2 files changed

Lines changed: 31 additions & 5 deletions

File tree

packages/react-native-codegen/src/parsers/flow/modules/errors.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,22 @@ class UnsupportedArrayElementTypeAnnotationParserError extends ParserError {
133133
*/
134134

135135
class UnsupportedObjectPropertyTypeAnnotationParserError extends ParserError {
136+
constructor(
137+
hasteModuleName: string,
138+
propertyAST: $FlowFixMe,
139+
invalidPropertyType: string,
140+
) {
141+
let message = `'ObjectTypeAnnotation' cannot contain '${invalidPropertyType}'.`;
142+
143+
if (invalidPropertyType === 'ObjectTypeSpreadProperty') {
144+
message = "Object spread isn't supported in 'ObjectTypeAnnotation's.";
145+
}
146+
147+
super(hasteModuleName, propertyAST, message);
148+
}
149+
}
150+
151+
class UnsupportedObjectPropertyValueTypeAnnotationParserError extends ParserError {
136152
constructor(
137153
hasteModuleName: string,
138154
propertyValueAST: $FlowFixMe,
@@ -202,4 +218,5 @@ module.exports = {
202218
UnsupportedFunctionReturnTypeAnnotationParserError,
203219
UnsupportedModulePropertyParserError,
204220
UnsupportedObjectPropertyTypeAnnotationParserError,
221+
UnsupportedObjectPropertyValueTypeAnnotationParserError,
205222
};

packages/react-native-codegen/src/parsers/flow/modules/index.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ const {
4040
UnsupportedFunctionReturnTypeAnnotationParserError,
4141
UnsupportedModulePropertyParserError,
4242
UnsupportedObjectPropertyTypeAnnotationParserError,
43+
UnsupportedObjectPropertyValueTypeAnnotationParserError,
4344
} = require('./errors.js');
4445

4546
const invariant = require('invariant');
@@ -207,9 +208,17 @@ function translateTypeAnnotation(
207208
type: 'ObjectTypeAnnotation',
208209
properties: (typeAnnotation.properties: Array<$FlowFixMe>)
209210
.map<?NativeModuleObjectTypeAnnotationPropertySchema>(property => {
210-
const {optional, key} = property;
211-
212211
return guard(() => {
212+
if (property.type !== 'ObjectTypeProperty') {
213+
throw new UnsupportedObjectPropertyTypeAnnotationParserError(
214+
hasteModuleName,
215+
property,
216+
property.type,
217+
);
218+
}
219+
220+
const {optional, key} = property;
221+
213222
const [
214223
propertyTypeAnnotation,
215224
isPropertyNullable,
@@ -224,7 +233,7 @@ function translateTypeAnnotation(
224233
);
225234

226235
if (propertyTypeAnnotation.type === 'FunctionTypeAnnotation') {
227-
throw new UnsupportedObjectPropertyTypeAnnotationParserError(
236+
throw new UnsupportedObjectPropertyValueTypeAnnotationParserError(
228237
hasteModuleName,
229238
property.value,
230239
property.key,
@@ -233,7 +242,7 @@ function translateTypeAnnotation(
233242
}
234243

235244
if (propertyTypeAnnotation.type === 'VoidTypeAnnotation') {
236-
throw new UnsupportedObjectPropertyTypeAnnotationParserError(
245+
throw new UnsupportedObjectPropertyValueTypeAnnotationParserError(
237246
hasteModuleName,
238247
property.value,
239248
property.key,
@@ -242,7 +251,7 @@ function translateTypeAnnotation(
242251
}
243252

244253
if (propertyTypeAnnotation.type === 'PromiseTypeAnnotation') {
245-
throw new UnsupportedObjectPropertyTypeAnnotationParserError(
254+
throw new UnsupportedObjectPropertyValueTypeAnnotationParserError(
246255
hasteModuleName,
247256
property.value,
248257
property.key,

0 commit comments

Comments
 (0)