UNPKG

@react-native/codegen

Version:
91 lines (80 loc) 2.45 kB
/** * 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. * * * @format */ 'use strict'; const {IncludeTemplate} = require('./CppHelpers'); // File path -> contents const FileTemplate = ({libraryName, componentDefinitions, headerPrefix}) => ` /** * 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: GenerateComponentDescriptorH.js */ #pragma once ${IncludeTemplate({ headerPrefix, file: 'ShadowNodes.h', })} #include <react/renderer/core/ConcreteComponentDescriptor.h> #include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h> namespace facebook::react { ${componentDefinitions} void ${libraryName}_registerComponentDescriptorsFromCodegen( std::shared_ptr<const ComponentDescriptorProviderRegistry> registry); } // namespace facebook::react `; const ComponentDefinitionTemplate = ({className}) => ` using ${className}ComponentDescriptor = ConcreteComponentDescriptor<${className}ShadowNode>; `.trim(); module.exports = { generate( libraryName, schema, packageName, assumeNonnull = false, headerPrefix, ) { const fileName = 'ComponentDescriptors.h'; const componentDefinitions = 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; } return ComponentDefinitionTemplate({ className: componentName, }); }) .join('\n'); }) .filter(Boolean) .join('\n'); const replacedTemplate = FileTemplate({ libraryName, componentDefinitions, headerPrefix: headerPrefix !== null && headerPrefix !== void 0 ? headerPrefix : '', }); return new Map([[fileName, replacedTemplate]]); }, };