diff --git a/packages/react-native-codegen/src/parsers/__tests__/parsers-primitives-test.js b/packages/react-native-codegen/src/parsers/__tests__/parsers-primitives-test.js index 8e108d250b8c0e..722d44299eba8b 100644 --- a/packages/react-native-codegen/src/parsers/__tests__/parsers-primitives-test.js +++ b/packages/react-native-codegen/src/parsers/__tests__/parsers-primitives-test.js @@ -49,7 +49,7 @@ const {emitUnion} = require('../parsers-primitives'); const {UnsupportedUnionTypeAnnotationParserError} = require('../errors'); const {FlowParser} = require('../flow/parser'); const {TypeScriptParser} = require('../typescript/parser'); -const {getPropertyType} = require('../flow/components/events'); +const {extractArrayElementType} = require('../flow/components/events'); const parser = new MockedParser(); const flowParser = new FlowParser(); @@ -1679,6 +1679,10 @@ describe('emitObjectProp', () => { describe('when property is optional', () => { it('returns optional Object Prop', () => { const typeAnnotation = { + type: 'GenericTypeAnnotation', + id: { + name: 'ObjectTypeAnnotation', + }, properties: [ { key: { @@ -1699,7 +1703,7 @@ describe('emitObjectProp', () => { true, flowParser, typeAnnotation, - getPropertyType, + extractArrayElementType, ); const expected = { name: 'someProp', @@ -1725,6 +1729,10 @@ describe('emitObjectProp', () => { describe('when property is required', () => { it('returns required Object Prop', () => { const typeAnnotation = { + type: 'GenericTypeAnnotation', + id: { + name: 'ObjectTypeAnnotation', + }, properties: [ { key: { @@ -1745,7 +1753,7 @@ describe('emitObjectProp', () => { false, flowParser, typeAnnotation, - getPropertyType, + extractArrayElementType, ); const expected = { name: 'someProp', diff --git a/packages/react-native-codegen/src/parsers/flow/components/events.js b/packages/react-native-codegen/src/parsers/flow/components/events.js index 9901c5edd24259..f0fd64e4eb187f 100644 --- a/packages/react-native-codegen/src/parsers/flow/components/events.js +++ b/packages/react-native-codegen/src/parsers/flow/components/events.js @@ -70,7 +70,7 @@ function getPropertyType( optional, parser, typeAnnotation, - getPropertyType, + extractArrayElementType, ); case 'UnionTypeAnnotation': return { @@ -311,5 +311,5 @@ function getEvents( module.exports = { getEvents, - getPropertyType, + extractArrayElementType, }; diff --git a/packages/react-native-codegen/src/parsers/parsers-primitives.js b/packages/react-native-codegen/src/parsers/parsers-primitives.js index ea0bec6ea0a4cb..845a42e073ffca 100644 --- a/packages/react-native-codegen/src/parsers/parsers-primitives.js +++ b/packages/react-native-codegen/src/parsers/parsers-primitives.js @@ -60,7 +60,6 @@ const { wrapNullable, unwrapNullable, translateFunctionTypeAnnotation, - buildPropertiesForEvent, } = require('./parsers-commons'); const {isModuleRegistryCall} = require('./utils'); @@ -663,24 +662,16 @@ function emitObjectProp( optional: boolean, parser: Parser, typeAnnotation: $FlowFixMe, - getPropertyType: ( - name: $FlowFixMe, - optional: boolean, + extractArrayElementType: ( typeAnnotation: $FlowFixMe, + name: string, parser: Parser, - ) => NamedShape, + ) => EventTypeAnnotation, ): NamedShape { return { name, optional, - typeAnnotation: { - type: 'ObjectTypeAnnotation', - properties: parser - .getObjectProperties(typeAnnotation) - .map(member => - buildPropertiesForEvent(member, parser, getPropertyType), - ), - }, + typeAnnotation: extractArrayElementType(typeAnnotation, name, parser), }; } diff --git a/packages/react-native-codegen/src/parsers/typescript/components/events.js b/packages/react-native-codegen/src/parsers/typescript/components/events.js index eafc857184fa83..230b9b512a6b7f 100644 --- a/packages/react-native-codegen/src/parsers/typescript/components/events.js +++ b/packages/react-native-codegen/src/parsers/typescript/components/events.js @@ -50,10 +50,7 @@ function getPropertyType( const topLevelType = parseTopLevelType(annotation); const typeAnnotation = topLevelType.type; const optional = optionalProperty || topLevelType.optional; - const type = - typeAnnotation.type === 'TSTypeReference' - ? typeAnnotation.typeName.name - : typeAnnotation.type; + const type = parser.extractTypeFromTypeAnnotation(typeAnnotation); switch (type) { case 'TSBooleanKeyword': @@ -72,7 +69,7 @@ function getPropertyType( optional, parser, typeAnnotation, - getPropertyType, + extractArrayElementType, ); case 'TSUnionType': return { @@ -92,7 +89,6 @@ function getPropertyType( typeAnnotation: extractArrayElementType(typeAnnotation, name, parser), }; default: - (type: empty); throw new Error(`Unable to determine event type for "${name}": ${type}`); } } @@ -314,4 +310,5 @@ function getEvents( module.exports = { getEvents, + extractArrayElementType, };