@react-native/codegen 0.72.1 → 0.72.3
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/lib/CodegenSchema.d.ts +348 -0
- package/lib/CodegenSchema.js.flow +31 -3
- package/lib/SchemaValidator.d.ts +11 -0
- package/lib/cli/combine/combine-js-to-schema.js +8 -8
- package/lib/cli/combine/combine-js-to-schema.js.flow +8 -7
- package/lib/cli/parser/parser.js +8 -15
- package/lib/cli/parser/parser.js.flow +8 -14
- package/lib/generators/Utils.js +16 -0
- package/lib/generators/Utils.js.flow +20 -0
- package/lib/generators/__test_fixtures__/fixtures.js +2 -1
- package/lib/generators/__test_fixtures__/fixtures.js.flow +2 -1
- package/lib/generators/components/ComponentsGeneratorUtils.js +10 -1
- package/lib/generators/components/ComponentsGeneratorUtils.js.flow +12 -2
- package/lib/generators/components/CppHelpers.js +8 -15
- package/lib/generators/components/CppHelpers.js.flow +8 -19
- package/lib/generators/components/GenerateEventEmitterCpp.js +7 -3
- package/lib/generators/components/GenerateEventEmitterCpp.js.flow +7 -3
- package/lib/generators/components/GenerateEventEmitterH.js +2 -2
- package/lib/generators/components/GenerateEventEmitterH.js.flow +1 -2
- package/lib/generators/components/GeneratePropsH.js +3 -4
- package/lib/generators/components/GeneratePropsH.js.flow +2 -4
- package/lib/generators/components/GeneratePropsJavaDelegate.js +2 -0
- package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +2 -0
- package/lib/generators/components/GeneratePropsJavaInterface.js +3 -0
- package/lib/generators/components/GeneratePropsJavaInterface.js.flow +3 -0
- package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js +8 -0
- package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +12 -0
- package/lib/generators/components/GenerateTests.js +3 -2
- package/lib/generators/components/GenerateTests.js.flow +3 -1
- package/lib/generators/components/GenerateViewConfigJs.js +5 -2
- package/lib/generators/components/GenerateViewConfigJs.js.flow +5 -2
- package/lib/generators/components/JavaHelpers.js +9 -0
- package/lib/generators/components/JavaHelpers.js.flow +12 -1
- package/lib/generators/components/__test_fixtures__/fixtures.js +41 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js.flow +42 -0
- package/lib/generators/modules/GenerateModuleCpp.js +9 -4
- package/lib/generators/modules/GenerateModuleCpp.js.flow +11 -3
- package/lib/generators/modules/GenerateModuleH.js +185 -33
- package/lib/generators/modules/GenerateModuleH.js.flow +203 -25
- package/lib/generators/modules/GenerateModuleJavaSpec.js +2 -2
- package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +5 -5
- package/lib/generators/modules/GenerateModuleJniCpp.js +2 -2
- package/lib/generators/modules/GenerateModuleJniCpp.js.flow +5 -5
- package/lib/generators/modules/GenerateModuleObjCpp/index.js +2 -2
- package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +2 -2
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +2 -2
- package/lib/generators/modules/Utils.js +4 -0
- package/lib/generators/modules/Utils.js.flow +6 -0
- package/lib/generators/modules/__test_fixtures__/fixtures.js +152 -10
- package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +152 -10
- package/lib/parsers/error-utils.js +42 -19
- package/lib/parsers/error-utils.js.flow +46 -19
- package/lib/parsers/errors.d.ts +10 -0
- package/lib/parsers/errors.js +9 -29
- package/lib/parsers/errors.js.flow +2 -20
- package/lib/parsers/flow/Visitor.js +37 -0
- package/lib/parsers/flow/Visitor.js.flow +41 -0
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +20 -2
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +20 -2
- package/lib/parsers/flow/components/commands.js +3 -0
- package/lib/parsers/flow/components/commands.js.flow +2 -1
- package/lib/parsers/flow/components/componentsUtils.js +10 -0
- package/lib/parsers/flow/components/componentsUtils.js.flow +11 -1
- package/lib/parsers/flow/components/events.js.flow +1 -1
- package/lib/parsers/flow/components/extends.js.flow +1 -1
- package/lib/parsers/flow/components/index.js +16 -20
- package/lib/parsers/flow/components/index.js.flow +8 -7
- package/lib/parsers/flow/components/options.js.flow +1 -1
- package/lib/parsers/flow/components/props.js.flow +1 -1
- package/lib/parsers/flow/modules/__test_fixtures__/failures.js +54 -0
- package/lib/parsers/flow/modules/__test_fixtures__/failures.js.flow +56 -0
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +64 -1
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +66 -1
- package/lib/parsers/flow/modules/index.js +112 -48
- package/lib/parsers/flow/modules/index.js.flow +115 -44
- package/lib/parsers/flow/parser.d.ts +10 -0
- package/lib/parsers/flow/parser.js +173 -32
- package/lib/parsers/flow/parser.js.flow +201 -24
- package/lib/parsers/flow/utils.js +33 -57
- package/lib/parsers/flow/utils.js.flow +37 -60
- package/lib/parsers/parser.d.ts +17 -0
- package/lib/parsers/parser.js.flow +124 -17
- package/lib/parsers/parserMock.js +101 -30
- package/lib/parsers/parserMock.js.flow +139 -24
- package/lib/parsers/parsers-commons.js +121 -119
- package/lib/parsers/parsers-commons.js.flow +136 -131
- package/lib/parsers/parsers-primitives.js +75 -12
- package/lib/parsers/parsers-primitives.js.flow +92 -13
- package/lib/parsers/schema/index.d.ts +10 -0
- package/lib/parsers/{typescript/components/schema.js.flow → schema.js.flow} +1 -1
- package/lib/parsers/typescript/Visitor.js +42 -0
- package/lib/parsers/typescript/Visitor.js.flow +47 -0
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +22 -0
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +22 -0
- package/lib/parsers/typescript/components/commands.js +3 -0
- package/lib/parsers/typescript/components/commands.js.flow +2 -1
- package/lib/parsers/typescript/components/componentsUtils.js +5 -0
- package/lib/parsers/typescript/components/componentsUtils.js.flow +6 -1
- package/lib/parsers/typescript/components/events.js.flow +1 -1
- package/lib/parsers/typescript/components/extends.js.flow +1 -1
- package/lib/parsers/typescript/components/index.js +15 -19
- package/lib/parsers/typescript/components/index.js.flow +8 -7
- package/lib/parsers/typescript/components/options.js.flow +1 -1
- package/lib/parsers/typescript/components/props.js.flow +1 -1
- package/lib/parsers/typescript/modules/__test_fixtures__/failures.js +52 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/failures.js.flow +54 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +142 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +146 -0
- package/lib/parsers/typescript/modules/index.js +276 -110
- package/lib/parsers/typescript/modules/index.js.flow +237 -68
- package/lib/parsers/typescript/parser.d.ts +10 -0
- package/lib/parsers/typescript/parser.js +175 -25
- package/lib/parsers/typescript/parser.js.flow +184 -26
- package/lib/parsers/typescript/utils.js +40 -51
- package/lib/parsers/typescript/utils.js.flow +44 -55
- package/lib/parsers/utils.js +0 -125
- package/lib/parsers/utils.js.flow +3 -70
- package/package.json +4 -1
- package/lib/parsers/flow/components/schema.js +0 -106
- package/lib/parsers/flow/components/schema.js.flow +0 -62
- package/lib/parsers/flow/index.js +0 -80
- package/lib/parsers/flow/index.js.flow +0 -85
- package/lib/parsers/typescript/index.js +0 -85
- package/lib/parsers/typescript/index.js.flow +0 -94
- /package/lib/parsers/{typescript/components/schema.js → schema.js} +0 -0
|
@@ -148,7 +148,7 @@ ${modules}
|
|
|
148
148
|
} // namespace facebook
|
|
149
149
|
`;
|
|
150
150
|
};
|
|
151
|
-
function serializeArg(arg, index, resolveAlias) {
|
|
151
|
+
function serializeArg(moduleName, arg, index, resolveAlias, enumMap) {
|
|
152
152
|
const nullableTypeAnnotation = arg.typeAnnotation,
|
|
153
153
|
optional = arg.optional;
|
|
154
154
|
const _unwrapNullable = unwrapNullable(nullableTypeAnnotation),
|
|
@@ -238,9 +238,11 @@ function serializeArg(arg, index, resolveAlias) {
|
|
|
238
238
|
}
|
|
239
239
|
}
|
|
240
240
|
function serializePropertyIntoHostFunction(
|
|
241
|
+
moduleName,
|
|
241
242
|
hasteModuleName,
|
|
242
243
|
property,
|
|
243
244
|
resolveAlias,
|
|
245
|
+
enumMap,
|
|
244
246
|
) {
|
|
245
247
|
const _unwrapNullable3 = unwrapNullable(property.typeAnnotation),
|
|
246
248
|
_unwrapNullable4 = _slicedToArray(_unwrapNullable3, 1),
|
|
@@ -250,7 +252,7 @@ function serializePropertyIntoHostFunction(
|
|
|
250
252
|
methodName: property.name,
|
|
251
253
|
returnTypeAnnotation: propertyTypeAnnotation.returnTypeAnnotation,
|
|
252
254
|
args: propertyTypeAnnotation.params.map((p, i) =>
|
|
253
|
-
serializeArg(p, i, resolveAlias),
|
|
255
|
+
serializeArg(moduleName, p, i, resolveAlias, enumMap),
|
|
254
256
|
),
|
|
255
257
|
});
|
|
256
258
|
}
|
|
@@ -260,15 +262,18 @@ module.exports = {
|
|
|
260
262
|
const modules = Object.keys(nativeModules)
|
|
261
263
|
.map(hasteModuleName => {
|
|
262
264
|
const nativeModule = nativeModules[hasteModuleName];
|
|
263
|
-
const
|
|
265
|
+
const aliasMap = nativeModule.aliasMap,
|
|
266
|
+
enumMap = nativeModule.enumMap,
|
|
264
267
|
properties = nativeModule.spec.properties,
|
|
265
268
|
moduleName = nativeModule.moduleName;
|
|
266
|
-
const resolveAlias = createAliasResolver(
|
|
269
|
+
const resolveAlias = createAliasResolver(aliasMap);
|
|
267
270
|
const hostFunctions = properties.map(property =>
|
|
268
271
|
serializePropertyIntoHostFunction(
|
|
272
|
+
moduleName,
|
|
269
273
|
hasteModuleName,
|
|
270
274
|
property,
|
|
271
275
|
resolveAlias,
|
|
276
|
+
enumMap,
|
|
272
277
|
),
|
|
273
278
|
);
|
|
274
279
|
return ModuleTemplate({
|
|
@@ -18,6 +18,7 @@ import type {
|
|
|
18
18
|
NativeModuleFunctionTypeAnnotation,
|
|
19
19
|
NativeModuleParamTypeAnnotation,
|
|
20
20
|
NativeModuleTypeAnnotation,
|
|
21
|
+
NativeModuleEnumMap,
|
|
21
22
|
} from '../../CodegenSchema';
|
|
22
23
|
|
|
23
24
|
import type {AliasResolver} from './Utils';
|
|
@@ -114,9 +115,11 @@ ${modules}
|
|
|
114
115
|
type Param = NamedShape<Nullable<NativeModuleParamTypeAnnotation>>;
|
|
115
116
|
|
|
116
117
|
function serializeArg(
|
|
118
|
+
moduleName: string,
|
|
117
119
|
arg: Param,
|
|
118
120
|
index: number,
|
|
119
121
|
resolveAlias: AliasResolver,
|
|
122
|
+
enumMap: NativeModuleEnumMap,
|
|
120
123
|
): string {
|
|
121
124
|
const {typeAnnotation: nullableTypeAnnotation, optional} = arg;
|
|
122
125
|
const [typeAnnotation, nullable] =
|
|
@@ -208,9 +211,11 @@ function serializeArg(
|
|
|
208
211
|
}
|
|
209
212
|
|
|
210
213
|
function serializePropertyIntoHostFunction(
|
|
214
|
+
moduleName: string,
|
|
211
215
|
hasteModuleName: string,
|
|
212
216
|
property: NativeModulePropertyShape,
|
|
213
217
|
resolveAlias: AliasResolver,
|
|
218
|
+
enumMap: NativeModuleEnumMap,
|
|
214
219
|
): string {
|
|
215
220
|
const [propertyTypeAnnotation] =
|
|
216
221
|
unwrapNullable<NativeModuleFunctionTypeAnnotation>(property.typeAnnotation);
|
|
@@ -220,7 +225,7 @@ function serializePropertyIntoHostFunction(
|
|
|
220
225
|
methodName: property.name,
|
|
221
226
|
returnTypeAnnotation: propertyTypeAnnotation.returnTypeAnnotation,
|
|
222
227
|
args: propertyTypeAnnotation.params.map((p, i) =>
|
|
223
|
-
serializeArg(p, i, resolveAlias),
|
|
228
|
+
serializeArg(moduleName, p, i, resolveAlias, enumMap),
|
|
224
229
|
),
|
|
225
230
|
});
|
|
226
231
|
}
|
|
@@ -238,16 +243,19 @@ module.exports = {
|
|
|
238
243
|
.map((hasteModuleName: string) => {
|
|
239
244
|
const nativeModule = nativeModules[hasteModuleName];
|
|
240
245
|
const {
|
|
241
|
-
|
|
246
|
+
aliasMap,
|
|
247
|
+
enumMap,
|
|
242
248
|
spec: {properties},
|
|
243
249
|
moduleName,
|
|
244
250
|
} = nativeModule;
|
|
245
|
-
const resolveAlias = createAliasResolver(
|
|
251
|
+
const resolveAlias = createAliasResolver(aliasMap);
|
|
246
252
|
const hostFunctions = properties.map(property =>
|
|
247
253
|
serializePropertyIntoHostFunction(
|
|
254
|
+
moduleName,
|
|
248
255
|
hasteModuleName,
|
|
249
256
|
property,
|
|
250
257
|
resolveAlias,
|
|
258
|
+
enumMap,
|
|
251
259
|
),
|
|
252
260
|
);
|
|
253
261
|
|
|
@@ -78,19 +78,25 @@ function _iterableToArrayLimit(arr, i) {
|
|
|
78
78
|
function _arrayWithHoles(arr) {
|
|
79
79
|
if (Array.isArray(arr)) return arr;
|
|
80
80
|
}
|
|
81
|
-
const _require = require('
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const _require2 = require('
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
81
|
+
const _require = require('../Utils'),
|
|
82
|
+
getEnumName = _require.getEnumName,
|
|
83
|
+
toSafeCppString = _require.toSafeCppString;
|
|
84
|
+
const _require2 = require('./Utils'),
|
|
85
|
+
createAliasResolver = _require2.createAliasResolver,
|
|
86
|
+
getModules = _require2.getModules,
|
|
87
|
+
getAreEnumMembersInteger = _require2.getAreEnumMembersInteger;
|
|
88
|
+
const _require3 = require('../Utils'),
|
|
89
|
+
indent = _require3.indent;
|
|
90
|
+
const _require4 = require('../../parsers/parsers-commons'),
|
|
91
|
+
unwrapNullable = _require4.unwrapNullable;
|
|
88
92
|
const ModuleClassDeclarationTemplate = ({
|
|
89
93
|
hasteModuleName,
|
|
90
94
|
moduleProperties,
|
|
91
95
|
structs,
|
|
96
|
+
enums,
|
|
92
97
|
}) => {
|
|
93
|
-
return `${
|
|
98
|
+
return `${enums}
|
|
99
|
+
${structs}class JSI_EXPORT ${hasteModuleName}CxxSpecJSI : public TurboModule {
|
|
94
100
|
protected:
|
|
95
101
|
${hasteModuleName}CxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker);
|
|
96
102
|
|
|
@@ -156,10 +162,12 @@ ${modules.join('\n\n')}
|
|
|
156
162
|
`;
|
|
157
163
|
};
|
|
158
164
|
function translatePrimitiveJSTypeToCpp(
|
|
165
|
+
moduleName,
|
|
159
166
|
nullableTypeAnnotation,
|
|
160
167
|
optional,
|
|
161
168
|
createErrorMessage,
|
|
162
169
|
resolveAlias,
|
|
170
|
+
enumMap,
|
|
163
171
|
) {
|
|
164
172
|
const _unwrapNullable = unwrapNullable(nullableTypeAnnotation),
|
|
165
173
|
_unwrapNullable2 = _slicedToArray(_unwrapNullable, 2),
|
|
@@ -199,7 +207,11 @@ function translatePrimitiveJSTypeToCpp(
|
|
|
199
207
|
case 'EnumDeclaration':
|
|
200
208
|
switch (realTypeAnnotation.memberType) {
|
|
201
209
|
case 'NumberTypeAnnotation':
|
|
202
|
-
return
|
|
210
|
+
return getAreEnumMembersInteger(
|
|
211
|
+
enumMap[realTypeAnnotation.name].members,
|
|
212
|
+
)
|
|
213
|
+
? wrap('int')
|
|
214
|
+
: wrap('double');
|
|
203
215
|
case 'StringTypeAnnotation':
|
|
204
216
|
return wrap('jsi::String');
|
|
205
217
|
default:
|
|
@@ -233,7 +245,7 @@ function translatePrimitiveJSTypeToCpp(
|
|
|
233
245
|
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
|
234
246
|
}
|
|
235
247
|
}
|
|
236
|
-
function
|
|
248
|
+
function createStructsString(moduleName, aliasMap, resolveAlias, enumMap) {
|
|
237
249
|
return Object.keys(aliasMap)
|
|
238
250
|
.map(alias => {
|
|
239
251
|
const value = aliasMap[alias];
|
|
@@ -247,6 +259,22 @@ function createStructs(moduleName, aliasMap, resolveAlias) {
|
|
|
247
259
|
const templateParameter = value.properties
|
|
248
260
|
.map((v, i) => 'P' + i)
|
|
249
261
|
.join(', ');
|
|
262
|
+
const paramemterConversion = value.properties
|
|
263
|
+
.map((v, i) => {
|
|
264
|
+
const translatedParam = translatePrimitiveJSTypeToCpp(
|
|
265
|
+
moduleName,
|
|
266
|
+
v.typeAnnotation,
|
|
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) {
|
|
274
|
+
return bridging::toJs(rt, value);
|
|
275
|
+
}`;
|
|
276
|
+
})
|
|
277
|
+
.join('\n');
|
|
250
278
|
return `#pragma mark - ${structName}
|
|
251
279
|
|
|
252
280
|
template <${templateParameterWithTypename}>
|
|
@@ -275,30 +303,136 @@ ${value.properties
|
|
|
275
303
|
return result;
|
|
276
304
|
}
|
|
277
305
|
|
|
306
|
+
#ifdef DEBUG
|
|
307
|
+
${paramemterConversion}
|
|
308
|
+
#endif
|
|
309
|
+
|
|
278
310
|
static jsi::Object toJs(
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
}
|
|
311
|
+
jsi::Runtime &rt,
|
|
312
|
+
const ${structName}<${templateParameter}> &value,
|
|
313
|
+
const std::shared_ptr<CallInvoker> &jsInvoker) {
|
|
314
|
+
auto result = facebook::jsi::Object(rt);
|
|
315
|
+
${value.properties
|
|
316
|
+
.map((v, i) => {
|
|
317
|
+
if (v.optional) {
|
|
318
|
+
return ` if (value.${v.name}) {
|
|
319
|
+
result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}.value(), jsInvoker));
|
|
320
|
+
}`;
|
|
321
|
+
} else {
|
|
322
|
+
return ` result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}, jsInvoker));`;
|
|
323
|
+
}
|
|
324
|
+
})
|
|
325
|
+
.join('\n')}
|
|
326
|
+
return result;
|
|
327
|
+
}
|
|
328
|
+
};
|
|
296
329
|
|
|
297
330
|
`;
|
|
298
331
|
})
|
|
299
332
|
.join('\n');
|
|
300
333
|
}
|
|
301
|
-
|
|
334
|
+
const EnumTemplate = ({
|
|
335
|
+
enumName,
|
|
336
|
+
values,
|
|
337
|
+
fromCases,
|
|
338
|
+
toCases,
|
|
339
|
+
nativeEnumMemberType,
|
|
340
|
+
}) => {
|
|
341
|
+
const _ref =
|
|
342
|
+
nativeEnumMemberType === 'std::string'
|
|
343
|
+
? [
|
|
344
|
+
'const jsi::String &rawValue',
|
|
345
|
+
'std::string value = rawValue.utf8(rt);',
|
|
346
|
+
'jsi::String',
|
|
347
|
+
]
|
|
348
|
+
: [
|
|
349
|
+
'const jsi::Value &rawValue',
|
|
350
|
+
'double value = (double)rawValue.asNumber();',
|
|
351
|
+
'jsi::Value',
|
|
352
|
+
],
|
|
353
|
+
_ref2 = _slicedToArray(_ref, 3),
|
|
354
|
+
fromValue = _ref2[0],
|
|
355
|
+
fromValueConversion = _ref2[1],
|
|
356
|
+
toValue = _ref2[2];
|
|
357
|
+
return `
|
|
358
|
+
#pragma mark - ${enumName}
|
|
359
|
+
|
|
360
|
+
enum ${enumName} { ${values} };
|
|
361
|
+
|
|
362
|
+
template <>
|
|
363
|
+
struct Bridging<${enumName}> {
|
|
364
|
+
static ${enumName} fromJs(jsi::Runtime &rt, ${fromValue}, const std::shared_ptr<CallInvoker> &jsInvoker) {
|
|
365
|
+
${fromValueConversion}
|
|
366
|
+
${fromCases}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
static ${toValue} toJs(jsi::Runtime &rt, ${enumName} value, const std::shared_ptr<CallInvoker> &jsInvoker) {
|
|
370
|
+
${toCases}
|
|
371
|
+
}
|
|
372
|
+
};`;
|
|
373
|
+
};
|
|
374
|
+
function generateEnum(moduleName, origEnumName, members, memberType) {
|
|
375
|
+
const enumName = getEnumName(moduleName, origEnumName);
|
|
376
|
+
const nativeEnumMemberType =
|
|
377
|
+
memberType === 'StringTypeAnnotation'
|
|
378
|
+
? 'std::string'
|
|
379
|
+
: getAreEnumMembersInteger(members)
|
|
380
|
+
? 'int32_t'
|
|
381
|
+
: 'float';
|
|
382
|
+
const getMemberValueAppearance = value =>
|
|
383
|
+
memberType === 'StringTypeAnnotation'
|
|
384
|
+
? `"${value}"`
|
|
385
|
+
: `${value}${nativeEnumMemberType === 'float' ? 'f' : ''}`;
|
|
386
|
+
const fromCases =
|
|
387
|
+
members
|
|
388
|
+
.map(
|
|
389
|
+
member => `if (value == ${getMemberValueAppearance(member.value)}) {
|
|
390
|
+
return ${enumName}::${toSafeCppString(member.name)};
|
|
391
|
+
}`,
|
|
392
|
+
)
|
|
393
|
+
.join(' else ') +
|
|
394
|
+
` else {
|
|
395
|
+
throw jsi::JSError(rt, "No appropriate enum member found for value");
|
|
396
|
+
}`;
|
|
397
|
+
const toCases =
|
|
398
|
+
members
|
|
399
|
+
.map(
|
|
400
|
+
member => `if (value == ${enumName}::${toSafeCppString(member.name)}) {
|
|
401
|
+
return bridging::toJs(rt, ${getMemberValueAppearance(member.value)});
|
|
402
|
+
}`,
|
|
403
|
+
)
|
|
404
|
+
.join(' else ') +
|
|
405
|
+
` else {
|
|
406
|
+
throw jsi::JSError(rt, "No appropriate enum member found for enum value");
|
|
407
|
+
}`;
|
|
408
|
+
return EnumTemplate({
|
|
409
|
+
enumName,
|
|
410
|
+
values: members.map(member => member.name).join(', '),
|
|
411
|
+
fromCases,
|
|
412
|
+
toCases,
|
|
413
|
+
nativeEnumMemberType,
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
function createEnums(moduleName, enumMap, resolveAlias) {
|
|
417
|
+
return Object.entries(enumMap)
|
|
418
|
+
.map(([enumName, enumNode]) => {
|
|
419
|
+
return generateEnum(
|
|
420
|
+
moduleName,
|
|
421
|
+
enumName,
|
|
422
|
+
enumNode.members,
|
|
423
|
+
enumNode.memberType,
|
|
424
|
+
);
|
|
425
|
+
})
|
|
426
|
+
.filter(Boolean)
|
|
427
|
+
.join('\n');
|
|
428
|
+
}
|
|
429
|
+
function translatePropertyToCpp(
|
|
430
|
+
moduleName,
|
|
431
|
+
prop,
|
|
432
|
+
resolveAlias,
|
|
433
|
+
enumMap,
|
|
434
|
+
abstract = false,
|
|
435
|
+
) {
|
|
302
436
|
const _unwrapNullable3 = unwrapNullable(prop.typeAnnotation),
|
|
303
437
|
_unwrapNullable4 = _slicedToArray(_unwrapNullable3, 1),
|
|
304
438
|
propTypeAnnotation = _unwrapNullable4[0];
|
|
@@ -307,19 +441,23 @@ function translatePropertyToCpp(prop, resolveAlias, abstract = false) {
|
|
|
307
441
|
);
|
|
308
442
|
const paramTypes = propTypeAnnotation.params.map(param => {
|
|
309
443
|
const translatedParam = translatePrimitiveJSTypeToCpp(
|
|
444
|
+
moduleName,
|
|
310
445
|
param.typeAnnotation,
|
|
311
446
|
param.optional,
|
|
312
447
|
typeName =>
|
|
313
448
|
`Unsupported type for param "${param.name}" in ${prop.name}. Found: ${typeName}`,
|
|
314
449
|
resolveAlias,
|
|
450
|
+
enumMap,
|
|
315
451
|
);
|
|
316
452
|
return `${translatedParam} ${param.name}`;
|
|
317
453
|
});
|
|
318
454
|
const returnType = translatePrimitiveJSTypeToCpp(
|
|
455
|
+
moduleName,
|
|
319
456
|
propTypeAnnotation.returnTypeAnnotation,
|
|
320
457
|
false,
|
|
321
458
|
typeName => `Unsupported return type for ${prop.name}. Found: ${typeName}`,
|
|
322
459
|
resolveAlias,
|
|
460
|
+
enumMap,
|
|
323
461
|
);
|
|
324
462
|
|
|
325
463
|
// The first param will always be the runtime reference.
|
|
@@ -342,24 +480,38 @@ module.exports = {
|
|
|
342
480
|
const nativeModules = getModules(schema);
|
|
343
481
|
const modules = Object.keys(nativeModules).flatMap(hasteModuleName => {
|
|
344
482
|
const _nativeModules$hasteM = nativeModules[hasteModuleName],
|
|
345
|
-
|
|
483
|
+
aliasMap = _nativeModules$hasteM.aliasMap,
|
|
484
|
+
enumMap = _nativeModules$hasteM.enumMap,
|
|
346
485
|
properties = _nativeModules$hasteM.spec.properties,
|
|
347
486
|
moduleName = _nativeModules$hasteM.moduleName;
|
|
348
|
-
const resolveAlias = createAliasResolver(
|
|
349
|
-
const structs =
|
|
487
|
+
const resolveAlias = createAliasResolver(aliasMap);
|
|
488
|
+
const structs = createStructsString(
|
|
489
|
+
moduleName,
|
|
490
|
+
aliasMap,
|
|
491
|
+
resolveAlias,
|
|
492
|
+
enumMap,
|
|
493
|
+
);
|
|
494
|
+
const enums = createEnums(moduleName, enumMap, resolveAlias);
|
|
350
495
|
return [
|
|
351
496
|
ModuleClassDeclarationTemplate({
|
|
352
497
|
hasteModuleName,
|
|
353
498
|
moduleProperties: properties.map(prop =>
|
|
354
|
-
translatePropertyToCpp(
|
|
499
|
+
translatePropertyToCpp(
|
|
500
|
+
moduleName,
|
|
501
|
+
prop,
|
|
502
|
+
resolveAlias,
|
|
503
|
+
enumMap,
|
|
504
|
+
true,
|
|
505
|
+
),
|
|
355
506
|
),
|
|
356
507
|
structs,
|
|
508
|
+
enums,
|
|
357
509
|
}),
|
|
358
510
|
ModuleSpecClassDeclarationTemplate({
|
|
359
511
|
hasteModuleName,
|
|
360
512
|
moduleName,
|
|
361
513
|
moduleProperties: properties.map(prop =>
|
|
362
|
-
translatePropertyToCpp(prop, resolveAlias),
|
|
514
|
+
translatePropertyToCpp(moduleName, prop, resolveAlias, enumMap),
|
|
363
515
|
),
|
|
364
516
|
}),
|
|
365
517
|
];
|