@react-native/codegen 0.72.1 → 0.72.2

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.
Files changed (119) hide show
  1. package/lib/CodegenSchema.d.ts +348 -0
  2. package/lib/CodegenSchema.js.flow +31 -3
  3. package/lib/SchemaValidator.d.ts +11 -0
  4. package/lib/cli/combine/combine-js-to-schema.js +8 -8
  5. package/lib/cli/combine/combine-js-to-schema.js.flow +8 -7
  6. package/lib/cli/parser/parser.js +8 -15
  7. package/lib/cli/parser/parser.js.flow +8 -14
  8. package/lib/generators/Utils.js +16 -0
  9. package/lib/generators/Utils.js.flow +20 -0
  10. package/lib/generators/__test_fixtures__/fixtures.js +2 -1
  11. package/lib/generators/__test_fixtures__/fixtures.js.flow +2 -1
  12. package/lib/generators/components/ComponentsGeneratorUtils.js +10 -1
  13. package/lib/generators/components/ComponentsGeneratorUtils.js.flow +12 -2
  14. package/lib/generators/components/CppHelpers.js +8 -15
  15. package/lib/generators/components/CppHelpers.js.flow +8 -19
  16. package/lib/generators/components/GenerateEventEmitterCpp.js +7 -3
  17. package/lib/generators/components/GenerateEventEmitterCpp.js.flow +7 -3
  18. package/lib/generators/components/GenerateEventEmitterH.js +2 -2
  19. package/lib/generators/components/GenerateEventEmitterH.js.flow +1 -2
  20. package/lib/generators/components/GeneratePropsH.js +3 -4
  21. package/lib/generators/components/GeneratePropsH.js.flow +2 -4
  22. package/lib/generators/components/GeneratePropsJavaDelegate.js +2 -0
  23. package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +2 -0
  24. package/lib/generators/components/GeneratePropsJavaInterface.js +3 -0
  25. package/lib/generators/components/GeneratePropsJavaInterface.js.flow +3 -0
  26. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js +8 -0
  27. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +12 -0
  28. package/lib/generators/components/GenerateTests.js +3 -2
  29. package/lib/generators/components/GenerateTests.js.flow +3 -1
  30. package/lib/generators/components/GenerateViewConfigJs.js +5 -2
  31. package/lib/generators/components/GenerateViewConfigJs.js.flow +5 -2
  32. package/lib/generators/components/JavaHelpers.js +9 -0
  33. package/lib/generators/components/JavaHelpers.js.flow +12 -1
  34. package/lib/generators/components/__test_fixtures__/fixtures.js +41 -0
  35. package/lib/generators/components/__test_fixtures__/fixtures.js.flow +42 -0
  36. package/lib/generators/modules/GenerateModuleCpp.js +9 -4
  37. package/lib/generators/modules/GenerateModuleCpp.js.flow +11 -3
  38. package/lib/generators/modules/GenerateModuleH.js +185 -33
  39. package/lib/generators/modules/GenerateModuleH.js.flow +203 -25
  40. package/lib/generators/modules/GenerateModuleJavaSpec.js +2 -2
  41. package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +5 -5
  42. package/lib/generators/modules/GenerateModuleJniCpp.js +2 -2
  43. package/lib/generators/modules/GenerateModuleJniCpp.js.flow +5 -5
  44. package/lib/generators/modules/GenerateModuleObjCpp/index.js +2 -2
  45. package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +2 -2
  46. package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +2 -2
  47. package/lib/generators/modules/Utils.js +4 -0
  48. package/lib/generators/modules/Utils.js.flow +6 -0
  49. package/lib/generators/modules/__test_fixtures__/fixtures.js +152 -10
  50. package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +152 -10
  51. package/lib/parsers/error-utils.js +1 -19
  52. package/lib/parsers/error-utils.js.flow +1 -19
  53. package/lib/parsers/errors.d.ts +10 -0
  54. package/lib/parsers/errors.js +9 -29
  55. package/lib/parsers/errors.js.flow +2 -20
  56. package/lib/parsers/flow/Visitor.js +37 -0
  57. package/lib/parsers/flow/Visitor.js.flow +41 -0
  58. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +20 -2
  59. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +20 -2
  60. package/lib/parsers/flow/components/commands.js +3 -0
  61. package/lib/parsers/flow/components/commands.js.flow +2 -1
  62. package/lib/parsers/flow/components/componentsUtils.js +10 -0
  63. package/lib/parsers/flow/components/componentsUtils.js.flow +11 -1
  64. package/lib/parsers/flow/components/events.js.flow +1 -1
  65. package/lib/parsers/flow/components/extends.js.flow +1 -1
  66. package/lib/parsers/flow/components/index.js.flow +1 -1
  67. package/lib/parsers/flow/components/options.js.flow +1 -1
  68. package/lib/parsers/flow/components/props.js.flow +1 -1
  69. package/lib/parsers/flow/modules/__test_fixtures__/failures.js +54 -0
  70. package/lib/parsers/flow/modules/__test_fixtures__/failures.js.flow +56 -0
  71. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +64 -1
  72. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +66 -1
  73. package/lib/parsers/flow/modules/index.js +99 -25
  74. package/lib/parsers/flow/modules/index.js.flow +106 -22
  75. package/lib/parsers/flow/parser.d.ts +10 -0
  76. package/lib/parsers/flow/parser.js +122 -32
  77. package/lib/parsers/flow/parser.js.flow +144 -24
  78. package/lib/parsers/flow/utils.js +33 -19
  79. package/lib/parsers/flow/utils.js.flow +37 -22
  80. package/lib/parsers/parser.d.ts +17 -0
  81. package/lib/parsers/parser.js.flow +102 -17
  82. package/lib/parsers/parserMock.js +87 -30
  83. package/lib/parsers/parserMock.js.flow +118 -24
  84. package/lib/parsers/parsers-commons.js +121 -119
  85. package/lib/parsers/parsers-commons.js.flow +130 -131
  86. package/lib/parsers/parsers-primitives.js +75 -12
  87. package/lib/parsers/parsers-primitives.js.flow +92 -13
  88. package/lib/parsers/schema/index.d.ts +10 -0
  89. package/lib/parsers/typescript/Visitor.js +42 -0
  90. package/lib/parsers/typescript/Visitor.js.flow +47 -0
  91. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +22 -0
  92. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +22 -0
  93. package/lib/parsers/typescript/components/commands.js +3 -0
  94. package/lib/parsers/typescript/components/commands.js.flow +2 -1
  95. package/lib/parsers/typescript/components/componentsUtils.js +5 -0
  96. package/lib/parsers/typescript/components/componentsUtils.js.flow +6 -1
  97. package/lib/parsers/typescript/components/events.js.flow +1 -1
  98. package/lib/parsers/typescript/components/extends.js.flow +1 -1
  99. package/lib/parsers/typescript/components/index.js.flow +1 -1
  100. package/lib/parsers/typescript/components/options.js.flow +1 -1
  101. package/lib/parsers/typescript/components/props.js.flow +1 -1
  102. package/lib/parsers/typescript/modules/__test_fixtures__/failures.js +52 -0
  103. package/lib/parsers/typescript/modules/__test_fixtures__/failures.js.flow +54 -0
  104. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +142 -0
  105. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +146 -0
  106. package/lib/parsers/typescript/modules/index.js +266 -87
  107. package/lib/parsers/typescript/modules/index.js.flow +230 -48
  108. package/lib/parsers/typescript/parser.d.ts +10 -0
  109. package/lib/parsers/typescript/parser.js +131 -25
  110. package/lib/parsers/typescript/parser.js.flow +137 -26
  111. package/lib/parsers/typescript/utils.js +40 -20
  112. package/lib/parsers/typescript/utils.js.flow +44 -24
  113. package/lib/parsers/utils.js +0 -125
  114. package/lib/parsers/utils.js.flow +3 -70
  115. package/package.json +4 -1
  116. package/lib/parsers/flow/index.js +0 -80
  117. package/lib/parsers/flow/index.js.flow +0 -85
  118. package/lib/parsers/typescript/index.js +0 -85
  119. package/lib/parsers/typescript/index.js.flow +0 -94
