Skip to content

Commit 24f7707

Browse files
tarunrajputfacebook-github-bot
authored andcommitted
add emitObjectProp in parser primitives (#37904)
Summary: This is a follow up PR to #37872 as it was not merged correctly. ## Changelog: <!-- Help reviewers and the release process by writing your own changelog entry. Pick one each for the category and type tags: [ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message For more details, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [Internal][Changed]: Add emitObjectProp in parser primitives Pull Request resolved: #37904 Test Plan: `yarn test react-native-codegen` Reviewed By: cipolleschi Differential Revision: D46753690 Pulled By: rshest fbshipit-source-id: a1d0a727222066f3721f62427a51ee0317e06f13
1 parent 1561d29 commit 24f7707

File tree

4 files changed

+20
-24
lines changed

4 files changed

+20
-24
lines changed

packages/react-native-codegen/src/parsers/__tests__/parsers-primitives-test.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ const {emitUnion} = require('../parsers-primitives');
4949
const {UnsupportedUnionTypeAnnotationParserError} = require('../errors');
5050
const {FlowParser} = require('../flow/parser');
5151
const {TypeScriptParser} = require('../typescript/parser');
52-
const {getPropertyType} = require('../flow/components/events');
52+
const {extractArrayElementType} = require('../flow/components/events');
5353

5454
const parser = new MockedParser();
5555
const flowParser = new FlowParser();
@@ -1679,6 +1679,10 @@ describe('emitObjectProp', () => {
16791679
describe('when property is optional', () => {
16801680
it('returns optional Object Prop', () => {
16811681
const typeAnnotation = {
1682+
type: 'GenericTypeAnnotation',
1683+
id: {
1684+
name: 'ObjectTypeAnnotation',
1685+
},
16821686
properties: [
16831687
{
16841688
key: {
@@ -1699,7 +1703,7 @@ describe('emitObjectProp', () => {
16991703
true,
17001704
flowParser,
17011705
typeAnnotation,
1702-
getPropertyType,
1706+
extractArrayElementType,
17031707
);
17041708
const expected = {
17051709
name: 'someProp',
@@ -1725,6 +1729,10 @@ describe('emitObjectProp', () => {
17251729
describe('when property is required', () => {
17261730
it('returns required Object Prop', () => {
17271731
const typeAnnotation = {
1732+
type: 'GenericTypeAnnotation',
1733+
id: {
1734+
name: 'ObjectTypeAnnotation',
1735+
},
17281736
properties: [
17291737
{
17301738
key: {
@@ -1745,7 +1753,7 @@ describe('emitObjectProp', () => {
17451753
false,
17461754
flowParser,
17471755
typeAnnotation,
1748-
getPropertyType,
1756+
extractArrayElementType,
17491757
);
17501758
const expected = {
17511759
name: 'someProp',

packages/react-native-codegen/src/parsers/flow/components/events.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ function getPropertyType(
7070
optional,
7171
parser,
7272
typeAnnotation,
73-
getPropertyType,
73+
extractArrayElementType,
7474
);
7575
case 'UnionTypeAnnotation':
7676
return {
@@ -311,5 +311,5 @@ function getEvents(
311311

312312
module.exports = {
313313
getEvents,
314-
getPropertyType,
314+
extractArrayElementType,
315315
};

packages/react-native-codegen/src/parsers/parsers-primitives.js

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ const {
6060
wrapNullable,
6161
unwrapNullable,
6262
translateFunctionTypeAnnotation,
63-
buildPropertiesForEvent,
6463
} = require('./parsers-commons');
6564

6665
const {isModuleRegistryCall} = require('./utils');
@@ -663,24 +662,16 @@ function emitObjectProp(
663662
optional: boolean,
664663
parser: Parser,
665664
typeAnnotation: $FlowFixMe,
666-
getPropertyType: (
667-
name: $FlowFixMe,
668-
optional: boolean,
665+
extractArrayElementType: (
669666
typeAnnotation: $FlowFixMe,
667+
name: string,
670668
parser: Parser,
671-
) => NamedShape<EventTypeAnnotation>,
669+
) => EventTypeAnnotation,
672670
): NamedShape<EventTypeAnnotation> {
673671
return {
674672
name,
675673
optional,
676-
typeAnnotation: {
677-
type: 'ObjectTypeAnnotation',
678-
properties: parser
679-
.getObjectProperties(typeAnnotation)
680-
.map(member =>
681-
buildPropertiesForEvent(member, parser, getPropertyType),
682-
),
683-
},
674+
typeAnnotation: extractArrayElementType(typeAnnotation, name, parser),
684675
};
685676
}
686677

packages/react-native-codegen/src/parsers/typescript/components/events.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,7 @@ function getPropertyType(
5050
const topLevelType = parseTopLevelType(annotation);
5151
const typeAnnotation = topLevelType.type;
5252
const optional = optionalProperty || topLevelType.optional;
53-
const type =
54-
typeAnnotation.type === 'TSTypeReference'
55-
? typeAnnotation.typeName.name
56-
: typeAnnotation.type;
53+
const type = parser.extractTypeFromTypeAnnotation(typeAnnotation);
5754

5855
switch (type) {
5956
case 'TSBooleanKeyword':
@@ -72,7 +69,7 @@ function getPropertyType(
7269
optional,
7370
parser,
7471
typeAnnotation,
75-
getPropertyType,
72+
extractArrayElementType,
7673
);
7774
case 'TSUnionType':
7875
return {
@@ -92,7 +89,6 @@ function getPropertyType(
9289
typeAnnotation: extractArrayElementType(typeAnnotation, name, parser),
9390
};
9491
default:
95-
(type: empty);
9692
throw new Error(`Unable to determine event type for "${name}": ${type}`);
9793
}
9894
}
@@ -314,4 +310,5 @@ function getEvents(
314310

315311
module.exports = {
316312
getEvents,
313+
extractArrayElementType,
317314
};

0 commit comments

Comments
 (0)