@react-native/codegen 0.74.0 → 0.75.0-nightly-20240221-a1171f79f

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 (147) hide show
  1. package/lib/CodegenSchema.d.ts +10 -1
  2. package/lib/CodegenSchema.js.flow +2 -1
  3. package/lib/SchemaValidator.js.flow +2 -2
  4. package/lib/cli/combine/combine-js-to-schema-cli.js +59 -40
  5. package/lib/cli/combine/combine-js-to-schema-cli.js.flow +23 -39
  6. package/lib/cli/combine/combine-js-to-schema.js +49 -1
  7. package/lib/cli/combine/combine-js-to-schema.js.flow +59 -1
  8. package/lib/cli/combine/combine-schemas-cli.js +77 -0
  9. package/lib/cli/combine/combine-schemas-cli.js.flow +87 -0
  10. package/lib/cli/combine/combine-utils.js +3 -65
  11. package/lib/cli/combine/combine-utils.js.flow +7 -28
  12. package/lib/cli/parser/parser.js +1 -1
  13. package/lib/cli/parser/parser.js.flow +1 -1
  14. package/lib/generators/RNCodegen.d.ts +1 -0
  15. package/lib/generators/RNCodegen.js +58 -31
  16. package/lib/generators/RNCodegen.js.flow +52 -32
  17. package/lib/generators/TypeUtils/Cxx/index.js +17 -0
  18. package/lib/generators/TypeUtils/Cxx/index.js.flow +18 -0
  19. package/lib/generators/TypeUtils/Java/index.js +31 -0
  20. package/lib/generators/TypeUtils/Java/index.js.flow +27 -0
  21. package/lib/generators/TypeUtils/Objective-C/index.js +17 -0
  22. package/lib/generators/TypeUtils/Objective-C/index.js.flow +18 -0
  23. package/lib/generators/components/ComponentsGeneratorUtils.js +7 -7
  24. package/lib/generators/components/ComponentsGeneratorUtils.js.flow +8 -10
  25. package/lib/generators/components/ComponentsProviderUtils.js +55 -0
  26. package/lib/generators/components/ComponentsProviderUtils.js.flow +60 -0
  27. package/lib/generators/components/CppHelpers.js +7 -0
  28. package/lib/generators/components/CppHelpers.js.flow +14 -0
  29. package/lib/generators/components/GenerateComponentDescriptorCpp.js +89 -0
  30. package/lib/generators/components/GenerateComponentDescriptorCpp.js.flow +101 -0
  31. package/lib/generators/components/GenerateComponentDescriptorH.js +28 -12
  32. package/lib/generators/components/GenerateComponentDescriptorH.js.flow +20 -12
  33. package/lib/generators/components/GenerateComponentHObjCpp.js +15 -1
  34. package/lib/generators/components/GenerateComponentHObjCpp.js.flow +11 -2
  35. package/lib/generators/components/GenerateEventEmitterCpp.js +28 -15
  36. package/lib/generators/components/GenerateEventEmitterCpp.js.flow +16 -17
  37. package/lib/generators/components/GenerateEventEmitterH.js +20 -13
  38. package/lib/generators/components/GenerateEventEmitterH.js.flow +13 -15
  39. package/lib/generators/components/GeneratePropsCpp.js +17 -8
  40. package/lib/generators/components/GeneratePropsCpp.js.flow +13 -9
  41. package/lib/generators/components/GeneratePropsH.js +23 -16
  42. package/lib/generators/components/GeneratePropsH.js.flow +12 -16
  43. package/lib/generators/components/GeneratePropsJavaDelegate.js +11 -3
  44. package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +7 -4
  45. package/lib/generators/components/GeneratePropsJavaInterface.js +11 -3
  46. package/lib/generators/components/GeneratePropsJavaInterface.js.flow +6 -3
  47. package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +6 -6
  48. package/lib/generators/components/GeneratePropsJavaPojo/index.js +1 -1
  49. package/lib/generators/components/GeneratePropsJavaPojo/index.js.flow +1 -1
  50. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +1 -0
  51. package/lib/generators/components/GenerateShadowNodeCpp.js +19 -8
  52. package/lib/generators/components/GenerateShadowNodeCpp.js.flow +9 -8
  53. package/lib/generators/components/GenerateShadowNodeH.js +27 -11
  54. package/lib/generators/components/GenerateShadowNodeH.js.flow +11 -14
  55. package/lib/generators/components/GenerateStateCpp.js +19 -8
  56. package/lib/generators/components/GenerateStateCpp.js.flow +9 -8
  57. package/lib/generators/components/GenerateStateH.js +9 -5
  58. package/lib/generators/components/GenerateStateH.js.flow +3 -4
  59. package/lib/generators/components/GenerateTests.js +11 -5
  60. package/lib/generators/components/GenerateTests.js.flow +2 -2
  61. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js +16 -3
  62. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js.flow +18 -3
  63. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js +18 -3
  64. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js.flow +21 -3
  65. package/lib/generators/components/GenerateViewConfigJs.js +2 -2
  66. package/lib/generators/components/GenerateViewConfigJs.js.flow +2 -2
  67. package/lib/generators/components/JavaHelpers.js +8 -0
  68. package/lib/generators/components/JavaHelpers.js.flow +9 -0
  69. package/lib/generators/components/__test_fixtures__/fixtures.js +22 -0
  70. package/lib/generators/components/__test_fixtures__/fixtures.js.flow +22 -0
  71. package/lib/generators/modules/GenerateModuleCpp.js +14 -10
  72. package/lib/generators/modules/GenerateModuleCpp.js.flow +9 -10
  73. package/lib/generators/modules/GenerateModuleH.js +198 -72
  74. package/lib/generators/modules/GenerateModuleH.js.flow +186 -71
  75. package/lib/generators/modules/GenerateModuleJavaSpec.js +50 -57
  76. package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +45 -50
  77. package/lib/generators/modules/GenerateModuleJniCpp.js +16 -12
  78. package/lib/generators/modules/GenerateModuleJniCpp.js.flow +11 -12
  79. package/lib/generators/modules/GenerateModuleJniH.js +12 -5
  80. package/lib/generators/modules/GenerateModuleJniH.js.flow +8 -6
  81. package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js +5 -5
  82. package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js.flow +11 -12
  83. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js +23 -21
  84. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js.flow +19 -18
  85. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js +23 -21
  86. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js.flow +19 -18
  87. package/lib/generators/modules/GenerateModuleObjCpp/index.js +18 -20
  88. package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +11 -14
  89. package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js +40 -42
  90. package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +38 -44
  91. package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js +25 -27
  92. package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js.flow +26 -28
  93. package/lib/generators/modules/Utils.js +98 -0
  94. package/lib/generators/modules/Utils.js.flow +34 -2
  95. package/lib/generators/modules/__test_fixtures__/fixtures.js +685 -64
  96. package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +686 -64
  97. package/lib/parsers/error-utils.js +17 -17
  98. package/lib/parsers/error-utils.js.flow +10 -10
  99. package/lib/parsers/errors.js +10 -0
  100. package/lib/parsers/errors.js.flow +15 -1
  101. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +7 -1
  102. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +7 -1
  103. package/lib/parsers/flow/components/commands.js +24 -0
  104. package/lib/parsers/flow/components/commands.js.flow +45 -3
  105. package/lib/parsers/flow/components/componentsUtils.js +5 -4
  106. package/lib/parsers/flow/components/componentsUtils.js.flow +4 -3
  107. package/lib/parsers/flow/components/events.js +7 -7
  108. package/lib/parsers/flow/components/events.js.flow +7 -7
  109. package/lib/parsers/flow/components/index.js +8 -8
  110. package/lib/parsers/flow/components/index.js.flow +3 -3
  111. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +13 -0
  112. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +13 -0
  113. package/lib/parsers/flow/modules/index.js +20 -19
  114. package/lib/parsers/flow/modules/index.js.flow +10 -11
  115. package/lib/parsers/flow/parseFlowAndThrowErrors.js +105 -0
  116. package/lib/parsers/flow/parseFlowAndThrowErrors.js.flow +41 -0
  117. package/lib/parsers/flow/parser.js +24 -25
  118. package/lib/parsers/flow/parser.js.flow +27 -36
  119. package/lib/parsers/flow/utils.js.flow +1 -1
  120. package/lib/parsers/parser.js.flow +12 -10
  121. package/lib/parsers/parserMock.js +11 -12
  122. package/lib/parsers/parserMock.js.flow +25 -28
  123. package/lib/parsers/parsers-commons.js +85 -36
  124. package/lib/parsers/parsers-commons.js.flow +71 -37
  125. package/lib/parsers/parsers-primitives.js +17 -17
  126. package/lib/parsers/parsers-primitives.js.flow +14 -16
  127. package/lib/parsers/schema.js.flow +3 -3
  128. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +8 -1
  129. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +8 -1
  130. package/lib/parsers/typescript/components/commands.js +23 -15
  131. package/lib/parsers/typescript/components/commands.js.flow +24 -16
  132. package/lib/parsers/typescript/components/componentsUtils.js +34 -20
  133. package/lib/parsers/typescript/components/componentsUtils.js.flow +36 -19
  134. package/lib/parsers/typescript/components/events.js +22 -22
  135. package/lib/parsers/typescript/components/events.js.flow +11 -10
  136. package/lib/parsers/typescript/components/extends.js.flow +1 -0
  137. package/lib/parsers/typescript/components/index.js +10 -10
  138. package/lib/parsers/typescript/components/index.js.flow +4 -4
  139. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +13 -0
  140. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +13 -0
  141. package/lib/parsers/typescript/modules/index.js +25 -20
  142. package/lib/parsers/typescript/modules/index.js.flow +16 -14
  143. package/lib/parsers/typescript/parser.js +25 -26
  144. package/lib/parsers/typescript/parser.js.flow +23 -27
  145. package/lib/parsers/utils.js +5 -0
  146. package/lib/parsers/utils.js.flow +6 -1
  147. package/package.json +8 -6
