mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: NOTE: Flow and Jest won't pass on this diff. Sandcastle, should, however, be green on D24236405 (i.e: the tip of this stack). ## Changes Previously, the "Module" schema could either contain a `components` property, or a `nativeModules` property. The existence of the `components` property was used to determine (1) if the generators would run and (2) filter schemas on which the generators would run. Now, we simply check whether the type of the "Module" schema is `Component`. Changelog: [Internal] (Note: this ignores all push blocking failures!) Reviewed By: PeteTheHeat Differential Revision: D24236508 fbshipit-source-id: 68cb3f25178b6757c9a4aee767bb6173db4932a6
86 lines
2.1 KiB
JavaScript
86 lines
2.1 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its 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 template = `
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* ${'@'}generated by codegen project: GenerateComponentDescriptorH.js
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <react/renderer/components/::_LIBRARY_::/ShadowNodes.h>
|
|
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
::_COMPONENT_DESCRIPTORS_::
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|
|
`;
|
|
|
|
const componentTemplate = `
|
|
using ::_CLASSNAME_::ComponentDescriptor = ConcreteComponentDescriptor<::_CLASSNAME_::ShadowNode>;
|
|
`.trim();
|
|
|
|
module.exports = {
|
|
generate(
|
|
libraryName: string,
|
|
schema: SchemaType,
|
|
moduleSpecName: string,
|
|
): FilesOutput {
|
|
const fileName = 'ComponentDescriptors.h';
|
|
|
|
const componentDescriptors = 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 componentTemplate.replace(/::_CLASSNAME_::/g, componentName);
|
|
})
|
|
.join('\n');
|
|
})
|
|
.filter(Boolean)
|
|
.join('\n');
|
|
|
|
const replacedTemplate = template
|
|
.replace(/::_COMPONENT_DESCRIPTORS_::/g, componentDescriptors)
|
|
.replace('::_LIBRARY_::', libraryName);
|
|
|
|
return new Map([[fileName, replacedTemplate]]);
|
|
},
|
|
};
|