@react-native/codegen 0.72.5 → 0.73.0-nightly-20230605-5062553c6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/lib/CodegenSchema.d.ts +15 -4
- package/lib/CodegenSchema.js.flow +33 -21
- package/lib/generators/components/CppHelpers.js +39 -2
- package/lib/generators/components/CppHelpers.js.flow +54 -5
- package/lib/generators/components/GenerateEventEmitterCpp.js +238 -55
- package/lib/generators/components/GenerateEventEmitterCpp.js.flow +233 -55
- package/lib/generators/components/GenerateEventEmitterH.js +77 -28
- package/lib/generators/components/GenerateEventEmitterH.js.flow +87 -32
- package/lib/generators/components/GeneratePropsH.js +1 -2
- package/lib/generators/components/GeneratePropsH.js.flow +1 -2
- package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js +0 -1
- package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +3 -5
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js +4 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js.flow +4 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js +2 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js.flow +2 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js +114 -1
- package/lib/generators/components/__test_fixtures__/fixtures.js.flow +114 -1
- package/lib/generators/modules/GenerateModuleCpp.js +3 -3
- package/lib/generators/modules/GenerateModuleCpp.js.flow +3 -3
- package/lib/generators/modules/GenerateModuleJavaSpec.js +1 -2
- package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +1 -2
- package/lib/parsers/error-utils.js +44 -0
- package/lib/parsers/error-utils.js.flow +59 -0
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +51 -0
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +51 -0
- package/lib/parsers/flow/components/componentsUtils.js +12 -19
- package/lib/parsers/flow/components/componentsUtils.js.flow +16 -27
- package/lib/parsers/flow/components/events.js +157 -83
- package/lib/parsers/flow/components/events.js.flow +158 -82
- package/lib/parsers/flow/components/index.js +10 -129
- package/lib/parsers/flow/components/index.js.flow +10 -150
- package/lib/parsers/flow/modules/index.js +39 -49
- package/lib/parsers/flow/modules/index.js.flow +22 -31
- package/lib/parsers/flow/parser.d.ts +9 -2
- package/lib/parsers/flow/parser.js +177 -16
- package/lib/parsers/flow/parser.js.flow +220 -6
- package/lib/parsers/flow/utils.js +0 -63
- package/lib/parsers/flow/utils.js.flow +1 -77
- package/lib/parsers/parser.js.flow +143 -1
- package/lib/parsers/parserMock.js +175 -2
- package/lib/parsers/parserMock.js.flow +227 -2
- package/lib/parsers/parsers-commons.js +169 -9
- package/lib/parsers/parsers-commons.js.flow +233 -12
- package/lib/parsers/parsers-primitives.js +94 -35
- package/lib/parsers/parsers-primitives.js.flow +124 -35
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +51 -0
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +51 -0
- package/lib/parsers/typescript/components/componentsUtils.js +44 -46
- package/lib/parsers/typescript/components/componentsUtils.js.flow +44 -51
- package/lib/parsers/typescript/components/events.js +142 -72
- package/lib/parsers/typescript/components/events.js.flow +149 -73
- package/lib/parsers/typescript/components/extends.js +2 -49
- package/lib/parsers/typescript/components/extends.js.flow +1 -55
- package/lib/parsers/typescript/components/index.js +11 -134
- package/lib/parsers/typescript/components/index.js.flow +11 -156
- package/lib/parsers/typescript/modules/index.js +43 -51
- package/lib/parsers/typescript/modules/index.js.flow +25 -32
- package/lib/parsers/typescript/parser.d.ts +9 -2
- package/lib/parsers/typescript/parser.js +224 -7
- package/lib/parsers/typescript/parser.js.flow +262 -6
- package/lib/parsers/utils.js.flow +6 -0
- package/package.json +16 -5
- package/lib/parsers/flow/components/extends.js +0 -52
- package/lib/parsers/flow/components/extends.js.flow +0 -66
- package/lib/parsers/flow/components/props.js +0 -47
- package/lib/parsers/flow/components/props.js.flow +0 -60
- package/lib/parsers/typescript/components/props.js +0 -39
- package/lib/parsers/typescript/components/props.js.flow +0 -48
- package/lib/parsers/typescript/utils.js +0 -90
- package/lib/parsers/typescript/utils.js.flow +0 -104
|
@@ -10,96 +10,170 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
+
const _require = require('../../error-utils'),
|
|
14
|
+
throwIfEventHasNoName = _require.throwIfEventHasNoName,
|
|
15
|
+
throwIfBubblingTypeIsNull = _require.throwIfBubblingTypeIsNull,
|
|
16
|
+
throwIfArgumentPropsAreNull = _require.throwIfArgumentPropsAreNull;
|
|
17
|
+
const _require2 = require('../../parsers-commons'),
|
|
18
|
+
getEventArgument = _require2.getEventArgument;
|
|
19
|
+
const _require3 = require('../../parsers-primitives'),
|
|
20
|
+
emitBoolProp = _require3.emitBoolProp,
|
|
21
|
+
emitDoubleProp = _require3.emitDoubleProp,
|
|
22
|
+
emitFloatProp = _require3.emitFloatProp,
|
|
23
|
+
emitStringProp = _require3.emitStringProp,
|
|
24
|
+
emitInt32Prop = _require3.emitInt32Prop;
|
|
13
25
|
function getPropertyType(
|
|
14
26
|
/* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's
|
|
15
27
|
* LTI update could not be added via codemod */
|
|
16
28
|
name,
|
|
17
29
|
optional,
|
|
18
30
|
typeAnnotation,
|
|
31
|
+
parser,
|
|
19
32
|
) {
|
|
20
|
-
const type =
|
|
21
|
-
typeAnnotation.type === 'GenericTypeAnnotation'
|
|
22
|
-
? typeAnnotation.id.name
|
|
23
|
-
: typeAnnotation.type;
|
|
33
|
+
const type = extractTypeFromTypeAnnotation(typeAnnotation);
|
|
24
34
|
switch (type) {
|
|
25
35
|
case 'BooleanTypeAnnotation':
|
|
36
|
+
return emitBoolProp(name, optional);
|
|
37
|
+
case 'StringTypeAnnotation':
|
|
38
|
+
return emitStringProp(name, optional);
|
|
39
|
+
case 'Int32':
|
|
40
|
+
return emitInt32Prop(name, optional);
|
|
41
|
+
case 'Double':
|
|
42
|
+
return emitDoubleProp(name, optional);
|
|
43
|
+
case 'Float':
|
|
44
|
+
return emitFloatProp(name, optional);
|
|
45
|
+
case '$ReadOnly':
|
|
46
|
+
return getPropertyType(
|
|
47
|
+
name,
|
|
48
|
+
optional,
|
|
49
|
+
typeAnnotation.typeParameters.params[0],
|
|
50
|
+
parser,
|
|
51
|
+
);
|
|
52
|
+
case 'ObjectTypeAnnotation':
|
|
26
53
|
return {
|
|
27
54
|
name,
|
|
28
55
|
optional,
|
|
29
56
|
typeAnnotation: {
|
|
30
|
-
type: '
|
|
57
|
+
type: 'ObjectTypeAnnotation',
|
|
58
|
+
properties: typeAnnotation.properties.map(member =>
|
|
59
|
+
buildPropertiesForEvent(member, parser),
|
|
60
|
+
),
|
|
31
61
|
},
|
|
32
62
|
};
|
|
33
|
-
case '
|
|
63
|
+
case 'UnionTypeAnnotation':
|
|
34
64
|
return {
|
|
35
65
|
name,
|
|
36
66
|
optional,
|
|
37
67
|
typeAnnotation: {
|
|
38
|
-
type: '
|
|
68
|
+
type: 'StringEnumTypeAnnotation',
|
|
69
|
+
options: typeAnnotation.types.map(option => option.value),
|
|
39
70
|
},
|
|
40
71
|
};
|
|
41
|
-
case '
|
|
72
|
+
case 'UnsafeMixed':
|
|
42
73
|
return {
|
|
43
74
|
name,
|
|
44
75
|
optional,
|
|
45
76
|
typeAnnotation: {
|
|
46
|
-
type: '
|
|
77
|
+
type: 'MixedTypeAnnotation',
|
|
47
78
|
},
|
|
48
79
|
};
|
|
49
|
-
case '
|
|
80
|
+
case 'ArrayTypeAnnotation':
|
|
81
|
+
case '$ReadOnlyArray':
|
|
50
82
|
return {
|
|
51
83
|
name,
|
|
52
84
|
optional,
|
|
53
|
-
typeAnnotation:
|
|
54
|
-
|
|
55
|
-
|
|
85
|
+
typeAnnotation: extractArrayElementType(typeAnnotation, name, parser),
|
|
86
|
+
};
|
|
87
|
+
default:
|
|
88
|
+
throw new Error(`Unable to determine event type for "${name}": ${type}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function extractArrayElementType(typeAnnotation, name, parser) {
|
|
92
|
+
const type = extractTypeFromTypeAnnotation(typeAnnotation);
|
|
93
|
+
switch (type) {
|
|
94
|
+
case 'BooleanTypeAnnotation':
|
|
95
|
+
return {
|
|
96
|
+
type: 'BooleanTypeAnnotation',
|
|
97
|
+
};
|
|
98
|
+
case 'StringTypeAnnotation':
|
|
99
|
+
return {
|
|
100
|
+
type: 'StringTypeAnnotation',
|
|
101
|
+
};
|
|
102
|
+
case 'Int32':
|
|
103
|
+
return {
|
|
104
|
+
type: 'Int32TypeAnnotation',
|
|
56
105
|
};
|
|
57
106
|
case 'Float':
|
|
58
107
|
return {
|
|
59
|
-
|
|
60
|
-
optional,
|
|
61
|
-
typeAnnotation: {
|
|
62
|
-
type: 'FloatTypeAnnotation',
|
|
63
|
-
},
|
|
108
|
+
type: 'FloatTypeAnnotation',
|
|
64
109
|
};
|
|
65
|
-
case '
|
|
66
|
-
|
|
67
|
-
name,
|
|
68
|
-
optional,
|
|
69
|
-
typeAnnotation.typeParameters.params[0],
|
|
70
|
-
);
|
|
71
|
-
case 'ObjectTypeAnnotation':
|
|
110
|
+
case 'NumberTypeAnnotation':
|
|
111
|
+
case 'Double':
|
|
72
112
|
return {
|
|
73
|
-
|
|
74
|
-
optional,
|
|
75
|
-
typeAnnotation: {
|
|
76
|
-
type: 'ObjectTypeAnnotation',
|
|
77
|
-
properties: typeAnnotation.properties.map(buildPropertiesForEvent),
|
|
78
|
-
},
|
|
113
|
+
type: 'DoubleTypeAnnotation',
|
|
79
114
|
};
|
|
80
115
|
case 'UnionTypeAnnotation':
|
|
81
116
|
return {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
117
|
+
type: 'StringEnumTypeAnnotation',
|
|
118
|
+
options: typeAnnotation.types.map(option => option.value),
|
|
119
|
+
};
|
|
120
|
+
case 'UnsafeMixed':
|
|
121
|
+
return {
|
|
122
|
+
type: 'MixedTypeAnnotation',
|
|
123
|
+
};
|
|
124
|
+
case 'ObjectTypeAnnotation':
|
|
125
|
+
return {
|
|
126
|
+
type: 'ObjectTypeAnnotation',
|
|
127
|
+
properties: typeAnnotation.properties.map(member =>
|
|
128
|
+
buildPropertiesForEvent(member, parser),
|
|
129
|
+
),
|
|
130
|
+
};
|
|
131
|
+
case 'ArrayTypeAnnotation':
|
|
132
|
+
return {
|
|
133
|
+
type: 'ArrayTypeAnnotation',
|
|
134
|
+
elementType: extractArrayElementType(
|
|
135
|
+
typeAnnotation.elementType,
|
|
136
|
+
name,
|
|
137
|
+
parser,
|
|
138
|
+
),
|
|
139
|
+
};
|
|
140
|
+
case '$ReadOnlyArray':
|
|
141
|
+
const genericParams = typeAnnotation.typeParameters.params;
|
|
142
|
+
if (genericParams.length !== 1) {
|
|
143
|
+
throw new Error(
|
|
144
|
+
`Events only supports arrays with 1 Generic type. Found ${
|
|
145
|
+
genericParams.length
|
|
146
|
+
} types:\n${prettify(genericParams)}`,
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
type: 'ArrayTypeAnnotation',
|
|
151
|
+
elementType: extractArrayElementType(genericParams[0], name, parser),
|
|
88
152
|
};
|
|
89
153
|
default:
|
|
90
|
-
|
|
91
|
-
|
|
154
|
+
throw new Error(
|
|
155
|
+
`Unrecognized ${type} for Array ${name} in events.\n${prettify(
|
|
156
|
+
typeAnnotation,
|
|
157
|
+
)}`,
|
|
158
|
+
);
|
|
92
159
|
}
|
|
93
160
|
}
|
|
161
|
+
function prettify(jsonObject) {
|
|
162
|
+
return JSON.stringify(jsonObject, null, 2);
|
|
163
|
+
}
|
|
164
|
+
function extractTypeFromTypeAnnotation(typeAnnotation) {
|
|
165
|
+
return typeAnnotation.type === 'GenericTypeAnnotation'
|
|
166
|
+
? typeAnnotation.id.name
|
|
167
|
+
: typeAnnotation.type;
|
|
168
|
+
}
|
|
94
169
|
function findEventArgumentsAndType(
|
|
170
|
+
parser,
|
|
95
171
|
typeAnnotation,
|
|
96
172
|
types,
|
|
97
173
|
bubblingType,
|
|
98
174
|
paperName,
|
|
99
175
|
) {
|
|
100
|
-
|
|
101
|
-
throw new Error("typeAnnotation of event doesn't have a name");
|
|
102
|
-
}
|
|
176
|
+
throwIfEventHasNoName(typeAnnotation, parser);
|
|
103
177
|
const name = typeAnnotation.id.name;
|
|
104
178
|
if (name === '$ReadOnly') {
|
|
105
179
|
return {
|
|
@@ -115,7 +189,7 @@ function findEventArgumentsAndType(
|
|
|
115
189
|
: null;
|
|
116
190
|
if (
|
|
117
191
|
typeAnnotation.typeParameters.params[0].type ===
|
|
118
|
-
|
|
192
|
+
parser.nullLiteralTypeAnnotation
|
|
119
193
|
) {
|
|
120
194
|
return {
|
|
121
195
|
argumentProps: [],
|
|
@@ -124,6 +198,7 @@ function findEventArgumentsAndType(
|
|
|
124
198
|
};
|
|
125
199
|
}
|
|
126
200
|
return findEventArgumentsAndType(
|
|
201
|
+
parser,
|
|
127
202
|
typeAnnotation.typeParameters.params[0],
|
|
128
203
|
types,
|
|
129
204
|
eventType,
|
|
@@ -131,6 +206,7 @@ function findEventArgumentsAndType(
|
|
|
131
206
|
);
|
|
132
207
|
} else if (types[name]) {
|
|
133
208
|
return findEventArgumentsAndType(
|
|
209
|
+
parser,
|
|
134
210
|
types[name].right,
|
|
135
211
|
types,
|
|
136
212
|
bubblingType,
|
|
@@ -144,29 +220,21 @@ function findEventArgumentsAndType(
|
|
|
144
220
|
};
|
|
145
221
|
}
|
|
146
222
|
}
|
|
147
|
-
|
|
148
|
-
/* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's
|
|
149
|
-
|
|
150
|
-
|
|
223
|
+
function buildPropertiesForEvent(
|
|
224
|
+
/* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's
|
|
225
|
+
* LTI update could not be added via codemod */
|
|
226
|
+
property,
|
|
227
|
+
parser,
|
|
228
|
+
) {
|
|
151
229
|
const name = property.key.name;
|
|
152
|
-
const optional =
|
|
153
|
-
property.value.type === 'NullableTypeAnnotation' || property.optional;
|
|
230
|
+
const optional = parser.isOptionalProperty(property);
|
|
154
231
|
let typeAnnotation =
|
|
155
232
|
property.value.type === 'NullableTypeAnnotation'
|
|
156
233
|
? property.value.typeAnnotation
|
|
157
234
|
: property.value;
|
|
158
|
-
return getPropertyType(name, optional, typeAnnotation);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's
|
|
162
|
-
* LTI update could not be added via codemod */
|
|
163
|
-
function getEventArgument(argumentProps, name) {
|
|
164
|
-
return {
|
|
165
|
-
type: 'ObjectTypeAnnotation',
|
|
166
|
-
properties: argumentProps.map(buildPropertiesForEvent),
|
|
167
|
-
};
|
|
235
|
+
return getPropertyType(name, optional, typeAnnotation, parser);
|
|
168
236
|
}
|
|
169
|
-
function buildEventSchema(types, property) {
|
|
237
|
+
function buildEventSchema(types, property, parser) {
|
|
170
238
|
const name = property.key.name;
|
|
171
239
|
const optional =
|
|
172
240
|
property.optional || property.value.type === 'NullableTypeAnnotation';
|
|
@@ -182,6 +250,7 @@ function buildEventSchema(types, property) {
|
|
|
182
250
|
return null;
|
|
183
251
|
}
|
|
184
252
|
const _findEventArgumentsAn = findEventArgumentsAndType(
|
|
253
|
+
parser,
|
|
185
254
|
typeAnnotation,
|
|
186
255
|
types,
|
|
187
256
|
),
|
|
@@ -189,43 +258,48 @@ function buildEventSchema(types, property) {
|
|
|
189
258
|
bubblingType = _findEventArgumentsAn.bubblingType,
|
|
190
259
|
paperTopLevelNameDeprecated =
|
|
191
260
|
_findEventArgumentsAn.paperTopLevelNameDeprecated;
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
paperTopLevelNameDeprecated,
|
|
199
|
-
typeAnnotation: {
|
|
200
|
-
type: 'EventTypeAnnotation',
|
|
201
|
-
argument: getEventArgument(argumentProps, name),
|
|
202
|
-
},
|
|
203
|
-
};
|
|
204
|
-
}
|
|
261
|
+
const nonNullableArgumentProps = throwIfArgumentPropsAreNull(
|
|
262
|
+
argumentProps,
|
|
263
|
+
name,
|
|
264
|
+
);
|
|
265
|
+
const nonNullableBubblingType = throwIfBubblingTypeIsNull(bubblingType, name);
|
|
266
|
+
if (paperTopLevelNameDeprecated != null) {
|
|
205
267
|
return {
|
|
206
268
|
name,
|
|
207
269
|
optional,
|
|
208
|
-
bubblingType,
|
|
270
|
+
bubblingType: nonNullableBubblingType,
|
|
271
|
+
paperTopLevelNameDeprecated,
|
|
209
272
|
typeAnnotation: {
|
|
210
273
|
type: 'EventTypeAnnotation',
|
|
211
|
-
argument: getEventArgument(
|
|
274
|
+
argument: getEventArgument(
|
|
275
|
+
nonNullableArgumentProps,
|
|
276
|
+
buildPropertiesForEvent,
|
|
277
|
+
parser,
|
|
278
|
+
),
|
|
212
279
|
},
|
|
213
280
|
};
|
|
214
281
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
282
|
+
return {
|
|
283
|
+
name,
|
|
284
|
+
optional,
|
|
285
|
+
bubblingType: nonNullableBubblingType,
|
|
286
|
+
typeAnnotation: {
|
|
287
|
+
type: 'EventTypeAnnotation',
|
|
288
|
+
argument: getEventArgument(
|
|
289
|
+
nonNullableArgumentProps,
|
|
290
|
+
buildPropertiesForEvent,
|
|
291
|
+
parser,
|
|
292
|
+
),
|
|
293
|
+
},
|
|
294
|
+
};
|
|
221
295
|
}
|
|
222
296
|
|
|
223
297
|
// $FlowFixMe[unclear-type] there's no flowtype for ASTs
|
|
224
298
|
|
|
225
|
-
function getEvents(eventTypeAST, types) {
|
|
299
|
+
function getEvents(eventTypeAST, types, parser) {
|
|
226
300
|
return eventTypeAST
|
|
227
301
|
.filter(property => property.type === 'ObjectTypeProperty')
|
|
228
|
-
.map(property => buildEventSchema(types, property))
|
|
302
|
+
.map(property => buildEventSchema(types, property, parser))
|
|
229
303
|
.filter(Boolean);
|
|
230
304
|
}
|
|
231
305
|
module.exports = {
|