* Copyright (c) 2025 Huawei Technologies Co., Ltd.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import RNCodegen from '@react-native/codegen/lib/generators/RNCodegen';
import { AbsolutePath } from '../../core';
import { CodeGenerator, UberSchema } from '../core';
type LibraryData = {
libraryCppName: string;
uberSchema: UberSchema;
};
export class SharedComponentCodeGenerator
implements CodeGenerator<LibraryData>
{
constructor(
private onGetSharedOutputPath: (filename: string) => AbsolutePath
) {}
generate({
libraryCppName,
uberSchema,
}: LibraryData): Map<AbsolutePath, string> {
const fileContentByPath = new Map<AbsolutePath, string>();
const generatorFns = [
RNCodegen.allGenerators.generatePropsH,
RNCodegen.allGenerators.generatePropsCpp,
RNCodegen.allGenerators.generateEventEmitterH,
RNCodegen.allGenerators.generateEventEmitterCpp,
RNCodegen.allGenerators.generateComponentDescriptorH,
RNCodegen.allGenerators.generateStateH,
RNCodegen.allGenerators.generateStateCpp,
RNCodegen.allGenerators.generateShadowNodeH,
RNCodegen.allGenerators.generateShadowNodeCpp,
];
generatorFns.forEach((generate) => {
const filesOutput = generate(
libraryCppName,
uberSchema.getValue(),
'UNUSED_packageName',
true
);
filesOutput.forEach((fileContent, filename) => {
fileContentByPath.set(
this.onGetSharedOutputPath(filename),
fileContent
);
});
});
return fileContentByPath;
}
}