@react-native/codegen 0.72.1
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/README.md +21 -0
- package/lib/CodegenSchema.js +11 -0
- package/lib/CodegenSchema.js.flow +351 -0
- package/lib/SchemaValidator.js +54 -0
- package/lib/SchemaValidator.js.flow +67 -0
- package/lib/cli/combine/combine-js-to-schema-cli.js +50 -0
- package/lib/cli/combine/combine-js-to-schema-cli.js.flow +49 -0
- package/lib/cli/combine/combine-js-to-schema.js +110 -0
- package/lib/cli/combine/combine-js-to-schema.js.flow +48 -0
- package/lib/cli/combine/combine-utils.js +118 -0
- package/lib/cli/combine/combine-utils.js.flow +85 -0
- package/lib/cli/generators/generate-all.js +65 -0
- package/lib/cli/generators/generate-all.js.flow +66 -0
- package/lib/cli/parser/parser-cli.js +55 -0
- package/lib/cli/parser/parser-cli.js.flow +18 -0
- package/lib/cli/parser/parser.js +35 -0
- package/lib/cli/parser/parser.js.flow +37 -0
- package/lib/cli/parser/parser.sh +15 -0
- package/lib/generators/RNCodegen.js +207 -0
- package/lib/generators/RNCodegen.js.flow +284 -0
- package/lib/generators/Utils.js +31 -0
- package/lib/generators/Utils.js.flow +33 -0
- package/lib/generators/__test_fixtures__/fixtures.js +79 -0
- package/lib/generators/__test_fixtures__/fixtures.js.flow +82 -0
- package/lib/generators/components/ComponentsGeneratorUtils.js +217 -0
- package/lib/generators/components/ComponentsGeneratorUtils.js.flow +304 -0
- package/lib/generators/components/CppHelpers.js +188 -0
- package/lib/generators/components/CppHelpers.js.flow +228 -0
- package/lib/generators/components/GenerateComponentDescriptorH.js +75 -0
- package/lib/generators/components/GenerateComponentDescriptorH.js.flow +95 -0
- package/lib/generators/components/GenerateComponentHObjCpp.js +327 -0
- package/lib/generators/components/GenerateComponentHObjCpp.js.flow +418 -0
- package/lib/generators/components/GenerateEventEmitterCpp.js +199 -0
- package/lib/generators/components/GenerateEventEmitterCpp.js.flow +273 -0
- package/lib/generators/components/GenerateEventEmitterH.js +224 -0
- package/lib/generators/components/GenerateEventEmitterH.js.flow +315 -0
- package/lib/generators/components/GeneratePropsCpp.js +126 -0
- package/lib/generators/components/GeneratePropsCpp.js.flow +161 -0
- package/lib/generators/components/GeneratePropsH.js +606 -0
- package/lib/generators/components/GeneratePropsH.js.flow +778 -0
- package/lib/generators/components/GeneratePropsJavaDelegate.js +287 -0
- package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +348 -0
- package/lib/generators/components/GeneratePropsJavaInterface.js +237 -0
- package/lib/generators/components/GeneratePropsJavaInterface.js.flow +288 -0
- package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js +157 -0
- package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +187 -0
- package/lib/generators/components/GeneratePropsJavaPojo/index.js +66 -0
- package/lib/generators/components/GeneratePropsJavaPojo/index.js.flow +80 -0
- package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js +273 -0
- package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +296 -0
- package/lib/generators/components/GenerateShadowNodeCpp.js +73 -0
- package/lib/generators/components/GenerateShadowNodeCpp.js.flow +95 -0
- package/lib/generators/components/GenerateShadowNodeH.js +91 -0
- package/lib/generators/components/GenerateShadowNodeH.js.flow +124 -0
- package/lib/generators/components/GenerateStateCpp.js +70 -0
- package/lib/generators/components/GenerateStateCpp.js.flow +92 -0
- package/lib/generators/components/GenerateStateH.js +93 -0
- package/lib/generators/components/GenerateStateH.js.flow +111 -0
- package/lib/generators/components/GenerateTests.js +165 -0
- package/lib/generators/components/GenerateTests.js.flow +219 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js +91 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js.flow +107 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js +89 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js.flow +105 -0
- package/lib/generators/components/GenerateViewConfigJs.js +410 -0
- package/lib/generators/components/GenerateViewConfigJs.js.flow +484 -0
- package/lib/generators/components/JavaHelpers.js +87 -0
- package/lib/generators/components/JavaHelpers.js.flow +119 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js +1641 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js.flow +1672 -0
- package/lib/generators/modules/GenerateModuleCpp.js +299 -0
- package/lib/generators/modules/GenerateModuleCpp.js.flow +278 -0
- package/lib/generators/modules/GenerateModuleH.js +373 -0
- package/lib/generators/modules/GenerateModuleH.js.flow +355 -0
- package/lib/generators/modules/GenerateModuleJavaSpec.js +571 -0
- package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +553 -0
- package/lib/generators/modules/GenerateModuleJniCpp.js +505 -0
- package/lib/generators/modules/GenerateModuleJniCpp.js.flow +523 -0
- package/lib/generators/modules/GenerateModuleJniH.js +138 -0
- package/lib/generators/modules/GenerateModuleJniH.js.flow +148 -0
- package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js +262 -0
- package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js.flow +208 -0
- package/lib/generators/modules/GenerateModuleObjCpp/Utils.js +25 -0
- package/lib/generators/modules/GenerateModuleObjCpp/Utils.js.flow +32 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js +337 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js.flow +288 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js +330 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js.flow +279 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeStruct.js +25 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeStruct.js.flow +35 -0
- package/lib/generators/modules/GenerateModuleObjCpp/index.js +185 -0
- package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +219 -0
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js +529 -0
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +510 -0
- package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js +96 -0
- package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js.flow +121 -0
- package/lib/generators/modules/Utils.js +34 -0
- package/lib/generators/modules/Utils.js.flow +53 -0
- package/lib/generators/modules/__test_fixtures__/fixtures.js +1658 -0
- package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +1669 -0
- package/lib/parsers/consistency/compareSnaps.js +84 -0
- package/lib/parsers/error-utils.js +284 -0
- package/lib/parsers/error-utils.js.flow +295 -0
- package/lib/parsers/errors.js +350 -0
- package/lib/parsers/errors.js.flow +439 -0
- package/lib/parsers/flow/components/__test_fixtures__/failures.js +583 -0
- package/lib/parsers/flow/components/__test_fixtures__/failures.js.flow +600 -0
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +1001 -0
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +1016 -0
- package/lib/parsers/flow/components/commands.js +104 -0
- package/lib/parsers/flow/components/commands.js.flow +123 -0
- package/lib/parsers/flow/components/componentsUtils.js +446 -0
- package/lib/parsers/flow/components/componentsUtils.js.flow +496 -0
- package/lib/parsers/flow/components/events.js +233 -0
- package/lib/parsers/flow/components/events.js.flow +262 -0
- package/lib/parsers/flow/components/extends.js +52 -0
- package/lib/parsers/flow/components/extends.js.flow +66 -0
- package/lib/parsers/flow/components/index.js +267 -0
- package/lib/parsers/flow/components/index.js.flow +226 -0
- package/lib/parsers/flow/components/options.js +72 -0
- package/lib/parsers/flow/components/options.js.flow +87 -0
- package/lib/parsers/flow/components/props.js +47 -0
- package/lib/parsers/flow/components/props.js.flow +60 -0
- package/lib/parsers/flow/components/schema.js +106 -0
- package/lib/parsers/flow/components/schema.js.flow +62 -0
- package/lib/parsers/flow/index.js +80 -0
- package/lib/parsers/flow/index.js.flow +85 -0
- package/lib/parsers/flow/modules/__test_fixtures__/failures.js +215 -0
- package/lib/parsers/flow/modules/__test_fixtures__/failures.js.flow +223 -0
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +724 -0
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +747 -0
- package/lib/parsers/flow/modules/index.js +528 -0
- package/lib/parsers/flow/modules/index.js.flow +420 -0
- package/lib/parsers/flow/parser.js +109 -0
- package/lib/parsers/flow/parser.js.flow +83 -0
- package/lib/parsers/flow/utils.js +108 -0
- package/lib/parsers/flow/utils.js.flow +123 -0
- package/lib/parsers/parser.js +11 -0
- package/lib/parsers/parser.js.flow +70 -0
- package/lib/parsers/parserMock.js +96 -0
- package/lib/parsers/parserMock.js.flow +68 -0
- package/lib/parsers/parsers-commons.js +448 -0
- package/lib/parsers/parsers-commons.js.flow +447 -0
- package/lib/parsers/parsers-primitives.js +387 -0
- package/lib/parsers/parsers-primitives.js.flow +383 -0
- package/lib/parsers/parsers-utils.js +18 -0
- package/lib/parsers/parsers-utils.js.flow +19 -0
- package/lib/parsers/schema/index.js +23 -0
- package/lib/parsers/schema/index.js.flow +26 -0
- package/lib/parsers/typescript/components/__test_fixtures__/failures.js +489 -0
- package/lib/parsers/typescript/components/__test_fixtures__/failures.js.flow +505 -0
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +1151 -0
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +1168 -0
- package/lib/parsers/typescript/components/commands.js +132 -0
- package/lib/parsers/typescript/components/commands.js.flow +151 -0
- package/lib/parsers/typescript/components/componentsUtils.js +471 -0
- package/lib/parsers/typescript/components/componentsUtils.js.flow +521 -0
- package/lib/parsers/typescript/components/events.js +240 -0
- package/lib/parsers/typescript/components/events.js.flow +262 -0
- package/lib/parsers/typescript/components/extends.js +88 -0
- package/lib/parsers/typescript/components/extends.js.flow +103 -0
- package/lib/parsers/typescript/components/index.js +277 -0
- package/lib/parsers/typescript/components/index.js.flow +239 -0
- package/lib/parsers/typescript/components/options.js +72 -0
- package/lib/parsers/typescript/components/options.js.flow +87 -0
- package/lib/parsers/typescript/components/props.js +39 -0
- package/lib/parsers/typescript/components/props.js.flow +48 -0
- package/lib/parsers/typescript/components/schema.js +106 -0
- package/lib/parsers/typescript/components/schema.js.flow +62 -0
- package/lib/parsers/typescript/index.js +85 -0
- package/lib/parsers/typescript/index.js.flow +94 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/failures.js +160 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/failures.js.flow +167 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +701 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +727 -0
- package/lib/parsers/typescript/modules/index.js +543 -0
- package/lib/parsers/typescript/modules/index.js.flow +435 -0
- package/lib/parsers/typescript/parseTopLevelType.js +203 -0
- package/lib/parsers/typescript/parseTopLevelType.js.flow +243 -0
- package/lib/parsers/typescript/parser.js +105 -0
- package/lib/parsers/typescript/parser.js.flow +87 -0
- package/lib/parsers/typescript/utils.js +101 -0
- package/lib/parsers/typescript/utils.js.flow +115 -0
- package/lib/parsers/utils.js +273 -0
- package/lib/parsers/utils.js.flow +266 -0
- package/package.json +45 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
const _require = require('../Utils'),
|
|
14
|
+
createAliasResolver = _require.createAliasResolver,
|
|
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;
|
|
24
|
+
const ModuleDeclarationTemplate = ({
|
|
25
|
+
hasteModuleName,
|
|
26
|
+
structDeclarations,
|
|
27
|
+
protocolMethods,
|
|
28
|
+
}) => `${structDeclarations}
|
|
29
|
+
@protocol ${hasteModuleName}Spec <RCTBridgeModule, RCTTurboModule>
|
|
30
|
+
|
|
31
|
+
${protocolMethods}
|
|
32
|
+
|
|
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 ¶ms);
|
|
42
|
+
};
|
|
43
|
+
} // namespace react
|
|
44
|
+
} // namespace facebook`;
|
|
45
|
+
const HeaderFileTemplate = ({
|
|
46
|
+
moduleDeclarations,
|
|
47
|
+
structInlineMethods,
|
|
48
|
+
assumeNonnull,
|
|
49
|
+
}) =>
|
|
50
|
+
`/**
|
|
51
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
52
|
+
*
|
|
53
|
+
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
54
|
+
* once the code is regenerated.
|
|
55
|
+
*
|
|
56
|
+
* ${'@'}generated by codegen project: GenerateModuleObjCpp
|
|
57
|
+
*
|
|
58
|
+
* We create an umbrella header (and corresponding implementation) here since
|
|
59
|
+
* Cxx compilation in BUCK has a limitation: source-code producing genrule()s
|
|
60
|
+
* must have a single output. More files => more genrule()s => slower builds.
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
#ifndef __cplusplus
|
|
64
|
+
#error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.
|
|
65
|
+
#endif
|
|
66
|
+
#import <Foundation/Foundation.h>
|
|
67
|
+
#import <RCTRequired/RCTRequired.h>
|
|
68
|
+
#import <RCTTypeSafety/RCTConvertHelpers.h>
|
|
69
|
+
#import <RCTTypeSafety/RCTTypedModuleConstants.h>
|
|
70
|
+
#import <React/RCTBridgeModule.h>
|
|
71
|
+
#import <React/RCTCxxConvert.h>
|
|
72
|
+
#import <React/RCTManagedPointer.h>
|
|
73
|
+
#import <ReactCommon/RCTTurboModule.h>
|
|
74
|
+
#import <optional>
|
|
75
|
+
#import <vector>
|
|
76
|
+
|
|
77
|
+
` +
|
|
78
|
+
(assumeNonnull ? '\nNS_ASSUME_NONNULL_BEGIN\n' : '') +
|
|
79
|
+
moduleDeclarations +
|
|
80
|
+
'\n' +
|
|
81
|
+
structInlineMethods +
|
|
82
|
+
(assumeNonnull ? '\nNS_ASSUME_NONNULL_END\n' : '\n');
|
|
83
|
+
const SourceFileTemplate = ({headerFileName, moduleImplementations}) => `/**
|
|
84
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
85
|
+
*
|
|
86
|
+
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
87
|
+
* once the code is regenerated.
|
|
88
|
+
*
|
|
89
|
+
* ${'@'}generated by codegen project: GenerateModuleObjCpp
|
|
90
|
+
*
|
|
91
|
+
* We create an umbrella header (and corresponding implementation) here since
|
|
92
|
+
* Cxx compilation in BUCK has a limitation: source-code producing genrule()s
|
|
93
|
+
* must have a single output. More files => more genrule()s => slower builds.
|
|
94
|
+
*/
|
|
95
|
+
|
|
96
|
+
#import "${headerFileName}"
|
|
97
|
+
|
|
98
|
+
${moduleImplementations}
|
|
99
|
+
`;
|
|
100
|
+
module.exports = {
|
|
101
|
+
generate(libraryName, schema, packageName, assumeNonnull) {
|
|
102
|
+
const nativeModules = getModules(schema);
|
|
103
|
+
const moduleDeclarations = [];
|
|
104
|
+
const structInlineMethods = [];
|
|
105
|
+
const moduleImplementations = [];
|
|
106
|
+
const hasteModuleNames = Object.keys(nativeModules).sort();
|
|
107
|
+
for (const hasteModuleName of hasteModuleNames) {
|
|
108
|
+
const _nativeModules$hasteM = nativeModules[hasteModuleName],
|
|
109
|
+
aliases = _nativeModules$hasteM.aliases,
|
|
110
|
+
excludedPlatforms = _nativeModules$hasteM.excludedPlatforms,
|
|
111
|
+
properties = _nativeModules$hasteM.spec.properties;
|
|
112
|
+
if (excludedPlatforms != null && excludedPlatforms.includes('iOS')) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const resolveAlias = createAliasResolver(aliases);
|
|
116
|
+
const structCollector = new StructCollector();
|
|
117
|
+
const methodSerializations = [];
|
|
118
|
+
const serializeProperty = property => {
|
|
119
|
+
methodSerializations.push(
|
|
120
|
+
...serializeMethod(
|
|
121
|
+
hasteModuleName,
|
|
122
|
+
property,
|
|
123
|
+
structCollector,
|
|
124
|
+
resolveAlias,
|
|
125
|
+
),
|
|
126
|
+
);
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Note: As we serialize NativeModule methods, we insert structs into
|
|
131
|
+
* StructCollector, as we encounter them.
|
|
132
|
+
*/
|
|
133
|
+
properties
|
|
134
|
+
.filter(property => property.name !== 'getConstants')
|
|
135
|
+
.forEach(serializeProperty);
|
|
136
|
+
properties
|
|
137
|
+
.filter(property => property.name === 'getConstants')
|
|
138
|
+
.forEach(serializeProperty);
|
|
139
|
+
const generatedStructs = structCollector.getAllStructs();
|
|
140
|
+
const structStrs = [];
|
|
141
|
+
const methodStrs = [];
|
|
142
|
+
for (const struct of generatedStructs) {
|
|
143
|
+
const _serializeStruct = serializeStruct(hasteModuleName, struct),
|
|
144
|
+
methods = _serializeStruct.methods,
|
|
145
|
+
declaration = _serializeStruct.declaration;
|
|
146
|
+
structStrs.push(declaration);
|
|
147
|
+
methodStrs.push(methods);
|
|
148
|
+
}
|
|
149
|
+
moduleDeclarations.push(
|
|
150
|
+
ModuleDeclarationTemplate({
|
|
151
|
+
hasteModuleName: hasteModuleName,
|
|
152
|
+
structDeclarations: structStrs.join('\n'),
|
|
153
|
+
protocolMethods: methodSerializations
|
|
154
|
+
.map(({protocolMethod}) => protocolMethod)
|
|
155
|
+
.join('\n'),
|
|
156
|
+
}),
|
|
157
|
+
);
|
|
158
|
+
structInlineMethods.push(methodStrs.join('\n'));
|
|
159
|
+
moduleImplementations.push(
|
|
160
|
+
serializeModuleSource(
|
|
161
|
+
hasteModuleName,
|
|
162
|
+
generatedStructs,
|
|
163
|
+
methodSerializations.filter(
|
|
164
|
+
({selector}) => selector !== '@selector(constantsToExport)',
|
|
165
|
+
),
|
|
166
|
+
),
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
const headerFileName = `${libraryName}.h`;
|
|
170
|
+
const headerFile = HeaderFileTemplate({
|
|
171
|
+
moduleDeclarations: moduleDeclarations.join('\n'),
|
|
172
|
+
structInlineMethods: structInlineMethods.join('\n'),
|
|
173
|
+
assumeNonnull,
|
|
174
|
+
});
|
|
175
|
+
const sourceFileName = `${libraryName}-generated.mm`;
|
|
176
|
+
const sourceFile = SourceFileTemplate({
|
|
177
|
+
headerFileName,
|
|
178
|
+
moduleImplementations: moduleImplementations.join('\n'),
|
|
179
|
+
});
|
|
180
|
+
return new Map([
|
|
181
|
+
[headerFileName, headerFile],
|
|
182
|
+
[sourceFileName, sourceFile],
|
|
183
|
+
]);
|
|
184
|
+
},
|
|
185
|
+
};
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
import type {NativeModulePropertyShape} from '../../../CodegenSchema';
|
|
13
|
+
|
|
14
|
+
import type {SchemaType} from '../../../CodegenSchema';
|
|
15
|
+
import type {MethodSerializationOutput} from './serializeMethod';
|
|
16
|
+
|
|
17
|
+
const {createAliasResolver, getModules} = require('../Utils');
|
|
18
|
+
|
|
19
|
+
const {StructCollector} = require('./StructCollector');
|
|
20
|
+
const {serializeStruct} = require('./header/serializeStruct');
|
|
21
|
+
const {serializeMethod} = require('./serializeMethod');
|
|
22
|
+
const {serializeModuleSource} = require('./source/serializeModule');
|
|
23
|
+
|
|
24
|
+
type FilesOutput = Map<string, string>;
|
|
25
|
+
|
|
26
|
+
const ModuleDeclarationTemplate = ({
|
|
27
|
+
hasteModuleName,
|
|
28
|
+
structDeclarations,
|
|
29
|
+
protocolMethods,
|
|
30
|
+
}: $ReadOnly<{
|
|
31
|
+
hasteModuleName: string,
|
|
32
|
+
structDeclarations: string,
|
|
33
|
+
protocolMethods: string,
|
|
34
|
+
}>) => `${structDeclarations}
|
|
35
|
+
@protocol ${hasteModuleName}Spec <RCTBridgeModule, RCTTurboModule>
|
|
36
|
+
|
|
37
|
+
${protocolMethods}
|
|
38
|
+
|
|
39
|
+
@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 ¶ms);
|
|
48
|
+
};
|
|
49
|
+
} // namespace react
|
|
50
|
+
} // namespace facebook`;
|
|
51
|
+
|
|
52
|
+
const HeaderFileTemplate = ({
|
|
53
|
+
moduleDeclarations,
|
|
54
|
+
structInlineMethods,
|
|
55
|
+
assumeNonnull,
|
|
56
|
+
}: $ReadOnly<{
|
|
57
|
+
moduleDeclarations: string,
|
|
58
|
+
structInlineMethods: string,
|
|
59
|
+
assumeNonnull: boolean,
|
|
60
|
+
}>) =>
|
|
61
|
+
`/**
|
|
62
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
63
|
+
*
|
|
64
|
+
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
65
|
+
* once the code is regenerated.
|
|
66
|
+
*
|
|
67
|
+
* ${'@'}generated by codegen project: GenerateModuleObjCpp
|
|
68
|
+
*
|
|
69
|
+
* We create an umbrella header (and corresponding implementation) here since
|
|
70
|
+
* Cxx compilation in BUCK has a limitation: source-code producing genrule()s
|
|
71
|
+
* must have a single output. More files => more genrule()s => slower builds.
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
#ifndef __cplusplus
|
|
75
|
+
#error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.
|
|
76
|
+
#endif
|
|
77
|
+
#import <Foundation/Foundation.h>
|
|
78
|
+
#import <RCTRequired/RCTRequired.h>
|
|
79
|
+
#import <RCTTypeSafety/RCTConvertHelpers.h>
|
|
80
|
+
#import <RCTTypeSafety/RCTTypedModuleConstants.h>
|
|
81
|
+
#import <React/RCTBridgeModule.h>
|
|
82
|
+
#import <React/RCTCxxConvert.h>
|
|
83
|
+
#import <React/RCTManagedPointer.h>
|
|
84
|
+
#import <ReactCommon/RCTTurboModule.h>
|
|
85
|
+
#import <optional>
|
|
86
|
+
#import <vector>
|
|
87
|
+
|
|
88
|
+
` +
|
|
89
|
+
(assumeNonnull ? '\nNS_ASSUME_NONNULL_BEGIN\n' : '') +
|
|
90
|
+
moduleDeclarations +
|
|
91
|
+
'\n' +
|
|
92
|
+
structInlineMethods +
|
|
93
|
+
(assumeNonnull ? '\nNS_ASSUME_NONNULL_END\n' : '\n');
|
|
94
|
+
|
|
95
|
+
const SourceFileTemplate = ({
|
|
96
|
+
headerFileName,
|
|
97
|
+
moduleImplementations,
|
|
98
|
+
}: $ReadOnly<{
|
|
99
|
+
headerFileName: string,
|
|
100
|
+
moduleImplementations: string,
|
|
101
|
+
}>) => `/**
|
|
102
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
103
|
+
*
|
|
104
|
+
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
105
|
+
* once the code is regenerated.
|
|
106
|
+
*
|
|
107
|
+
* ${'@'}generated by codegen project: GenerateModuleObjCpp
|
|
108
|
+
*
|
|
109
|
+
* We create an umbrella header (and corresponding implementation) here since
|
|
110
|
+
* Cxx compilation in BUCK has a limitation: source-code producing genrule()s
|
|
111
|
+
* must have a single output. More files => more genrule()s => slower builds.
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
#import "${headerFileName}"
|
|
115
|
+
|
|
116
|
+
${moduleImplementations}
|
|
117
|
+
`;
|
|
118
|
+
|
|
119
|
+
module.exports = {
|
|
120
|
+
generate(
|
|
121
|
+
libraryName: string,
|
|
122
|
+
schema: SchemaType,
|
|
123
|
+
packageName?: string,
|
|
124
|
+
assumeNonnull: boolean,
|
|
125
|
+
): FilesOutput {
|
|
126
|
+
const nativeModules = getModules(schema);
|
|
127
|
+
|
|
128
|
+
const moduleDeclarations: Array<string> = [];
|
|
129
|
+
const structInlineMethods: Array<string> = [];
|
|
130
|
+
const moduleImplementations: Array<string> = [];
|
|
131
|
+
|
|
132
|
+
const hasteModuleNames: Array<string> = Object.keys(nativeModules).sort();
|
|
133
|
+
for (const hasteModuleName of hasteModuleNames) {
|
|
134
|
+
const {
|
|
135
|
+
aliases,
|
|
136
|
+
excludedPlatforms,
|
|
137
|
+
spec: {properties},
|
|
138
|
+
} = nativeModules[hasteModuleName];
|
|
139
|
+
if (excludedPlatforms != null && excludedPlatforms.includes('iOS')) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const resolveAlias = createAliasResolver(aliases);
|
|
143
|
+
const structCollector = new StructCollector();
|
|
144
|
+
|
|
145
|
+
const methodSerializations: Array<MethodSerializationOutput> = [];
|
|
146
|
+
const serializeProperty = (property: NativeModulePropertyShape) => {
|
|
147
|
+
methodSerializations.push(
|
|
148
|
+
...serializeMethod(
|
|
149
|
+
hasteModuleName,
|
|
150
|
+
property,
|
|
151
|
+
structCollector,
|
|
152
|
+
resolveAlias,
|
|
153
|
+
),
|
|
154
|
+
);
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Note: As we serialize NativeModule methods, we insert structs into
|
|
159
|
+
* StructCollector, as we encounter them.
|
|
160
|
+
*/
|
|
161
|
+
properties
|
|
162
|
+
.filter(property => property.name !== 'getConstants')
|
|
163
|
+
.forEach(serializeProperty);
|
|
164
|
+
properties
|
|
165
|
+
.filter(property => property.name === 'getConstants')
|
|
166
|
+
.forEach(serializeProperty);
|
|
167
|
+
|
|
168
|
+
const generatedStructs = structCollector.getAllStructs();
|
|
169
|
+
const structStrs = [];
|
|
170
|
+
const methodStrs = [];
|
|
171
|
+
|
|
172
|
+
for (const struct of generatedStructs) {
|
|
173
|
+
const {methods, declaration} = serializeStruct(hasteModuleName, struct);
|
|
174
|
+
structStrs.push(declaration);
|
|
175
|
+
methodStrs.push(methods);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
moduleDeclarations.push(
|
|
179
|
+
ModuleDeclarationTemplate({
|
|
180
|
+
hasteModuleName: hasteModuleName,
|
|
181
|
+
structDeclarations: structStrs.join('\n'),
|
|
182
|
+
protocolMethods: methodSerializations
|
|
183
|
+
.map(({protocolMethod}) => protocolMethod)
|
|
184
|
+
.join('\n'),
|
|
185
|
+
}),
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
structInlineMethods.push(methodStrs.join('\n'));
|
|
189
|
+
|
|
190
|
+
moduleImplementations.push(
|
|
191
|
+
serializeModuleSource(
|
|
192
|
+
hasteModuleName,
|
|
193
|
+
generatedStructs,
|
|
194
|
+
methodSerializations.filter(
|
|
195
|
+
({selector}) => selector !== '@selector(constantsToExport)',
|
|
196
|
+
),
|
|
197
|
+
),
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const headerFileName = `${libraryName}.h`;
|
|
202
|
+
const headerFile = HeaderFileTemplate({
|
|
203
|
+
moduleDeclarations: moduleDeclarations.join('\n'),
|
|
204
|
+
structInlineMethods: structInlineMethods.join('\n'),
|
|
205
|
+
assumeNonnull,
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
const sourceFileName = `${libraryName}-generated.mm`;
|
|
209
|
+
const sourceFile = SourceFileTemplate({
|
|
210
|
+
headerFileName,
|
|
211
|
+
moduleImplementations: moduleImplementations.join('\n'),
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
return new Map([
|
|
215
|
+
[headerFileName, headerFile],
|
|
216
|
+
[sourceFileName, sourceFile],
|
|
217
|
+
]);
|
|
218
|
+
},
|
|
219
|
+
};
|