Skip to content

Commit 3bf7a09

Browse files
marcoww6meta-codesync[bot]
authored andcommitted
Support ReadonlyArray in react-native-codegen (#54924)
Summary: Pull Request resolved: #54924 The lint is triggered in D89415612. Not sure what those file do but it seems a good fix Changelog: [General][Added] Support parsing `ReadonlyArray` for the new Flow utility types Reviewed By: SamChou19815 Differential Revision: D89418033 fbshipit-source-id: ef227b344a693ec47dea86bbf34e0af17bad25fd
1 parent c7f433a commit 3bf7a09

4 files changed

Lines changed: 12 additions & 4 deletions

File tree

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,12 @@ function buildCommandSchema(
105105
break;
106106
case 'Array':
107107
case '$ReadOnlyArray':
108+
case 'ReadonlyArray':
108109
/* $FlowFixMe[invalid-compare] Error discovered during Constant
109110
* Condition roll out. See https://fburl.com/workplace/4oq3zi07. */
110111
if (!paramValue.type === 'GenericTypeAnnotation') {
111112
throw new Error(
112-
'Array and $ReadOnlyArray are GenericTypeAnnotation for array',
113+
'Array, $ReadOnlyArray and ReadonlyArray are GenericTypeAnnotation for array',
113114
);
114115
}
115116
returnType = {

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,10 @@ function getTypeAnnotationForArray<+T>(
5858
};
5959
}
6060

61-
if (objectType.id.name === '$ReadOnlyArray') {
61+
if (
62+
objectType.id.name === '$ReadOnlyArray' ||
63+
objectType.id.name === 'ReadonlyArray'
64+
) {
6265
// We need to go yet another level deeper to resolve
6366
// types that may be defined in a type alias
6467
const nestedObjectType = getValueFromTypes(
@@ -226,7 +229,8 @@ function getTypeAnnotation<+T>(
226229

227230
if (
228231
typeAnnotation.type === 'GenericTypeAnnotation' &&
229-
parser.getTypeAnnotationName(typeAnnotation) === '$ReadOnlyArray'
232+
(parser.getTypeAnnotationName(typeAnnotation) === '$ReadOnlyArray' ||
233+
parser.getTypeAnnotationName(typeAnnotation) === 'ReadonlyArray')
230234
) {
231235
return {
232236
type: 'ArrayTypeAnnotation',

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ function getPropertyType(
8282
return emitMixedProp(name, optional);
8383
case 'ArrayTypeAnnotation':
8484
case '$ReadOnlyArray':
85+
case 'ReadonlyArray':
8586
return {
8687
name,
8788
optional,
@@ -142,6 +143,7 @@ function extractArrayElementType(
142143
),
143144
};
144145
case '$ReadOnlyArray':
146+
case 'ReadonlyArray':
145147
const genericParams = typeAnnotation.typeParameters.params;
146148
if (genericParams.length !== 1) {
147149
throw new Error(

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ function translateTypeAnnotation(
100100
);
101101
}
102102
case 'Array':
103-
case '$ReadOnlyArray': {
103+
case '$ReadOnlyArray':
104+
case 'ReadonlyArray': {
104105
return emitArrayType(
105106
hasteModuleName,
106107
typeAnnotation,

0 commit comments

Comments
 (0)