@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
|
@@ -123,7 +123,7 @@ const EVENTS_WITH_PAPER_NAME: SchemaType = {
|
|
|
123
123
|
},
|
|
124
124
|
},
|
|
125
125
|
{
|
|
126
|
-
name: '
|
|
126
|
+
name: 'onDirectChange',
|
|
127
127
|
paperTopLevelNameDeprecated: 'paperDirectChange',
|
|
128
128
|
optional: true,
|
|
129
129
|
bubblingType: 'direct',
|
|
@@ -1206,6 +1206,99 @@ const EVENT_PROPS: SchemaType = {
|
|
|
1206
1206
|
},
|
|
1207
1207
|
},
|
|
1208
1208
|
},
|
|
1209
|
+
{
|
|
1210
|
+
name: 'onArrayEventType',
|
|
1211
|
+
optional: true,
|
|
1212
|
+
bubblingType: 'bubble',
|
|
1213
|
+
typeAnnotation: {
|
|
1214
|
+
type: 'EventTypeAnnotation',
|
|
1215
|
+
argument: {
|
|
1216
|
+
type: 'ObjectTypeAnnotation',
|
|
1217
|
+
properties: [
|
|
1218
|
+
{
|
|
1219
|
+
name: 'bool_array_event_prop',
|
|
1220
|
+
optional: false,
|
|
1221
|
+
typeAnnotation: {
|
|
1222
|
+
type: 'ArrayTypeAnnotation',
|
|
1223
|
+
elementType: {
|
|
1224
|
+
type: 'BooleanTypeAnnotation',
|
|
1225
|
+
},
|
|
1226
|
+
},
|
|
1227
|
+
},
|
|
1228
|
+
{
|
|
1229
|
+
name: 'string_enum_event_prop',
|
|
1230
|
+
optional: false,
|
|
1231
|
+
typeAnnotation: {
|
|
1232
|
+
type: 'ArrayTypeAnnotation',
|
|
1233
|
+
elementType: {
|
|
1234
|
+
type: 'StringEnumTypeAnnotation',
|
|
1235
|
+
options: ['YES', 'NO'],
|
|
1236
|
+
},
|
|
1237
|
+
},
|
|
1238
|
+
},
|
|
1239
|
+
{
|
|
1240
|
+
name: 'array_array_event_prop',
|
|
1241
|
+
optional: false,
|
|
1242
|
+
typeAnnotation: {
|
|
1243
|
+
type: 'ArrayTypeAnnotation',
|
|
1244
|
+
elementType: {
|
|
1245
|
+
type: 'ArrayTypeAnnotation',
|
|
1246
|
+
elementType: {
|
|
1247
|
+
type: 'StringTypeAnnotation',
|
|
1248
|
+
},
|
|
1249
|
+
},
|
|
1250
|
+
},
|
|
1251
|
+
},
|
|
1252
|
+
{
|
|
1253
|
+
name: 'array_object_event_prop',
|
|
1254
|
+
optional: false,
|
|
1255
|
+
typeAnnotation: {
|
|
1256
|
+
type: 'ArrayTypeAnnotation',
|
|
1257
|
+
elementType: {
|
|
1258
|
+
type: 'ObjectTypeAnnotation',
|
|
1259
|
+
properties: [
|
|
1260
|
+
{
|
|
1261
|
+
name: 'lat',
|
|
1262
|
+
optional: false,
|
|
1263
|
+
typeAnnotation: {
|
|
1264
|
+
type: 'DoubleTypeAnnotation',
|
|
1265
|
+
},
|
|
1266
|
+
},
|
|
1267
|
+
{
|
|
1268
|
+
name: 'lon',
|
|
1269
|
+
optional: false,
|
|
1270
|
+
typeAnnotation: {
|
|
1271
|
+
type: 'DoubleTypeAnnotation',
|
|
1272
|
+
},
|
|
1273
|
+
},
|
|
1274
|
+
{
|
|
1275
|
+
name: 'names',
|
|
1276
|
+
optional: false,
|
|
1277
|
+
typeAnnotation: {
|
|
1278
|
+
type: 'ArrayTypeAnnotation',
|
|
1279
|
+
elementType: {
|
|
1280
|
+
type: 'StringTypeAnnotation',
|
|
1281
|
+
},
|
|
1282
|
+
},
|
|
1283
|
+
},
|
|
1284
|
+
],
|
|
1285
|
+
},
|
|
1286
|
+
},
|
|
1287
|
+
},
|
|
1288
|
+
{
|
|
1289
|
+
name: 'array_mixed_event_prop',
|
|
1290
|
+
optional: false,
|
|
1291
|
+
typeAnnotation: {
|
|
1292
|
+
type: 'ArrayTypeAnnotation',
|
|
1293
|
+
elementType: {
|
|
1294
|
+
type: 'MixedTypeAnnotation',
|
|
1295
|
+
},
|
|
1296
|
+
},
|
|
1297
|
+
},
|
|
1298
|
+
],
|
|
1299
|
+
},
|
|
1300
|
+
},
|
|
1301
|
+
},
|
|
1209
1302
|
{
|
|
1210
1303
|
name: 'onEventDirect',
|
|
1211
1304
|
optional: true,
|
|
@@ -1255,6 +1348,26 @@ const EVENT_PROPS: SchemaType = {
|
|
|
1255
1348
|
type: 'EventTypeAnnotation',
|
|
1256
1349
|
},
|
|
1257
1350
|
},
|
|
1351
|
+
{
|
|
1352
|
+
name: 'onEventWithMixedPropAttribute',
|
|
1353
|
+
optional: true,
|
|
1354
|
+
bubblingType: 'direct',
|
|
1355
|
+
typeAnnotation: {
|
|
1356
|
+
type: 'EventTypeAnnotation',
|
|
1357
|
+
argument: {
|
|
1358
|
+
type: 'ObjectTypeAnnotation',
|
|
1359
|
+
properties: [
|
|
1360
|
+
{
|
|
1361
|
+
name: 'value',
|
|
1362
|
+
optional: false,
|
|
1363
|
+
typeAnnotation: {
|
|
1364
|
+
type: 'MixedTypeAnnotation',
|
|
1365
|
+
},
|
|
1366
|
+
},
|
|
1367
|
+
],
|
|
1368
|
+
},
|
|
1369
|
+
},
|
|
1370
|
+
},
|
|
1258
1371
|
],
|
|
1259
1372
|
props: [
|
|
1260
1373
|
{
|
|
@@ -133,7 +133,7 @@ const FileTemplate = ({libraryName, modules}) => {
|
|
|
133
133
|
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
134
134
|
* once the code is regenerated.
|
|
135
135
|
*
|
|
136
|
-
* ${'@'}generated by codegen project:
|
|
136
|
+
* ${'@'}generated by codegen project: GenerateModuleCpp.js
|
|
137
137
|
*/
|
|
138
138
|
|
|
139
139
|
#include "${libraryName}JSI.h"
|
|
@@ -96,7 +96,7 @@ const FileTemplate = ({
|
|
|
96
96
|
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
97
97
|
* once the code is regenerated.
|
|
98
98
|
*
|
|
99
|
-
* ${'@'}generated by codegen project:
|
|
99
|
+
* ${'@'}generated by codegen project: GenerateModuleCpp.js
|
|
100
100
|
*/
|
|
101
101
|
|
|
102
102
|
#include "${libraryName}JSI.h"
|
|
@@ -117,9 +117,11 @@ public:
|
|
|
117
117
|
return delegate_.get(rt, propName);
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
+
static constexpr std::string_view kModuleName = "${moduleName}";
|
|
121
|
+
|
|
120
122
|
protected:
|
|
121
123
|
${hasteModuleName}CxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
|
|
122
|
-
: TurboModule(
|
|
124
|
+
: TurboModule(std::string{${hasteModuleName}CxxSpec::kModuleName}, jsInvoker),
|
|
123
125
|
delegate_(static_cast<T*>(this), jsInvoker) {}
|
|
124
126
|
|
|
125
127
|
private:
|
|
@@ -246,6 +248,15 @@ function translatePrimitiveJSTypeToCpp(
|
|
|
246
248
|
}
|
|
247
249
|
}
|
|
248
250
|
function createStructsString(moduleName, aliasMap, resolveAlias, enumMap) {
|
|
251
|
+
const getCppType = v =>
|
|
252
|
+
translatePrimitiveJSTypeToCpp(
|
|
253
|
+
moduleName,
|
|
254
|
+
v.typeAnnotation,
|
|
255
|
+
false,
|
|
256
|
+
typeName => `Unsupported type for param "${v.name}". Found: ${typeName}`,
|
|
257
|
+
resolveAlias,
|
|
258
|
+
enumMap,
|
|
259
|
+
);
|
|
249
260
|
return Object.keys(aliasMap)
|
|
250
261
|
.map(alias => {
|
|
251
262
|
const value = aliasMap[alias];
|
|
@@ -254,28 +265,22 @@ function createStructsString(moduleName, aliasMap, resolveAlias, enumMap) {
|
|
|
254
265
|
}
|
|
255
266
|
const structName = `${moduleName}Base${alias}`;
|
|
256
267
|
const templateParameterWithTypename = value.properties
|
|
257
|
-
.map((v, i) =>
|
|
268
|
+
.map((v, i) => `typename P${i}`)
|
|
258
269
|
.join(', ');
|
|
259
270
|
const templateParameter = value.properties
|
|
260
271
|
.map((v, i) => 'P' + i)
|
|
261
272
|
.join(', ');
|
|
262
|
-
const
|
|
263
|
-
.map(
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
false,
|
|
268
|
-
typeName =>
|
|
269
|
-
`Unsupported type for param "${v.name}". Found: ${typeName}`,
|
|
270
|
-
resolveAlias,
|
|
271
|
-
enumMap,
|
|
272
|
-
);
|
|
273
|
-
return ` static ${translatedParam} ${v.name}ToJs(jsi::Runtime &rt, P${i} value) {
|
|
273
|
+
const debugParameterConversion = value.properties
|
|
274
|
+
.map(
|
|
275
|
+
(v, i) => ` static ${getCppType(v)} ${
|
|
276
|
+
v.name
|
|
277
|
+
}ToJs(jsi::Runtime &rt, P${i} value) {
|
|
274
278
|
return bridging::toJs(rt, value);
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
.join('\n');
|
|
278
|
-
return
|
|
279
|
+
}`,
|
|
280
|
+
)
|
|
281
|
+
.join('\n\n');
|
|
282
|
+
return `
|
|
283
|
+
#pragma mark - ${structName}
|
|
279
284
|
|
|
280
285
|
template <${templateParameterWithTypename}>
|
|
281
286
|
struct ${structName} {
|
|
@@ -304,28 +309,28 @@ ${value.properties
|
|
|
304
309
|
}
|
|
305
310
|
|
|
306
311
|
#ifdef DEBUG
|
|
307
|
-
${
|
|
312
|
+
${debugParameterConversion}
|
|
308
313
|
#endif
|
|
309
314
|
|
|
310
315
|
static jsi::Object toJs(
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
316
|
+
jsi::Runtime &rt,
|
|
317
|
+
const ${structName}<${templateParameter}> &value,
|
|
318
|
+
const std::shared_ptr<CallInvoker> &jsInvoker) {
|
|
319
|
+
auto result = facebook::jsi::Object(rt);
|
|
320
|
+
${value.properties
|
|
321
|
+
.map((v, i) => {
|
|
322
|
+
if (v.optional) {
|
|
323
|
+
return ` if (value.${v.name}) {
|
|
324
|
+
result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}.value(), jsInvoker));
|
|
325
|
+
}`;
|
|
326
|
+
} else {
|
|
327
|
+
return ` result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}, jsInvoker));`;
|
|
328
|
+
}
|
|
329
|
+
})
|
|
330
|
+
.join('\n')}
|
|
331
|
+
return result;
|
|
332
|
+
}
|
|
333
|
+
};
|
|
329
334
|
|
|
330
335
|
`;
|
|
331
336
|
})
|
|
@@ -361,12 +366,12 @@ enum ${enumName} { ${values} };
|
|
|
361
366
|
|
|
362
367
|
template <>
|
|
363
368
|
struct Bridging<${enumName}> {
|
|
364
|
-
static ${enumName} fromJs(jsi::Runtime &rt, ${fromValue}
|
|
369
|
+
static ${enumName} fromJs(jsi::Runtime &rt, ${fromValue}) {
|
|
365
370
|
${fromValueConversion}
|
|
366
371
|
${fromCases}
|
|
367
372
|
}
|
|
368
373
|
|
|
369
|
-
static ${toValue} toJs(jsi::Runtime &rt, ${enumName} value
|
|
374
|
+
static ${toValue} toJs(jsi::Runtime &rt, ${enumName} value) {
|
|
370
375
|
${toCases}
|
|
371
376
|
}
|
|
372
377
|
};`;
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
|
+
import type {
|
|
13
|
+
NativeModuleBaseTypeAnnotation,
|
|
14
|
+
NamedShape,
|
|
15
|
+
} from '../../CodegenSchema';
|
|
12
16
|
|
|
13
17
|
import type {
|
|
14
18
|
Nullable,
|
|
@@ -74,9 +78,11 @@ public:
|
|
|
74
78
|
return delegate_.get(rt, propName);
|
|
75
79
|
}
|
|
76
80
|
|
|
81
|
+
static constexpr std::string_view kModuleName = "${moduleName}";
|
|
82
|
+
|
|
77
83
|
protected:
|
|
78
84
|
${hasteModuleName}CxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
|
|
79
|
-
: TurboModule(
|
|
85
|
+
: TurboModule(std::string{${hasteModuleName}CxxSpec::kModuleName}, jsInvoker),
|
|
80
86
|
delegate_(static_cast<T*>(this), jsInvoker) {}
|
|
81
87
|
|
|
82
88
|
private:
|
|
@@ -217,6 +223,18 @@ function createStructsString(
|
|
|
217
223
|
resolveAlias: AliasResolver,
|
|
218
224
|
enumMap: NativeModuleEnumMap,
|
|
219
225
|
): string {
|
|
226
|
+
const getCppType = (
|
|
227
|
+
v: NamedShape<Nullable<NativeModuleBaseTypeAnnotation>>,
|
|
228
|
+
) =>
|
|
229
|
+
translatePrimitiveJSTypeToCpp(
|
|
230
|
+
moduleName,
|
|
231
|
+
v.typeAnnotation,
|
|
232
|
+
false,
|
|
233
|
+
typeName => `Unsupported type for param "${v.name}". Found: ${typeName}`,
|
|
234
|
+
resolveAlias,
|
|
235
|
+
enumMap,
|
|
236
|
+
);
|
|
237
|
+
|
|
220
238
|
return Object.keys(aliasMap)
|
|
221
239
|
.map(alias => {
|
|
222
240
|
const value = aliasMap[alias];
|
|
@@ -225,28 +243,22 @@ function createStructsString(
|
|
|
225
243
|
}
|
|
226
244
|
const structName = `${moduleName}Base${alias}`;
|
|
227
245
|
const templateParameterWithTypename = value.properties
|
|
228
|
-
.map((v, i) =>
|
|
246
|
+
.map((v, i) => `typename P${i}`)
|
|
229
247
|
.join(', ');
|
|
230
248
|
const templateParameter = value.properties
|
|
231
249
|
.map((v, i) => 'P' + i)
|
|
232
250
|
.join(', ');
|
|
233
|
-
const
|
|
234
|
-
.map(
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
false,
|
|
239
|
-
typeName =>
|
|
240
|
-
`Unsupported type for param "${v.name}". Found: ${typeName}`,
|
|
241
|
-
resolveAlias,
|
|
242
|
-
enumMap,
|
|
243
|
-
);
|
|
244
|
-
return ` static ${translatedParam} ${v.name}ToJs(jsi::Runtime &rt, P${i} value) {
|
|
251
|
+
const debugParameterConversion = value.properties
|
|
252
|
+
.map(
|
|
253
|
+
(v, i) => ` static ${getCppType(v)} ${
|
|
254
|
+
v.name
|
|
255
|
+
}ToJs(jsi::Runtime &rt, P${i} value) {
|
|
245
256
|
return bridging::toJs(rt, value);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
.join('\n');
|
|
249
|
-
return
|
|
257
|
+
}`,
|
|
258
|
+
)
|
|
259
|
+
.join('\n\n');
|
|
260
|
+
return `
|
|
261
|
+
#pragma mark - ${structName}
|
|
250
262
|
|
|
251
263
|
template <${templateParameterWithTypename}>
|
|
252
264
|
struct ${structName} {
|
|
@@ -275,28 +287,28 @@ ${value.properties
|
|
|
275
287
|
}
|
|
276
288
|
|
|
277
289
|
#ifdef DEBUG
|
|
278
|
-
${
|
|
290
|
+
${debugParameterConversion}
|
|
279
291
|
#endif
|
|
280
292
|
|
|
281
293
|
static jsi::Object toJs(
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
294
|
+
jsi::Runtime &rt,
|
|
295
|
+
const ${structName}<${templateParameter}> &value,
|
|
296
|
+
const std::shared_ptr<CallInvoker> &jsInvoker) {
|
|
297
|
+
auto result = facebook::jsi::Object(rt);
|
|
298
|
+
${value.properties
|
|
299
|
+
.map((v, i) => {
|
|
300
|
+
if (v.optional) {
|
|
301
|
+
return ` if (value.${v.name}) {
|
|
302
|
+
result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}.value(), jsInvoker));
|
|
303
|
+
}`;
|
|
304
|
+
} else {
|
|
305
|
+
return ` result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}, jsInvoker));`;
|
|
306
|
+
}
|
|
307
|
+
})
|
|
308
|
+
.join('\n')}
|
|
309
|
+
return result;
|
|
310
|
+
}
|
|
311
|
+
};
|
|
300
312
|
|
|
301
313
|
`;
|
|
302
314
|
})
|
|
@@ -338,12 +350,12 @@ enum ${enumName} { ${values} };
|
|
|
338
350
|
|
|
339
351
|
template <>
|
|
340
352
|
struct Bridging<${enumName}> {
|
|
341
|
-
static ${enumName} fromJs(jsi::Runtime &rt, ${fromValue}
|
|
353
|
+
static ${enumName} fromJs(jsi::Runtime &rt, ${fromValue}) {
|
|
342
354
|
${fromValueConversion}
|
|
343
355
|
${fromCases}
|
|
344
356
|
}
|
|
345
357
|
|
|
346
|
-
static ${toValue} toJs(jsi::Runtime &rt, ${enumName} value
|
|
358
|
+
static ${toValue} toJs(jsi::Runtime &rt, ${enumName} value) {
|
|
347
359
|
${toCases}
|
|
348
360
|
}
|
|
349
361
|
};`;
|
|
@@ -393,17 +393,19 @@ function getFalsyReturnStatementFromReturnType(
|
|
|
393
393
|
}
|
|
394
394
|
|
|
395
395
|
// Build special-cased runtime check for getConstants().
|
|
396
|
-
function buildGetConstantsMethod(method, imports) {
|
|
396
|
+
function buildGetConstantsMethod(method, imports, resolveAlias) {
|
|
397
397
|
const _unwrapNullable7 = unwrapNullable(method.typeAnnotation),
|
|
398
398
|
_unwrapNullable8 = _slicedToArray(_unwrapNullable7, 1),
|
|
399
399
|
methodTypeAnnotation = _unwrapNullable8[0];
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
400
|
+
let returnTypeAnnotation = methodTypeAnnotation.returnTypeAnnotation;
|
|
401
|
+
if (returnTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
|
|
402
|
+
// The return type is an alias, resolve it to get the expected undelying object literal type
|
|
403
|
+
returnTypeAnnotation = resolveAlias(returnTypeAnnotation.name);
|
|
404
|
+
}
|
|
405
|
+
if (returnTypeAnnotation.type === 'ObjectTypeAnnotation') {
|
|
403
406
|
const requiredProps = [];
|
|
404
407
|
const optionalProps = [];
|
|
405
|
-
const rawProperties =
|
|
406
|
-
methodTypeAnnotation.returnTypeAnnotation.properties || [];
|
|
408
|
+
const rawProperties = returnTypeAnnotation.properties || [];
|
|
407
409
|
rawProperties.forEach(p => {
|
|
408
410
|
if (p.optional || p.typeAnnotation.type === 'NullableTypeAnnotation') {
|
|
409
411
|
optionalProps.push(p.name);
|
|
@@ -494,7 +496,7 @@ module.exports = {
|
|
|
494
496
|
]);
|
|
495
497
|
const methods = properties.map(method => {
|
|
496
498
|
if (method.name === 'getConstants') {
|
|
497
|
-
return buildGetConstantsMethod(method, imports);
|
|
499
|
+
return buildGetConstantsMethod(method, imports, resolveAlias);
|
|
498
500
|
}
|
|
499
501
|
const _unwrapNullable9 = unwrapNullable(method.typeAnnotation),
|
|
500
502
|
_unwrapNullable10 = _slicedToArray(_unwrapNullable9, 1),
|
|
@@ -355,16 +355,20 @@ function getFalsyReturnStatementFromReturnType(
|
|
|
355
355
|
function buildGetConstantsMethod(
|
|
356
356
|
method: NativeModulePropertyShape,
|
|
357
357
|
imports: Set<string>,
|
|
358
|
+
resolveAlias: AliasResolver,
|
|
358
359
|
): string {
|
|
359
360
|
const [methodTypeAnnotation] =
|
|
360
361
|
unwrapNullable<NativeModuleFunctionTypeAnnotation>(method.typeAnnotation);
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
362
|
+
let returnTypeAnnotation = methodTypeAnnotation.returnTypeAnnotation;
|
|
363
|
+
if (returnTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
|
|
364
|
+
// The return type is an alias, resolve it to get the expected undelying object literal type
|
|
365
|
+
returnTypeAnnotation = resolveAlias(returnTypeAnnotation.name);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
if (returnTypeAnnotation.type === 'ObjectTypeAnnotation') {
|
|
364
369
|
const requiredProps = [];
|
|
365
370
|
const optionalProps = [];
|
|
366
|
-
const rawProperties =
|
|
367
|
-
methodTypeAnnotation.returnTypeAnnotation.properties || [];
|
|
371
|
+
const rawProperties = returnTypeAnnotation.properties || [];
|
|
368
372
|
rawProperties.forEach(p => {
|
|
369
373
|
if (p.optional || p.typeAnnotation.type === 'NullableTypeAnnotation') {
|
|
370
374
|
optionalProps.push(p.name);
|
|
@@ -470,7 +474,7 @@ module.exports = {
|
|
|
470
474
|
|
|
471
475
|
const methods = properties.map(method => {
|
|
472
476
|
if (method.name === 'getConstants') {
|
|
473
|
-
return buildGetConstantsMethod(method, imports);
|
|
477
|
+
return buildGetConstantsMethod(method, imports, resolveAlias);
|
|
474
478
|
}
|
|
475
479
|
|
|
476
480
|
const [methodTypeAnnotation] =
|
|
@@ -486,13 +486,21 @@ function serializeConstantsProtocolMethods(
|
|
|
486
486
|
`${hasteModuleName}.getConstants() may only accept 0 arguments.`,
|
|
487
487
|
);
|
|
488
488
|
}
|
|
489
|
-
|
|
489
|
+
let returnTypeAnnotation = propertyTypeAnnotation.returnTypeAnnotation;
|
|
490
|
+
if (returnTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
|
|
491
|
+
// The return type is an alias, resolve it to get the expected undelying object literal type
|
|
492
|
+
returnTypeAnnotation = resolveAlias(returnTypeAnnotation.name);
|
|
493
|
+
}
|
|
490
494
|
if (returnTypeAnnotation.type !== 'ObjectTypeAnnotation') {
|
|
491
495
|
throw new Error(
|
|
492
|
-
`${hasteModuleName}.getConstants() may only return an object literal: {...}
|
|
496
|
+
`${hasteModuleName}.getConstants() may only return an object literal: {...}` +
|
|
497
|
+
` or a type alias of such. Got '${propertyTypeAnnotation.returnTypeAnnotation.type}'.`,
|
|
493
498
|
);
|
|
494
499
|
}
|
|
495
|
-
if (
|
|
500
|
+
if (
|
|
501
|
+
returnTypeAnnotation.type === 'ObjectTypeAnnotation' &&
|
|
502
|
+
returnTypeAnnotation.properties.length === 0
|
|
503
|
+
) {
|
|
496
504
|
return [];
|
|
497
505
|
}
|
|
498
506
|
const realTypeAnnotation = structCollector.process(
|
|
@@ -459,14 +459,24 @@ function serializeConstantsProtocolMethods(
|
|
|
459
459
|
);
|
|
460
460
|
}
|
|
461
461
|
|
|
462
|
-
|
|
462
|
+
let {returnTypeAnnotation} = propertyTypeAnnotation;
|
|
463
|
+
|
|
464
|
+
if (returnTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
|
|
465
|
+
// The return type is an alias, resolve it to get the expected undelying object literal type
|
|
466
|
+
returnTypeAnnotation = resolveAlias(returnTypeAnnotation.name);
|
|
467
|
+
}
|
|
468
|
+
|
|
463
469
|
if (returnTypeAnnotation.type !== 'ObjectTypeAnnotation') {
|
|
464
470
|
throw new Error(
|
|
465
|
-
`${hasteModuleName}.getConstants() may only return an object literal: {...}
|
|
471
|
+
`${hasteModuleName}.getConstants() may only return an object literal: {...}` +
|
|
472
|
+
` or a type alias of such. Got '${propertyTypeAnnotation.returnTypeAnnotation.type}'.`,
|
|
466
473
|
);
|
|
467
474
|
}
|
|
468
475
|
|
|
469
|
-
if (
|
|
476
|
+
if (
|
|
477
|
+
returnTypeAnnotation.type === 'ObjectTypeAnnotation' &&
|
|
478
|
+
returnTypeAnnotation.properties.length === 0
|
|
479
|
+
) {
|
|
470
480
|
return [];
|
|
471
481
|
}
|
|
472
482
|
|
|
@@ -280,6 +280,44 @@ function throwIfMoreThanOneCodegenNativecommands(commandsTypeNames) {
|
|
|
280
280
|
throw new Error('codegenNativeCommands may only be called once in a file');
|
|
281
281
|
}
|
|
282
282
|
}
|
|
283
|
+
function throwIfConfigNotfound(foundConfigs) {
|
|
284
|
+
if (foundConfigs.length === 0) {
|
|
285
|
+
throw new Error('Could not find component config for native component');
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
function throwIfMoreThanOneConfig(foundConfigs) {
|
|
289
|
+
if (foundConfigs.length > 1) {
|
|
290
|
+
throw new Error('Only one component is supported per file');
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
function throwIfEventHasNoName(typeAnnotation, parser) {
|
|
294
|
+
const name =
|
|
295
|
+
parser.language() === 'Flow' ? typeAnnotation.id : typeAnnotation.typeName;
|
|
296
|
+
if (!name) {
|
|
297
|
+
throw new Error("typeAnnotation of event doesn't have a name");
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
function throwIfBubblingTypeIsNull(bubblingType, eventName) {
|
|
301
|
+
if (!bubblingType) {
|
|
302
|
+
throw new Error(
|
|
303
|
+
`Unable to determine event bubbling type for "${eventName}"`,
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
return bubblingType;
|
|
307
|
+
}
|
|
308
|
+
function throwIfArgumentPropsAreNull(argumentProps, eventName) {
|
|
309
|
+
if (!argumentProps) {
|
|
310
|
+
throw new Error(`Unable to determine event arguments for "${eventName}"`);
|
|
311
|
+
}
|
|
312
|
+
return argumentProps;
|
|
313
|
+
}
|
|
314
|
+
function throwIfTypeAliasIsNotInterface(typeAlias, parser) {
|
|
315
|
+
if (typeAlias.type !== parser.interfaceDeclaration) {
|
|
316
|
+
throw new Error(
|
|
317
|
+
`The type argument for codegenNativeCommands must be an interface, received ${typeAlias.type}`,
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
283
321
|
module.exports = {
|
|
284
322
|
throwIfModuleInterfaceIsMisnamed,
|
|
285
323
|
throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
|
|
@@ -298,4 +336,10 @@ module.exports = {
|
|
|
298
336
|
throwIfPartialNotAnnotatingTypeParameter,
|
|
299
337
|
throwIfPartialWithMoreParameter,
|
|
300
338
|
throwIfMoreThanOneCodegenNativecommands,
|
|
339
|
+
throwIfConfigNotfound,
|
|
340
|
+
throwIfMoreThanOneConfig,
|
|
341
|
+
throwIfEventHasNoName,
|
|
342
|
+
throwIfBubblingTypeIsNull,
|
|
343
|
+
throwIfArgumentPropsAreNull,
|
|
344
|
+
throwIfTypeAliasIsNotInterface,
|
|
301
345
|
};
|