@react-native/codegen 0.73.0 → 0.74.0-nightly-20231003-5dedf277c
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/cli/combine/combine-js-to-schema-cli.js +7 -1
- package/lib/cli/combine/combine-js-to-schema-cli.js.flow +7 -1
- package/lib/generators/components/CppHelpers.js +39 -2
- package/lib/generators/components/CppHelpers.js.flow +54 -5
- package/lib/generators/components/GenerateEventEmitterCpp.js +222 -28
- package/lib/generators/components/GenerateEventEmitterCpp.js.flow +221 -34
- package/lib/generators/components/GenerateEventEmitterH.js +77 -26
- package/lib/generators/components/GenerateEventEmitterH.js.flow +87 -30
- package/lib/generators/components/GeneratePropsH.js +2 -3
- package/lib/generators/components/GeneratePropsH.js.flow +2 -3
- 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 +1 -1
- package/lib/generators/modules/GenerateModuleCpp.js.flow +1 -1
- package/lib/generators/modules/GenerateModuleH.js +44 -39
- package/lib/generators/modules/GenerateModuleH.js.flow +51 -39
- package/lib/generators/modules/GenerateModuleJavaSpec.js +9 -7
- package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +10 -6
- package/lib/generators/modules/GenerateModuleJniH.js +1 -1
- package/lib/generators/modules/GenerateModuleJniH.js.flow +1 -1
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js +11 -3
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +13 -3
- package/lib/parsers/error-utils.js +44 -0
- package/lib/parsers/error-utils.js.flow +59 -0
- package/lib/parsers/errors.js +3 -9
- package/lib/parsers/errors.js.flow +3 -9
- 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 +22 -33
- package/lib/parsers/flow/components/componentsUtils.js.flow +24 -45
- package/lib/parsers/flow/components/events.js +151 -128
- package/lib/parsers/flow/components/events.js.flow +161 -136
- package/lib/parsers/flow/components/index.js +13 -94
- package/lib/parsers/flow/components/index.js.flow +5 -102
- package/lib/parsers/flow/modules/index.js +24 -24
- package/lib/parsers/flow/modules/index.js.flow +6 -6
- package/lib/parsers/flow/parser.d.ts +9 -2
- package/lib/parsers/flow/parser.js +179 -18
- package/lib/parsers/flow/parser.js.flow +231 -7
- package/lib/parsers/flow/utils.js +0 -63
- package/lib/parsers/flow/utils.js.flow +1 -77
- package/lib/parsers/parser.js.flow +176 -3
- package/lib/parsers/parserMock.js +202 -4
- package/lib/parsers/parserMock.js.flow +253 -4
- package/lib/parsers/parsers-commons.js +268 -10
- package/lib/parsers/parsers-commons.js.flow +365 -12
- package/lib/parsers/parsers-primitives.js +95 -1
- package/lib/parsers/parsers-primitives.js.flow +136 -1
- 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 +49 -57
- package/lib/parsers/typescript/components/componentsUtils.js.flow +48 -66
- package/lib/parsers/typescript/components/events.js +136 -115
- package/lib/parsers/typescript/components/events.js.flow +148 -119
- 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 +14 -99
- package/lib/parsers/typescript/components/index.js.flow +6 -106
- package/lib/parsers/typescript/modules/index.js +28 -26
- package/lib/parsers/typescript/modules/index.js.flow +9 -8
- package/lib/parsers/typescript/parser.d.ts +9 -2
- package/lib/parsers/typescript/parser.js +208 -14
- package/lib/parsers/typescript/parser.js.flow +247 -8
- package/lib/parsers/utils.js.flow +6 -0
- package/package.json +27 -16
- 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,97 +10,165 @@
|
|
|
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
|
+
buildPropertiesForEvent = _require2.buildPropertiesForEvent,
|
|
20
|
+
handleEventHandler = _require2.handleEventHandler,
|
|
21
|
+
emitBuildEventSchema = _require2.emitBuildEventSchema;
|
|
22
|
+
const _require3 = require('../../parsers-primitives'),
|
|
23
|
+
emitBoolProp = _require3.emitBoolProp,
|
|
24
|
+
emitDoubleProp = _require3.emitDoubleProp,
|
|
25
|
+
emitFloatProp = _require3.emitFloatProp,
|
|
26
|
+
emitMixedProp = _require3.emitMixedProp,
|
|
27
|
+
emitStringProp = _require3.emitStringProp,
|
|
28
|
+
emitInt32Prop = _require3.emitInt32Prop,
|
|
29
|
+
emitObjectProp = _require3.emitObjectProp,
|
|
30
|
+
emitUnionProp = _require3.emitUnionProp;
|
|
13
31
|
function getPropertyType(
|
|
14
32
|
/* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's
|
|
15
33
|
* LTI update could not be added via codemod */
|
|
16
34
|
name,
|
|
17
35
|
optional,
|
|
18
36
|
typeAnnotation,
|
|
37
|
+
parser,
|
|
19
38
|
) {
|
|
20
|
-
const type =
|
|
21
|
-
typeAnnotation.type === 'GenericTypeAnnotation'
|
|
22
|
-
? typeAnnotation.id.name
|
|
23
|
-
: typeAnnotation.type;
|
|
39
|
+
const type = extractTypeFromTypeAnnotation(typeAnnotation, parser);
|
|
24
40
|
switch (type) {
|
|
25
41
|
case 'BooleanTypeAnnotation':
|
|
42
|
+
return emitBoolProp(name, optional);
|
|
43
|
+
case 'StringTypeAnnotation':
|
|
44
|
+
return emitStringProp(name, optional);
|
|
45
|
+
case 'Int32':
|
|
46
|
+
return emitInt32Prop(name, optional);
|
|
47
|
+
case 'Double':
|
|
48
|
+
return emitDoubleProp(name, optional);
|
|
49
|
+
case 'Float':
|
|
50
|
+
return emitFloatProp(name, optional);
|
|
51
|
+
case '$ReadOnly':
|
|
52
|
+
return getPropertyType(
|
|
53
|
+
name,
|
|
54
|
+
optional,
|
|
55
|
+
typeAnnotation.typeParameters.params[0],
|
|
56
|
+
parser,
|
|
57
|
+
);
|
|
58
|
+
case 'ObjectTypeAnnotation':
|
|
59
|
+
return emitObjectProp(
|
|
60
|
+
name,
|
|
61
|
+
optional,
|
|
62
|
+
parser,
|
|
63
|
+
typeAnnotation,
|
|
64
|
+
extractArrayElementType,
|
|
65
|
+
);
|
|
66
|
+
case 'UnionTypeAnnotation':
|
|
67
|
+
return emitUnionProp(name, optional, parser, typeAnnotation);
|
|
68
|
+
case 'UnsafeMixed':
|
|
69
|
+
return emitMixedProp(name, optional);
|
|
70
|
+
case 'ArrayTypeAnnotation':
|
|
71
|
+
case '$ReadOnlyArray':
|
|
26
72
|
return {
|
|
27
73
|
name,
|
|
28
74
|
optional,
|
|
29
|
-
typeAnnotation:
|
|
30
|
-
|
|
31
|
-
|
|
75
|
+
typeAnnotation: extractArrayElementType(typeAnnotation, name, parser),
|
|
76
|
+
};
|
|
77
|
+
default:
|
|
78
|
+
throw new Error(`Unable to determine event type for "${name}": ${type}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function extractArrayElementType(typeAnnotation, name, parser) {
|
|
82
|
+
const type = extractTypeFromTypeAnnotation(typeAnnotation, parser);
|
|
83
|
+
switch (type) {
|
|
84
|
+
case 'BooleanTypeAnnotation':
|
|
85
|
+
return {
|
|
86
|
+
type: 'BooleanTypeAnnotation',
|
|
32
87
|
};
|
|
33
88
|
case 'StringTypeAnnotation':
|
|
34
89
|
return {
|
|
35
|
-
|
|
36
|
-
optional,
|
|
37
|
-
typeAnnotation: {
|
|
38
|
-
type: 'StringTypeAnnotation',
|
|
39
|
-
},
|
|
90
|
+
type: 'StringTypeAnnotation',
|
|
40
91
|
};
|
|
41
92
|
case 'Int32':
|
|
42
93
|
return {
|
|
43
|
-
|
|
44
|
-
optional,
|
|
45
|
-
typeAnnotation: {
|
|
46
|
-
type: 'Int32TypeAnnotation',
|
|
47
|
-
},
|
|
94
|
+
type: 'Int32TypeAnnotation',
|
|
48
95
|
};
|
|
96
|
+
case 'Float':
|
|
97
|
+
return {
|
|
98
|
+
type: 'FloatTypeAnnotation',
|
|
99
|
+
};
|
|
100
|
+
case 'NumberTypeAnnotation':
|
|
49
101
|
case 'Double':
|
|
50
102
|
return {
|
|
51
|
-
|
|
52
|
-
optional,
|
|
53
|
-
typeAnnotation: {
|
|
54
|
-
type: 'DoubleTypeAnnotation',
|
|
55
|
-
},
|
|
103
|
+
type: 'DoubleTypeAnnotation',
|
|
56
104
|
};
|
|
57
|
-
case '
|
|
105
|
+
case 'UnionTypeAnnotation':
|
|
58
106
|
return {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
107
|
+
type: 'StringEnumTypeAnnotation',
|
|
108
|
+
options: typeAnnotation.types.map(option =>
|
|
109
|
+
parser.getLiteralValue(option),
|
|
110
|
+
),
|
|
111
|
+
};
|
|
112
|
+
case 'UnsafeMixed':
|
|
113
|
+
return {
|
|
114
|
+
type: 'MixedTypeAnnotation',
|
|
64
115
|
};
|
|
65
|
-
case '$ReadOnly':
|
|
66
|
-
return getPropertyType(
|
|
67
|
-
name,
|
|
68
|
-
optional,
|
|
69
|
-
typeAnnotation.typeParameters.params[0],
|
|
70
|
-
);
|
|
71
116
|
case 'ObjectTypeAnnotation':
|
|
72
117
|
return {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
118
|
+
type: 'ObjectTypeAnnotation',
|
|
119
|
+
properties: parser
|
|
120
|
+
.getObjectProperties(typeAnnotation)
|
|
121
|
+
.map(member =>
|
|
122
|
+
buildPropertiesForEvent(member, parser, getPropertyType),
|
|
123
|
+
),
|
|
79
124
|
};
|
|
80
|
-
case '
|
|
125
|
+
case 'ArrayTypeAnnotation':
|
|
81
126
|
return {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
127
|
+
type: 'ArrayTypeAnnotation',
|
|
128
|
+
elementType: extractArrayElementType(
|
|
129
|
+
typeAnnotation.elementType,
|
|
130
|
+
name,
|
|
131
|
+
parser,
|
|
132
|
+
),
|
|
133
|
+
};
|
|
134
|
+
case '$ReadOnlyArray':
|
|
135
|
+
const genericParams = typeAnnotation.typeParameters.params;
|
|
136
|
+
if (genericParams.length !== 1) {
|
|
137
|
+
throw new Error(
|
|
138
|
+
`Events only supports arrays with 1 Generic type. Found ${
|
|
139
|
+
genericParams.length
|
|
140
|
+
} types:\n${prettify(genericParams)}`,
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
type: 'ArrayTypeAnnotation',
|
|
145
|
+
elementType: extractArrayElementType(genericParams[0], name, parser),
|
|
88
146
|
};
|
|
89
147
|
default:
|
|
90
|
-
|
|
91
|
-
|
|
148
|
+
throw new Error(
|
|
149
|
+
`Unrecognized ${type} for Array ${name} in events.\n${prettify(
|
|
150
|
+
typeAnnotation,
|
|
151
|
+
)}`,
|
|
152
|
+
);
|
|
92
153
|
}
|
|
93
154
|
}
|
|
155
|
+
function prettify(jsonObject) {
|
|
156
|
+
return JSON.stringify(jsonObject, null, 2);
|
|
157
|
+
}
|
|
158
|
+
function extractTypeFromTypeAnnotation(typeAnnotation, parser) {
|
|
159
|
+
return typeAnnotation.type === 'GenericTypeAnnotation'
|
|
160
|
+
? parser.getTypeAnnotationName(typeAnnotation)
|
|
161
|
+
: typeAnnotation.type;
|
|
162
|
+
}
|
|
94
163
|
function findEventArgumentsAndType(
|
|
164
|
+
parser,
|
|
95
165
|
typeAnnotation,
|
|
96
166
|
types,
|
|
97
167
|
bubblingType,
|
|
98
168
|
paperName,
|
|
99
169
|
) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
const name = typeAnnotation.id.name;
|
|
170
|
+
throwIfEventHasNoName(typeAnnotation, parser);
|
|
171
|
+
const name = parser.getTypeAnnotationName(typeAnnotation);
|
|
104
172
|
if (name === '$ReadOnly') {
|
|
105
173
|
return {
|
|
106
174
|
argumentProps: typeAnnotation.typeParameters.params[0].properties,
|
|
@@ -108,29 +176,16 @@ function findEventArgumentsAndType(
|
|
|
108
176
|
bubblingType,
|
|
109
177
|
};
|
|
110
178
|
} else if (name === 'BubblingEventHandler' || name === 'DirectEventHandler') {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
typeAnnotation
|
|
114
|
-
|
|
115
|
-
: null;
|
|
116
|
-
if (
|
|
117
|
-
typeAnnotation.typeParameters.params[0].type ===
|
|
118
|
-
'NullLiteralTypeAnnotation'
|
|
119
|
-
) {
|
|
120
|
-
return {
|
|
121
|
-
argumentProps: [],
|
|
122
|
-
bubblingType: eventType,
|
|
123
|
-
paperTopLevelNameDeprecated,
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
return findEventArgumentsAndType(
|
|
127
|
-
typeAnnotation.typeParameters.params[0],
|
|
179
|
+
return handleEventHandler(
|
|
180
|
+
name,
|
|
181
|
+
typeAnnotation,
|
|
182
|
+
parser,
|
|
128
183
|
types,
|
|
129
|
-
|
|
130
|
-
paperTopLevelNameDeprecated,
|
|
184
|
+
findEventArgumentsAndType,
|
|
131
185
|
);
|
|
132
186
|
} else if (types[name]) {
|
|
133
187
|
return findEventArgumentsAndType(
|
|
188
|
+
parser,
|
|
134
189
|
types[name].right,
|
|
135
190
|
types,
|
|
136
191
|
bubblingType,
|
|
@@ -144,29 +199,7 @@ function findEventArgumentsAndType(
|
|
|
144
199
|
};
|
|
145
200
|
}
|
|
146
201
|
}
|
|
147
|
-
|
|
148
|
-
/* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's
|
|
149
|
-
* LTI update could not be added via codemod */
|
|
150
|
-
function buildPropertiesForEvent(property) {
|
|
151
|
-
const name = property.key.name;
|
|
152
|
-
const optional =
|
|
153
|
-
property.value.type === 'NullableTypeAnnotation' || property.optional;
|
|
154
|
-
let typeAnnotation =
|
|
155
|
-
property.value.type === 'NullableTypeAnnotation'
|
|
156
|
-
? property.value.typeAnnotation
|
|
157
|
-
: 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
|
-
};
|
|
168
|
-
}
|
|
169
|
-
function buildEventSchema(types, property) {
|
|
202
|
+
function buildEventSchema(types, property, parser) {
|
|
170
203
|
const name = property.key.name;
|
|
171
204
|
const optional =
|
|
172
205
|
property.optional || property.value.type === 'NullableTypeAnnotation';
|
|
@@ -176,12 +209,13 @@ function buildEventSchema(types, property) {
|
|
|
176
209
|
: property.value;
|
|
177
210
|
if (
|
|
178
211
|
typeAnnotation.type !== 'GenericTypeAnnotation' ||
|
|
179
|
-
(typeAnnotation
|
|
180
|
-
typeAnnotation
|
|
212
|
+
(parser.getTypeAnnotationName(typeAnnotation) !== 'BubblingEventHandler' &&
|
|
213
|
+
parser.getTypeAnnotationName(typeAnnotation) !== 'DirectEventHandler')
|
|
181
214
|
) {
|
|
182
215
|
return null;
|
|
183
216
|
}
|
|
184
217
|
const _findEventArgumentsAn = findEventArgumentsAndType(
|
|
218
|
+
parser,
|
|
185
219
|
typeAnnotation,
|
|
186
220
|
types,
|
|
187
221
|
),
|
|
@@ -189,45 +223,34 @@ function buildEventSchema(types, property) {
|
|
|
189
223
|
bubblingType = _findEventArgumentsAn.bubblingType,
|
|
190
224
|
paperTopLevelNameDeprecated =
|
|
191
225
|
_findEventArgumentsAn.paperTopLevelNameDeprecated;
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
typeAnnotation: {
|
|
210
|
-
type: 'EventTypeAnnotation',
|
|
211
|
-
argument: getEventArgument(argumentProps, name),
|
|
212
|
-
},
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
if (argumentProps === null) {
|
|
216
|
-
throw new Error(`Unable to determine event arguments for "${name}"`);
|
|
217
|
-
}
|
|
218
|
-
if (bubblingType === null) {
|
|
219
|
-
throw new Error(`Unable to determine event arguments for "${name}"`);
|
|
220
|
-
}
|
|
226
|
+
const nonNullableArgumentProps = throwIfArgumentPropsAreNull(
|
|
227
|
+
argumentProps,
|
|
228
|
+
name,
|
|
229
|
+
);
|
|
230
|
+
const nonNullableBubblingType = throwIfBubblingTypeIsNull(bubblingType, name);
|
|
231
|
+
const argument = getEventArgument(
|
|
232
|
+
nonNullableArgumentProps,
|
|
233
|
+
parser,
|
|
234
|
+
getPropertyType,
|
|
235
|
+
);
|
|
236
|
+
return emitBuildEventSchema(
|
|
237
|
+
paperTopLevelNameDeprecated,
|
|
238
|
+
name,
|
|
239
|
+
optional,
|
|
240
|
+
nonNullableBubblingType,
|
|
241
|
+
argument,
|
|
242
|
+
);
|
|
221
243
|
}
|
|
222
244
|
|
|
223
245
|
// $FlowFixMe[unclear-type] there's no flowtype for ASTs
|
|
224
246
|
|
|
225
|
-
function getEvents(eventTypeAST, types) {
|
|
247
|
+
function getEvents(eventTypeAST, types, parser) {
|
|
226
248
|
return eventTypeAST
|
|
227
249
|
.filter(property => property.type === 'ObjectTypeProperty')
|
|
228
|
-
.map(property => buildEventSchema(types, property))
|
|
250
|
+
.map(property => buildEventSchema(types, property, parser))
|
|
229
251
|
.filter(Boolean);
|
|
230
252
|
}
|
|
231
253
|
module.exports = {
|
|
232
254
|
getEvents,
|
|
255
|
+
extractArrayElementType,
|
|
233
256
|
};
|