Skip to content

Commit a7ae988

Browse files
youeddfacebook-github-bot
authored andcommitted
move remapUnionTypeAnnotationMemberNames to Parser (#35314)
Summary: Part of #34872 (comment) > [Assigned to youedd] Create a new function [remapUnionTypeAnnotationMemberNames](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/parsers/parsers-commons.js#L110) in the [parser.js file](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/parsers/parser.js) and add documentation to it. Implement it properly in the [FlowParser.js](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/parsers/flow/parser.js#L15) and in the [TypeScriptParser.js](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/parsers/typescript/parser.js#L15). Remove the function [remapUnionTypeAnnotationMemberNames](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/parsers/parsers-commons.js#L110) and update the [emitUnionTypeAnnotation](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/parsers/parsers-commons.js#L110) signature to accept a Parser parameter instead of a language one. Use the new Parser function instead of the old one [here](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/parsers/parsers-commons.js#L139). ## Changelog <!-- Help reviewers and the release process by writing your own changelog entry. For an example, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [Internal] [changed] - move remapUnionTypeAnnotationMemberNames to the parsers implementations Pull Request resolved: #35314 Test Plan: `yarn jest react-native-codegen` ![image](https://user-images.githubusercontent.com/19575877/201389910-31d48601-7023-4c94-a6d5-efccb18629cd.png) Reviewed By: christophpurrer Differential Revision: D41247716 Pulled By: cipolleschi fbshipit-source-id: 6f708895392d5bdac5d4edbc67587194321ddb3d
1 parent 1bb67e7 commit a7ae988

File tree

9 files changed

+106
-57
lines changed

9 files changed

+106
-57
lines changed

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

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ const {
2929

3030
import {MockedParser} from '../parserMock';
3131
import {TypeScriptParser} from '../typescript/parser';
32+
import {FlowParser} from '../flow/parser';
3233

3334
const parser = new MockedParser();
35+
const flowParser = new FlowParser();
3436
const typeScriptParser = new TypeScriptParser();
3537

3638
const flowTranslateTypeAnnotation = require('../flow/modules/index');
@@ -399,8 +401,6 @@ describe('emitUnionTypeAnnotation', () => {
399401
const hasteModuleName = 'SampleTurboModule';
400402

401403
describe('when language is flow', () => {
402-
const language: ParserType = 'Flow';
403-
404404
describe('when members type is numeric', () => {
405405
const typeAnnotation = {
406406
type: 'UnionTypeAnnotation',
@@ -415,7 +415,7 @@ describe('emitUnionTypeAnnotation', () => {
415415
true,
416416
hasteModuleName,
417417
typeAnnotation,
418-
language,
418+
flowParser,
419419
);
420420

421421
const expected = {
@@ -436,7 +436,7 @@ describe('emitUnionTypeAnnotation', () => {
436436
false,
437437
hasteModuleName,
438438
typeAnnotation,
439-
language,
439+
flowParser,
440440
);
441441

442442
const expected = {
@@ -463,7 +463,7 @@ describe('emitUnionTypeAnnotation', () => {
463463
true,
464464
hasteModuleName,
465465
typeAnnotation,
466-
language,
466+
flowParser,
467467
);
468468

469469
const expected = {
@@ -484,7 +484,7 @@ describe('emitUnionTypeAnnotation', () => {
484484
false,
485485
hasteModuleName,
486486
typeAnnotation,
487-
language,
487+
flowParser,
488488
);
489489

490490
const expected = {
@@ -508,7 +508,7 @@ describe('emitUnionTypeAnnotation', () => {
508508
true,
509509
hasteModuleName,
510510
typeAnnotation,
511-
language,
511+
flowParser,
512512
);
513513

514514
const expected = {
@@ -529,7 +529,7 @@ describe('emitUnionTypeAnnotation', () => {
529529
false,
530530
hasteModuleName,
531531
typeAnnotation,
532-
language,
532+
flowParser,
533533
);
534534

535535
const expected = {
@@ -562,15 +562,15 @@ describe('emitUnionTypeAnnotation', () => {
562562
hasteModuleName,
563563
typeAnnotation,
564564
unionTypes,
565-
language,
565+
flowParser.language(),
566566
);
567567

568568
expect(() => {
569569
emitUnionTypeAnnotation(
570570
true,
571571
hasteModuleName,
572572
typeAnnotation,
573-
language,
573+
flowParser,
574574
);
575575
}).toThrow(expected);
576576
});
@@ -582,15 +582,15 @@ describe('emitUnionTypeAnnotation', () => {
582582
hasteModuleName,
583583
typeAnnotation,
584584
unionTypes,
585-
language,
585+
flowParser.language(),
586586
);
587587

588588
expect(() => {
589589
emitUnionTypeAnnotation(
590590
false,
591591
hasteModuleName,
592592
typeAnnotation,
593-
language,
593+
flowParser,
594594
);
595595
}).toThrow(expected);
596596
});
@@ -599,8 +599,6 @@ describe('emitUnionTypeAnnotation', () => {
599599
});
600600

601601
describe('when language is typescript', () => {
602-
const language: ParserType = 'TypeScript';
603-
604602
describe('when members type is numeric', () => {
605603
const typeAnnotation = {
606604
type: 'TSUnionType',
@@ -621,7 +619,7 @@ describe('emitUnionTypeAnnotation', () => {
621619
true,
622620
hasteModuleName,
623621
typeAnnotation,
624-
language,
622+
typeScriptParser,
625623
);
626624

627625
const expected = {
@@ -642,7 +640,7 @@ describe('emitUnionTypeAnnotation', () => {
642640
false,
643641
hasteModuleName,
644642
typeAnnotation,
645-
language,
643+
typeScriptParser,
646644
);
647645

648646
const expected = {
@@ -675,7 +673,7 @@ describe('emitUnionTypeAnnotation', () => {
675673
true,
676674
hasteModuleName,
677675
typeAnnotation,
678-
language,
676+
typeScriptParser,
679677
);
680678

681679
const expected = {
@@ -696,7 +694,7 @@ describe('emitUnionTypeAnnotation', () => {
696694
false,
697695
hasteModuleName,
698696
typeAnnotation,
699-
language,
697+
typeScriptParser,
700698
);
701699

702700
const expected = {
@@ -727,7 +725,7 @@ describe('emitUnionTypeAnnotation', () => {
727725
true,
728726
hasteModuleName,
729727
typeAnnotation,
730-
language,
728+
typeScriptParser,
731729
);
732730

733731
const expected = {
@@ -748,7 +746,7 @@ describe('emitUnionTypeAnnotation', () => {
748746
false,
749747
hasteModuleName,
750748
typeAnnotation,
751-
language,
749+
typeScriptParser,
752750
);
753751

754752
const expected = {
@@ -789,15 +787,15 @@ describe('emitUnionTypeAnnotation', () => {
789787
hasteModuleName,
790788
typeAnnotation,
791789
unionTypes,
792-
language,
790+
typeScriptParser.language(),
793791
);
794792

795793
expect(() => {
796794
emitUnionTypeAnnotation(
797795
true,
798796
hasteModuleName,
799797
typeAnnotation,
800-
language,
798+
typeScriptParser,
801799
);
802800
}).toThrow(expected);
803801
});
@@ -809,15 +807,15 @@ describe('emitUnionTypeAnnotation', () => {
809807
hasteModuleName,
810808
typeAnnotation,
811809
unionTypes,
812-
language,
810+
typeScriptParser.language(),
813811
);
814812

815813
expect(() => {
816814
emitUnionTypeAnnotation(
817815
false,
818816
hasteModuleName,
819817
typeAnnotation,
820-
language,
818+
typeScriptParser,
821819
);
822820
}).toThrow(expected);
823821
});

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

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {TypeScriptParser} from '../typescript/parser';
1919
import {FlowParser} from '../flow/parser';
2020

2121
const hasteModuleName = 'moduleName';
22-
describe('TypeScriptParser', () => {
22+
describe('FlowParser', () => {
2323
const parser = new FlowParser();
2424
describe('getKeyName', () => {
2525
describe('when propertyOrIndex is ObjectTypeProperty', () => {
@@ -76,9 +76,26 @@ describe('TypeScriptParser', () => {
7676
});
7777
});
7878
});
79+
80+
describe('remapUnionTypeAnnotationMemberNames', () => {
81+
it('returns remaped union annotation member types without duplicates', () => {
82+
const membersType = [
83+
{type: 'NumberLiteralTypeAnnotation'},
84+
{type: 'ObjectTypeAnnotation'},
85+
{type: 'StringLiteralTypeAnnotation'},
86+
{type: 'ObjectTypeAnnotation'},
87+
];
88+
89+
expect(parser.remapUnionTypeAnnotationMemberNames(membersType)).toEqual([
90+
'NumberTypeAnnotation',
91+
'ObjectTypeAnnotation',
92+
'StringTypeAnnotation',
93+
]);
94+
});
95+
});
7996
});
8097

81-
describe('FlowParser', () => {
98+
describe('TypeScriptParser', () => {
8299
const parser = new TypeScriptParser();
83100
describe('getKeyName', () => {
84101
describe('when propertyOrIndex is TSPropertySignature', () => {
@@ -126,4 +143,20 @@ describe('FlowParser', () => {
126143
});
127144
});
128145
});
146+
describe('remapUnionTypeAnnotationMemberNames', () => {
147+
it('returns remaped union annotation member types without duplicates', () => {
148+
const membersType = [
149+
{literal: {type: 'NumericLiteral'}},
150+
{type: 'ObjectTypeAnnotation'},
151+
{literal: {type: 'StringLiteral'}},
152+
{type: 'ObjectTypeAnnotation'},
153+
];
154+
155+
expect(parser.remapUnionTypeAnnotationMemberNames(membersType)).toEqual([
156+
'NumberTypeAnnotation',
157+
'ObjectTypeAnnotation',
158+
'StringTypeAnnotation',
159+
]);
160+
});
161+
});
129162
});

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ function translateTypeAnnotation(
314314
nullable,
315315
hasteModuleName,
316316
typeAnnotation,
317-
language,
317+
parser,
318318
);
319319
}
320320
// Fallthrough

packages/react-native-codegen/src/parsers/flow/parser.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
'use strict';
1212

13+
import type {UnionTypeAnnotationMemberType} from '../../CodegenSchema.js';
1314
import type {ParserType} from '../errors';
1415
import type {Parser} from '../parser';
1516

@@ -63,6 +64,18 @@ class FlowParser implements Parser {
6364
typeArguments.params[0].id.name !== 'Spec'
6465
);
6566
}
67+
68+
remapUnionTypeAnnotationMemberNames(
69+
membersTypes: $FlowFixMe[],
70+
): UnionTypeAnnotationMemberType[] {
71+
const remapLiteral = (item: $FlowFixMe) => {
72+
return item.type
73+
.replace('NumberLiteralTypeAnnotation', 'NumberTypeAnnotation')
74+
.replace('StringLiteralTypeAnnotation', 'StringTypeAnnotation');
75+
};
76+
77+
return [...new Set(membersTypes.map(remapLiteral))];
78+
}
6679
}
6780

6881
module.exports = {

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
'use strict';
1212

13+
import type {UnionTypeAnnotationMemberType} from '../CodegenSchema.js';
1314
import type {ParserType} from './errors';
1415

1516
/**
@@ -58,4 +59,12 @@ export interface Parser {
5859
* @returns: a boolean specifying if the Module is Invalid.
5960
*/
6061
checkIfInvalidModule(typeArguments: $FlowFixMe): boolean;
62+
/**
63+
* Given a union annotation members types, it returns an array of remaped members names without duplicates.
64+
* @parameter membersTypes: union annotation members types
65+
* @returns: an array of remaped members names without duplicates.
66+
*/
67+
remapUnionTypeAnnotationMemberNames(
68+
types: $FlowFixMe,
69+
): UnionTypeAnnotationMemberType[];
6170
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
'use strict';
1212

13+
import type {UnionTypeAnnotationMemberType} from '../CodegenSchema.js';
1314
import type {Parser} from './parser';
1415
import type {ParserType} from './errors';
1516

@@ -58,4 +59,10 @@ export class MockedParser implements Parser {
5859
checkIfInvalidModule(typeArguments: $FlowFixMe): boolean {
5960
return false;
6061
}
62+
63+
remapUnionTypeAnnotationMemberNames(
64+
membersTypes: $FlowFixMe[],
65+
): UnionTypeAnnotationMemberType[] {
66+
return [];
67+
}
6168
}

0 commit comments

Comments
 (0)