mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
450967938a
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/32840 Closes #31516 I've cherry-picked the original PR that had merge conficts + updated all the headers as the one for the TurboModule generators were not handled. Original Commit Message from acoates The codegen generates a Facebook copyright notice at the top of the generated files. While this might make sense on the core files, this codegen will be run on external components too. The notice also refers to a LICENSE file in the root of this project, which might not be there if this is run on another project. I did a quick look at some of the codegen that we ship within windows dev tools, and it looks like we normally just have comments saying the file was codegen'd and so the file shouldn't be manually edited. Open to suggestions on what the comment header should say. Changelog: [General] [Changed] - Do not include Facebook license on users codegen'd code Reviewed By: ShikaSD Differential Revision: D33455176 fbshipit-source-id: b247e72efb242e79d99b388c80e4126633e5234d
96 lines
2.2 KiB
JavaScript
96 lines
2.2 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @flow strict
|
|
* @format
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
import type {SchemaType} from '../../CodegenSchema';
|
|
|
|
// File path -> contents
|
|
type FilesOutput = Map<string, string>;
|
|
|
|
const FileTemplate = ({
|
|
libraryName,
|
|
componentNames,
|
|
}: {
|
|
libraryName: string,
|
|
componentNames: string,
|
|
}) => `
|
|
/**
|
|
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
*
|
|
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
* once the code is regenerated.
|
|
*
|
|
* ${'@'}generated by codegen project: GenerateShadowNodeCpp.js
|
|
*/
|
|
|
|
#include <react/renderer/components/${libraryName}/ShadowNodes.h>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
${componentNames}
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|
|
`;
|
|
|
|
const ComponentTemplate = ({className}: {className: string}) =>
|
|
`
|
|
extern const char ${className}ComponentName[] = "${className}";
|
|
`.trim();
|
|
|
|
module.exports = {
|
|
generate(
|
|
libraryName: string,
|
|
schema: SchemaType,
|
|
packageName?: string,
|
|
assumeNonnull: boolean = false,
|
|
): FilesOutput {
|
|
const fileName = 'ShadowNodes.cpp';
|
|
|
|
const componentNames = Object.keys(schema.modules)
|
|
.map(moduleName => {
|
|
const module = schema.modules[moduleName];
|
|
if (module.type !== 'Component') {
|
|
return;
|
|
}
|
|
|
|
const {components} = module;
|
|
// No components in this module
|
|
if (components == null) {
|
|
return null;
|
|
}
|
|
|
|
return Object.keys(components)
|
|
.map(componentName => {
|
|
if (components[componentName].interfaceOnly === true) {
|
|
return;
|
|
}
|
|
const replacedTemplate = ComponentTemplate({
|
|
className: componentName,
|
|
});
|
|
|
|
return replacedTemplate;
|
|
})
|
|
.join('\n');
|
|
})
|
|
.filter(Boolean)
|
|
.join('\n');
|
|
|
|
const replacedTemplate = FileTemplate({
|
|
componentNames,
|
|
libraryName,
|
|
});
|
|
|
|
return new Map([[fileName, replacedTemplate]]);
|
|
},
|
|
};
|