@@ -10,14 +10,17 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const {getSafePropertyName, getNamespacedStructName} = require('../Utils');
14
- const {capitalize} = require('../../../Utils');
15
-
16
13
  import type {Nullable} from '../../../../CodegenSchema';
17
- import type {StructTypeAnnotation, ConstantsStruct} from '../StructCollector';
14
+ import type {ConstantsStruct, StructTypeAnnotation} from '../StructCollector';
18
15
  import type {StructSerilizationOutput} from './serializeStruct';
19
16
 
20
17
  const {unwrapNullable} = require('../../../../parsers/parsers-commons');
18
+ const {wrapOptional: wrapCxxOptional} = require('../../../TypeUtils/Cxx');
19
+ const {
20
+ wrapOptional: wrapObjCOptional,
21
+ } = require('../../../TypeUtils/Objective-C');
22
+ const {capitalize} = require('../../../Utils');
23
+ const {getNamespacedStructName, getSafePropertyName} = require('../Utils');
21
24
 
22
25
  const StructTemplate = ({
23
26
  hasteModuleName,
@@ -79,15 +82,12 @@ function toObjCType(
79
82
  ): string {
80
83
  const [typeAnnotation, nullable] = unwrapNullable(nullableTypeAnnotation);
81
84
  const isRequired = !nullable && !isOptional;
82
- const wrapOptional = (type: string) => {
83
- return isRequired ? type : `std::optional<${type}>`;
84
- };
85
85
 
86
86
  switch (typeAnnotation.type) {
87
87
  case 'ReservedTypeAnnotation':
88
88
  switch (typeAnnotation.name) {
89
89
  case 'RootTag':
90
- return wrapOptional('double');
90
+ return wrapCxxOptional('double', isRequired);
91
91
  default:
92
92
  (typeAnnotation.name: empty);
93
93
  throw new Error(`Unknown prop type, found: ${typeAnnotation.name}"`);
@@ -95,19 +95,19 @@ function toObjCType(
95
95
  case 'StringTypeAnnotation':
96
96
  return 'NSString *';
97
97
  case 'NumberTypeAnnotation':
98
- return wrapOptional('double');
98
+ return wrapCxxOptional('double', isRequired);
99
99
  case 'FloatTypeAnnotation':
100
- return wrapOptional('double');
100
+ return wrapCxxOptional('double', isRequired);
101
101
  case 'Int32TypeAnnotation':
102
- return wrapOptional('double');
102
+ return wrapCxxOptional('double', isRequired);
103
103
  case 'DoubleTypeAnnotation':
104
- return wrapOptional('double');
104
+ return wrapCxxOptional('double', isRequired);
105
105
  case 'BooleanTypeAnnotation':
106
- return wrapOptional('bool');
106
+ return wrapCxxOptional('bool', isRequired);
107
107
  case 'EnumDeclaration':
108
108
  switch (typeAnnotation.memberType) {
109
109
  case 'NumberTypeAnnotation':
110
- return wrapOptional('double');
110
+ return wrapCxxOptional('double', isRequired);
111
111
  case 'StringTypeAnnotation':
112
112
  return 'NSString *';
113
113
  default:
@@ -116,17 +116,18 @@ function toObjCType(
116
116
  );
117
117
  }
118
118
  case 'GenericObjectTypeAnnotation':
119
- return isRequired ? 'id<NSObject> ' : 'id<NSObject> _Nullable ';
119
+ return wrapObjCOptional('id<NSObject>', isRequired);
120
120
  case 'ArrayTypeAnnotation':
121
121
  if (typeAnnotation.elementType == null) {
122
- return isRequired ? 'id<NSObject> ' : 'id<NSObject> _Nullable ';
122
+ return wrapObjCOptional('id<NSObject>', isRequired);
123
123
  }
124
124
 
125
- return wrapOptional(
125
+ return wrapCxxOptional(
126
126
  `std::vector<${toObjCType(
127
127
  hasteModuleName,
128
128
  typeAnnotation.elementType,
129
129
  )}>`,
130
+ isRequired,
130
131
  );
131
132
  case 'TypeAliasTypeAnnotation':
132
133
  const structName = capitalize(typeAnnotation.name);
@@ -134,7 +135,7 @@ function toObjCType(
134
135
  hasteModuleName,
135
136
  structName,
136
137
  );
137
- return wrapOptional(`${namespacedStructName}::Builder`);
138
+ return wrapCxxOptional(`${namespacedStructName}::Builder`, isRequired);
138
139
  default:
139
140
  (typeAnnotation.type: empty);
140
141
  throw new Error(
@@ -78,13 +78,17 @@ function _iterableToArrayLimit(arr, i) {
78
78
  function _arrayWithHoles(arr) {
79
79
  if (Array.isArray(arr)) return arr;
80
80
  }
81
- const _require = require('../Utils'),
82
- getSafePropertyName = _require.getSafePropertyName,
83
- getNamespacedStructName = _require.getNamespacedStructName;
84
- const _require2 = require('../../../Utils'),
85
- capitalize = _require2.capitalize;
86
- const _require3 = require('../../../../parsers/parsers-commons'),
87
- unwrapNullable = _require3.unwrapNullable;
81
+ const _require = require('../../../../parsers/parsers-commons'),
82
+ unwrapNullable = _require.unwrapNullable;
83
+ const _require2 = require('../../../TypeUtils/Cxx'),
84
+ wrapCxxOptional = _require2.wrapOptional;
85
+ const _require3 = require('../../../TypeUtils/Objective-C'),
86
+ wrapObjCOptional = _require3.wrapOptional;
87
+ const _require4 = require('../../../Utils'),
88
+ capitalize = _require4.capitalize;
89
+ const _require5 = require('../Utils'),
90
+ getNamespacedStructName = _require5.getNamespacedStructName,
91
+ getSafePropertyName = _require5.getSafePropertyName;
88
92
  const StructTemplate = ({
89
93
  hasteModuleName,
90
94
  structName,
@@ -126,14 +130,11 @@ function toObjCType(
126
130
  typeAnnotation = _unwrapNullable2[0],
127
131
  nullable = _unwrapNullable2[1];
128
132
  const isRequired = !nullable && !isOptional;
129
- const wrapOptional = type => {
130
- return isRequired ? type : `std::optional<${type}>`;
131
- };
132
133
  switch (typeAnnotation.type) {
133
134
  case 'ReservedTypeAnnotation':
134
135
  switch (typeAnnotation.name) {
135
136
  case 'RootTag':
136
- return wrapOptional('double');
137
+ return wrapCxxOptional('double', isRequired);
137
138
  default:
138
139
  typeAnnotation.name;
139
140
  throw new Error(`Unknown prop type, found: ${typeAnnotation.name}"`);
@@ -141,19 +142,19 @@ function toObjCType(
141
142
  case 'StringTypeAnnotation':
142
143
  return 'NSString *';
143
144
  case 'NumberTypeAnnotation':
144
- return wrapOptional('double');
145
+ return wrapCxxOptional('double', isRequired);
145
146
  case 'FloatTypeAnnotation':
146
- return wrapOptional('double');
147
+ return wrapCxxOptional('double', isRequired);
147
148
  case 'Int32TypeAnnotation':
148
- return wrapOptional('double');
149
+ return wrapCxxOptional('double', isRequired);
149
150
  case 'DoubleTypeAnnotation':
150
- return wrapOptional('double');
151
+ return wrapCxxOptional('double', isRequired);
151
152
  case 'BooleanTypeAnnotation':
152
- return wrapOptional('bool');
153
+ return wrapCxxOptional('bool', isRequired);
153
154
  case 'EnumDeclaration':
154
155
  switch (typeAnnotation.memberType) {
155
156
  case 'NumberTypeAnnotation':
156
- return wrapOptional('double');
157
+ return wrapCxxOptional('double', isRequired);
157
158
  case 'StringTypeAnnotation':
158
159
  return 'NSString *';
159
160
  default:
@@ -162,16 +163,17 @@ function toObjCType(
162
163
  );
163
164
  }
164
165
  case 'GenericObjectTypeAnnotation':
165
- return isRequired ? 'id<NSObject> ' : 'id<NSObject> _Nullable';
166
+ return wrapObjCOptional('id<NSObject>', isRequired);
166
167
  case 'ArrayTypeAnnotation':
167
168
  if (typeAnnotation.elementType == null) {
168
- return isRequired ? 'id<NSObject> ' : 'id<NSObject> _Nullable';
169
+ return wrapObjCOptional('id<NSObject>', isRequired);
169
170
  }
170
- return wrapOptional(
171
+ return wrapCxxOptional(
171
172
  `facebook::react::LazyVector<${toObjCType(
172
173
  hasteModuleName,
173
174
  typeAnnotation.elementType,
174
175
  )}>`,
176
+ isRequired,
175
177
  );
176
178
  case 'TypeAliasTypeAnnotation':
177
179
  const structName = capitalize(typeAnnotation.name);
@@ -179,7 +181,7 @@ function toObjCType(
179
181
  hasteModuleName,
180
182
  structName,
181
183
  );
182
- return wrapOptional(namespacedStructName);
184
+ return wrapCxxOptional(namespacedStructName, isRequired);
183
185
  default:
184
186
  typeAnnotation.type;
185
187
  throw new Error(
@@ -10,14 +10,17 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const {getSafePropertyName, getNamespacedStructName} = require('../Utils');
14
- const {capitalize} = require('../../../Utils');
15
-
16
13
  import type {Nullable} from '../../../../CodegenSchema';
17
- import type {StructTypeAnnotation, RegularStruct} from '../StructCollector';
14
+ import type {RegularStruct, StructTypeAnnotation} from '../StructCollector';
18
15
  import type {StructSerilizationOutput} from './serializeStruct';
19
16
 
20
17
  const {unwrapNullable} = require('../../../../parsers/parsers-commons');
18
+ const {wrapOptional: wrapCxxOptional} = require('../../../TypeUtils/Cxx');
19
+ const {
20
+ wrapOptional: wrapObjCOptional,
21
+ } = require('../../../TypeUtils/Objective-C');
22
+ const {capitalize} = require('../../../Utils');
23
+ const {getNamespacedStructName, getSafePropertyName} = require('../Utils');
21
24
 
22
25
  const StructTemplate = ({
23
26
  hasteModuleName,
@@ -70,15 +73,12 @@ function toObjCType(
70
73
  ): string {
71
74
  const [typeAnnotation, nullable] = unwrapNullable(nullableTypeAnnotation);
72
75
  const isRequired = !nullable && !isOptional;
73
- const wrapOptional = (type: string) => {
74
- return isRequired ? type : `std::optional<${type}>`;
75
- };
76
76
 
77
77
  switch (typeAnnotation.type) {
78
78
  case 'ReservedTypeAnnotation':
79
79
  switch (typeAnnotation.name) {
80
80
  case 'RootTag':
81
- return wrapOptional('double');
81
+ return wrapCxxOptional('double', isRequired);
82
82
  default:
83
83
  (typeAnnotation.name: empty);
84
84
  throw new Error(`Unknown prop type, found: ${typeAnnotation.name}"`);
@@ -86,19 +86,19 @@ function toObjCType(
86
86
  case 'StringTypeAnnotation':
87
87
  return 'NSString *';
88
88
  case 'NumberTypeAnnotation':
89
- return wrapOptional('double');
89
+ return wrapCxxOptional('double', isRequired);
90
90
  case 'FloatTypeAnnotation':
91
- return wrapOptional('double');
91
+ return wrapCxxOptional('double', isRequired);
92
92
  case 'Int32TypeAnnotation':
93
- return wrapOptional('double');
93
+ return wrapCxxOptional('double', isRequired);
94
94
  case 'DoubleTypeAnnotation':
95
- return wrapOptional('double');
95
+ return wrapCxxOptional('double', isRequired);
96
96
  case 'BooleanTypeAnnotation':
97
- return wrapOptional('bool');
97
+ return wrapCxxOptional('bool', isRequired);
98
98
  case 'EnumDeclaration':
99
99
  switch (typeAnnotation.memberType) {
100
100
  case 'NumberTypeAnnotation':
101
- return wrapOptional('double');
101
+ return wrapCxxOptional('double', isRequired);
102
102
  case 'StringTypeAnnotation':
103
103
  return 'NSString *';
104
104
  default:
@@ -107,16 +107,17 @@ function toObjCType(
107
107
  );
108
108
  }
109
109
  case 'GenericObjectTypeAnnotation':
110
- return isRequired ? 'id<NSObject> ' : 'id<NSObject> _Nullable';
110
+ return wrapObjCOptional('id<NSObject>', isRequired);
111
111
  case 'ArrayTypeAnnotation':
112
112
  if (typeAnnotation.elementType == null) {
113
- return isRequired ? 'id<NSObject> ' : 'id<NSObject> _Nullable';
113
+ return wrapObjCOptional('id<NSObject>', isRequired);
114
114
  }
115
- return wrapOptional(
115
+ return wrapCxxOptional(
116
116
  `facebook::react::LazyVector<${toObjCType(
117
117
  hasteModuleName,
118
118
  typeAnnotation.elementType,
119
119
  )}>`,
120
+ isRequired,
120
121
  );
121
122
  case 'TypeAliasTypeAnnotation':
122
123
  const structName = capitalize(typeAnnotation.name);
@@ -124,7 +125,7 @@ function toObjCType(
124
125
  hasteModuleName,
125
126
  structName,
126
127
  );
127
- return wrapOptional(namespacedStructName);
128
+ return wrapCxxOptional(namespacedStructName, isRequired);
128
129
  default:
129
130
  (typeAnnotation.type: empty);
130
131
  throw new Error(
@@ -13,14 +13,14 @@
13
13
  const _require = require('../Utils'),
14
14
  createAliasResolver = _require.createAliasResolver,
15
15
  getModules = _require.getModules;
16
- const _require2 = require('./StructCollector'),
17
- StructCollector = _require2.StructCollector;
18
- const _require3 = require('./header/serializeStruct'),
19
- serializeStruct = _require3.serializeStruct;
20
- const _require4 = require('./serializeMethod'),
21
- serializeMethod = _require4.serializeMethod;
22
- const _require5 = require('./source/serializeModule'),
23
- serializeModuleSource = _require5.serializeModuleSource;
16
+ const _require2 = require('./header/serializeStruct'),
17
+ serializeStruct = _require2.serializeStruct;
18
+ const _require3 = require('./serializeMethod'),
19
+ serializeMethod = _require3.serializeMethod;
20
+ const _require4 = require('./source/serializeModule'),
21
+ serializeModuleSource = _require4.serializeModuleSource;
22
+ const _require5 = require('./StructCollector'),
23
+ StructCollector = _require5.StructCollector;
24
24
  const ModuleDeclarationTemplate = ({
25
25
  hasteModuleName,
26
26
  structDeclarations,
@@ -31,17 +31,15 @@ const ModuleDeclarationTemplate = ({
31
31
  ${protocolMethods}
32
32
 
33
33
  @end
34
- namespace facebook {
35
- namespace react {
36
- /**
37
- * ObjC++ class for module '${hasteModuleName}'
38
- */
39
- class JSI_EXPORT ${hasteModuleName}SpecJSI : public ObjCTurboModule {
40
- public:
41
- ${hasteModuleName}SpecJSI(const ObjCTurboModule::InitParams &params);
42
- };
43
- } // namespace react
44
- } // namespace facebook`;
34
+ namespace facebook::react {
35
+ /**
36
+ * ObjC++ class for module '${hasteModuleName}'
37
+ */
38
+ class JSI_EXPORT ${hasteModuleName}SpecJSI : public ObjCTurboModule {
39
+ public:
40
+ ${hasteModuleName}SpecJSI(const ObjCTurboModule::InitParams &params);
41
+ };
42
+ } // namespace facebook::react`;
45
43
  const HeaderFileTemplate = ({
46
44
  moduleDeclarations,
47
45
  structInlineMethods,
@@ -98,7 +96,7 @@ const SourceFileTemplate = ({headerFileName, moduleImplementations}) => `/**
98
96
  ${moduleImplementations}
99
97
  `;
100
98
  module.exports = {
101
- generate(libraryName, schema, packageName, assumeNonnull) {
99
+ generate(libraryName, schema, packageName, assumeNonnull, headerPrefix) {
102
100
  const nativeModules = getModules(schema);
103
101
  const moduleDeclarations = [];
104
102
  const structInlineMethods = [];
@@ -10,16 +10,14 @@
10
10
 
11
11
  'use strict';
12
12
  import type {NativeModulePropertyShape} from '../../../CodegenSchema';
13
-
14
13
  import type {SchemaType} from '../../../CodegenSchema';
15
14
  import type {MethodSerializationOutput} from './serializeMethod';
16
15
 
17
16
  const {createAliasResolver, getModules} = require('../Utils');
18
-
19
- const {StructCollector} = require('./StructCollector');
20
17
  const {serializeStruct} = require('./header/serializeStruct');
21
18
  const {serializeMethod} = require('./serializeMethod');
22
19
  const {serializeModuleSource} = require('./source/serializeModule');
20
+ const {StructCollector} = require('./StructCollector');
23
21
 
24
22
  type FilesOutput = Map<string, string>;
25
23
 
@@ -37,17 +35,15 @@ const ModuleDeclarationTemplate = ({
37
35
  ${protocolMethods}
38
36
 
39
37
  @end
40
- namespace facebook {
41
- namespace react {
42
- /**
43
- * ObjC++ class for module '${hasteModuleName}'
44
- */
45
- class JSI_EXPORT ${hasteModuleName}SpecJSI : public ObjCTurboModule {
46
- public:
47
- ${hasteModuleName}SpecJSI(const ObjCTurboModule::InitParams &params);
48
- };
49
- } // namespace react
50
- } // namespace facebook`;
38
+ namespace facebook::react {
39
+ /**
40
+ * ObjC++ class for module '${hasteModuleName}'
41
+ */
42
+ class JSI_EXPORT ${hasteModuleName}SpecJSI : public ObjCTurboModule {
43
+ public:
44
+ ${hasteModuleName}SpecJSI(const ObjCTurboModule::InitParams &params);
45
+ };
46
+ } // namespace facebook::react`;
51
47
 
52
48
  const HeaderFileTemplate = ({
53
49
  moduleDeclarations,
@@ -122,6 +118,7 @@ module.exports = {
122
118
  schema: SchemaType,
123
119
  packageName?: string,
124
120
  assumeNonnull: boolean,
121
+ headerPrefix?: string,
125
122
  ): FilesOutput {
126
123
  const nativeModules = getModules(schema);
127
124
 
@@ -78,14 +78,16 @@ function _iterableToArrayLimit(arr, i) {
78
78
  function _arrayWithHoles(arr) {
79
79
  if (Array.isArray(arr)) return arr;
80
80
  }
81
+ const _require = require('../../../parsers/parsers-commons'),
82
+ unwrapNullable = _require.unwrapNullable,
83
+ wrapNullable = _require.wrapNullable;
84
+ const _require2 = require('../../TypeUtils/Objective-C'),
85
+ wrapOptional = _require2.wrapOptional;
86
+ const _require3 = require('../../Utils'),
87
+ capitalize = _require3.capitalize;
88
+ const _require4 = require('./Utils'),
89
+ getNamespacedStructName = _require4.getNamespacedStructName;
81
90
  const invariant = require('invariant');
82
- const _require = require('./Utils'),
83
- getNamespacedStructName = _require.getNamespacedStructName;
84
- const _require2 = require('../../Utils'),
85
- capitalize = _require2.capitalize;
86
- const _require3 = require('../../../parsers/parsers-commons'),
87
- wrapNullable = _require3.wrapNullable,
88
- unwrapNullable = _require3.unwrapNullable;
89
91
  const ProtocolMethodTemplate = ({returnObjCType, methodName, params}) =>
90
92
  `- (${returnObjCType})${methodName}${params};`;
91
93
  function serializeMethod(
@@ -226,10 +228,7 @@ function getParamObjCType(
226
228
  _unwrapNullable8 = _slicedToArray(_unwrapNullable7, 2),
227
229
  typeAnnotation = _unwrapNullable8[0],
228
230
  nullable = _unwrapNullable8[1];
229
- const notRequired = param.optional || nullable;
230
- function wrapIntoNullableIfNeeded(generatedType) {
231
- return nullable ? `${generatedType} _Nullable` : generatedType;
232
- }
231
+ const isRequired = !param.optional && !nullable;
233
232
  const isStruct = objCType => ({
234
233
  isStruct: true,
235
234
  objCType,
@@ -255,7 +254,7 @@ function getParamObjCType(
255
254
  * type Animal = {};
256
255
  * Array<Animal> => NSArray<JS::NativeSampleTurboModule::Animal *>, etc.
257
256
  */
258
- return notStruct(wrapIntoNullableIfNeeded('NSArray *'));
257
+ return notStruct(wrapOptional('NSArray *', !nullable));
259
258
  }
260
259
  }
261
260
  const _unwrapNullable9 = unwrapNullable(
@@ -285,7 +284,7 @@ function getParamObjCType(
285
284
  case 'ReservedTypeAnnotation':
286
285
  switch (structTypeAnnotation.name) {
287
286
  case 'RootTag':
288
- return notStruct(notRequired ? 'NSNumber *' : 'double');
287
+ return notStruct(isRequired ? 'double' : 'NSNumber *');
289
288
  default:
290
289
  structTypeAnnotation.name;
291
290
  throw new Error(
@@ -293,30 +292,30 @@ function getParamObjCType(
293
292
  );
294
293
  }
295
294
  case 'StringTypeAnnotation':
296
- return notStruct(wrapIntoNullableIfNeeded('NSString *'));
295
+ return notStruct(wrapOptional('NSString *', !nullable));
297
296
  case 'NumberTypeAnnotation':
298
- return notStruct(notRequired ? 'NSNumber *' : 'double');
297
+ return notStruct(isRequired ? 'double' : 'NSNumber *');
299
298
  case 'FloatTypeAnnotation':
300
- return notStruct(notRequired ? 'NSNumber *' : 'double');
299
+ return notStruct(isRequired ? 'float' : 'NSNumber *');
301
300
  case 'DoubleTypeAnnotation':
302
- return notStruct(notRequired ? 'NSNumber *' : 'double');
301
+ return notStruct(isRequired ? 'double' : 'NSNumber *');
303
302
  case 'Int32TypeAnnotation':
304
- return notStruct(notRequired ? 'NSNumber *' : 'double');
303
+ return notStruct(isRequired ? 'NSInteger' : 'NSNumber *');
305
304
  case 'BooleanTypeAnnotation':
306
- return notStruct(notRequired ? 'NSNumber *' : 'BOOL');
305
+ return notStruct(isRequired ? 'BOOL' : 'NSNumber *');
307
306
  case 'EnumDeclaration':
308
307
  switch (typeAnnotation.memberType) {
309
308
  case 'NumberTypeAnnotation':
310
- return notStruct(notRequired ? 'NSNumber *' : 'double');
309
+ return notStruct(isRequired ? 'double' : 'NSNumber *');
311
310
  case 'StringTypeAnnotation':
312
- return notStruct(wrapIntoNullableIfNeeded('NSString *'));
311
+ return notStruct(wrapOptional('NSString *', !nullable));
313
312
  default:
314
313
  throw new Error(
315
314
  `Unsupported enum type for param "${paramName}" in ${methodName}. Found: ${typeAnnotation.type}`,
316
315
  );
317
316
  }
318
317
  case 'GenericObjectTypeAnnotation':
319
- return notStruct(wrapIntoNullableIfNeeded('NSDictionary *'));
318
+ return notStruct(wrapOptional('NSDictionary *', !nullable));
320
319
  default:
321
320
  structTypeAnnotation.type;
322
321
  throw new Error(
@@ -329,32 +328,31 @@ function getReturnObjCType(methodName, nullableTypeAnnotation) {
329
328
  _unwrapNullable12 = _slicedToArray(_unwrapNullable11, 2),
330
329
  typeAnnotation = _unwrapNullable12[0],
331
330
  nullable = _unwrapNullable12[1];
332
- function wrapIntoNullableIfNeeded(generatedType) {
333
- return nullable ? `${generatedType} _Nullable` : generatedType;
334
- }
331
+ const isRequired = !nullable;
335
332
  switch (typeAnnotation.type) {
336
333
  case 'VoidTypeAnnotation':
337
334
  return 'void';
338
335
  case 'PromiseTypeAnnotation':
339
336
  return 'void';
340
337
  case 'ObjectTypeAnnotation':
341
- return wrapIntoNullableIfNeeded('NSDictionary *');
338
+ return wrapOptional('NSDictionary *', isRequired);
342
339
  case 'TypeAliasTypeAnnotation':
343
- return wrapIntoNullableIfNeeded('NSDictionary *');
340
+ return wrapOptional('NSDictionary *', isRequired);
344
341
  case 'ArrayTypeAnnotation':
345
342
  if (typeAnnotation.elementType == null) {
346
- return wrapIntoNullableIfNeeded('NSArray<id<NSObject>> *');
343
+ return wrapOptional('NSArray<id<NSObject>> *', isRequired);
347
344
  }
348
- return wrapIntoNullableIfNeeded(
345
+ return wrapOptional(
349
346
  `NSArray<${getReturnObjCType(
350
347
  methodName,
351
348
  typeAnnotation.elementType,
352
349
  )}> *`,
350
+ isRequired,
353
351
  );
354
352
  case 'ReservedTypeAnnotation':
355
353
  switch (typeAnnotation.name) {
356
354
  case 'RootTag':
357
- return wrapIntoNullableIfNeeded('NSNumber *');
355
+ return wrapOptional('NSNumber *', isRequired);
358
356
  default:
359
357
  typeAnnotation.name;
360
358
  throw new Error(
@@ -364,23 +362,23 @@ function getReturnObjCType(methodName, nullableTypeAnnotation) {
364
362
  case 'StringTypeAnnotation':
365
363
  // TODO: Can NSString * returns not be _Nullable?
366
364
  // In the legacy codegen, we don't surround NSSTring * with _Nullable
367
- return wrapIntoNullableIfNeeded('NSString *');
365
+ return wrapOptional('NSString *', isRequired);
368
366
  case 'NumberTypeAnnotation':
369
- return wrapIntoNullableIfNeeded('NSNumber *');
367
+ return wrapOptional('NSNumber *', isRequired);
370
368
  case 'FloatTypeAnnotation':
371
- return wrapIntoNullableIfNeeded('NSNumber *');
369
+ return wrapOptional('NSNumber *', isRequired);
372
370
  case 'DoubleTypeAnnotation':
373
- return wrapIntoNullableIfNeeded('NSNumber *');
371
+ return wrapOptional('NSNumber *', isRequired);
374
372
  case 'Int32TypeAnnotation':
375
- return wrapIntoNullableIfNeeded('NSNumber *');
373
+ return wrapOptional('NSNumber *', isRequired);
376
374
  case 'BooleanTypeAnnotation':
377
- return wrapIntoNullableIfNeeded('NSNumber *');
375
+ return wrapOptional('NSNumber *', isRequired);
378
376
  case 'EnumDeclaration':
379
377
  switch (typeAnnotation.memberType) {
380
378
  case 'NumberTypeAnnotation':
381
- return wrapIntoNullableIfNeeded('NSNumber *');
379
+ return wrapOptional('NSNumber *', isRequired);
382
380
  case 'StringTypeAnnotation':
383
- return wrapIntoNullableIfNeeded('NSString *');
381
+ return wrapOptional('NSString *', isRequired);
384
382
  default:
385
383
  throw new Error(
386
384
  `Unsupported enum return type for ${methodName}. Found: ${typeAnnotation.type}`,
@@ -389,20 +387,20 @@ function getReturnObjCType(methodName, nullableTypeAnnotation) {
389
387
  case 'UnionTypeAnnotation':
390
388
  switch (typeAnnotation.memberType) {
391
389
  case 'NumberTypeAnnotation':
392
- return wrapIntoNullableIfNeeded('NSNumber *');
390
+ return wrapOptional('NSNumber *', isRequired);
393
391
  case 'ObjectTypeAnnotation':
394
- return wrapIntoNullableIfNeeded('NSDictionary *');
392
+ return wrapOptional('NSDictionary *', isRequired);
395
393
  case 'StringTypeAnnotation':
396
394
  // TODO: Can NSString * returns not be _Nullable?
397
395
  // In the legacy codegen, we don't surround NSSTring * with _Nullable
398
- return wrapIntoNullableIfNeeded('NSString *');
396
+ return wrapOptional('NSString *', isRequired);
399
397
  default:
400
398
  throw new Error(
401
399
  `Unsupported union return type for ${methodName}, found: ${typeAnnotation.memberType}"`,
402
400
  );
403
401
  }
404
402
  case 'GenericObjectTypeAnnotation':
405
- return wrapIntoNullableIfNeeded('NSDictionary *');
403
+ return wrapOptional('NSDictionary *', isRequired);
406
404
  default:
407
405
  typeAnnotation.type;
408
406
  throw new Error(