@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
@@ -25,11 +25,12 @@ import type {
25
25
  const {
26
26
  getCppTypeForAnnotation,
27
27
  getEnumMaskName,
28
- getEnumName,
29
28
  generateStructName,
30
29
  getImports,
31
30
  } = require('./CppHelpers.js');
32
31
 
32
+ const {getEnumName} = require('../Utils');
33
+
33
34
  function getNativeTypeFromAnnotation(
34
35
  componentName: string,
35
36
  prop:
@@ -78,6 +79,8 @@ function getNativeTypeFromAnnotation(
78
79
  return 'Point';
79
80
  case 'EdgeInsetsPrimitive':
80
81
  return 'EdgeInsets';
82
+ case 'DimensionPrimitive':
83
+ return 'YGValue';
81
84
  default:
82
85
  (typeAnnotation.name: empty);
83
86
  throw new Error('Received unknown ReservedPropTypeAnnotation');
@@ -221,7 +224,8 @@ function getLocalImports(
221
224
  | 'EdgeInsetsPrimitive'
222
225
  | 'ImageSourcePrimitive'
223
226
  | 'PointPrimitive'
224
- | 'ImageRequestPrimitive',
227
+ | 'ImageRequestPrimitive'
228
+ | 'DimensionPrimitive',
225
229
  ) {
226
230
  switch (name) {
227
231
  case 'ColorPrimitive':
@@ -239,6 +243,9 @@ function getLocalImports(
239
243
  case 'EdgeInsetsPrimitive':
240
244
  imports.add('#include <react/renderer/graphics/RectangleEdges.h>');
241
245
  return;
246
+ case 'DimensionPrimitive':
247
+ imports.add('#include <yoga/Yoga.h>');
248
+ return;
242
249
  default:
243
250
  (name: empty);
244
251
  throw new Error(`Invalid ReservedPropTypeAnnotation name, got ${name}`);
@@ -270,8 +277,11 @@ function getLocalImports(
270
277
  typeAnnotation.type === 'ArrayTypeAnnotation' &&
271
278
  typeAnnotation.elementType.type === 'ObjectTypeAnnotation'
272
279
  ) {
280
+ imports.add('#include <react/renderer/core/propsConversions.h>');
273
281
  const objectProps = typeAnnotation.elementType.properties;
282
+ // $FlowFixMe[incompatible-call] the type is guaranteed to be ObjectTypeAnnotation<PropTypeAnnotation>
274
283
  const objectImports = getImports(objectProps);
284
+ // $FlowFixMe[incompatible-call] the type is guaranteed to be ObjectTypeAnnotation<PropTypeAnnotation>
275
285
  const localImports = getLocalImports(objectProps);
276
286
  // $FlowFixMe[method-unbinding] added when improving typing for this parameters
277
287
  objectImports.forEach(imports.add, imports);
@@ -10,15 +10,9 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- function upperCaseFirst(inString) {
14
- if (inString.length === 0) {
15
- return inString;
16
- }
17
- return inString[0].toUpperCase() + inString.slice(1);
18
- }
19
- function toSafeCppString(input) {
20
- return input.split('-').map(upperCaseFirst).join('');
21
- }
13
+ const _require = require('../Utils'),
14
+ getEnumName = _require.getEnumName,
15
+ toSafeCppString = _require.toSafeCppString;
22
16
  function toIntEnumValueName(propName, value) {
23
17
  return `${toSafeCppString(propName)}${value}`;
24
18
  }
@@ -54,6 +48,9 @@ function getImports(properties) {
54
48
  case 'ImageSourcePrimitive':
55
49
  imports.add('#include <react/renderer/components/image/conversions.h>');
56
50
  return;
51
+ case 'DimensionPrimitive':
52
+ imports.add('#include <react/renderer/components/view/conversions.h>');
53
+ return;
57
54
  default:
58
55
  name;
59
56
  throw new Error(`Invalid name, got ${name}`);
@@ -86,10 +83,6 @@ function generateStructName(componentName, parts = []) {
86
83
  const additional = parts.map(toSafeCppString).join('');
87
84
  return `${componentName}${additional}Struct`;
88
85
  }
89
- function getEnumName(componentName, propName) {
90
- const uppercasedPropName = toSafeCppString(propName);
91
- return `${componentName}${uppercasedPropName}`;
92
- }
93
86
  function getEnumMaskName(enumName) {
94
87
  return `${enumName}Mask`;
95
88
  }
@@ -133,6 +126,8 @@ function convertDefaultTypeToString(componentName, prop) {
133
126
  return '';
134
127
  case 'EdgeInsetsPrimitive':
135
128
  return '';
129
+ case 'DimensionPrimitive':
130
+ return '';
136
131
  default:
137
132
  typeAnnotation.name;
138
133
  throw new Error(
@@ -178,10 +173,8 @@ function convertDefaultTypeToString(componentName, prop) {
178
173
  module.exports = {
179
174
  convertDefaultTypeToString,
180
175
  getCppTypeForAnnotation,
181
- getEnumName,
182
176
  getEnumMaskName,
183
177
  getImports,
184
- toSafeCppString,
185
178
  toIntEnumValueName,
186
179
  generateStructName,
187
180
  generateEventStructName,
@@ -11,17 +11,7 @@
11
11
  'use strict';
12
12
  import type {NamedShape, PropTypeAnnotation} from '../../CodegenSchema';
13
13
 
14
- function upperCaseFirst(inString: string): string {
15
- if (inString.length === 0) {
16
- return inString;
17
- }
18
-
19
- return inString[0].toUpperCase() + inString.slice(1);
20
- }
21
-
22
- function toSafeCppString(input: string): string {
23
- return input.split('-').map(upperCaseFirst).join('');
24
- }
14
+ const {getEnumName, toSafeCppString} = require('../Utils');
25
15
 
26
16
  function toIntEnumValueName(propName: string, value: number): string {
27
17
  return `${toSafeCppString(propName)}${value}`;
@@ -63,7 +53,8 @@ function getImports(
63
53
  | 'EdgeInsetsPrimitive'
64
54
  | 'ImageRequestPrimitive'
65
55
  | 'ImageSourcePrimitive'
66
- | 'PointPrimitive',
56
+ | 'PointPrimitive'
57
+ | 'DimensionPrimitive',
67
58
  ) {
68
59
  switch (name) {
69
60
  case 'ColorPrimitive':
@@ -77,6 +68,9 @@ function getImports(
77
68
  case 'ImageSourcePrimitive':
78
69
  imports.add('#include <react/renderer/components/image/conversions.h>');
79
70
  return;
71
+ case 'DimensionPrimitive':
72
+ imports.add('#include <react/renderer/components/view/conversions.h>');
73
+ return;
80
74
  default:
81
75
  (name: empty);
82
76
  throw new Error(`Invalid name, got ${name}`);
@@ -120,11 +114,6 @@ function generateStructName(
120
114
  return `${componentName}${additional}Struct`;
121
115
  }
122
116
 
123
- function getEnumName(componentName: string, propName: string): string {
124
- const uppercasedPropName = toSafeCppString(propName);
125
- return `${componentName}${uppercasedPropName}`;
126
- }
127
-
128
117
  function getEnumMaskName(enumName: string): string {
129
118
  return `${enumName}Mask`;
130
119
  }
@@ -172,6 +161,8 @@ function convertDefaultTypeToString(
172
161
  return '';
173
162
  case 'EdgeInsetsPrimitive':
174
163
  return '';
164
+ case 'DimensionPrimitive':
165
+ return '';
175
166
  default:
176
167
  (typeAnnotation.name: empty);
177
168
  throw new Error(
@@ -218,10 +209,8 @@ function convertDefaultTypeToString(
218
209
  module.exports = {
219
210
  convertDefaultTypeToString,
220
211
  getCppTypeForAnnotation,
221
- getEnumName,
222
212
  getEnumMaskName,
223
213
  getImports,
224
- toSafeCppString,
225
214
  toIntEnumValueName,
226
215
  generateStructName,
227
216
  generateEventStructName,
@@ -38,14 +38,18 @@ const ComponentTemplate = ({
38
38
  structName,
39
39
  dispatchEventName,
40
40
  implementation,
41
- }) =>
42
- `
41
+ }) => {
42
+ const capture = implementation.includes('event')
43
+ ? 'event=std::move(event)'
44
+ : '';
45
+ return `
43
46
  void ${className}EventEmitter::${eventName}(${structName} event) const {
44
- dispatchEvent("${dispatchEventName}", [event=std::move(event)](jsi::Runtime &runtime) {
47
+ dispatchEvent("${dispatchEventName}", [${capture}](jsi::Runtime &runtime) {
45
48
  ${implementation}
46
49
  });
47
50
  }
48
51
  `.trim();
52
+ };
49
53
  const BasicComponentTemplate = ({className, eventName, dispatchEventName}) =>
50
54
  `
51
55
  void ${className}EventEmitter::${eventName}() const {
@@ -67,14 +67,18 @@ const ComponentTemplate = ({
67
67
  structName: string,
68
68
  dispatchEventName: string,
69
69
  implementation: string,
70
- }) =>
71
- `
70
+ }) => {
71
+ const capture = implementation.includes('event')
72
+ ? 'event=std::move(event)'
73
+ : '';
74
+ return `
72
75
  void ${className}EventEmitter::${eventName}(${structName} event) const {
73
- dispatchEvent("${dispatchEventName}", [event=std::move(event)](jsi::Runtime &runtime) {
76
+ dispatchEvent("${dispatchEventName}", [${capture}](jsi::Runtime &runtime) {
74
77
  ${implementation}
75
78
  });
76
79
  }
77
80
  `.trim();
81
+ };
78
82
 
79
83
  const BasicComponentTemplate = ({
80
84
  className,
@@ -13,10 +13,10 @@
13
13
  const nullthrows = require('nullthrows');
14
14
  const _require = require('./CppHelpers'),
15
15
  getCppTypeForAnnotation = _require.getCppTypeForAnnotation,
16
- toSafeCppString = _require.toSafeCppString,
17
16
  generateEventStructName = _require.generateEventStructName;
18
17
  const _require2 = require('../Utils'),
19
- indent = _require2.indent;
18
+ indent = _require2.indent,
19
+ toSafeCppString = _require2.toSafeCppString;
20
20
  const FileTemplate = ({componentEmitters}) => `
21
21
  /**
22
22
  * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
@@ -14,10 +14,9 @@ const nullthrows = require('nullthrows');
14
14
 
15
15
  const {
16
16
  getCppTypeForAnnotation,
17
- toSafeCppString,
18
17
  generateEventStructName,
19
18
  } = require('./CppHelpers');
20
- const {indent} = require('../Utils');
19
+ const {indent, toSafeCppString} = require('../Utils');
21
20
 
22
21
  import type {
23
22
  ComponentShape,
@@ -16,10 +16,11 @@ const _require = require('./ComponentsGeneratorUtils.js'),
16
16
  const _require2 = require('./CppHelpers.js'),
17
17
  convertDefaultTypeToString = _require2.convertDefaultTypeToString,
18
18
  getEnumMaskName = _require2.getEnumMaskName,
19
- getEnumName = _require2.getEnumName,
20
- toSafeCppString = _require2.toSafeCppString,
21
19
  generateStructName = _require2.generateStructName,
22
20
  toIntEnumValueName = _require2.toIntEnumValueName;
21
+ const _require3 = require('../Utils'),
22
+ getEnumName = _require3.getEnumName,
23
+ toSafeCppString = _require3.toSafeCppString;
23
24
  const FileTemplate = ({imports, componentClasses}) => `
24
25
  /**
25
26
  * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
@@ -512,8 +513,6 @@ function generateStruct(structs, componentName, nameParts, properties) {
512
513
  return;
513
514
  case 'Int32EnumTypeAnnotation':
514
515
  return;
515
- case 'DoubleTypeAnnotation':
516
- return;
517
516
  case 'ObjectTypeAnnotation':
518
517
  const props = property.typeAnnotation.properties;
519
518
  if (props == null) {
@@ -19,12 +19,12 @@ const {
19
19
  const {
20
20
  convertDefaultTypeToString,
21
21
  getEnumMaskName,
22
- getEnumName,
23
- toSafeCppString,
24
22
  generateStructName,
25
23
  toIntEnumValueName,
26
24
  } = require('./CppHelpers.js');
27
25
 
26
+ const {getEnumName, toSafeCppString} = require('../Utils');
27
+
28
28
  import type {
29
29
  ExtendsPropsShape,
30
30
  NamedShape,
@@ -667,8 +667,6 @@ function generateStruct(
667
667
  return;
668
668
  case 'Int32EnumTypeAnnotation':
669
669
  return;
670
- case 'DoubleTypeAnnotation':
671
- return;
672
670
  case 'ObjectTypeAnnotation':
673
671
  const props = property.typeAnnotation.properties;
674
672
  if (props == null) {
@@ -104,6 +104,8 @@ function getJavaValueForProp(prop, componentName) {
104
104
  return '(ReadableMap) value';
105
105
  case 'EdgeInsetsPrimitive':
106
106
  return '(ReadableMap) value';
107
+ case 'DimensionPrimitive':
108
+ return 'DimensionPropConverter.getDimension(value)';
107
109
  default:
108
110
  typeAnnotation.name;
109
111
  throw new Error('Received unknown ReservedPropTypeAnnotation');
@@ -128,6 +128,8 @@ function getJavaValueForProp(
128
128
  return '(ReadableMap) value';
129
129
  case 'EdgeInsetsPrimitive':
130
130
  return '(ReadableMap) value';
131
+ case 'DimensionPrimitive':
132
+ return 'DimensionPropConverter.getDimension(value)';
131
133
  default:
132
134
  (typeAnnotation.name: empty);
133
135
  throw new Error('Received unknown ReservedPropTypeAnnotation');
@@ -84,6 +84,9 @@ function getJavaValueForProp(prop, imports) {
84
84
  case 'EdgeInsetsPrimitive':
85
85
  addNullable(imports);
86
86
  return '@Nullable ReadableMap value';
87
+ case 'DimensionPrimitive':
88
+ addNullable(imports);
89
+ return '@Nullable YogaValue value';
87
90
  default:
88
91
  typeAnnotation.name;
89
92
  throw new Error('Received unknown ReservedPropTypeAnnotation');
@@ -106,6 +106,9 @@ function getJavaValueForProp(
106
106
  case 'EdgeInsetsPrimitive':
107
107
  addNullable(imports);
108
108
  return '@Nullable ReadableMap value';
109
+ case 'DimensionPrimitive':
110
+ addNullable(imports);
111
+ return '@Nullable YogaValue value';
109
112
  default:
110
113
  (typeAnnotation.name: empty);
111
114
  throw new Error('Received unknown ReservedPropTypeAnnotation');
@@ -17,6 +17,7 @@ function toJavaType(typeAnnotation, addImport) {
17
17
  const importReadableMap = () =>
18
18
  addImport('com.facebook.react.bridge.ReadableMap');
19
19
  const importArrayList = () => addImport('java.util.ArrayList');
20
+ const importYogaValue = () => addImport('com.facebook.yoga.YogaValue');
20
21
  switch (typeAnnotation.type) {
21
22
  /**
22
23
  * Primitives
@@ -92,6 +93,10 @@ function toJavaType(typeAnnotation, addImport) {
92
93
  importNullable();
93
94
  importReadableMap();
94
95
  return '@Nullable ReadableMap';
96
+ case 'DimensionPrimitive':
97
+ importNullable();
98
+ importYogaValue();
99
+ return '@Nullable YogaValue';
95
100
  default:
96
101
  typeAnnotation.name;
97
102
  throw new Error(
@@ -175,6 +180,9 @@ function toJavaType(typeAnnotation, addImport) {
175
180
  case 'EdgeInsetsPrimitive':
176
181
  importReadableMap();
177
182
  return 'ReadableMap';
183
+ case 'DimensionPrimitive':
184
+ importYogaValue();
185
+ return 'YogaValue';
178
186
  default:
179
187
  elementType.name;
180
188
  throw new Error(
@@ -23,6 +23,7 @@ function toJavaType(
23
23
  const importReadableMap = () =>
24
24
  addImport('com.facebook.react.bridge.ReadableMap');
25
25
  const importArrayList = () => addImport('java.util.ArrayList');
26
+ const importYogaValue = () => addImport('com.facebook.yoga.YogaValue');
26
27
  switch (typeAnnotation.type) {
27
28
  /**
28
29
  * Primitives
@@ -98,6 +99,12 @@ function toJavaType(
98
99
  importNullable();
99
100
  importReadableMap();
100
101
  return '@Nullable ReadableMap';
102
+
103
+ case 'DimensionPrimitive':
104
+ importNullable();
105
+ importYogaValue();
106
+ return '@Nullable YogaValue';
107
+
101
108
  default:
102
109
  (typeAnnotation.name: empty);
103
110
  throw new Error(
@@ -182,6 +189,11 @@ function toJavaType(
182
189
  case 'EdgeInsetsPrimitive':
183
190
  importReadableMap();
184
191
  return 'ReadableMap';
192
+
193
+ case 'DimensionPrimitive':
194
+ importYogaValue();
195
+ return 'YogaValue';
196
+
185
197
  default:
186
198
  (elementType.name: empty);
187
199
  throw new Error(
@@ -11,8 +11,9 @@
11
11
  'use strict';
12
12
 
13
13
  const _require = require('./CppHelpers'),
14
- getImports = _require.getImports,
15
- toSafeCppString = _require.toSafeCppString;
14
+ getImports = _require.getImports;
15
+ const _require2 = require('../Utils'),
16
+ toSafeCppString = _require2.toSafeCppString;
16
17
  const FileTemplate = ({libraryName, imports, componentTests}) =>
17
18
  `
18
19
  /**
@@ -12,7 +12,9 @@
12
12
  import type {ComponentShape, PropTypeAnnotation} from '../../CodegenSchema';
13
13
  import type {SchemaType} from '../../CodegenSchema';
14
14
 
15
- const {getImports, toSafeCppString} = require('./CppHelpers');
15
+ const {getImports} = require('./CppHelpers');
16
+
17
+ const {toSafeCppString} = require('../Utils');
16
18
 
17
19
  type FilesOutput = Map<string, string>;
18
20
  type PropValueType = string | number | boolean;
@@ -51,7 +51,7 @@ function getReactDiffProcessValue(typeAnnotation) {
51
51
  switch (typeAnnotation.name) {
52
52
  case 'ColorPrimitive':
53
53
  return j.template
54
- .expression`{ process: require('react-native/Libraries/StyleSheet/processColor') }`;
54
+ .expression`{ process: require('react-native/Libraries/StyleSheet/processColor').default }`;
55
55
  case 'ImageSourcePrimitive':
56
56
  return j.template
57
57
  .expression`{ process: require('react-native/Libraries/Image/resolveAssetSource') }`;
@@ -63,6 +63,8 @@ function getReactDiffProcessValue(typeAnnotation) {
63
63
  case 'EdgeInsetsPrimitive':
64
64
  return j.template
65
65
  .expression`{ diff: require('react-native/Libraries/Utilities/differ/insetsDiffer') }`;
66
+ case 'DimensionPrimitive':
67
+ return j.literal(true);
66
68
  default:
67
69
  typeAnnotation.name;
68
70
  throw new Error(
@@ -76,8 +78,9 @@ function getReactDiffProcessValue(typeAnnotation) {
76
78
  return j.template
77
79
  .expression`{ process: require('react-native/Libraries/StyleSheet/processColorArray') }`;
78
80
  case 'ImageSourcePrimitive':
79
- return j.literal(true);
80
81
  case 'PointPrimitive':
82
+ case 'EdgeInsetsPrimitive':
83
+ case 'DimensionPrimitive':
81
84
  return j.literal(true);
82
85
  default:
83
86
  throw new Error(
@@ -65,7 +65,7 @@ function getReactDiffProcessValue(typeAnnotation: PropTypeAnnotation) {
65
65
  switch (typeAnnotation.name) {
66
66
  case 'ColorPrimitive':
67
67
  return j.template
68
- .expression`{ process: require('react-native/Libraries/StyleSheet/processColor') }`;
68
+ .expression`{ process: require('react-native/Libraries/StyleSheet/processColor').default }`;
69
69
  case 'ImageSourcePrimitive':
70
70
  return j.template
71
71
  .expression`{ process: require('react-native/Libraries/Image/resolveAssetSource') }`;
@@ -77,6 +77,8 @@ function getReactDiffProcessValue(typeAnnotation: PropTypeAnnotation) {
77
77
  case 'EdgeInsetsPrimitive':
78
78
  return j.template
79
79
  .expression`{ diff: require('react-native/Libraries/Utilities/differ/insetsDiffer') }`;
80
+ case 'DimensionPrimitive':
81
+ return j.literal(true);
80
82
  default:
81
83
  (typeAnnotation.name: empty);
82
84
  throw new Error(
@@ -90,8 +92,9 @@ function getReactDiffProcessValue(typeAnnotation: PropTypeAnnotation) {
90
92
  return j.template
91
93
  .expression`{ process: require('react-native/Libraries/StyleSheet/processColorArray') }`;
92
94
  case 'ImageSourcePrimitive':
93
- return j.literal(true);
94
95
  case 'PointPrimitive':
96
+ case 'EdgeInsetsPrimitive':
97
+ case 'DimensionPrimitive':
95
98
  return j.literal(true);
96
99
  default:
97
100
  throw new Error(
@@ -60,6 +60,15 @@ function getImports(component, type) {
60
60
  case 'EdgeInsetsPrimitive':
61
61
  imports.add('import com.facebook.react.bridge.ReadableMap;');
62
62
  return;
63
+ case 'DimensionPrimitive':
64
+ if (type === 'delegate') {
65
+ imports.add(
66
+ 'import com.facebook.react.bridge.DimensionPropConverter;',
67
+ );
68
+ } else {
69
+ imports.add('import com.facebook.yoga.YogaValue;');
70
+ }
71
+ return;
63
72
  default:
64
73
  name;
65
74
  throw new Error(`Invalid ReservedPropTypeAnnotation name, got ${name}`);
@@ -66,10 +66,12 @@ function getImports(
66
66
  | 'EdgeInsetsPrimitive'
67
67
  | 'ImageSourcePrimitive'
68
68
  | 'PointPrimitive'
69
+ | 'DimensionPrimitive'
69
70
  | $TEMPORARY$string<'ColorPrimitive'>
70
71
  | $TEMPORARY$string<'EdgeInsetsPrimitive'>
71
72
  | $TEMPORARY$string<'ImageSourcePrimitive'>
72
- | $TEMPORARY$string<'PointPrimitive'>,
73
+ | $TEMPORARY$string<'PointPrimitive'>
74
+ | $TEMPORARY$string<'DimensionPrimitive'>,
73
75
  ) {
74
76
  switch (name) {
75
77
  case 'ColorPrimitive':
@@ -86,6 +88,15 @@ function getImports(
86
88
  case 'EdgeInsetsPrimitive':
87
89
  imports.add('import com.facebook.react.bridge.ReadableMap;');
88
90
  return;
91
+ case 'DimensionPrimitive':
92
+ if (type === 'delegate') {
93
+ imports.add(
94
+ 'import com.facebook.react.bridge.DimensionPropConverter;',
95
+ );
96
+ } else {
97
+ imports.add('import com.facebook.yoga.YogaValue;');
98
+ }
99
+ return;
89
100
  default:
90
101
  (name: empty);
91
102
  throw new Error(`Invalid ReservedPropTypeAnnotation name, got ${name}`);
@@ -512,6 +512,35 @@ const INSETS_PROP = {
512
512
  },
513
513
  },
514
514
  };
515
+ const DIMENSION_PROP = {
516
+ modules: {
517
+ CustomView: {
518
+ type: 'Component',
519
+ components: {
520
+ DimensionPropNativeComponent: {
521
+ extendsProps: [
522
+ {
523
+ type: 'ReactNativeBuiltInType',
524
+ knownTypeName: 'ReactNativeCoreViewProps',
525
+ },
526
+ ],
527
+ events: [],
528
+ props: [
529
+ {
530
+ name: 'marginBack',
531
+ optional: true,
532
+ typeAnnotation: {
533
+ type: 'ReservedPropTypeAnnotation',
534
+ name: 'DimensionPrimitive',
535
+ },
536
+ },
537
+ ],
538
+ commands: [],
539
+ },
540
+ },
541
+ },
542
+ },
543
+ };
515
544
  const ARRAY_PROPS = {
516
545
  modules: {
517
546
  Slider: {
@@ -599,6 +628,17 @@ const ARRAY_PROPS = {
599
628
  },
600
629
  },
601
630
  },
631
+ {
632
+ name: 'dimensions',
633
+ optional: true,
634
+ typeAnnotation: {
635
+ type: 'ArrayTypeAnnotation',
636
+ elementType: {
637
+ type: 'ReservedPropTypeAnnotation',
638
+ name: 'DimensionPrimitive',
639
+ },
640
+ },
641
+ },
602
642
  {
603
643
  name: 'sizes',
604
644
  optional: true,
@@ -1622,6 +1662,7 @@ module.exports = {
1622
1662
  IMAGE_PROP,
1623
1663
  POINT_PROP,
1624
1664
  INSETS_PROP,
1665
+ DIMENSION_PROP,
1625
1666
  ARRAY_PROPS,
1626
1667
  ARRAY_PROPS_WITH_NESTED_OBJECT,
1627
1668
  OBJECT_PROPS,
@@ -526,6 +526,36 @@ const INSETS_PROP: SchemaType = {
526
526
  },
527
527
  };
528
528
 
529
+ const DIMENSION_PROP: SchemaType = {
530
+ modules: {
531
+ CustomView: {
532
+ type: 'Component',
533
+ components: {
534
+ DimensionPropNativeComponent: {
535
+ extendsProps: [
536
+ {
537
+ type: 'ReactNativeBuiltInType',
538
+ knownTypeName: 'ReactNativeCoreViewProps',
539
+ },
540
+ ],
541
+ events: [],
542
+ props: [
543
+ {
544
+ name: 'marginBack',
545
+ optional: true,
546
+ typeAnnotation: {
547
+ type: 'ReservedPropTypeAnnotation',
548
+ name: 'DimensionPrimitive',
549
+ },
550
+ },
551
+ ],
552
+ commands: [],
553
+ },
554
+ },
555
+ },
556
+ },
557
+ };
558
+
529
559
  const ARRAY_PROPS: SchemaType = {
530
560
  modules: {
531
561
  Slider: {
@@ -613,6 +643,17 @@ const ARRAY_PROPS: SchemaType = {
613
643
  },
614
644
  },
615
645
  },
646
+ {
647
+ name: 'dimensions',
648
+ optional: true,
649
+ typeAnnotation: {
650
+ type: 'ArrayTypeAnnotation',
651
+ elementType: {
652
+ type: 'ReservedPropTypeAnnotation',
653
+ name: 'DimensionPrimitive',
654
+ },
655
+ },
656
+ },
616
657
  {
617
658
  name: 'sizes',
618
659
  optional: true,
@@ -1653,6 +1694,7 @@ module.exports = {
1653
1694
  IMAGE_PROP,
1654
1695
  POINT_PROP,
1655
1696
  INSETS_PROP,
1697
+ DIMENSION_PROP,
1656
1698
  ARRAY_PROPS,
1657
1699
  ARRAY_PROPS_WITH_NESTED_OBJECT,
1658
1700
  OBJECT_PROPS,