@@ -17,10 +17,20 @@ import type {
17
17
  NativeModuleFunctionTypeAnnotation,
18
18
  NativeModulePropertyShape,
19
19
  NativeModuleAliasMap,
20
+ NativeModuleEnumMap,
21
+ NativeModuleEnumMembers,
22
+ NativeModuleEnumMemberType,
20
23
  } from '../../CodegenSchema';
21
24
 
22
25
  import type {AliasResolver} from './Utils';
23
- const {createAliasResolver, getModules} = require('./Utils');
26
+
27
+ const {getEnumName, toSafeCppString} = require('../Utils');
28
+
29
+ const {
30
+ createAliasResolver,
31
+ getModules,
32
+ getAreEnumMembersInteger,
33
+ } = require('./Utils');
24
34
  const {indent} = require('../Utils');
25
35
  const {unwrapNullable} = require('../../parsers/parsers-commons');
26
36
 
@@ -30,12 +40,15 @@ const ModuleClassDeclarationTemplate = ({
30
40
  hasteModuleName,
31
41
  moduleProperties,
32
42
  structs,
43
+ enums,
33
44
  }: $ReadOnly<{
34
45
  hasteModuleName: string,
35
46
  moduleProperties: string[],
36
47
  structs: string,
48
+ enums: string,
37
49
  }>) => {
38
- return `${structs}class JSI_EXPORT ${hasteModuleName}CxxSpecJSI : public TurboModule {
50
+ return `${enums}
51
+ ${structs}class JSI_EXPORT ${hasteModuleName}CxxSpecJSI : public TurboModule {
39
52
  protected:
40
53
  ${hasteModuleName}CxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker);
41
54
 
@@ -112,10 +125,12 @@ ${modules.join('\n\n')}
112
125
  };
