Skip to content

Commit fa8a25e

Browse files
elicwhitefacebook-github-bot
authored andcommitted
Make enum types annotation objects instead of literal strings and numbers (#47349)
Summary: Pull Request resolved: #47349 This is needed to be able to recurse into the literals and compare them. I'm primarily unsure if there is a problem representing doubles/floats as numbers instead of strings though. Changelog: [Internal] Reviewed By: makovkastar Differential Revision: D65284058 fbshipit-source-id: b2de9ed5fb7f079a432c94aaea69027863879909
1 parent 96c2be8 commit fa8a25e

File tree

12 files changed

+302
-77
lines changed

12 files changed

+302
-77
lines changed

packages/react-native-codegen/src/CodegenSchema.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ export interface NativeModuleBooleanTypeAnnotation {
327327

328328
export type NativeModuleEnumMember = {
329329
readonly name: string;
330-
readonly value: string | number;
330+
readonly value: NativeModuleStringLiteralTypeAnnotation | NativeModuleNumberLiteralTypeAnnotation,
331331
};
332332

333333
export type NativeModuleEnumMemberType =

packages/react-native-codegen/src/CodegenSchema.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ export type NativeModuleNumberTypeAnnotation = $ReadOnly<{
311311

312312
export type NativeModuleEnumMember = {
313313
name: string,
314-
value: string | number,
314+
value: StringLiteralTypeAnnotation | NumberLiteralTypeAnnotation,
315315
};
316316

317317
export type NativeModuleEnumMemberType =

packages/react-native-codegen/src/generators/modules/GenerateModuleH.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,14 @@ struct Bridging<${enumName}> {
406406
};`;
407407
};
408408

409+
function getMemberValueAppearance(member: NativeModuleEnumMember['value']) {
410+
if (member.type === 'StringLiteralTypeAnnotation') {
411+
return `"${member.value}"`;
412+
} else {
413+
return member.value;
414+
}
415+
}
416+
409417
function generateEnum(
410418
hasteModuleName: string,
411419
origEnumName: string,
@@ -417,9 +425,6 @@ function generateEnum(
417425
const nativeEnumMemberType: NativeEnumMemberValueType =
418426
memberType === 'StringTypeAnnotation' ? 'std::string' : 'int32_t';
419427

420-
const getMemberValueAppearance = (value: string | number) =>
421-
memberType === 'StringTypeAnnotation' ? `"${value}"` : `${value}`;
422-
423428
const fromCases =
424429
members
425430
.map(

packages/react-native-codegen/src/generators/modules/__test_fixtures__/fixtures.js

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,17 @@ const SIMPLE_NATIVE_MODULES: SchemaType = {
163163
members: [
164164
{
165165
name: 'ONE',
166-
value: '1',
166+
value: {
167+
type: 'NumberLiteralTypeAnnotation',
168+
value: 1,
169+
},
167170
},
168171
{
169172
name: 'TWO',
170-
value: '2',
173+
value: {
174+
type: 'NumberLiteralTypeAnnotation',
175+
value: 2,
176+
},
171177
},
172178
],
173179
},
@@ -178,15 +184,24 @@ const SIMPLE_NATIVE_MODULES: SchemaType = {
178184
members: [
179185
{
180186
name: 'POINT_ZERO',
181-
value: '0.0',
187+
value: {
188+
type: 'NumberLiteralTypeAnnotation',
189+
value: 0.0,
190+
},
182191
},
183192
{
184193
name: 'POINT_ONE',
185-
value: '0.1',
194+
value: {
195+
type: 'NumberLiteralTypeAnnotation',
196+
value: 0.1,
197+
},
186198
},
187199
{
188200
name: 'POINT_TWO',
189-
value: '0.2',
201+
value: {
202+
type: 'NumberLiteralTypeAnnotation',
203+
value: 0.2,
204+
},
190205
},
191206
],
192207
},
@@ -197,11 +212,17 @@ const SIMPLE_NATIVE_MODULES: SchemaType = {
197212
members: [
198213
{
199214
name: 'HELLO',
200-
value: 'hello',
215+
value: {
216+
type: 'StringLiteralTypeAnnotation',
217+
value: 'hello',
218+
},
201219
},
202220
{
203221
name: 'GoodBye',
204-
value: 'goodbye',
222+
value: {
223+
type: 'StringLiteralTypeAnnotation',
224+
value: 'goodbye',
225+
},
205226
},
206227
],
207228
},
@@ -1926,11 +1947,17 @@ const CXX_ONLY_NATIVE_MODULES: SchemaType = {
19261947
members: [
19271948
{
19281949
name: 'IA',
1929-
value: '23',
1950+
value: {
1951+
type: 'NumberLiteralTypeAnnotation',
1952+
value: 23,
1953+
},
19301954
},
19311955
{
19321956
name: 'IB',
1933-
value: '42',
1957+
value: {
1958+
type: 'NumberLiteralTypeAnnotation',
1959+
value: 42,
1960+
},
19341961
},
19351962
],
19361963
},
@@ -1941,11 +1968,17 @@ const CXX_ONLY_NATIVE_MODULES: SchemaType = {
19411968
members: [
19421969
{
19431970
name: 'FA',
1944-
value: '1.23',
1971+
value: {
1972+
type: 'NumberLiteralTypeAnnotation',
1973+
value: 1.23,
1974+
},
19451975
},
19461976
{
19471977
name: 'FB',
1948-
value: '4.56',
1978+
value: {
1979+
type: 'NumberLiteralTypeAnnotation',
1980+
value: 4.56,
1981+
},
19491982
},
19501983
],
19511984
},
@@ -1956,11 +1989,17 @@ const CXX_ONLY_NATIVE_MODULES: SchemaType = {
19561989
members: [
19571990
{
19581991
name: 'NA',
1959-
value: 'NA',
1992+
value: {
1993+
type: 'StringLiteralTypeAnnotation',
1994+
value: 'NA',
1995+
},
19601996
},
19611997
{
19621998
name: 'NB',
1963-
value: 'NB',
1999+
value: {
2000+
type: 'StringLiteralTypeAnnotation',
2001+
value: 'NB',
2002+
},
19642003
},
19652004
],
19662005
},
@@ -1971,11 +2010,17 @@ const CXX_ONLY_NATIVE_MODULES: SchemaType = {
19712010
members: [
19722011
{
19732012
name: 'SA',
1974-
value: 's---a',
2013+
value: {
2014+
type: 'StringLiteralTypeAnnotation',
2015+
value: 's---a',
2016+
},
19752017
},
19762018
{
19772019
name: 'SB',
1978-
value: 's---b',
2020+
value: {
2021+
type: 'StringLiteralTypeAnnotation',
2022+
value: 's---b',
2023+
},
19792024
},
19802025
],
19812026
},

packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleH-test.js.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2047,7 +2047,7 @@ template <>
20472047
struct Bridging<NativeSampleTurboModuleFloatEnum> {
20482048
static NativeSampleTurboModuleFloatEnum fromJs(jsi::Runtime &rt, const jsi::Value &rawValue) {
20492049
double value = (double)rawValue.asNumber();
2050-
if (value == 0.0) {
2050+
if (value == 0) {
20512051
return NativeSampleTurboModuleFloatEnum::POINT_ZERO;
20522052
} else if (value == 0.1) {
20532053
return NativeSampleTurboModuleFloatEnum::POINT_ONE;
@@ -2060,7 +2060,7 @@ struct Bridging<NativeSampleTurboModuleFloatEnum> {
20602060

20612061
static jsi::Value toJs(jsi::Runtime &rt, NativeSampleTurboModuleFloatEnum value) {
20622062
if (value == NativeSampleTurboModuleFloatEnum::POINT_ZERO) {
2063-
return bridging::toJs(rt, 0.0);
2063+
return bridging::toJs(rt, 0);
20642064
} else if (value == NativeSampleTurboModuleFloatEnum::POINT_ONE) {
20652065
return bridging::toJs(rt, 0.1);
20662066
} else if (value == NativeSampleTurboModuleFloatEnum::POINT_TWO) {

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -478,11 +478,17 @@ describe('typeEnumResolution', () => {
478478
members: [
479479
{
480480
name: 'Hello',
481-
value: 'hello',
481+
value: {
482+
type: 'StringLiteralTypeAnnotation',
483+
value: 'hello',
484+
},
482485
},
483486
{
484487
name: 'Goodbye',
485-
value: 'goodbye',
488+
value: {
489+
type: 'StringLiteralTypeAnnotation',
490+
value: 'goodbye',
491+
},
486492
},
487493
],
488494
},
@@ -521,11 +527,17 @@ describe('typeEnumResolution', () => {
521527
members: [
522528
{
523529
name: 'On',
524-
value: '1',
530+
value: {
531+
type: 'NumberLiteralTypeAnnotation',
532+
value: 1,
533+
},
525534
},
526535
{
527536
name: 'Off',
528-
value: '0',
537+
value: {
538+
type: 'NumberLiteralTypeAnnotation',
539+
value: 0,
540+
},
529541
},
530542
],
531543
},

packages/react-native-codegen/src/parsers/flow/modules/__tests__/__snapshots__/module-parser-snapshot-test.js.snap

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,17 @@ exports[`RN Codegen Flow Parser can generate fixture CXX_ONLY_NATIVE_MODULE 1`]
147147
'members': [
148148
{
149149
'name': 'SD',
150-
'value': 'SD'
150+
'value': {
151+
'type': 'StringLiteralTypeAnnotation',
152+
'value': 'SD'
153+
}
151154
},
152155
{
153156
'name': 'HD',
154-
'value': 'HD'
157+
'value': {
158+
'type': 'StringLiteralTypeAnnotation',
159+
'value': 'HD'
160+
}
155161
}
156162
]
157163
},
@@ -162,15 +168,24 @@ exports[`RN Codegen Flow Parser can generate fixture CXX_ONLY_NATIVE_MODULE 1`]
162168
'members': [
163169
{
164170
'name': 'Corrupted',
165-
'value': -1
171+
'value': {
172+
'type': 'NumberLiteralTypeAnnotation',
173+
'value': -1
174+
}
166175
},
167176
{
168177
'name': 'Low',
169-
'value': 720
178+
'value': {
179+
'type': 'NumberLiteralTypeAnnotation',
180+
'value': 720
181+
}
170182
},
171183
{
172184
'name': 'High',
173-
'value': 1080
185+
'value': {
186+
'type': 'NumberLiteralTypeAnnotation',
187+
'value': 1080
188+
}
174189
}
175190
]
176191
},
@@ -181,15 +196,24 @@ exports[`RN Codegen Flow Parser can generate fixture CXX_ONLY_NATIVE_MODULE 1`]
181196
'members': [
182197
{
183198
'name': 'One',
184-
'value': 'one'
199+
'value': {
200+
'type': 'StringLiteralTypeAnnotation',
201+
'value': 'one'
202+
}
185203
},
186204
{
187205
'name': 'Two',
188-
'value': 'two'
206+
'value': {
207+
'type': 'StringLiteralTypeAnnotation',
208+
'value': 'two'
209+
}
189210
},
190211
{
191212
'name': 'Three',
192-
'value': 'three'
213+
'value': {
214+
'type': 'StringLiteralTypeAnnotation',
215+
'value': 'three'
216+
}
193217
}
194218
]
195219
}
@@ -471,11 +495,17 @@ exports[`RN Codegen Flow Parser can generate fixture IOS_ONLY_NATIVE_MODULE 1`]
471495
'members': [
472496
{
473497
'name': 'SD',
474-
'value': 'SD'
498+
'value': {
499+
'type': 'StringLiteralTypeAnnotation',
500+
'value': 'SD'
501+
}
475502
},
476503
{
477504
'name': 'HD',
478-
'value': 'HD'
505+
'value': {
506+
'type': 'StringLiteralTypeAnnotation',
507+
'value': 'HD'
508+
}
479509
}
480510
]
481511
},
@@ -486,11 +516,17 @@ exports[`RN Codegen Flow Parser can generate fixture IOS_ONLY_NATIVE_MODULE 1`]
486516
'members': [
487517
{
488518
'name': 'Low',
489-
'value': 720
519+
'value': {
520+
'type': 'NumberLiteralTypeAnnotation',
521+
'value': 720
522+
}
490523
},
491524
{
492525
'name': 'High',
493-
'value': 1080
526+
'value': {
527+
'type': 'NumberLiteralTypeAnnotation',
528+
'value': 1080
529+
}
494530
}
495531
]
496532
},
@@ -501,15 +537,24 @@ exports[`RN Codegen Flow Parser can generate fixture IOS_ONLY_NATIVE_MODULE 1`]
501537
'members': [
502538
{
503539
'name': 'One',
504-
'value': 'one'
540+
'value': {
541+
'type': 'StringLiteralTypeAnnotation',
542+
'value': 'one'
543+
}
505544
},
506545
{
507546
'name': 'Two',
508-
'value': 'two'
547+
'value': {
548+
'type': 'StringLiteralTypeAnnotation',
549+
'value': 'two'
550+
}
509551
},
510552
{
511553
'name': 'Three',
512-
'value': 'three'
554+
'value': {
555+
'type': 'StringLiteralTypeAnnotation',
556+
'value': 'three'
557+
}
513558
}
514559
]
515560
}

0 commit comments

Comments
 (0)