@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
|
@@ -256,6 +256,19 @@ function convertDefaultTypeToString(
|
|
|
256
256
|
}
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
+
const IncludeTemplate = ({
|
|
260
|
+
headerPrefix,
|
|
261
|
+
file,
|
|
262
|
+
}: {
|
|
263
|
+
headerPrefix: string,
|
|
264
|
+
file: string,
|
|
265
|
+
}): string => {
|
|
266
|
+
if (headerPrefix === '') {
|
|
267
|
+
return `#include "${file}"`;
|
|
268
|
+
}
|
|
269
|
+
return `#include <${headerPrefix}${file}>`;
|
|
270
|
+
};
|
|
271
|
+
|
|
259
272
|
module.exports = {
|
|
260
273
|
convertDefaultTypeToString,
|
|
261
274
|
getCppArrayTypeForAnnotation,
|
|
@@ -265,4 +278,5 @@ module.exports = {
|
|
|
265
278
|
toIntEnumValueName,
|
|
266
279
|
generateStructName,
|
|
267
280
|
generateEventStructName,
|
|
281
|
+
IncludeTemplate,
|
|
268
282
|
};
|
|
@@ -0,0 +1,89 @@
|
|
|
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('./CppHelpers'),
|
|
14
|
+
IncludeTemplate = _require.IncludeTemplate;
|
|
15
|
+
|
|
16
|
+
// File path -> contents
|
|
17
|
+
|
|
18
|
+
const FileTemplate = ({libraryName, componentRegistrations, headerPrefix}) => `
|
|
19
|
+
/**
|
|
20
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
21
|
+
*
|
|
22
|
+
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
23
|
+
* once the code is regenerated.
|
|
24
|
+
*
|
|
25
|
+
* ${'@'}generated by codegen project: GenerateComponentDescriptorCpp.js
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
${IncludeTemplate({
|
|
29
|
+
headerPrefix,
|
|
30
|
+
file: 'ComponentDescriptors.h',
|
|
31
|
+
})}
|
|
32
|
+
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
|
33
|
+
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
|
|
34
|
+
|
|
35
|
+
namespace facebook::react {
|
|
36
|
+
|
|
37
|
+
void ${libraryName}_registerComponentDescriptorsFromCodegen(
|
|
38
|
+
std::shared_ptr<const ComponentDescriptorProviderRegistry> registry) {
|
|
39
|
+
${componentRegistrations}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
} // namespace facebook::react
|
|
43
|
+
`;
|
|
44
|
+
const ComponentRegistrationTemplate = ({className}) =>
|
|
45
|
+
`
|
|
46
|
+
registry->add(concreteComponentDescriptorProvider<${className}ComponentDescriptor>());
|
|
47
|
+
`.trim();
|
|
48
|
+
module.exports = {
|
|
49
|
+
generate(
|
|
50
|
+
libraryName,
|
|
51
|
+
schema,
|
|
52
|
+
packageName,
|
|
53
|
+
assumeNonnull = false,
|
|
54
|
+
headerPrefix,
|
|
55
|
+
) {
|
|
56
|
+
const fileName = 'ComponentDescriptors.cpp';
|
|
57
|
+
const componentRegistrations = Object.keys(schema.modules)
|
|
58
|
+
.map(moduleName => {
|
|
59
|
+
const module = schema.modules[moduleName];
|
|
60
|
+
if (module.type !== 'Component') {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const components = module.components;
|
|
64
|
+
// No components in this module
|
|
65
|
+
if (components == null) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return Object.keys(components)
|
|
69
|
+
.map(componentName => {
|
|
70
|
+
if (components[componentName].interfaceOnly === true) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
return ComponentRegistrationTemplate({
|
|
74
|
+
className: componentName,
|
|
75
|
+
});
|
|
76
|
+
})
|
|
77
|
+
.join('\n');
|
|
78
|
+
})
|
|
79
|
+
.filter(Boolean)
|
|
80
|
+
.join('\n');
|
|
81
|
+
const replacedTemplate = FileTemplate({
|
|
82
|
+
libraryName,
|
|
83
|
+
componentRegistrations,
|
|
84
|
+
headerPrefix:
|
|
85
|
+
headerPrefix !== null && headerPrefix !== void 0 ? headerPrefix : '',
|
|
86
|
+
});
|
|
87
|
+
return new Map([[fileName, replacedTemplate]]);
|
|
88
|
+
},
|
|
89
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
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
|
+
|
|
13
|
+
import type {SchemaType} from '../../CodegenSchema';
|
|
14
|
+
|
|
15
|
+
const {IncludeTemplate} = require('./CppHelpers');
|
|
16
|
+
|
|
17
|
+
// File path -> contents
|
|
18
|
+
type FilesOutput = Map<string, string>;
|
|
19
|
+
|
|
20
|
+
const FileTemplate = ({
|
|
21
|
+
libraryName,
|
|
22
|
+
componentRegistrations,
|
|
23
|
+
headerPrefix,
|
|
24
|
+
}: {
|
|
25
|
+
libraryName: string,
|
|
26
|
+
componentRegistrations: string,
|
|
27
|
+
headerPrefix: string,
|
|
28
|
+
}) => `
|
|
29
|
+
/**
|
|
30
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
31
|
+
*
|
|
32
|
+
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
33
|
+
* once the code is regenerated.
|
|
34
|
+
*
|
|
35
|
+
* ${'@'}generated by codegen project: GenerateComponentDescriptorCpp.js
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
${IncludeTemplate({headerPrefix, file: 'ComponentDescriptors.h'})}
|
|
39
|
+
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
|
40
|
+
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
|
|
41
|
+
|
|
42
|
+
namespace facebook::react {
|
|
43
|
+
|
|
44
|
+
void ${libraryName}_registerComponentDescriptorsFromCodegen(
|
|
45
|
+
std::shared_ptr<const ComponentDescriptorProviderRegistry> registry) {
|
|
46
|
+
${componentRegistrations}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
} // namespace facebook::react
|
|
50
|
+
`;
|
|
51
|
+
|
|
52
|
+
const ComponentRegistrationTemplate = ({className}: {className: string}) =>
|
|
53
|
+
`
|
|
54
|
+
registry->add(concreteComponentDescriptorProvider<${className}ComponentDescriptor>());
|
|
55
|
+
`.trim();
|
|
56
|
+
|
|
57
|
+
module.exports = {
|
|
58
|
+
generate(
|
|
59
|
+
libraryName: string,
|
|
60
|
+
schema: SchemaType,
|
|
61
|
+
packageName?: string,
|
|
62
|
+
assumeNonnull: boolean = false,
|
|
63
|
+
headerPrefix?: string,
|
|
64
|
+
): FilesOutput {
|
|
65
|
+
const fileName = 'ComponentDescriptors.cpp';
|
|
66
|
+
|
|
67
|
+
const componentRegistrations = Object.keys(schema.modules)
|
|
68
|
+
.map(moduleName => {
|
|
69
|
+
const module = schema.modules[moduleName];
|
|
70
|
+
if (module.type !== 'Component') {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const {components} = module;
|
|
75
|
+
// No components in this module
|
|
76
|
+
if (components == null) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return Object.keys(components)
|
|
81
|
+
.map(componentName => {
|
|
82
|
+
if (components[componentName].interfaceOnly === true) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return ComponentRegistrationTemplate({className: componentName});
|
|
87
|
+
})
|
|
88
|
+
.join('\n');
|
|
89
|
+
})
|
|
90
|
+
.filter(Boolean)
|
|
91
|
+
.join('\n');
|
|
92
|
+
|
|
93
|
+
const replacedTemplate = FileTemplate({
|
|
94
|
+
libraryName,
|
|
95
|
+
componentRegistrations,
|
|
96
|
+
headerPrefix: headerPrefix ?? '',
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
return new Map([[fileName, replacedTemplate]]);
|
|
100
|
+
},
|
|
101
|
+
};
|
|
@@ -10,9 +10,12 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
+
const _require = require('./CppHelpers'),
|
|
14
|
+
IncludeTemplate = _require.IncludeTemplate;
|
|
15
|
+
|
|
13
16
|
// File path -> contents
|
|
14
17
|
|
|
15
|
-
const FileTemplate = ({
|
|
18
|
+
const FileTemplate = ({libraryName, componentDefinitions, headerPrefix}) => `
|
|
16
19
|
/**
|
|
17
20
|
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
18
21
|
*
|
|
@@ -24,25 +27,36 @@ const FileTemplate = ({componentDescriptors, libraryName}) => `
|
|
|
24
27
|
|
|
25
28
|
#pragma once
|
|
26
29
|
|
|
27
|
-
|
|
30
|
+
${IncludeTemplate({
|
|
31
|
+
headerPrefix,
|
|
32
|
+
file: 'ShadowNodes.h',
|
|
33
|
+
})}
|
|
28
34
|
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
|
35
|
+
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
|
|
36
|
+
|
|
37
|
+
namespace facebook::react {
|
|
29
38
|
|
|
30
|
-
|
|
31
|
-
namespace react {
|
|
39
|
+
${componentDefinitions}
|
|
32
40
|
|
|
33
|
-
${
|
|
41
|
+
void ${libraryName}_registerComponentDescriptorsFromCodegen(
|
|
42
|
+
std::shared_ptr<const ComponentDescriptorProviderRegistry> registry);
|
|
34
43
|
|
|
35
|
-
} // namespace react
|
|
36
|
-
} // namespace facebook
|
|
44
|
+
} // namespace facebook::react
|
|
37
45
|
`;
|
|
38
|
-
const
|
|
46
|
+
const ComponentDefinitionTemplate = ({className}) =>
|
|
39
47
|
`
|
|
40
48
|
using ${className}ComponentDescriptor = ConcreteComponentDescriptor<${className}ShadowNode>;
|
|
41
49
|
`.trim();
|
|
42
50
|
module.exports = {
|
|
43
|
-
generate(
|
|
51
|
+
generate(
|
|
52
|
+
libraryName,
|
|
53
|
+
schema,
|
|
54
|
+
packageName,
|
|
55
|
+
assumeNonnull = false,
|
|
56
|
+
headerPrefix,
|
|
57
|
+
) {
|
|
44
58
|
const fileName = 'ComponentDescriptors.h';
|
|
45
|
-
const
|
|
59
|
+
const componentDefinitions = Object.keys(schema.modules)
|
|
46
60
|
.map(moduleName => {
|
|
47
61
|
const module = schema.modules[moduleName];
|
|
48
62
|
if (module.type !== 'Component') {
|
|
@@ -58,7 +72,7 @@ module.exports = {
|
|
|
58
72
|
if (components[componentName].interfaceOnly === true) {
|
|
59
73
|
return;
|
|
60
74
|
}
|
|
61
|
-
return
|
|
75
|
+
return ComponentDefinitionTemplate({
|
|
62
76
|
className: componentName,
|
|
63
77
|
});
|
|
64
78
|
})
|
|
@@ -67,8 +81,10 @@ module.exports = {
|
|
|
67
81
|
.filter(Boolean)
|
|
68
82
|
.join('\n');
|
|
69
83
|
const replacedTemplate = FileTemplate({
|
|
70
|
-
componentDescriptors,
|
|
71
84
|
libraryName,
|
|
85
|
+
componentDefinitions,
|
|
86
|
+
headerPrefix:
|
|
87
|
+
headerPrefix !== null && headerPrefix !== void 0 ? headerPrefix : '',
|
|
72
88
|
});
|
|
73
89
|
return new Map([[fileName, replacedTemplate]]);
|
|
74
90
|
},
|
|
@@ -12,15 +12,19 @@
|
|
|
12
12
|
|
|
13
13
|
import type {SchemaType} from '../../CodegenSchema';
|
|
14
14
|
|
|
15
|
+
const {IncludeTemplate} = require('./CppHelpers');
|
|
16
|
+
|
|
15
17
|
// File path -> contents
|
|
16
18
|
type FilesOutput = Map<string, string>;
|
|
17
19
|
|
|
18
20
|
const FileTemplate = ({
|
|
19
|
-
componentDescriptors,
|
|
20
21
|
libraryName,
|
|
22
|
+
componentDefinitions,
|
|
23
|
+
headerPrefix,
|
|
21
24
|
}: {
|
|
22
|
-
componentDescriptors: string,
|
|
23
25
|
libraryName: string,
|
|
26
|
+
componentDefinitions: string,
|
|
27
|
+
headerPrefix: string,
|
|
24
28
|
}) => `
|
|
25
29
|
/**
|
|
26
30
|
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
@@ -33,19 +37,21 @@ const FileTemplate = ({
|
|
|
33
37
|
|
|
34
38
|
#pragma once
|
|
35
39
|
|
|
36
|
-
|
|
40
|
+
${IncludeTemplate({headerPrefix, file: 'ShadowNodes.h'})}
|
|
37
41
|
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
|
42
|
+
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
|
|
43
|
+
|
|
44
|
+
namespace facebook::react {
|
|
38
45
|
|
|
39
|
-
|
|
40
|
-
namespace react {
|
|
46
|
+
${componentDefinitions}
|
|
41
47
|
|
|
42
|
-
${
|
|
48
|
+
void ${libraryName}_registerComponentDescriptorsFromCodegen(
|
|
49
|
+
std::shared_ptr<const ComponentDescriptorProviderRegistry> registry);
|
|
43
50
|
|
|
44
|
-
} // namespace react
|
|
45
|
-
} // namespace facebook
|
|
51
|
+
} // namespace facebook::react
|
|
46
52
|
`;
|
|
47
53
|
|
|
48
|
-
const
|
|
54
|
+
const ComponentDefinitionTemplate = ({className}: {className: string}) =>
|
|
49
55
|
`
|
|
50
56
|
using ${className}ComponentDescriptor = ConcreteComponentDescriptor<${className}ShadowNode>;
|
|
51
57
|
`.trim();
|
|
@@ -56,10 +62,11 @@ module.exports = {
|
|
|
56
62
|
schema: SchemaType,
|
|
57
63
|
packageName?: string,
|
|
58
64
|
assumeNonnull: boolean = false,
|
|
65
|
+
headerPrefix?: string,
|
|
59
66
|
): FilesOutput {
|
|
60
67
|
const fileName = 'ComponentDescriptors.h';
|
|
61
68
|
|
|
62
|
-
const
|
|
69
|
+
const componentDefinitions = Object.keys(schema.modules)
|
|
63
70
|
.map(moduleName => {
|
|
64
71
|
const module = schema.modules[moduleName];
|
|
65
72
|
if (module.type !== 'Component') {
|
|
@@ -78,7 +85,7 @@ module.exports = {
|
|
|
78
85
|
return;
|
|
79
86
|
}
|
|
80
87
|
|
|
81
|
-
return
|
|
88
|
+
return ComponentDefinitionTemplate({className: componentName});
|
|
82
89
|
})
|
|
83
90
|
.join('\n');
|
|
84
91
|
})
|
|
@@ -86,8 +93,9 @@ module.exports = {
|
|
|
86
93
|
.join('\n');
|
|
87
94
|
|
|
88
95
|
const replacedTemplate = FileTemplate({
|
|
89
|
-
componentDescriptors,
|
|
90
96
|
libraryName,
|
|
97
|
+
componentDefinitions,
|
|
98
|
+
headerPrefix: headerPrefix ?? '',
|
|
91
99
|
});
|
|
92
100
|
|
|
93
101
|
return new Map([[fileName, replacedTemplate]]);
|
|
@@ -125,6 +125,8 @@ function getObjCParamType(param) {
|
|
|
125
125
|
return 'NSInteger';
|
|
126
126
|
case 'StringTypeAnnotation':
|
|
127
127
|
return 'NSString *';
|
|
128
|
+
case 'ArrayTypeAnnotation':
|
|
129
|
+
return 'const NSArray *';
|
|
128
130
|
default:
|
|
129
131
|
typeAnnotation.type;
|
|
130
132
|
throw new Error('Received invalid param type annotation');
|
|
@@ -151,6 +153,8 @@ function getObjCExpectedKindParamType(param) {
|
|
|
151
153
|
return '[NSNumber class]';
|
|
152
154
|
case 'StringTypeAnnotation':
|
|
153
155
|
return '[NSString class]';
|
|
156
|
+
case 'ArrayTypeAnnotation':
|
|
157
|
+
return '[NSArray class]';
|
|
154
158
|
default:
|
|
155
159
|
typeAnnotation.type;
|
|
156
160
|
throw new Error('Received invalid param type annotation');
|
|
@@ -177,6 +181,8 @@ function getReadableExpectedKindParamType(param) {
|
|
|
177
181
|
return 'number';
|
|
178
182
|
case 'StringTypeAnnotation':
|
|
179
183
|
return 'string';
|
|
184
|
+
case 'ArrayTypeAnnotation':
|
|
185
|
+
return 'array';
|
|
180
186
|
default:
|
|
181
187
|
typeAnnotation.type;
|
|
182
188
|
throw new Error('Received invalid param type annotation');
|
|
@@ -203,6 +209,8 @@ function getObjCRightHandAssignmentParamType(param, index) {
|
|
|
203
209
|
return `[(NSNumber *)arg${index} intValue]`;
|
|
204
210
|
case 'StringTypeAnnotation':
|
|
205
211
|
return `(NSString *)arg${index}`;
|
|
212
|
+
case 'ArrayTypeAnnotation':
|
|
213
|
+
return `(NSArray *)arg${index}`;
|
|
206
214
|
default:
|
|
207
215
|
typeAnnotation.type;
|
|
208
216
|
throw new Error('Received invalid param type annotation');
|
|
@@ -286,7 +294,13 @@ function generateCommandHandler(component, componentName) {
|
|
|
286
294
|
});
|
|
287
295
|
}
|
|
288
296
|
module.exports = {
|
|
289
|
-
generate(
|
|
297
|
+
generate(
|
|
298
|
+
libraryName,
|
|
299
|
+
schema,
|
|
300
|
+
packageName,
|
|
301
|
+
assumeNonnull = false,
|
|
302
|
+
headerPrefix,
|
|
303
|
+
) {
|
|
290
304
|
const fileName = 'RCTComponentViewHelpers.h';
|
|
291
305
|
const componentContent = Object.keys(schema.modules)
|
|
292
306
|
.map(moduleName => {
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
13
|
import type {
|
|
14
|
-
|
|
14
|
+
CommandParamTypeAnnotation,
|
|
15
15
|
CommandTypeAnnotation,
|
|
16
16
|
ComponentShape,
|
|
17
|
+
NamedShape,
|
|
17
18
|
SchemaType,
|
|
18
|
-
CommandParamTypeAnnotation,
|
|
19
19
|
} from '../../CodegenSchema';
|
|
20
20
|
|
|
21
21
|
type FilesOutput = Map<string, string>;
|
|
@@ -171,6 +171,8 @@ function getObjCParamType(param: Param): string {
|
|
|
171
171
|
return 'NSInteger';
|
|
172
172
|
case 'StringTypeAnnotation':
|
|
173
173
|
return 'NSString *';
|
|
174
|
+
case 'ArrayTypeAnnotation':
|
|
175
|
+
return 'const NSArray *';
|
|
174
176
|
default:
|
|
175
177
|
(typeAnnotation.type: empty);
|
|
176
178
|
throw new Error('Received invalid param type annotation');
|
|
@@ -199,6 +201,8 @@ function getObjCExpectedKindParamType(param: Param): string {
|
|
|
199
201
|
return '[NSNumber class]';
|
|
200
202
|
case 'StringTypeAnnotation':
|
|
201
203
|
return '[NSString class]';
|
|
204
|
+
case 'ArrayTypeAnnotation':
|
|
205
|
+
return '[NSArray class]';
|
|
202
206
|
default:
|
|
203
207
|
(typeAnnotation.type: empty);
|
|
204
208
|
throw new Error('Received invalid param type annotation');
|
|
@@ -227,6 +231,8 @@ function getReadableExpectedKindParamType(param: Param): string {
|
|
|
227
231
|
return 'number';
|
|
228
232
|
case 'StringTypeAnnotation':
|
|
229
233
|
return 'string';
|
|
234
|
+
case 'ArrayTypeAnnotation':
|
|
235
|
+
return 'array';
|
|
230
236
|
default:
|
|
231
237
|
(typeAnnotation.type: empty);
|
|
232
238
|
throw new Error('Received invalid param type annotation');
|
|
@@ -258,6 +264,8 @@ function getObjCRightHandAssignmentParamType(
|
|
|
258
264
|
return `[(NSNumber *)arg${index} intValue]`;
|
|
259
265
|
case 'StringTypeAnnotation':
|
|
260
266
|
return `(NSString *)arg${index}`;
|
|
267
|
+
case 'ArrayTypeAnnotation':
|
|
268
|
+
return `(NSArray *)arg${index}`;
|
|
261
269
|
default:
|
|
262
270
|
(typeAnnotation.type: empty);
|
|
263
271
|
throw new Error('Received invalid param type annotation');
|
|
@@ -372,6 +380,7 @@ module.exports = {
|
|
|
372
380
|
schema: SchemaType,
|
|
373
381
|
packageName?: string,
|
|
374
382
|
assumeNonnull: boolean = false,
|
|
383
|
+
headerPrefix?: string,
|
|
375
384
|
): FilesOutput {
|
|
376
385
|
const fileName = 'RCTComponentViewHelpers.h';
|
|
377
386
|
|
|
@@ -10,11 +10,15 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
const _require = require('
|
|
14
|
-
|
|
15
|
-
const _require2 = require('
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
const _require = require('../Utils'),
|
|
14
|
+
indent = _require.indent;
|
|
15
|
+
const _require2 = require('./CppHelpers'),
|
|
16
|
+
IncludeTemplate = _require2.IncludeTemplate,
|
|
17
|
+
generateEventStructName = _require2.generateEventStructName;
|
|
18
|
+
|
|
19
|
+
// File path -> contents
|
|
20
|
+
|
|
21
|
+
const FileTemplate = ({events, extraIncludes, headerPrefix}) => `
|
|
18
22
|
/**
|
|
19
23
|
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
20
24
|
*
|
|
@@ -24,14 +28,15 @@ const FileTemplate = ({events, libraryName, extraIncludes}) => `
|
|
|
24
28
|
* ${'@'}generated by codegen project: GenerateEventEmitterCpp.js
|
|
25
29
|
*/
|
|
26
30
|
|
|
27
|
-
|
|
31
|
+
${IncludeTemplate({
|
|
32
|
+
headerPrefix,
|
|
33
|
+
file: 'EventEmitters.h',
|
|
34
|
+
})}
|
|
28
35
|
${[...extraIncludes].join('\n')}
|
|
29
36
|
|
|
30
|
-
namespace facebook {
|
|
31
|
-
namespace react {
|
|
37
|
+
namespace facebook::react {
|
|
32
38
|
${events}
|
|
33
|
-
} // namespace react
|
|
34
|
-
} // namespace facebook
|
|
39
|
+
} // namespace facebook::react
|
|
35
40
|
`;
|
|
36
41
|
const ComponentTemplate = ({
|
|
37
42
|
className,
|
|
@@ -318,9 +323,10 @@ function generateEvent(componentName, event, extraIncludes) {
|
|
|
318
323
|
// In order to migrate to this new system we have to support the current
|
|
319
324
|
// naming scheme. We should delete this once we are able to control this name
|
|
320
325
|
// throughout the system.
|
|
321
|
-
const dispatchEventName =
|
|
322
|
-
|
|
323
|
-
|
|
326
|
+
const dispatchEventName =
|
|
327
|
+
event.paperTopLevelNameDeprecated != null
|
|
328
|
+
? event.paperTopLevelNameDeprecated
|
|
329
|
+
: `${event.name[2].toLowerCase()}${event.name.slice(3)}`;
|
|
324
330
|
if (event.typeAnnotation.argument) {
|
|
325
331
|
const implementation = `
|
|
326
332
|
auto $payload = jsi::Object(runtime);
|
|
@@ -350,7 +356,13 @@ function generateEvent(componentName, event, extraIncludes) {
|
|
|
350
356
|
});
|
|
351
357
|
}
|
|
352
358
|
module.exports = {
|
|
353
|
-
generate(
|
|
359
|
+
generate(
|
|
360
|
+
libraryName,
|
|
361
|
+
schema,
|
|
362
|
+
packageName,
|
|
363
|
+
assumeNonnull = false,
|
|
364
|
+
headerPrefix,
|
|
365
|
+
) {
|
|
354
366
|
const moduleComponents = Object.keys(schema.modules)
|
|
355
367
|
.map(moduleName => {
|
|
356
368
|
const module = schema.modules[moduleName];
|
|
@@ -377,9 +389,10 @@ module.exports = {
|
|
|
377
389
|
.join('\n');
|
|
378
390
|
const fileName = 'EventEmitters.cpp';
|
|
379
391
|
const replacedTemplate = FileTemplate({
|
|
380
|
-
libraryName,
|
|
381
392
|
events: componentEmitters,
|
|
382
393
|
extraIncludes,
|
|
394
|
+
headerPrefix:
|
|
395
|
+
headerPrefix !== null && headerPrefix !== void 0 ? headerPrefix : '',
|
|
383
396
|
});
|
|
384
397
|
return new Map([[fileName, replacedTemplate]]);
|
|
385
398
|
},
|
|
@@ -10,18 +10,17 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
import type {EventTypeShape} from '../../CodegenSchema';
|
|
13
|
-
|
|
14
|
-
const {generateEventStructName} = require('./CppHelpers');
|
|
15
|
-
const {indent} = require('../Utils');
|
|
16
|
-
|
|
17
13
|
import type {
|
|
18
14
|
ComponentShape,
|
|
19
|
-
NamedShape,
|
|
20
15
|
EventTypeAnnotation,
|
|
21
|
-
|
|
16
|
+
NamedShape,
|
|
22
17
|
ObjectTypeAnnotation,
|
|
18
|
+
SchemaType,
|
|
23
19
|
} from '../../CodegenSchema';
|
|
24
20
|
|
|
21
|
+
const {indent} = require('../Utils');
|
|
22
|
+
const {IncludeTemplate, generateEventStructName} = require('./CppHelpers');
|
|
23
|
+
|
|
25
24
|
// File path -> contents
|
|
26
25
|
type FilesOutput = Map<string, string>;
|
|
27
26
|
|
|
@@ -32,12 +31,12 @@ type ComponentCollection = $ReadOnly<{
|
|
|
32
31
|
|
|
33
32
|
const FileTemplate = ({
|
|
34
33
|
events,
|
|
35
|
-
libraryName,
|
|
36
34
|
extraIncludes,
|
|
35
|
+
headerPrefix,
|
|
37
36
|
}: {
|
|
38
37
|
events: string,
|
|
39
|
-
libraryName: string,
|
|
40
38
|
extraIncludes: Set<string>,
|
|
39
|
+
headerPrefix: string,
|
|
41
40
|
}) => `
|
|
42
41
|
/**
|
|
43
42
|
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
@@ -48,14 +47,12 @@ const FileTemplate = ({
|
|
|
48
47
|
* ${'@'}generated by codegen project: GenerateEventEmitterCpp.js
|
|
49
48
|
*/
|
|
50
49
|
|
|
51
|
-
|
|
50
|
+
${IncludeTemplate({headerPrefix, file: 'EventEmitters.h'})}
|
|
52
51
|
${[...extraIncludes].join('\n')}
|
|
53
52
|
|
|
54
|
-
namespace facebook {
|
|
55
|
-
namespace react {
|
|
53
|
+
namespace facebook::react {
|
|
56
54
|
${events}
|
|
57
|
-
} // namespace react
|
|
58
|
-
} // namespace facebook
|
|
55
|
+
} // namespace facebook::react
|
|
59
56
|
`;
|
|
60
57
|
|
|
61
58
|
const ComponentTemplate = ({
|
|
@@ -372,9 +369,10 @@ function generateEvent(
|
|
|
372
369
|
// In order to migrate to this new system we have to support the current
|
|
373
370
|
// naming scheme. We should delete this once we are able to control this name
|
|
374
371
|
// throughout the system.
|
|
375
|
-
const dispatchEventName =
|
|
376
|
-
|
|
377
|
-
|
|
372
|
+
const dispatchEventName =
|
|
373
|
+
event.paperTopLevelNameDeprecated != null
|
|
374
|
+
? event.paperTopLevelNameDeprecated
|
|
375
|
+
: `${event.name[2].toLowerCase()}${event.name.slice(3)}`;
|
|
378
376
|
|
|
379
377
|
if (event.typeAnnotation.argument) {
|
|
380
378
|
const implementation = `
|
|
@@ -414,6 +412,7 @@ module.exports = {
|
|
|
414
412
|
schema: SchemaType,
|
|
415
413
|
packageName?: string,
|
|
416
414
|
assumeNonnull: boolean = false,
|
|
415
|
+
headerPrefix?: string,
|
|
417
416
|
): FilesOutput {
|
|
418
417
|
const moduleComponents: ComponentCollection = Object.keys(schema.modules)
|
|
419
418
|
.map(moduleName => {
|
|
@@ -445,9 +444,9 @@ module.exports = {
|
|
|
445
444
|
|
|
446
445
|
const fileName = 'EventEmitters.cpp';
|
|
447
446
|
const replacedTemplate = FileTemplate({
|
|
448
|
-
libraryName,
|
|
449
447
|
events: componentEmitters,
|
|
450
448
|
extraIncludes,
|
|
449
|
+
headerPrefix: headerPrefix ?? '',
|
|
451
450
|
});
|
|
452
451
|
|
|
453
452
|
return new Map([[fileName, replacedTemplate]]);
|