113
126
 
114
127
  function translatePrimitiveJSTypeToCpp(
128
+ moduleName: string,
115
129
  nullableTypeAnnotation: Nullable<NativeModuleTypeAnnotation>,
116
130
  optional: boolean,
117
131
  createErrorMessage: (typeName: string) => string,
118
132
  resolveAlias: AliasResolver,
133
+ enumMap: NativeModuleEnumMap,
119
134
  ) {
120
135
  const [typeAnnotation, nullable] = unwrapNullable<NativeModuleTypeAnnotation>(
121
136
  nullableTypeAnnotation,
@@ -157,7 +172,11 @@ function translatePrimitiveJSTypeToCpp(
157
172
  case 'EnumDeclaration':
158
173
  switch (realTypeAnnotation.memberType) {
159
174
  case 'NumberTypeAnnotation':
160
- return wrap('double');
175
+ return getAreEnumMembersInteger(
176
+ enumMap[realTypeAnnotation.name].members,
177
+ )
178
+ ? wrap('int')
179
+ : wrap('double');
161
180
  case 'StringTypeAnnotation':
162
181
  return wrap('jsi::String');
163
182
  default:
@@ -192,10 +211,11 @@ function translatePrimitiveJSTypeToCpp(
192
211
  }
193
212
  }
194
213
 
195
- function createStructs(
214
+ function createStructsString(
196
215
  moduleName: string,
197
216
  aliasMap: NativeModuleAliasMap,
198
217
  resolveAlias: AliasResolver,
218
+ enumMap: NativeModuleEnumMap,
199
219
  ): string {
200
220
  return Object.keys(aliasMap)
201
221
  .map(alias => {
@@ -210,6 +230,22 @@ function createStructs(
210
230
  const templateParameter = value.properties
211
231
  .map((v, i) => 'P' + i)
212
232
  .join(', ');
233
+ const paramemterConversion = value.properties
234
+ .map((v, i) => {
235
+ const translatedParam = translatePrimitiveJSTypeToCpp(
236
+ moduleName,
237
+ v.typeAnnotation,
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) {
245
+ return bridging::toJs(rt, value);
246
+ }`;
247
+ })
248
+ .join('\n');
213
249
  return `#pragma mark - ${structName}
214
250
 
215
251
  template <${templateParameterWithTypename}>
@@ -238,33 +274,157 @@ ${value.properties
238
274
  return result;
239
275
  }
240
276
 
277
+ #ifdef DEBUG
278
+ ${paramemterConversion}
279
+ #endif
280
+
241
281
  static jsi::Object toJs(
242
- jsi::Runtime &rt,
243
- const ${structName}<${templateParameter}> &value) {
244
- auto result = facebook::jsi::Object(rt);
245
- ${value.properties
246
- .map((v, i) => {
247
- if (v.optional) {
248
- return ` if (value.${v.name}) {
249
- result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}.value()));
250
- }`;
251
- } else {
252
- return ` result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}));`;
253
- }
254
- })
255
- .join('\n')}
256
- return result;
282
+ jsi::Runtime &rt,
283
+ const ${structName}<${templateParameter}> &value,
284
+ const std::shared_ptr<CallInvoker> &jsInvoker) {
285
+ auto result = facebook::jsi::Object(rt);
286
+ ${value.properties
287
+ .map((v, i) => {
288
+ if (v.optional) {
289
+ return ` if (value.${v.name}) {
290
+ result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}.value(), jsInvoker));
291
+ }`;
292
+ } else {
293
+ return ` result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}, jsInvoker));`;
294
+ }
295
+ })
296
+ .join('\n')}
297
+ return result;
298
+ }
299
+ };
300
+
301
+ `;
302
+ })
303
+ .join('\n');
304
+ }
305
+
306
+ type NativeEnumMemberValueType = 'std::string' | 'int32_t' | 'float';
307
+
308
+ const EnumTemplate = ({
309
+ enumName,
310
+ values,
311
+ fromCases,
312
+ toCases,
313
+ nativeEnumMemberType,
314
+ }: {
315
+ enumName: string,
316
+ values: string,
317
+ fromCases: string,
318
+ toCases: string,
319
+ nativeEnumMemberType: NativeEnumMemberValueType,
320
+ }) => {
321
+ const [fromValue, fromValueConversion, toValue] =
322
+ nativeEnumMemberType === 'std::string'
323
+ ? [
324
+ 'const jsi::String &rawValue',
325
+ 'std::string value = rawValue.utf8(rt);',
326
+ 'jsi::String',
327
+ ]
328
+ : [
329
+ 'const jsi::Value &rawValue',
330
+ 'double value = (double)rawValue.asNumber();',
331
+ 'jsi::Value',
332
+ ];
333
+
334
+ return `
335
+ #pragma mark - ${enumName}
336
+
337
+ enum ${enumName} { ${values} };
338
+
339
+ template <>
340
+ struct Bridging<${enumName}> {
341
+ static ${enumName} fromJs(jsi::Runtime &rt, ${fromValue}, const std::shared_ptr<CallInvoker> &jsInvoker) {
342
+ ${fromValueConversion}
343
+ ${fromCases}
344
+ }
345
+
346
+ static ${toValue} toJs(jsi::Runtime &rt, ${enumName} value, const std::shared_ptr<CallInvoker> &jsInvoker) {
347
+ ${toCases}
257
348
  }
349
+ };`;
258
350
  };
259
351
 
260
- `;
352
+ function generateEnum(
353
+ moduleName: string,
354
+ origEnumName: string,
355
+ members: NativeModuleEnumMembers,
356
+ memberType: NativeModuleEnumMemberType,
357
+ ): string {
358
+ const enumName = getEnumName(moduleName, origEnumName);
359
+
360
+ const nativeEnumMemberType: NativeEnumMemberValueType =
361
+ memberType === 'StringTypeAnnotation'
362
+ ? 'std::string'
363
+ : getAreEnumMembersInteger(members)
364
+ ? 'int32_t'
365
+ : 'float';
366
+
367
+ const getMemberValueAppearance = (value: string) =>
368
+ memberType === 'StringTypeAnnotation'
369
+ ? `"${value}"`
370
+ : `${value}${nativeEnumMemberType === 'float' ? 'f' : ''}`;
371
+
372
+ const fromCases =
373
+ members
374
+ .map(
375
+ member => `if (value == ${getMemberValueAppearance(member.value)}) {
376
+ return ${enumName}::${toSafeCppString(member.name)};
377
+ }`,
378
+ )
379
+ .join(' else ') +
380
+ ` else {
381
+ throw jsi::JSError(rt, "No appropriate enum member found for value");
382
+ }`;
383
+
384
+ const toCases =
385
+ members
386
+ .map(
387
+ member => `if (value == ${enumName}::${toSafeCppString(member.name)}) {
388
+ return bridging::toJs(rt, ${getMemberValueAppearance(member.value)});
389
+ }`,
390
+ )
391
+ .join(' else ') +
392
+ ` else {
393
+ throw jsi::JSError(rt, "No appropriate enum member found for enum value");
394
+ }`;
395
+
396
+ return EnumTemplate({
397
+ enumName,
398
+ values: members.map(member => member.name).join(', '),
399
+ fromCases,
400
+ toCases,
401
+ nativeEnumMemberType,
402
+ });
403
+ }
404
+
405
+ function createEnums(
406
+ moduleName: string,
407
+ enumMap: NativeModuleEnumMap,
408
+ resolveAlias: AliasResolver,
409
+ ): string {
410
+ return Object.entries(enumMap)
411
+ .map(([enumName, enumNode]) => {
412
+ return generateEnum(
413
+ moduleName,
414
+ enumName,
415
+ enumNode.members,
416
+ enumNode.memberType,
417
+ );
261
418
  })
419
+ .filter(Boolean)
262
420
  .join('\n');
263
421
  }
264
422
 
265
423
  function translatePropertyToCpp(
424
+ moduleName: string,
266
425
  prop: NativeModulePropertyShape,
267
426
  resolveAlias: AliasResolver,
427
+ enumMap: NativeModuleEnumMap,
268
428
  abstract: boolean = false,
269
429
  ) {
270
430
  const [propTypeAnnotation] =
@@ -276,20 +436,24 @@ function translatePropertyToCpp(
276
436
 
277
437
  const paramTypes = propTypeAnnotation.params.map(param => {
278
438
  const translatedParam = translatePrimitiveJSTypeToCpp(
439
+ moduleName,
279
440
  param.typeAnnotation,
280
441
  param.optional,
281
442
  typeName =>
282
443
  `Unsupported type for param "${param.name}" in ${prop.name}. Found: ${typeName}`,
283
444
  resolveAlias,
445
+ enumMap,
284
446
  );
285
447
  return `${translatedParam} ${param.name}`;
286
448
  });
287
449
 
288
450
  const returnType = translatePrimitiveJSTypeToCpp(
451
+ moduleName,
289
452
  propTypeAnnotation.returnTypeAnnotation,
290
453
  false,
291
454
  typeName => `Unsupported return type for ${prop.name}. Found: ${typeName}`,
292
455
  resolveAlias,
456
+ enumMap,
293
457
  );
294
458
 
295
459
  // The first param will always be the runtime reference.
@@ -322,26 +486,40 @@ module.exports = {
322
486
 
323
487
  const modules = Object.keys(nativeModules).flatMap(hasteModuleName => {
324
488
  const {
325
- aliases,
489
+ aliasMap,
490
+ enumMap,
326
491
  spec: {properties},
327
492
  moduleName,
328
493
  } = nativeModules[hasteModuleName];
329
- const resolveAlias = createAliasResolver(aliases);
330
- const structs = createStructs(moduleName, aliases, resolveAlias);
494
+ const resolveAlias = createAliasResolver(aliasMap);
495
+ const structs = createStructsString(
496
+ moduleName,
497
+ aliasMap,
498
+ resolveAlias,
499
+ enumMap,
500
+ );
501
+ const enums = createEnums(moduleName, enumMap, resolveAlias);
331
502
 
332
503
  return [
333
504
  ModuleClassDeclarationTemplate({
334
505
  hasteModuleName,
335
506
  moduleProperties: properties.map(prop =>
336
- translatePropertyToCpp(prop, resolveAlias, true),
507
+ translatePropertyToCpp(
508
+ moduleName,
509
+ prop,
510
+ resolveAlias,
511
+ enumMap,
512
+ true,
513
+ ),
337
514
  ),
338
515
  structs,
516
+ enums,
339
517
  }),
340
518
  ModuleSpecClassDeclarationTemplate({
341
519
  hasteModuleName,
342
520
  moduleName,
343
521
  moduleProperties: properties.map(prop =>
344
- translatePropertyToCpp(prop, resolveAlias),
522
+ translatePropertyToCpp(moduleName, prop, resolveAlias, enumMap),
345
523
  ),
346
524
  }),
347
525
  ];
@@ -474,14 +474,14 @@ module.exports = {
474
474
  const outputDir = `java/${normalizedPackageName.replace(/\./g, '/')}`;
475
475
  Object.keys(nativeModules).forEach(hasteModuleName => {
476
476
  const _nativeModules$hasteM = nativeModules[hasteModuleName],
477
- aliases = _nativeModules$hasteM.aliases,
477
+ aliasMap = _nativeModules$hasteM.aliasMap,
478
478
  excludedPlatforms = _nativeModules$hasteM.excludedPlatforms,
479
479
  moduleName = _nativeModules$hasteM.moduleName,
480
480
  properties = _nativeModules$hasteM.spec.properties;
481
481
  if (excludedPlatforms != null && excludedPlatforms.includes('android')) {
482
482
  return;
483
483
  }
484
- const resolveAlias = createAliasResolver(aliases);
484
+ const resolveAlias = createAliasResolver(aliasMap);
485
485
  const className = `${hasteModuleName}Spec`;
486
486
  const imports = new Set([
487
487
  // Always required.
@@ -184,7 +184,7 @@ function translateFunctionParamToJavaType(
184
184
  imports.add('com.facebook.react.bridge.Callback');
185
185
  return wrapNullable('Callback');
186
186
  default:
187
- (realTypeAnnotation.type: 'EnumDeclaration' | 'MixedTypeAnnotation');
187
+ (realTypeAnnotation.type: 'MixedTypeAnnotation');
188
188
  throw new Error(createErrorMessage(realTypeAnnotation.type));
189
189
  }
190
190
  }
@@ -272,7 +272,7 @@ function translateFunctionReturnTypeToJavaType(
272
272
  imports.add('com.facebook.react.bridge.WritableArray');
273
273
  return wrapNullable('WritableArray');
274
274
  default:
275
- (realTypeAnnotation.type: 'EnumDeclaration' | 'MixedTypeAnnotation');
275
+ (realTypeAnnotation.type: 'MixedTypeAnnotation');
276
276
  throw new Error(createErrorMessage(realTypeAnnotation.type));
277
277
  }
278
278
  }
@@ -346,7 +346,7 @@ function getFalsyReturnStatementFromReturnType(
346
346
  case 'ArrayTypeAnnotation':
347
347
  return 'return null;';
348
348
  default:
349
- (realTypeAnnotation.type: 'EnumDeclaration' | 'MixedTypeAnnotation');
349
+ (realTypeAnnotation.type: 'MixedTypeAnnotation');
350
350
  throw new Error(createErrorMessage(realTypeAnnotation.type));
351
351
  }
352
352
  }
@@ -447,7 +447,7 @@ module.exports = {
447
447
 
448
448
  Object.keys(nativeModules).forEach(hasteModuleName => {
449
449
  const {
450
- aliases,
450
+ aliasMap,
451
451
  excludedPlatforms,
452
452
  moduleName,
453
453
  spec: {properties},
@@ -455,7 +455,7 @@ module.exports = {
455
455
  if (excludedPlatforms != null && excludedPlatforms.includes('android')) {
456
456
  return;
457
457
  }
458
- const resolveAlias = createAliasResolver(aliases);
458
+ const resolveAlias = createAliasResolver(aliasMap);
459
459
  const className = `${hasteModuleName}Spec`;
460
460
 
461
461
  const imports: Set<string> = new Set([
@@ -428,9 +428,9 @@ module.exports = {
428
428
  .sort()
429
429
  .map(hasteModuleName => {
430
430
  const _nativeModules$hasteM = nativeModules[hasteModuleName],
431
- aliases = _nativeModules$hasteM.aliases,
431
+ aliasMap = _nativeModules$hasteM.aliasMap,
432
432
  properties = _nativeModules$hasteM.spec.properties;
433
- const resolveAlias = createAliasResolver(aliases);
433
+ const resolveAlias = createAliasResolver(aliasMap);
434
434
  const translatedMethods = properties
435
435
  .map(property =>
436
436
  translateMethodForImplementation(
@@ -193,7 +193,7 @@ function translateReturnTypeToKind(
193
193
  case 'ArrayTypeAnnotation':
194
194
  return 'ArrayKind';
195
195
  default:
196
- (realTypeAnnotation.type: 'EnumDeclaration' | 'MixedTypeAnnotation');
196
+ (realTypeAnnotation.type: 'MixedTypeAnnotation');
197
197
  throw new Error(
198
198
  `Unknown prop type for returning value, found: ${realTypeAnnotation.type}"`,
199
199
  );
@@ -272,7 +272,7 @@ function translateParamTypeToJniType(
272
272
  case 'FunctionTypeAnnotation':
273
273
  return 'Lcom/facebook/react/bridge/Callback;';
274
274
  default:
275
- (realTypeAnnotation.type: 'EnumDeclaration' | 'MixedTypeAnnotation');
275
+ (realTypeAnnotation.type: 'MixedTypeAnnotation');
276
276
  throw new Error(
277
277
  `Unknown prop type for method arg, found: ${realTypeAnnotation.type}"`,
278
278
  );
@@ -348,7 +348,7 @@ function translateReturnTypeToJniType(
348
348
  case 'ArrayTypeAnnotation':
349
349
  return 'Lcom/facebook/react/bridge/WritableArray;';
350
350
  default:
351
- (realTypeAnnotation.type: 'EnumDeclaration' | 'MixedTypeAnnotation');
351
+ (realTypeAnnotation.type: 'MixedTypeAnnotation');
352
352
  throw new Error(
353
353
  `Unknown prop type for method return type, found: ${realTypeAnnotation.type}"`,
354
354
  );
@@ -438,10 +438,10 @@ module.exports = {
438
438
  .sort()
439
439
  .map(hasteModuleName => {
440
440
  const {
441
- aliases,
441
+ aliasMap,
442
442
  spec: {properties},
443
443
  } = nativeModules[hasteModuleName];
444
- const resolveAlias = createAliasResolver(aliases);
444
+ const resolveAlias = createAliasResolver(aliasMap);
445
445
 
446
446
  const translatedMethods = properties
447
447
  .map(property =>
@@ -106,13 +106,13 @@ module.exports = {
106
106
  const hasteModuleNames = Object.keys(nativeModules).sort();
107
107
  for (const hasteModuleName of hasteModuleNames) {
108
108
  const _nativeModules$hasteM = nativeModules[hasteModuleName],
109
- aliases = _nativeModules$hasteM.aliases,
109
+ aliasMap = _nativeModules$hasteM.aliasMap,
110
110
  excludedPlatforms = _nativeModules$hasteM.excludedPlatforms,
111
111
  properties = _nativeModules$hasteM.spec.properties;
112
112
  if (excludedPlatforms != null && excludedPlatforms.includes('iOS')) {
113
113
  continue;
114
114
  }
115
- const resolveAlias = createAliasResolver(aliases);
115
+ const resolveAlias = createAliasResolver(aliasMap);
116
116
  const structCollector = new StructCollector();
117
117
  const methodSerializations = [];
118
118
  const serializeProperty = property => {
@@ -132,14 +132,14 @@ module.exports = {
132
132
  const hasteModuleNames: Array<string> = Object.keys(nativeModules).sort();
133
133
  for (const hasteModuleName of hasteModuleNames) {
134
134
  const {
135
- aliases,
135
+ aliasMap,
136
136
  excludedPlatforms,
137
137
  spec: {properties},
138
138
  } = nativeModules[hasteModuleName];
139
139
  if (excludedPlatforms != null && excludedPlatforms.includes('iOS')) {
140
140
  continue;
141
141
  }
142
- const resolveAlias = createAliasResolver(aliases);
142
+ const resolveAlias = createAliasResolver(aliasMap);
143
143
  const structCollector = new StructCollector();
144
144
 
145
145
  const methodSerializations: Array<MethodSerializationOutput> = [];
@@ -375,7 +375,7 @@ function getReturnObjCType(
375
375
  case 'GenericObjectTypeAnnotation':
376
376
  return wrapIntoNullableIfNeeded('NSDictionary *');
377
377
  default:
378
- (typeAnnotation.type: 'EnumDeclaration' | 'MixedTypeAnnotation');
378
+ (typeAnnotation.type: 'MixedTypeAnnotation');
379
379
  throw new Error(
380
380
  `Unsupported return type for ${methodName}. Found: ${typeAnnotation.type}`,
381
381
  );
@@ -439,7 +439,7 @@ function getReturnJSType(
439
439
  );
440
440
  }
441
441
  default:
442
- (typeAnnotation.type: 'EnumDeclaration' | 'MixedTypeAnnotation');
442
+ (typeAnnotation.type: 'MixedTypeAnnotation');
443
443
  throw new Error(
444
444
  `Unsupported return type for ${methodName}. Found: ${typeAnnotation.type}`,
445
445
  );
@@ -28,7 +28,11 @@ function getModules(schema) {
28
28
  return modules;
29
29
  }, {});
30
30
  }
31
+ function getAreEnumMembersInteger(members) {
32
+ return !members.some(m => `${m.value}`.includes('.'));
33
+ }
31
34
  module.exports = {
32
35
  createAliasResolver,
33
36
  getModules,
37
+ getAreEnumMembersInteger,
34
38
  };
@@ -15,6 +15,7 @@ import type {
15
15
  NativeModuleAliasMap,
16
16
  NativeModuleObjectTypeAnnotation,
17
17
  NativeModuleSchema,
18
+ NativeModuleEnumMembers,
18
19
  } from '../../CodegenSchema';
19
20
 
20
21
  const invariant = require('invariant');
@@ -47,7 +48,12 @@ function getModules(
47
48
  );
48
49
  }
49
50
 
51
+ function getAreEnumMembersInteger(members: NativeModuleEnumMembers): boolean {
52
+ return !members.some(m => `${m.value}`.includes('.'));
53
+ }
54
+
50
55
  module.exports = {
51
56
  createAliasResolver,
52
57
  getModules,
58
+ getAreEnumMembersInteger,
53
59
  };