@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.
- package/lib/CodegenSchema.d.ts +10 -1
- package/lib/CodegenSchema.js.flow +2 -1
- package/lib/SchemaValidator.js.flow +2 -2
- package/lib/cli/combine/combine-js-to-schema-cli.js +59 -40
- package/lib/cli/combine/combine-js-to-schema-cli.js.flow +23 -39
- package/lib/cli/combine/combine-js-to-schema.js +49 -1
- package/lib/cli/combine/combine-js-to-schema.js.flow +59 -1
- package/lib/cli/combine/combine-schemas-cli.js +77 -0
- package/lib/cli/combine/combine-schemas-cli.js.flow +87 -0
- package/lib/cli/combine/combine-utils.js +3 -65
- package/lib/cli/combine/combine-utils.js.flow +7 -28
- package/lib/cli/parser/parser.js +1 -1
- package/lib/cli/parser/parser.js.flow +1 -1
- package/lib/generators/RNCodegen.d.ts +1 -0
- package/lib/generators/RNCodegen.js +58 -31
- package/lib/generators/RNCodegen.js.flow +52 -32
- package/lib/generators/TypeUtils/Cxx/index.js +17 -0
- package/lib/generators/TypeUtils/Cxx/index.js.flow +18 -0
- package/lib/generators/TypeUtils/Java/index.js +31 -0
- package/lib/generators/TypeUtils/Java/index.js.flow +27 -0
- package/lib/generators/TypeUtils/Objective-C/index.js +17 -0
- package/lib/generators/TypeUtils/Objective-C/index.js.flow +18 -0
- package/lib/generators/components/ComponentsGeneratorUtils.js +7 -7
- package/lib/generators/components/ComponentsGeneratorUtils.js.flow +8 -10
- package/lib/generators/components/ComponentsProviderUtils.js +55 -0
- package/lib/generators/components/ComponentsProviderUtils.js.flow +60 -0
- package/lib/generators/components/CppHelpers.js +7 -0
- package/lib/generators/components/CppHelpers.js.flow +14 -0
- package/lib/generators/components/GenerateComponentDescriptorCpp.js +89 -0
- package/lib/generators/components/GenerateComponentDescriptorCpp.js.flow +101 -0
- package/lib/generators/components/GenerateComponentDescriptorH.js +28 -12
- package/lib/generators/components/GenerateComponentDescriptorH.js.flow +20 -12
- package/lib/generators/components/GenerateComponentHObjCpp.js +15 -1
- package/lib/generators/components/GenerateComponentHObjCpp.js.flow +11 -2
- package/lib/generators/components/GenerateEventEmitterCpp.js +28 -15
- package/lib/generators/components/GenerateEventEmitterCpp.js.flow +16 -17
- package/lib/generators/components/GenerateEventEmitterH.js +20 -13
- package/lib/generators/components/GenerateEventEmitterH.js.flow +13 -15
- package/lib/generators/components/GeneratePropsCpp.js +17 -8
- package/lib/generators/components/GeneratePropsCpp.js.flow +13 -9
- package/lib/generators/components/GeneratePropsH.js +23 -16
- package/lib/generators/components/GeneratePropsH.js.flow +12 -16
- package/lib/generators/components/GeneratePropsJavaDelegate.js +11 -3
- package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +7 -4
- package/lib/generators/components/GeneratePropsJavaInterface.js +11 -3
- package/lib/generators/components/GeneratePropsJavaInterface.js.flow +6 -3
- package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +6 -6
- package/lib/generators/components/GeneratePropsJavaPojo/index.js +1 -1
- package/lib/generators/components/GeneratePropsJavaPojo/index.js.flow +1 -1
- package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +1 -0
- package/lib/generators/components/GenerateShadowNodeCpp.js +19 -8
- package/lib/generators/components/GenerateShadowNodeCpp.js.flow +9 -8
- package/lib/generators/components/GenerateShadowNodeH.js +27 -11
- package/lib/generators/components/GenerateShadowNodeH.js.flow +11 -14
- package/lib/generators/components/GenerateStateCpp.js +19 -8
- package/lib/generators/components/GenerateStateCpp.js.flow +9 -8
- package/lib/generators/components/GenerateStateH.js +9 -5
- package/lib/generators/components/GenerateStateH.js.flow +3 -4
- package/lib/generators/components/GenerateTests.js +11 -5
- package/lib/generators/components/GenerateTests.js.flow +2 -2
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js +16 -3
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js.flow +18 -3
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js +18 -3
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js.flow +21 -3
- package/lib/generators/components/GenerateViewConfigJs.js +2 -2
- package/lib/generators/components/GenerateViewConfigJs.js.flow +2 -2
- package/lib/generators/components/JavaHelpers.js +8 -0
- package/lib/generators/components/JavaHelpers.js.flow +9 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js +22 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js.flow +22 -0
- package/lib/generators/modules/GenerateModuleCpp.js +14 -10
- package/lib/generators/modules/GenerateModuleCpp.js.flow +9 -10
- package/lib/generators/modules/GenerateModuleH.js +198 -72
- package/lib/generators/modules/GenerateModuleH.js.flow +186 -71
- package/lib/generators/modules/GenerateModuleJavaSpec.js +50 -57
- package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +45 -50
- package/lib/generators/modules/GenerateModuleJniCpp.js +16 -12
- package/lib/generators/modules/GenerateModuleJniCpp.js.flow +11 -12
- package/lib/generators/modules/GenerateModuleJniH.js +12 -5
- package/lib/generators/modules/GenerateModuleJniH.js.flow +8 -6
- package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js +5 -5
- package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js.flow +11 -12
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js +23 -21
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js.flow +19 -18
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js +23 -21
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js.flow +19 -18
- package/lib/generators/modules/GenerateModuleObjCpp/index.js +18 -20
- package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +11 -14
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js +40 -42
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +38 -44
- package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js +25 -27
- package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js.flow +26 -28
- package/lib/generators/modules/Utils.js +98 -0
- package/lib/generators/modules/Utils.js.flow +34 -2
- package/lib/generators/modules/__test_fixtures__/fixtures.js +685 -64
- package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +686 -64
- package/lib/parsers/error-utils.js +17 -17
- package/lib/parsers/error-utils.js.flow +10 -10
- package/lib/parsers/errors.js +10 -0
- package/lib/parsers/errors.js.flow +15 -1
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +7 -1
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +7 -1
- package/lib/parsers/flow/components/commands.js +24 -0
- package/lib/parsers/flow/components/commands.js.flow +45 -3
- package/lib/parsers/flow/components/componentsUtils.js +5 -4
- package/lib/parsers/flow/components/componentsUtils.js.flow +4 -3
- package/lib/parsers/flow/components/events.js +7 -7
- package/lib/parsers/flow/components/events.js.flow +7 -7
- package/lib/parsers/flow/components/index.js +8 -8
- package/lib/parsers/flow/components/index.js.flow +3 -3
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +13 -0
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +13 -0
- package/lib/parsers/flow/modules/index.js +20 -19
- package/lib/parsers/flow/modules/index.js.flow +10 -11
- package/lib/parsers/flow/parseFlowAndThrowErrors.js +105 -0
- package/lib/parsers/flow/parseFlowAndThrowErrors.js.flow +41 -0
- package/lib/parsers/flow/parser.js +24 -25
- package/lib/parsers/flow/parser.js.flow +27 -36
- package/lib/parsers/flow/utils.js.flow +1 -1
- package/lib/parsers/parser.js.flow +12 -10
- package/lib/parsers/parserMock.js +11 -12
- package/lib/parsers/parserMock.js.flow +25 -28
- package/lib/parsers/parsers-commons.js +85 -36
- package/lib/parsers/parsers-commons.js.flow +71 -37
- package/lib/parsers/parsers-primitives.js +17 -17
- package/lib/parsers/parsers-primitives.js.flow +14 -16
- package/lib/parsers/schema.js.flow +3 -3
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +8 -1
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +8 -1
- package/lib/parsers/typescript/components/commands.js +23 -15
- package/lib/parsers/typescript/components/commands.js.flow +24 -16
- package/lib/parsers/typescript/components/componentsUtils.js +34 -20
- package/lib/parsers/typescript/components/componentsUtils.js.flow +36 -19
- package/lib/parsers/typescript/components/events.js +22 -22
- package/lib/parsers/typescript/components/events.js.flow +11 -10
- package/lib/parsers/typescript/components/extends.js.flow +1 -0
- package/lib/parsers/typescript/components/index.js +10 -10
- package/lib/parsers/typescript/components/index.js.flow +4 -4
- package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +13 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +13 -0
- package/lib/parsers/typescript/modules/index.js +25 -20
- package/lib/parsers/typescript/modules/index.js.flow +16 -14
- package/lib/parsers/typescript/parser.js +25 -26
- package/lib/parsers/typescript/parser.js.flow +23 -27
- package/lib/parsers/utils.js +5 -0
- package/lib/parsers/utils.js.flow +6 -1
- package/package.json +8 -6
|
@@ -10,33 +10,33 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
import type {
|
|
13
|
-
NativeModuleBaseTypeAnnotation,
|
|
14
13
|
NamedShape,
|
|
14
|
+
NativeModuleBaseTypeAnnotation,
|
|
15
15
|
} from '../../CodegenSchema';
|
|
16
|
-
|
|
17
16
|
import type {
|
|
18
|
-
Nullable,
|
|
19
|
-
SchemaType,
|
|
20
|
-
NativeModuleTypeAnnotation,
|
|
21
|
-
NativeModuleFunctionTypeAnnotation,
|
|
22
|
-
NativeModulePropertyShape,
|
|
23
17
|
NativeModuleAliasMap,
|
|
24
18
|
NativeModuleEnumMap,
|
|
25
19
|
NativeModuleEnumMembers,
|
|
26
20
|
NativeModuleEnumMemberType,
|
|
21
|
+
NativeModuleFunctionTypeAnnotation,
|
|
22
|
+
NativeModulePropertyShape,
|
|
23
|
+
NativeModuleTypeAnnotation,
|
|
24
|
+
Nullable,
|
|
25
|
+
SchemaType,
|
|
27
26
|
} from '../../CodegenSchema';
|
|
28
|
-
|
|
29
27
|
import type {AliasResolver} from './Utils';
|
|
30
28
|
|
|
29
|
+
const {unwrapNullable} = require('../../parsers/parsers-commons');
|
|
30
|
+
const {wrapOptional} = require('../TypeUtils/Cxx');
|
|
31
31
|
const {getEnumName, toSafeCppString} = require('../Utils');
|
|
32
|
-
|
|
32
|
+
const {indent} = require('../Utils');
|
|
33
33
|
const {
|
|
34
34
|
createAliasResolver,
|
|
35
|
-
getModules,
|
|
36
35
|
getAreEnumMembersInteger,
|
|
36
|
+
getModules,
|
|
37
|
+
isArrayRecursiveMember,
|
|
38
|
+
isDirectRecursiveMember,
|
|
37
39
|
} = require('./Utils');
|
|
38
|
-
const {indent} = require('../Utils');
|
|
39
|
-
const {unwrapNullable} = require('../../parsers/parsers-commons');
|
|
40
40
|
|
|
41
41
|
type FilesOutput = Map<string, string>;
|
|
42
42
|
|
|
@@ -83,7 +83,7 @@ public:
|
|
|
83
83
|
protected:
|
|
84
84
|
${hasteModuleName}CxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
|
|
85
85
|
: TurboModule(std::string{${hasteModuleName}CxxSpec::kModuleName}, jsInvoker),
|
|
86
|
-
delegate_(
|
|
86
|
+
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
|
|
87
87
|
|
|
88
88
|
private:
|
|
89
89
|
class Delegate : public ${hasteModuleName}CxxSpecJSI {
|
|
@@ -120,18 +120,17 @@ const FileTemplate = ({
|
|
|
120
120
|
#include <ReactCommon/TurboModule.h>
|
|
121
121
|
#include <react/bridging/Bridging.h>
|
|
122
122
|
|
|
123
|
-
namespace facebook {
|
|
124
|
-
namespace react {
|
|
123
|
+
namespace facebook::react {
|
|
125
124
|
|
|
126
125
|
${modules.join('\n\n')}
|
|
127
126
|
|
|
128
|
-
} // namespace react
|
|
129
|
-
} // namespace facebook
|
|
127
|
+
} // namespace facebook::react
|
|
130
128
|
`;
|
|
131
129
|
};
|
|
132
130
|
|
|
133
131
|
function translatePrimitiveJSTypeToCpp(
|
|
134
132
|
moduleName: string,
|
|
133
|
+
parentObjectAliasName: ?string,
|
|
135
134
|
nullableTypeAnnotation: Nullable<NativeModuleTypeAnnotation>,
|
|
136
135
|
optional: boolean,
|
|
137
136
|
createErrorMessage: (typeName: string) => string,
|
|
@@ -141,22 +140,21 @@ function translatePrimitiveJSTypeToCpp(
|
|
|
141
140
|
const [typeAnnotation, nullable] = unwrapNullable<NativeModuleTypeAnnotation>(
|
|
142
141
|
nullableTypeAnnotation,
|
|
143
142
|
);
|
|
144
|
-
const
|
|
145
|
-
|
|
143
|
+
const isRecursiveType = isDirectRecursiveMember(
|
|
144
|
+
parentObjectAliasName,
|
|
145
|
+
nullableTypeAnnotation,
|
|
146
|
+
);
|
|
147
|
+
const isRequired = (!optional && !nullable) || isRecursiveType;
|
|
146
148
|
let realTypeAnnotation = typeAnnotation;
|
|
147
149
|
if (realTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
|
|
148
150
|
realTypeAnnotation = resolveAlias(realTypeAnnotation.name);
|
|
149
151
|
}
|
|
150
152
|
|
|
151
|
-
function wrap(type: string) {
|
|
152
|
-
return isRequired ? type : `std::optional<${type}>`;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
153
|
switch (realTypeAnnotation.type) {
|
|
156
154
|
case 'ReservedTypeAnnotation':
|
|
157
155
|
switch (realTypeAnnotation.name) {
|
|
158
156
|
case 'RootTag':
|
|
159
|
-
return
|
|
157
|
+
return wrapOptional('double', isRequired);
|
|
160
158
|
default:
|
|
161
159
|
(realTypeAnnotation.name: empty);
|
|
162
160
|
throw new Error(createErrorMessage(realTypeAnnotation.name));
|
|
@@ -164,53 +162,49 @@ function translatePrimitiveJSTypeToCpp(
|
|
|
164
162
|
case 'VoidTypeAnnotation':
|
|
165
163
|
return 'void';
|
|
166
164
|
case 'StringTypeAnnotation':
|
|
167
|
-
return
|
|
165
|
+
return wrapOptional('jsi::String', isRequired);
|
|
168
166
|
case 'NumberTypeAnnotation':
|
|
169
|
-
return
|
|
167
|
+
return wrapOptional('double', isRequired);
|
|
170
168
|
case 'DoubleTypeAnnotation':
|
|
171
|
-
return
|
|
169
|
+
return wrapOptional('double', isRequired);
|
|
172
170
|
case 'FloatTypeAnnotation':
|
|
173
|
-
return
|
|
171
|
+
return wrapOptional('double', isRequired);
|
|
174
172
|
case 'Int32TypeAnnotation':
|
|
175
|
-
return
|
|
173
|
+
return wrapOptional('int', isRequired);
|
|
176
174
|
case 'BooleanTypeAnnotation':
|
|
177
|
-
return
|
|
175
|
+
return wrapOptional('bool', isRequired);
|
|
178
176
|
case 'EnumDeclaration':
|
|
179
177
|
switch (realTypeAnnotation.memberType) {
|
|
180
178
|
case 'NumberTypeAnnotation':
|
|
181
|
-
return
|
|
182
|
-
enumMap[realTypeAnnotation.name].members,
|
|
183
|
-
)
|
|
184
|
-
? wrap('int')
|
|
185
|
-
: wrap('double');
|
|
179
|
+
return wrapOptional('jsi::Value', isRequired);
|
|
186
180
|
case 'StringTypeAnnotation':
|
|
187
|
-
return
|
|
181
|
+
return wrapOptional('jsi::String', isRequired);
|
|
188
182
|
default:
|
|
189
183
|
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
|
190
184
|
}
|
|
191
185
|
case 'GenericObjectTypeAnnotation':
|
|
192
|
-
return
|
|
186
|
+
return wrapOptional('jsi::Object', isRequired);
|
|
193
187
|
case 'UnionTypeAnnotation':
|
|
194
188
|
switch (typeAnnotation.memberType) {
|
|
195
189
|
case 'NumberTypeAnnotation':
|
|
196
|
-
return
|
|
190
|
+
return wrapOptional('double', isRequired);
|
|
197
191
|
case 'ObjectTypeAnnotation':
|
|
198
|
-
return
|
|
192
|
+
return wrapOptional('jsi::Object', isRequired);
|
|
199
193
|
case 'StringTypeAnnotation':
|
|
200
|
-
return
|
|
194
|
+
return wrapOptional('jsi::String', isRequired);
|
|
201
195
|
default:
|
|
202
196
|
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
|
203
197
|
}
|
|
204
198
|
case 'ObjectTypeAnnotation':
|
|
205
|
-
return
|
|
199
|
+
return wrapOptional('jsi::Object', isRequired);
|
|
206
200
|
case 'ArrayTypeAnnotation':
|
|
207
|
-
return
|
|
201
|
+
return wrapOptional('jsi::Array', isRequired);
|
|
208
202
|
case 'FunctionTypeAnnotation':
|
|
209
|
-
return
|
|
203
|
+
return wrapOptional('jsi::Function', isRequired);
|
|
210
204
|
case 'PromiseTypeAnnotation':
|
|
211
|
-
return
|
|
205
|
+
return wrapOptional('jsi::Value', isRequired);
|
|
212
206
|
case 'MixedTypeAnnotation':
|
|
213
|
-
return
|
|
207
|
+
return wrapOptional('jsi::Value', isRequired);
|
|
214
208
|
default:
|
|
215
209
|
(realTypeAnnotation.type: empty);
|
|
216
210
|
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
|
@@ -224,10 +218,12 @@ function createStructsString(
|
|
|
224
218
|
enumMap: NativeModuleEnumMap,
|
|
225
219
|
): string {
|
|
226
220
|
const getCppType = (
|
|
221
|
+
parentObjectAlias: string,
|
|
227
222
|
v: NamedShape<Nullable<NativeModuleBaseTypeAnnotation>>,
|
|
228
223
|
) =>
|
|
229
224
|
translatePrimitiveJSTypeToCpp(
|
|
230
225
|
moduleName,
|
|
226
|
+
parentObjectAlias,
|
|
231
227
|
v.typeAnnotation,
|
|
232
228
|
false,
|
|
233
229
|
typeName => `Unsupported type for param "${v.name}". Found: ${typeName}`,
|
|
@@ -235,33 +231,36 @@ function createStructsString(
|
|
|
235
231
|
enumMap,
|
|
236
232
|
);
|
|
237
233
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
(
|
|
254
|
-
|
|
255
|
-
|
|
234
|
+
// TODO: T171006733 [Begin] Remove deprecated Cxx TMs structs after a new release.
|
|
235
|
+
return (
|
|
236
|
+
Object.keys(aliasMap)
|
|
237
|
+
.map(alias => {
|
|
238
|
+
const value = aliasMap[alias];
|
|
239
|
+
if (value.properties.length === 0) {
|
|
240
|
+
return '';
|
|
241
|
+
}
|
|
242
|
+
const structName = `${moduleName}Base${alias}`;
|
|
243
|
+
const structNameNew = `${moduleName}${alias}`;
|
|
244
|
+
const templateParameterWithTypename = value.properties
|
|
245
|
+
.map((v, i) => `typename P${i}`)
|
|
246
|
+
.join(', ');
|
|
247
|
+
const templateParameter = value.properties
|
|
248
|
+
.map((v, i) => 'P' + i)
|
|
249
|
+
.join(', ');
|
|
250
|
+
const debugParameterConversion = value.properties
|
|
251
|
+
.map(
|
|
252
|
+
(v, i) => ` static ${getCppType(alias, v)} ${
|
|
253
|
+
v.name
|
|
254
|
+
}ToJs(jsi::Runtime &rt, P${i} value) {
|
|
256
255
|
return bridging::toJs(rt, value);
|
|
257
256
|
}`,
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
257
|
+
)
|
|
258
|
+
.join('\n\n');
|
|
259
|
+
return `
|
|
261
260
|
#pragma mark - ${structName}
|
|
262
261
|
|
|
263
262
|
template <${templateParameterWithTypename}>
|
|
264
|
-
struct ${structName} {
|
|
263
|
+
struct [[deprecated("Use ${structNameNew} instead.")]] ${structName} {
|
|
265
264
|
${value.properties.map((v, i) => ' P' + i + ' ' + v.name).join(';\n')};
|
|
266
265
|
bool operator==(const ${structName} &other) const {
|
|
267
266
|
return ${value.properties
|
|
@@ -271,7 +270,7 @@ ${value.properties.map((v, i) => ' P' + i + ' ' + v.name).join(';\n')};
|
|
|
271
270
|
};
|
|
272
271
|
|
|
273
272
|
template <${templateParameterWithTypename}>
|
|
274
|
-
struct ${structName}Bridging {
|
|
273
|
+
struct [[deprecated("Use ${structNameNew}Bridging instead.")]] ${structName}Bridging {
|
|
275
274
|
static ${structName}<${templateParameter}> fromJs(
|
|
276
275
|
jsi::Runtime &rt,
|
|
277
276
|
const jsi::Object &value,
|
|
@@ -311,8 +310,121 @@ ${value.properties
|
|
|
311
310
|
};
|
|
312
311
|
|
|
313
312
|
`;
|
|
314
|
-
|
|
315
|
-
|
|
313
|
+
})
|
|
314
|
+
.join('\n') +
|
|
315
|
+
// TODO: T171006733 [End] Remove deprecated Cxx TMs structs after a new release.
|
|
316
|
+
Object.keys(aliasMap)
|
|
317
|
+
.map(alias => {
|
|
318
|
+
const value = aliasMap[alias];
|
|
319
|
+
if (value.properties.length === 0) {
|
|
320
|
+
return '';
|
|
321
|
+
}
|
|
322
|
+
const structName = `${moduleName}${alias}`;
|
|
323
|
+
const templateParameter = value.properties.filter(
|
|
324
|
+
v =>
|
|
325
|
+
!isDirectRecursiveMember(alias, v.typeAnnotation) &&
|
|
326
|
+
!isArrayRecursiveMember(alias, v.typeAnnotation),
|
|
327
|
+
);
|
|
328
|
+
const templateParameterWithTypename = templateParameter
|
|
329
|
+
.map((v, i) => `typename P${i}`)
|
|
330
|
+
.join(', ');
|
|
331
|
+
const templateParameterWithoutTypename = templateParameter
|
|
332
|
+
.map((v, i) => `P${i}`)
|
|
333
|
+
.join(', ');
|
|
334
|
+
let i = -1;
|
|
335
|
+
const templateMemberTypes = value.properties.map(v => {
|
|
336
|
+
if (isDirectRecursiveMember(alias, v.typeAnnotation)) {
|
|
337
|
+
return `std::unique_ptr<${structName}<${templateParameterWithoutTypename}>> ${v.name}`;
|
|
338
|
+
} else if (isArrayRecursiveMember(alias, v.typeAnnotation)) {
|
|
339
|
+
const [nullable] = unwrapNullable<NativeModuleTypeAnnotation>(
|
|
340
|
+
v.typeAnnotation,
|
|
341
|
+
);
|
|
342
|
+
return (
|
|
343
|
+
(nullable
|
|
344
|
+
? `std::optional<std::vector<${structName}<${templateParameterWithoutTypename}>>>`
|
|
345
|
+
: `std::vector<${structName}<${templateParameterWithoutTypename}>>`) +
|
|
346
|
+
` ${v.name}`
|
|
347
|
+
);
|
|
348
|
+
} else {
|
|
349
|
+
i++;
|
|
350
|
+
return `P${i} ${v.name}`;
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
const debugParameterConversion = value.properties
|
|
354
|
+
.map(
|
|
355
|
+
v => ` static ${getCppType(alias, v)} ${
|
|
356
|
+
v.name
|
|
357
|
+
}ToJs(jsi::Runtime &rt, decltype(types.${v.name}) value) {
|
|
358
|
+
return bridging::toJs(rt, value);
|
|
359
|
+
}`,
|
|
360
|
+
)
|
|
361
|
+
.join('\n\n');
|
|
362
|
+
return `
|
|
363
|
+
#pragma mark - ${structName}
|
|
364
|
+
|
|
365
|
+
template <${templateParameterWithTypename}>
|
|
366
|
+
struct ${structName} {
|
|
367
|
+
${templateMemberTypes.map(v => ' ' + v).join(';\n')};
|
|
368
|
+
bool operator==(const ${structName} &other) const {
|
|
369
|
+
return ${value.properties
|
|
370
|
+
.map(v => `${v.name} == other.${v.name}`)
|
|
371
|
+
.join(' && ')};
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
template <typename T>
|
|
376
|
+
struct ${structName}Bridging {
|
|
377
|
+
static T types;
|
|
378
|
+
|
|
379
|
+
static T fromJs(
|
|
380
|
+
jsi::Runtime &rt,
|
|
381
|
+
const jsi::Object &value,
|
|
382
|
+
const std::shared_ptr<CallInvoker> &jsInvoker) {
|
|
383
|
+
T result{
|
|
384
|
+
${value.properties
|
|
385
|
+
.map(v => {
|
|
386
|
+
if (isDirectRecursiveMember(alias, v.typeAnnotation)) {
|
|
387
|
+
return ` value.hasProperty(rt, "${v.name}") ? std::make_unique<T>(bridging::fromJs<T>(rt, value.getProperty(rt, "${v.name}"), jsInvoker)) : nullptr`;
|
|
388
|
+
} else {
|
|
389
|
+
return ` bridging::fromJs<decltype(types.${v.name})>(rt, value.getProperty(rt, "${v.name}"), jsInvoker)`;
|
|
390
|
+
}
|
|
391
|
+
})
|
|
392
|
+
.join(',\n')}};
|
|
393
|
+
return result;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
#ifdef DEBUG
|
|
397
|
+
${debugParameterConversion}
|
|
398
|
+
#endif
|
|
399
|
+
|
|
400
|
+
static jsi::Object toJs(
|
|
401
|
+
jsi::Runtime &rt,
|
|
402
|
+
const T &value,
|
|
403
|
+
const std::shared_ptr<CallInvoker> &jsInvoker) {
|
|
404
|
+
auto result = facebook::jsi::Object(rt);
|
|
405
|
+
${value.properties
|
|
406
|
+
.map(v => {
|
|
407
|
+
if (isDirectRecursiveMember(alias, v.typeAnnotation)) {
|
|
408
|
+
return ` if (value.${v.name}) {
|
|
409
|
+
result.setProperty(rt, "${v.name}", bridging::toJs(rt, *value.${v.name}, jsInvoker));
|
|
410
|
+
}`;
|
|
411
|
+
} else if (v.optional) {
|
|
412
|
+
return ` if (value.${v.name}) {
|
|
413
|
+
result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}.value(), jsInvoker));
|
|
414
|
+
}`;
|
|
415
|
+
} else {
|
|
416
|
+
return ` result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}, jsInvoker));`;
|
|
417
|
+
}
|
|
418
|
+
})
|
|
419
|
+
.join('\n')}
|
|
420
|
+
return result;
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
`;
|
|
425
|
+
})
|
|
426
|
+
.join('\n')
|
|
427
|
+
);
|
|
316
428
|
}
|
|
317
429
|
|
|
318
430
|
type NativeEnumMemberValueType = 'std::string' | 'int32_t' | 'float';
|
|
@@ -346,7 +458,7 @@ const EnumTemplate = ({
|
|
|
346
458
|
return `
|
|
347
459
|
#pragma mark - ${enumName}
|
|
348
460
|
|
|
349
|
-
enum ${enumName} { ${values} };
|
|
461
|
+
enum class ${enumName} { ${values} };
|
|
350
462
|
|
|
351
463
|
template <>
|
|
352
464
|
struct Bridging<${enumName}> {
|
|
@@ -449,6 +561,7 @@ function translatePropertyToCpp(
|
|
|
449
561
|
const paramTypes = propTypeAnnotation.params.map(param => {
|
|
450
562
|
const translatedParam = translatePrimitiveJSTypeToCpp(
|
|
451
563
|
moduleName,
|
|
564
|
+
null,
|
|
452
565
|
param.typeAnnotation,
|
|
453
566
|
param.optional,
|
|
454
567
|
typeName =>
|
|
@@ -461,6 +574,7 @@ function translatePropertyToCpp(
|
|
|
461
574
|
|
|
462
575
|
const returnType = translatePrimitiveJSTypeToCpp(
|
|
463
576
|
moduleName,
|
|
577
|
+
null,
|
|
464
578
|
propTypeAnnotation.returnTypeAnnotation,
|
|
465
579
|
false,
|
|
466
580
|
typeName => `Unsupported return type for ${prop.name}. Found: ${typeName}`,
|
|
@@ -493,6 +607,7 @@ module.exports = {
|
|
|
493
607
|
schema: SchemaType,
|
|
494
608
|
packageName?: string,
|
|
495
609
|
assumeNonnull: boolean = false,
|
|
610
|
+
headerPrefix?: string,
|
|
496
611
|
): FilesOutput {
|
|
497
612
|
const nativeModules = getModules(schema);
|
|
498
613
|
|
|
@@ -78,11 +78,13 @@ function _iterableToArrayLimit(arr, i) {
|
|
|
78
78
|
function _arrayWithHoles(arr) {
|
|
79
79
|
if (Array.isArray(arr)) return arr;
|
|
80
80
|
}
|
|
81
|
-
const _require = require('
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
const _require = require('../../parsers/parsers-commons'),
|
|
82
|
+
unwrapNullable = _require.unwrapNullable;
|
|
83
|
+
const _require2 = require('../TypeUtils/Java'),
|
|
84
|
+
wrapOptional = _require2.wrapOptional;
|
|
85
|
+
const _require3 = require('./Utils'),
|
|
86
|
+
createAliasResolver = _require3.createAliasResolver,
|
|
87
|
+
getModules = _require3.getModules;
|
|
86
88
|
function FileTemplate(config) {
|
|
87
89
|
const packageName = config.packageName,
|
|
88
90
|
className = config.className,
|
|
@@ -152,16 +154,8 @@ function translateFunctionParamToJavaType(
|
|
|
152
154
|
typeAnnotation = _unwrapNullable2[0],
|
|
153
155
|
nullable = _unwrapNullable2[1];
|
|
154
156
|
const isRequired = !optional && !nullable;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
imports.add('javax.annotation.Nullable');
|
|
158
|
-
return `@Nullable ${
|
|
159
|
-
nullableType !== null && nullableType !== void 0
|
|
160
|
-
? nullableType
|
|
161
|
-
: javaType
|
|
162
|
-
}`;
|
|
163
|
-
}
|
|
164
|
-
return javaType;
|
|
157
|
+
if (!isRequired) {
|
|
158
|
+
imports.add('javax.annotation.Nullable');
|
|
165
159
|
}
|
|
166
160
|
|
|
167
161
|
// FIXME: support class alias for args
|
|
@@ -173,41 +167,41 @@ function translateFunctionParamToJavaType(
|
|
|
173
167
|
case 'ReservedTypeAnnotation':
|
|
174
168
|
switch (realTypeAnnotation.name) {
|
|
175
169
|
case 'RootTag':
|
|
176
|
-
return
|
|
170
|
+
return wrapOptional('double', isRequired);
|
|
177
171
|
default:
|
|
178
172
|
realTypeAnnotation.name;
|
|
179
173
|
throw new Error(createErrorMessage(realTypeAnnotation.name));
|
|
180
174
|
}
|
|
181
175
|
case 'StringTypeAnnotation':
|
|
182
|
-
return
|
|
176
|
+
return wrapOptional('String', isRequired);
|
|
183
177
|
case 'NumberTypeAnnotation':
|
|
184
|
-
return
|
|
178
|
+
return wrapOptional('double', isRequired);
|
|
185
179
|
case 'FloatTypeAnnotation':
|
|
186
|
-
return
|
|
180
|
+
return wrapOptional('float', isRequired);
|
|
187
181
|
case 'DoubleTypeAnnotation':
|
|
188
|
-
return
|
|
182
|
+
return wrapOptional('double', isRequired);
|
|
189
183
|
case 'Int32TypeAnnotation':
|
|
190
|
-
return
|
|
184
|
+
return wrapOptional('int', isRequired);
|
|
191
185
|
case 'BooleanTypeAnnotation':
|
|
192
|
-
return
|
|
186
|
+
return wrapOptional('boolean', isRequired);
|
|
193
187
|
case 'EnumDeclaration':
|
|
194
188
|
switch (realTypeAnnotation.memberType) {
|
|
195
189
|
case 'NumberTypeAnnotation':
|
|
196
|
-
return
|
|
190
|
+
return wrapOptional('double', isRequired);
|
|
197
191
|
case 'StringTypeAnnotation':
|
|
198
|
-
return
|
|
192
|
+
return wrapOptional('String', isRequired);
|
|
199
193
|
default:
|
|
200
194
|
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
|
201
195
|
}
|
|
202
196
|
case 'UnionTypeAnnotation':
|
|
203
197
|
switch (typeAnnotation.memberType) {
|
|
204
198
|
case 'NumberTypeAnnotation':
|
|
205
|
-
return
|
|
199
|
+
return wrapOptional('double', isRequired);
|
|
206
200
|
case 'ObjectTypeAnnotation':
|
|
207
201
|
imports.add('com.facebook.react.bridge.ReadableMap');
|
|
208
|
-
return
|
|
202
|
+
return wrapOptional('ReadableMap', isRequired);
|
|
209
203
|
case 'StringTypeAnnotation':
|
|
210
|
-
return
|
|
204
|
+
return wrapOptional('String', isRequired);
|
|
211
205
|
default:
|
|
212
206
|
throw new Error(
|
|
213
207
|
`Unsupported union member returning value, found: ${realTypeAnnotation.memberType}"`,
|
|
@@ -215,17 +209,17 @@ function translateFunctionParamToJavaType(
|
|
|
215
209
|
}
|
|
216
210
|
case 'ObjectTypeAnnotation':
|
|
217
211
|
imports.add('com.facebook.react.bridge.ReadableMap');
|
|
218
|
-
return
|
|
212
|
+
return wrapOptional('ReadableMap', isRequired);
|
|
219
213
|
case 'GenericObjectTypeAnnotation':
|
|
220
214
|
// Treat this the same as ObjectTypeAnnotation for now.
|
|
221
215
|
imports.add('com.facebook.react.bridge.ReadableMap');
|
|
222
|
-
return
|
|
216
|
+
return wrapOptional('ReadableMap', isRequired);
|
|
223
217
|
case 'ArrayTypeAnnotation':
|
|
224
218
|
imports.add('com.facebook.react.bridge.ReadableArray');
|
|
225
|
-
return
|
|
219
|
+
return wrapOptional('ReadableArray', isRequired);
|
|
226
220
|
case 'FunctionTypeAnnotation':
|
|
227
221
|
imports.add('com.facebook.react.bridge.Callback');
|
|
228
|
-
return
|
|
222
|
+
return wrapOptional('Callback', isRequired);
|
|
229
223
|
default:
|
|
230
224
|
realTypeAnnotation.type;
|
|
231
225
|
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
|
@@ -241,17 +235,10 @@ function translateFunctionReturnTypeToJavaType(
|
|
|
241
235
|
_unwrapNullable4 = _slicedToArray(_unwrapNullable3, 2),
|
|
242
236
|
returnTypeAnnotation = _unwrapNullable4[0],
|
|
243
237
|
nullable = _unwrapNullable4[1];
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
imports.add('javax.annotation.Nullable');
|
|
247
|
-
return `@Nullable ${
|
|
248
|
-
nullableType !== null && nullableType !== void 0
|
|
249
|
-
? nullableType
|
|
250
|
-
: javaType
|
|
251
|
-
}`;
|
|
252
|
-
}
|
|
253
|
-
return javaType;
|
|
238
|
+
if (nullable) {
|
|
239
|
+
imports.add('javax.annotation.Nullable');
|
|
254
240
|
}
|
|
241
|
+
const isRequired = !nullable;
|
|
255
242
|
|
|
256
243
|
// FIXME: support class alias for args
|
|
257
244
|
let realTypeAnnotation = returnTypeAnnotation;
|
|
@@ -262,7 +249,7 @@ function translateFunctionReturnTypeToJavaType(
|
|
|
262
249
|
case 'ReservedTypeAnnotation':
|
|
263
250
|
switch (realTypeAnnotation.name) {
|
|
264
251
|
case 'RootTag':
|
|
265
|
-
return
|
|
252
|
+
return wrapOptional('double', isRequired);
|
|
266
253
|
default:
|
|
267
254
|
realTypeAnnotation.name;
|
|
268
255
|
throw new Error(createErrorMessage(realTypeAnnotation.name));
|
|
@@ -272,35 +259,35 @@ function translateFunctionReturnTypeToJavaType(
|
|
|
272
259
|
case 'PromiseTypeAnnotation':
|
|
273
260
|
return 'void';
|
|
274
261
|
case 'StringTypeAnnotation':
|
|
275
|
-
return
|
|
262
|
+
return wrapOptional('String', isRequired);
|
|
276
263
|
case 'NumberTypeAnnotation':
|
|
277
|
-
return
|
|
264
|
+
return wrapOptional('double', isRequired);
|
|
278
265
|
case 'FloatTypeAnnotation':
|
|
279
|
-
return
|
|
266
|
+
return wrapOptional('double', isRequired);
|
|
280
267
|
case 'DoubleTypeAnnotation':
|
|
281
|
-
return
|
|
268
|
+
return wrapOptional('double', isRequired);
|
|
282
269
|
case 'Int32TypeAnnotation':
|
|
283
|
-
return
|
|
270
|
+
return wrapOptional('double', isRequired);
|
|
284
271
|
case 'BooleanTypeAnnotation':
|
|
285
|
-
return
|
|
272
|
+
return wrapOptional('boolean', isRequired);
|
|
286
273
|
case 'EnumDeclaration':
|
|
287
274
|
switch (realTypeAnnotation.memberType) {
|
|
288
275
|
case 'NumberTypeAnnotation':
|
|
289
|
-
return
|
|
276
|
+
return wrapOptional('double', isRequired);
|
|
290
277
|
case 'StringTypeAnnotation':
|
|
291
|
-
return
|
|
278
|
+
return wrapOptional('String', isRequired);
|
|
292
279
|
default:
|
|
293
280
|
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
|
294
281
|
}
|
|
295
282
|
case 'UnionTypeAnnotation':
|
|
296
283
|
switch (realTypeAnnotation.memberType) {
|
|
297
284
|
case 'NumberTypeAnnotation':
|
|
298
|
-
return
|
|
285
|
+
return wrapOptional('double', isRequired);
|
|
299
286
|
case 'ObjectTypeAnnotation':
|
|
300
287
|
imports.add('com.facebook.react.bridge.WritableMap');
|
|
301
|
-
return
|
|
288
|
+
return wrapOptional('WritableMap', isRequired);
|
|
302
289
|
case 'StringTypeAnnotation':
|
|
303
|
-
return
|
|
290
|
+
return wrapOptional('String', isRequired);
|
|
304
291
|
default:
|
|
305
292
|
throw new Error(
|
|
306
293
|
`Unsupported union member returning value, found: ${realTypeAnnotation.memberType}"`,
|
|
@@ -308,13 +295,13 @@ function translateFunctionReturnTypeToJavaType(
|
|
|
308
295
|
}
|
|
309
296
|
case 'ObjectTypeAnnotation':
|
|
310
297
|
imports.add('com.facebook.react.bridge.WritableMap');
|
|
311
|
-
return
|
|
298
|
+
return wrapOptional('WritableMap', isRequired);
|
|
312
299
|
case 'GenericObjectTypeAnnotation':
|
|
313
300
|
imports.add('com.facebook.react.bridge.WritableMap');
|
|
314
|
-
return
|
|
301
|
+
return wrapOptional('WritableMap', isRequired);
|
|
315
302
|
case 'ArrayTypeAnnotation':
|
|
316
303
|
imports.add('com.facebook.react.bridge.WritableArray');
|
|
317
|
-
return
|
|
304
|
+
return wrapOptional('WritableArray', isRequired);
|
|
318
305
|
default:
|
|
319
306
|
realTypeAnnotation.type;
|
|
320
307
|
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
|
@@ -468,7 +455,13 @@ function buildGetConstantsMethod(method, imports, resolveAlias) {
|
|
|
468
455
|
return '';
|
|
469
456
|
}
|
|
470
457
|
module.exports = {
|
|
471
|
-
generate(
|
|
458
|
+
generate(
|
|
459
|
+
libraryName,
|
|
460
|
+
schema,
|
|
461
|
+
packageName,
|
|
462
|
+
assumeNonnull = false,
|
|
463
|
+
headerPrefix,
|
|
464
|
+
) {
|
|
472
465
|
const files = new Map();
|
|
473
466
|
const nativeModules = getModules(schema);
|
|
474
467
|
const normalizedPackageName =
|