@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
|
@@ -93,6 +93,14 @@ function getImports(component, type) {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
});
|
|
96
|
+
component.commands.forEach(command => {
|
|
97
|
+
command.typeAnnotation.params.forEach(param => {
|
|
98
|
+
const cmdParamType = param.typeAnnotation.type;
|
|
99
|
+
if (cmdParamType === 'ArrayTypeAnnotation') {
|
|
100
|
+
imports.add('import com.facebook.react.bridge.ReadableArray;');
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
});
|
|
96
104
|
return imports;
|
|
97
105
|
}
|
|
98
106
|
module.exports = {
|
|
@@ -127,6 +127,15 @@ function getImports(
|
|
|
127
127
|
}
|
|
128
128
|
});
|
|
129
129
|
|
|
130
|
+
component.commands.forEach(command => {
|
|
131
|
+
command.typeAnnotation.params.forEach(param => {
|
|
132
|
+
const cmdParamType = param.typeAnnotation.type;
|
|
133
|
+
if (cmdParamType === 'ArrayTypeAnnotation') {
|
|
134
|
+
imports.add('import com.facebook.react.bridge.ReadableArray;');
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
|
|
130
139
|
return imports;
|
|
131
140
|
}
|
|
132
141
|
|
|
@@ -1697,6 +1697,28 @@ const COMMANDS_AND_PROPS = {
|
|
|
1697
1697
|
},
|
|
1698
1698
|
},
|
|
1699
1699
|
},
|
|
1700
|
+
{
|
|
1701
|
+
name: 'addItems',
|
|
1702
|
+
optional: false,
|
|
1703
|
+
typeAnnotation: {
|
|
1704
|
+
type: 'FunctionTypeAnnotation',
|
|
1705
|
+
params: [
|
|
1706
|
+
{
|
|
1707
|
+
name: 'items',
|
|
1708
|
+
optional: false,
|
|
1709
|
+
typeAnnotation: {
|
|
1710
|
+
type: 'ArrayTypeAnnotation',
|
|
1711
|
+
elementType: {
|
|
1712
|
+
type: 'StringTypeAnnotation',
|
|
1713
|
+
},
|
|
1714
|
+
},
|
|
1715
|
+
},
|
|
1716
|
+
],
|
|
1717
|
+
returnTypeAnnotation: {
|
|
1718
|
+
type: 'VoidTypeAnnotation',
|
|
1719
|
+
},
|
|
1720
|
+
},
|
|
1721
|
+
},
|
|
1700
1722
|
],
|
|
1701
1723
|
},
|
|
1702
1724
|
},
|
|
@@ -1726,6 +1726,28 @@ const COMMANDS_AND_PROPS: SchemaType = {
|
|
|
1726
1726
|
},
|
|
1727
1727
|
},
|
|
1728
1728
|
},
|
|
1729
|
+
{
|
|
1730
|
+
name: 'addItems',
|
|
1731
|
+
optional: false,
|
|
1732
|
+
typeAnnotation: {
|
|
1733
|
+
type: 'FunctionTypeAnnotation',
|
|
1734
|
+
params: [
|
|
1735
|
+
{
|
|
1736
|
+
name: 'items',
|
|
1737
|
+
optional: false,
|
|
1738
|
+
typeAnnotation: {
|
|
1739
|
+
type: 'ArrayTypeAnnotation',
|
|
1740
|
+
elementType: {
|
|
1741
|
+
type: 'StringTypeAnnotation',
|
|
1742
|
+
},
|
|
1743
|
+
},
|
|
1744
|
+
},
|
|
1745
|
+
],
|
|
1746
|
+
returnTypeAnnotation: {
|
|
1747
|
+
type: 'VoidTypeAnnotation',
|
|
1748
|
+
},
|
|
1749
|
+
},
|
|
1750
|
+
},
|
|
1729
1751
|
],
|
|
1730
1752
|
},
|
|
1731
1753
|
},
|
|
@@ -78,11 +78,11 @@ 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('./Utils'),
|
|
84
|
+
createAliasResolver = _require2.createAliasResolver,
|
|
85
|
+
getModules = _require2.getModules;
|
|
86
86
|
const HostFunctionTemplate = ({
|
|
87
87
|
hasteModuleName,
|
|
88
88
|
methodName,
|
|
@@ -138,14 +138,12 @@ const FileTemplate = ({libraryName, modules}) => {
|
|
|
138
138
|
|
|
139
139
|
#include "${libraryName}JSI.h"
|
|
140
140
|
|
|
141
|
-
namespace facebook {
|
|
142
|
-
namespace react {
|
|
141
|
+
namespace facebook::react {
|
|
143
142
|
|
|
144
143
|
${modules}
|
|
145
144
|
|
|
146
145
|
|
|
147
|
-
} // namespace react
|
|
148
|
-
} // namespace facebook
|
|
146
|
+
} // namespace facebook::react
|
|
149
147
|
`;
|
|
150
148
|
};
|
|
151
149
|
function serializeArg(moduleName, arg, index, resolveAlias, enumMap) {
|
|
@@ -257,7 +255,13 @@ function serializePropertyIntoHostFunction(
|
|
|
257
255
|
});
|
|
258
256
|
}
|
|
259
257
|
module.exports = {
|
|
260
|
-
generate(
|
|
258
|
+
generate(
|
|
259
|
+
libraryName,
|
|
260
|
+
schema,
|
|
261
|
+
packageName,
|
|
262
|
+
assumeNonnull = false,
|
|
263
|
+
headerPrefix,
|
|
264
|
+
) {
|
|
261
265
|
const nativeModules = getModules(schema);
|
|
262
266
|
const modules = Object.keys(nativeModules)
|
|
263
267
|
.map(hasteModuleName => {
|
|
@@ -11,19 +11,19 @@
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
13
|
import type {
|
|
14
|
-
SchemaType,
|
|
15
|
-
Nullable,
|
|
16
14
|
NamedShape,
|
|
17
|
-
|
|
15
|
+
NativeModuleEnumMap,
|
|
18
16
|
NativeModuleFunctionTypeAnnotation,
|
|
19
17
|
NativeModuleParamTypeAnnotation,
|
|
18
|
+
NativeModulePropertyShape,
|
|
20
19
|
NativeModuleTypeAnnotation,
|
|
21
|
-
|
|
20
|
+
Nullable,
|
|
21
|
+
SchemaType,
|
|
22
22
|
} from '../../CodegenSchema';
|
|
23
|
-
|
|
24
23
|
import type {AliasResolver} from './Utils';
|
|
25
|
-
|
|
24
|
+
|
|
26
25
|
const {unwrapNullable} = require('../../parsers/parsers-commons');
|
|
26
|
+
const {createAliasResolver, getModules} = require('./Utils');
|
|
27
27
|
|
|
28
28
|
type FilesOutput = Map<string, string>;
|
|
29
29
|
|
|
@@ -101,14 +101,12 @@ const FileTemplate = ({
|
|
|
101
101
|
|
|
102
102
|
#include "${libraryName}JSI.h"
|
|
103
103
|
|
|
104
|
-
namespace facebook {
|
|
105
|
-
namespace react {
|
|
104
|
+
namespace facebook::react {
|
|
106
105
|
|
|
107
106
|
${modules}
|
|
108
107
|
|
|
109
108
|
|
|
110
|
-
} // namespace react
|
|
111
|
-
} // namespace facebook
|
|
109
|
+
} // namespace facebook::react
|
|
112
110
|
`;
|
|
113
111
|
};
|
|
114
112
|
|
|
@@ -236,6 +234,7 @@ module.exports = {
|
|
|
236
234
|
schema: SchemaType,
|
|
237
235
|
packageName?: string,
|
|
238
236
|
assumeNonnull: boolean = false,
|
|
237
|
+
headerPrefix?: string,
|
|
239
238
|
): FilesOutput {
|
|
240
239
|
const nativeModules = getModules(schema);
|
|
241
240
|
|
|
@@ -78,17 +78,21 @@ 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
|
-
createAliasResolver = _require2.createAliasResolver,
|
|
86
|
-
getModules = _require2.getModules,
|
|
87
|
-
getAreEnumMembersInteger = _require2.getAreEnumMembersInteger;
|
|
81
|
+
const _require = require('../../parsers/parsers-commons'),
|
|
82
|
+
unwrapNullable = _require.unwrapNullable;
|
|
83
|
+
const _require2 = require('../TypeUtils/Cxx'),
|
|
84
|
+
wrapOptional = _require2.wrapOptional;
|
|
88
85
|
const _require3 = require('../Utils'),
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
getEnumName = _require3.getEnumName,
|
|
87
|
+
toSafeCppString = _require3.toSafeCppString;
|
|
88
|
+
const _require4 = require('../Utils'),
|
|
89
|
+
indent = _require4.indent;
|
|
90
|
+
const _require5 = require('./Utils'),
|
|
91
|
+
createAliasResolver = _require5.createAliasResolver,
|
|
92
|
+
getAreEnumMembersInteger = _require5.getAreEnumMembersInteger,
|
|
93
|
+
getModules = _require5.getModules,
|
|
94
|
+
isArrayRecursiveMember = _require5.isArrayRecursiveMember,
|
|
95
|
+
isDirectRecursiveMember = _require5.isDirectRecursiveMember;
|
|
92
96
|
const ModuleClassDeclarationTemplate = ({
|
|
93
97
|
hasteModuleName,
|
|
94
98
|
moduleProperties,
|
|
@@ -122,7 +126,7 @@ public:
|
|
|
122
126
|
protected:
|
|
123
127
|
${hasteModuleName}CxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
|
|
124
128
|
: TurboModule(std::string{${hasteModuleName}CxxSpec::kModuleName}, jsInvoker),
|
|
125
|
-
delegate_(
|
|
129
|
+
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
|
|
126
130
|
|
|
127
131
|
private:
|
|
128
132
|
class Delegate : public ${hasteModuleName}CxxSpecJSI {
|
|
@@ -154,17 +158,16 @@ const FileTemplate = ({modules}) => {
|
|
|
154
158
|
#include <ReactCommon/TurboModule.h>
|
|
155
159
|
#include <react/bridging/Bridging.h>
|
|
156
160
|
|
|
157
|
-
namespace facebook {
|
|
158
|
-
namespace react {
|
|
161
|
+
namespace facebook::react {
|
|
159
162
|
|
|
160
163
|
${modules.join('\n\n')}
|
|
161
164
|
|
|
162
|
-
} // namespace react
|
|
163
|
-
} // namespace facebook
|
|
165
|
+
} // namespace facebook::react
|
|
164
166
|
`;
|
|
165
167
|
};
|
|
166
168
|
function translatePrimitiveJSTypeToCpp(
|
|
167
169
|
moduleName,
|
|
170
|
+
parentObjectAliasName,
|
|
168
171
|
nullableTypeAnnotation,
|
|
169
172
|
optional,
|
|
170
173
|
createErrorMessage,
|
|
@@ -175,19 +178,20 @@ function translatePrimitiveJSTypeToCpp(
|
|
|
175
178
|
_unwrapNullable2 = _slicedToArray(_unwrapNullable, 2),
|
|
176
179
|
typeAnnotation = _unwrapNullable2[0],
|
|
177
180
|
nullable = _unwrapNullable2[1];
|
|
178
|
-
const
|
|
181
|
+
const isRecursiveType = isDirectRecursiveMember(
|
|
182
|
+
parentObjectAliasName,
|
|
183
|
+
nullableTypeAnnotation,
|
|
184
|
+
);
|
|
185
|
+
const isRequired = (!optional && !nullable) || isRecursiveType;
|
|
179
186
|
let realTypeAnnotation = typeAnnotation;
|
|
180
187
|
if (realTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
|
|
181
188
|
realTypeAnnotation = resolveAlias(realTypeAnnotation.name);
|
|
182
189
|
}
|
|
183
|
-
function wrap(type) {
|
|
184
|
-
return isRequired ? type : `std::optional<${type}>`;
|
|
185
|
-
}
|
|
186
190
|
switch (realTypeAnnotation.type) {
|
|
187
191
|
case 'ReservedTypeAnnotation':
|
|
188
192
|
switch (realTypeAnnotation.name) {
|
|
189
193
|
case 'RootTag':
|
|
190
|
-
return
|
|
194
|
+
return wrapOptional('double', isRequired);
|
|
191
195
|
default:
|
|
192
196
|
realTypeAnnotation.name;
|
|
193
197
|
throw new Error(createErrorMessage(realTypeAnnotation.name));
|
|
@@ -195,95 +199,96 @@ function translatePrimitiveJSTypeToCpp(
|
|
|
195
199
|
case 'VoidTypeAnnotation':
|
|
196
200
|
return 'void';
|
|
197
201
|
case 'StringTypeAnnotation':
|
|
198
|
-
return
|
|
202
|
+
return wrapOptional('jsi::String', isRequired);
|
|
199
203
|
case 'NumberTypeAnnotation':
|
|
200
|
-
return
|
|
204
|
+
return wrapOptional('double', isRequired);
|
|
201
205
|
case 'DoubleTypeAnnotation':
|
|
202
|
-
return
|
|
206
|
+
return wrapOptional('double', isRequired);
|
|
203
207
|
case 'FloatTypeAnnotation':
|
|
204
|
-
return
|
|
208
|
+
return wrapOptional('double', isRequired);
|
|
205
209
|
case 'Int32TypeAnnotation':
|
|
206
|
-
return
|
|
210
|
+
return wrapOptional('int', isRequired);
|
|
207
211
|
case 'BooleanTypeAnnotation':
|
|
208
|
-
return
|
|
212
|
+
return wrapOptional('bool', isRequired);
|
|
209
213
|
case 'EnumDeclaration':
|
|
210
214
|
switch (realTypeAnnotation.memberType) {
|
|
211
215
|
case 'NumberTypeAnnotation':
|
|
212
|
-
return
|
|
213
|
-
enumMap[realTypeAnnotation.name].members,
|
|
214
|
-
)
|
|
215
|
-
? wrap('int')
|
|
216
|
-
: wrap('double');
|
|
216
|
+
return wrapOptional('jsi::Value', isRequired);
|
|
217
217
|
case 'StringTypeAnnotation':
|
|
218
|
-
return
|
|
218
|
+
return wrapOptional('jsi::String', isRequired);
|
|
219
219
|
default:
|
|
220
220
|
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
|
221
221
|
}
|
|
222
222
|
case 'GenericObjectTypeAnnotation':
|
|
223
|
-
return
|
|
223
|
+
return wrapOptional('jsi::Object', isRequired);
|
|
224
224
|
case 'UnionTypeAnnotation':
|
|
225
225
|
switch (typeAnnotation.memberType) {
|
|
226
226
|
case 'NumberTypeAnnotation':
|
|
227
|
-
return
|
|
227
|
+
return wrapOptional('double', isRequired);
|
|
228
228
|
case 'ObjectTypeAnnotation':
|
|
229
|
-
return
|
|
229
|
+
return wrapOptional('jsi::Object', isRequired);
|
|
230
230
|
case 'StringTypeAnnotation':
|
|
231
|
-
return
|
|
231
|
+
return wrapOptional('jsi::String', isRequired);
|
|
232
232
|
default:
|
|
233
233
|
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
|
234
234
|
}
|
|
235
235
|
case 'ObjectTypeAnnotation':
|
|
236
|
-
return
|
|
236
|
+
return wrapOptional('jsi::Object', isRequired);
|
|
237
237
|
case 'ArrayTypeAnnotation':
|
|
238
|
-
return
|
|
238
|
+
return wrapOptional('jsi::Array', isRequired);
|
|
239
239
|
case 'FunctionTypeAnnotation':
|
|
240
|
-
return
|
|
240
|
+
return wrapOptional('jsi::Function', isRequired);
|
|
241
241
|
case 'PromiseTypeAnnotation':
|
|
242
|
-
return
|
|
242
|
+
return wrapOptional('jsi::Value', isRequired);
|
|
243
243
|
case 'MixedTypeAnnotation':
|
|
244
|
-
return
|
|
244
|
+
return wrapOptional('jsi::Value', isRequired);
|
|
245
245
|
default:
|
|
246
246
|
realTypeAnnotation.type;
|
|
247
247
|
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
250
|
function createStructsString(moduleName, aliasMap, resolveAlias, enumMap) {
|
|
251
|
-
const getCppType = v =>
|
|
251
|
+
const getCppType = (parentObjectAlias, v) =>
|
|
252
252
|
translatePrimitiveJSTypeToCpp(
|
|
253
253
|
moduleName,
|
|
254
|
+
parentObjectAlias,
|
|
254
255
|
v.typeAnnotation,
|
|
255
256
|
false,
|
|
256
257
|
typeName => `Unsupported type for param "${v.name}". Found: ${typeName}`,
|
|
257
258
|
resolveAlias,
|
|
258
259
|
enumMap,
|
|
259
260
|
);
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
.
|
|
275
|
-
(v, i) =>
|
|
276
|
-
|
|
277
|
-
|
|
261
|
+
|
|
262
|
+
// TODO: T171006733 [Begin] Remove deprecated Cxx TMs structs after a new release.
|
|
263
|
+
return (
|
|
264
|
+
Object.keys(aliasMap)
|
|
265
|
+
.map(alias => {
|
|
266
|
+
const value = aliasMap[alias];
|
|
267
|
+
if (value.properties.length === 0) {
|
|
268
|
+
return '';
|
|
269
|
+
}
|
|
270
|
+
const structName = `${moduleName}Base${alias}`;
|
|
271
|
+
const structNameNew = `${moduleName}${alias}`;
|
|
272
|
+
const templateParameterWithTypename = value.properties
|
|
273
|
+
.map((v, i) => `typename P${i}`)
|
|
274
|
+
.join(', ');
|
|
275
|
+
const templateParameter = value.properties
|
|
276
|
+
.map((v, i) => 'P' + i)
|
|
277
|
+
.join(', ');
|
|
278
|
+
const debugParameterConversion = value.properties
|
|
279
|
+
.map(
|
|
280
|
+
(v, i) => ` static ${getCppType(alias, v)} ${
|
|
281
|
+
v.name
|
|
282
|
+
}ToJs(jsi::Runtime &rt, P${i} value) {
|
|
278
283
|
return bridging::toJs(rt, value);
|
|
279
284
|
}`,
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
285
|
+
)
|
|
286
|
+
.join('\n\n');
|
|
287
|
+
return `
|
|
283
288
|
#pragma mark - ${structName}
|
|
284
289
|
|
|
285
290
|
template <${templateParameterWithTypename}>
|
|
286
|
-
struct ${structName} {
|
|
291
|
+
struct [[deprecated("Use ${structNameNew} instead.")]] ${structName} {
|
|
287
292
|
${value.properties.map((v, i) => ' P' + i + ' ' + v.name).join(';\n')};
|
|
288
293
|
bool operator==(const ${structName} &other) const {
|
|
289
294
|
return ${value.properties
|
|
@@ -293,7 +298,7 @@ ${value.properties.map((v, i) => ' P' + i + ' ' + v.name).join(';\n')};
|
|
|
293
298
|
};
|
|
294
299
|
|
|
295
300
|
template <${templateParameterWithTypename}>
|
|
296
|
-
struct ${structName}Bridging {
|
|
301
|
+
struct [[deprecated("Use ${structNameNew}Bridging instead.")]] ${structName}Bridging {
|
|
297
302
|
static ${structName}<${templateParameter}> fromJs(
|
|
298
303
|
jsi::Runtime &rt,
|
|
299
304
|
const jsi::Object &value,
|
|
@@ -333,8 +338,121 @@ ${value.properties
|
|
|
333
338
|
};
|
|
334
339
|
|
|
335
340
|
`;
|
|
336
|
-
|
|
337
|
-
|
|
341
|
+
})
|
|
342
|
+
.join('\n') +
|
|
343
|
+
// TODO: T171006733 [End] Remove deprecated Cxx TMs structs after a new release.
|
|
344
|
+
Object.keys(aliasMap)
|
|
345
|
+
.map(alias => {
|
|
346
|
+
const value = aliasMap[alias];
|
|
347
|
+
if (value.properties.length === 0) {
|
|
348
|
+
return '';
|
|
349
|
+
}
|
|
350
|
+
const structName = `${moduleName}${alias}`;
|
|
351
|
+
const templateParameter = value.properties.filter(
|
|
352
|
+
v =>
|
|
353
|
+
!isDirectRecursiveMember(alias, v.typeAnnotation) &&
|
|
354
|
+
!isArrayRecursiveMember(alias, v.typeAnnotation),
|
|
355
|
+
);
|
|
356
|
+
const templateParameterWithTypename = templateParameter
|
|
357
|
+
.map((v, i) => `typename P${i}`)
|
|
358
|
+
.join(', ');
|
|
359
|
+
const templateParameterWithoutTypename = templateParameter
|
|
360
|
+
.map((v, i) => `P${i}`)
|
|
361
|
+
.join(', ');
|
|
362
|
+
let i = -1;
|
|
363
|
+
const templateMemberTypes = value.properties.map(v => {
|
|
364
|
+
if (isDirectRecursiveMember(alias, v.typeAnnotation)) {
|
|
365
|
+
return `std::unique_ptr<${structName}<${templateParameterWithoutTypename}>> ${v.name}`;
|
|
366
|
+
} else if (isArrayRecursiveMember(alias, v.typeAnnotation)) {
|
|
367
|
+
const _unwrapNullable3 = unwrapNullable(v.typeAnnotation),
|
|
368
|
+
_unwrapNullable4 = _slicedToArray(_unwrapNullable3, 1),
|
|
369
|
+
nullable = _unwrapNullable4[0];
|
|
370
|
+
return (
|
|
371
|
+
(nullable
|
|
372
|
+
? `std::optional<std::vector<${structName}<${templateParameterWithoutTypename}>>>`
|
|
373
|
+
: `std::vector<${structName}<${templateParameterWithoutTypename}>>`) +
|
|
374
|
+
` ${v.name}`
|
|
375
|
+
);
|
|
376
|
+
} else {
|
|
377
|
+
i++;
|
|
378
|
+
return `P${i} ${v.name}`;
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
const debugParameterConversion = value.properties
|
|
382
|
+
.map(
|
|
383
|
+
v => ` static ${getCppType(alias, v)} ${
|
|
384
|
+
v.name
|
|
385
|
+
}ToJs(jsi::Runtime &rt, decltype(types.${v.name}) value) {
|
|
386
|
+
return bridging::toJs(rt, value);
|
|
387
|
+
}`,
|
|
388
|
+
)
|
|
389
|
+
.join('\n\n');
|
|
390
|
+
return `
|
|
391
|
+
#pragma mark - ${structName}
|
|
392
|
+
|
|
393
|
+
template <${templateParameterWithTypename}>
|
|
394
|
+
struct ${structName} {
|
|
395
|
+
${templateMemberTypes.map(v => ' ' + v).join(';\n')};
|
|
396
|
+
bool operator==(const ${structName} &other) const {
|
|
397
|
+
return ${value.properties
|
|
398
|
+
.map(v => `${v.name} == other.${v.name}`)
|
|
399
|
+
.join(' && ')};
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
template <typename T>
|
|
404
|
+
struct ${structName}Bridging {
|
|
405
|
+
static T types;
|
|
406
|
+
|
|
407
|
+
static T fromJs(
|
|
408
|
+
jsi::Runtime &rt,
|
|
409
|
+
const jsi::Object &value,
|
|
410
|
+
const std::shared_ptr<CallInvoker> &jsInvoker) {
|
|
411
|
+
T result{
|
|
412
|
+
${value.properties
|
|
413
|
+
.map(v => {
|
|
414
|
+
if (isDirectRecursiveMember(alias, v.typeAnnotation)) {
|
|
415
|
+
return ` value.hasProperty(rt, "${v.name}") ? std::make_unique<T>(bridging::fromJs<T>(rt, value.getProperty(rt, "${v.name}"), jsInvoker)) : nullptr`;
|
|
416
|
+
} else {
|
|
417
|
+
return ` bridging::fromJs<decltype(types.${v.name})>(rt, value.getProperty(rt, "${v.name}"), jsInvoker)`;
|
|
418
|
+
}
|
|
419
|
+
})
|
|
420
|
+
.join(',\n')}};
|
|
421
|
+
return result;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
#ifdef DEBUG
|
|
425
|
+
${debugParameterConversion}
|
|
426
|
+
#endif
|
|
427
|
+
|
|
428
|
+
static jsi::Object toJs(
|
|
429
|
+
jsi::Runtime &rt,
|
|
430
|
+
const T &value,
|
|
431
|
+
const std::shared_ptr<CallInvoker> &jsInvoker) {
|
|
432
|
+
auto result = facebook::jsi::Object(rt);
|
|
433
|
+
${value.properties
|
|
434
|
+
.map(v => {
|
|
435
|
+
if (isDirectRecursiveMember(alias, v.typeAnnotation)) {
|
|
436
|
+
return ` if (value.${v.name}) {
|
|
437
|
+
result.setProperty(rt, "${v.name}", bridging::toJs(rt, *value.${v.name}, jsInvoker));
|
|
438
|
+
}`;
|
|
439
|
+
} else if (v.optional) {
|
|
440
|
+
return ` if (value.${v.name}) {
|
|
441
|
+
result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}.value(), jsInvoker));
|
|
442
|
+
}`;
|
|
443
|
+
} else {
|
|
444
|
+
return ` result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}, jsInvoker));`;
|
|
445
|
+
}
|
|
446
|
+
})
|
|
447
|
+
.join('\n')}
|
|
448
|
+
return result;
|
|
449
|
+
}
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
`;
|
|
453
|
+
})
|
|
454
|
+
.join('\n')
|
|
455
|
+
);
|
|
338
456
|
}
|
|
339
457
|
const EnumTemplate = ({
|
|
340
458
|
enumName,
|
|
@@ -362,7 +480,7 @@ const EnumTemplate = ({
|
|
|
362
480
|
return `
|
|
363
481
|
#pragma mark - ${enumName}
|
|
364
482
|
|
|
365
|
-
enum ${enumName} { ${values} };
|
|
483
|
+
enum class ${enumName} { ${values} };
|
|
366
484
|
|
|
367
485
|
template <>
|
|
368
486
|
struct Bridging<${enumName}> {
|
|
@@ -438,15 +556,16 @@ function translatePropertyToCpp(
|
|
|
438
556
|
enumMap,
|
|
439
557
|
abstract = false,
|
|
440
558
|
) {
|
|
441
|
-
const
|
|
442
|
-
|
|
443
|
-
propTypeAnnotation =
|
|
559
|
+
const _unwrapNullable5 = unwrapNullable(prop.typeAnnotation),
|
|
560
|
+
_unwrapNullable6 = _slicedToArray(_unwrapNullable5, 1),
|
|
561
|
+
propTypeAnnotation = _unwrapNullable6[0];
|
|
444
562
|
const params = propTypeAnnotation.params.map(
|
|
445
563
|
param => `std::move(${param.name})`,
|
|
446
564
|
);
|
|
447
565
|
const paramTypes = propTypeAnnotation.params.map(param => {
|
|
448
566
|
const translatedParam = translatePrimitiveJSTypeToCpp(
|
|
449
567
|
moduleName,
|
|
568
|
+
null,
|
|
450
569
|
param.typeAnnotation,
|
|
451
570
|
param.optional,
|
|
452
571
|
typeName =>
|
|
@@ -458,6 +577,7 @@ function translatePropertyToCpp(
|
|
|
458
577
|
});
|
|
459
578
|
const returnType = translatePrimitiveJSTypeToCpp(
|
|
460
579
|
moduleName,
|
|
580
|
+
null,
|
|
461
581
|
propTypeAnnotation.returnTypeAnnotation,
|
|
462
582
|
false,
|
|
463
583
|
typeName => `Unsupported return type for ${prop.name}. Found: ${typeName}`,
|
|
@@ -481,7 +601,13 @@ function translatePropertyToCpp(
|
|
|
481
601
|
}`;
|
|
482
602
|
}
|
|
483
603
|
module.exports = {
|
|
484
|
-
generate(
|
|
604
|
+
generate(
|
|
605
|
+
libraryName,
|
|
606
|
+
schema,
|
|
607
|
+
packageName,
|
|
608
|
+
assumeNonnull = false,
|
|
609
|
+
headerPrefix,
|
|
610
|
+
) {
|
|
485
611
|
const nativeModules = getModules(schema);
|
|
486
612
|
const modules = Object.keys(nativeModules).flatMap(hasteModuleName => {
|
|
487
613
|
const _nativeModules$hasteM = nativeModules[hasteModuleName],
|