diff --git a/packages/react-native-codegen/src/generators/RNCodegen.d.ts b/packages/react-native-codegen/src/generators/RNCodegen.d.ts new file mode 100644 index 00000000000000..9cf647abfcceea --- /dev/null +++ b/packages/react-native-codegen/src/generators/RNCodegen.d.ts @@ -0,0 +1,98 @@ +/** + * 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. + */ + +import type { SchemaType } from '../CodegenSchema'; + +export type FilesOutput = Map; +export type LibraryGeneratorFunction = (libraryName: string, schema: SchemaType, packageName: string | undefined, assumeNonnull: boolean) => FilesOutput; +export type SchemaGeneratorFunction = (schemas: { [key: string]: SchemaType }) => FilesOutput; +export type ViewGeneratorFunction = (libraryName: string, schema: SchemaType) => FilesOutput; + +type LibraryGeneratorNames = + | 'generateComponentDescriptorH' + | 'generateComponentHObjCpp' + | 'generateEventEmitterCpp' + | 'generateEventEmitterH' + | 'generatePropsCpp' + | 'generatePropsH' + | 'generateStateCpp' + | 'generateStateH' + | 'generateModuleH' + | 'generateModuleCpp' + | 'generateModuleObjCpp' + | 'generateModuleJavaSpec' + | 'generateModuleJniCpp' + | 'generateModuleJniH' + | 'generatePropsJavaInterface' + | 'generatePropsJavaDelegate' + | 'generateTests' + | 'generateShadowNodeCpp' + | 'generateShadowNodeH' + ; + +type SchemaGeneratorNames = + | 'generateThirdPartyFabricComponentsProviderObjCpp' + | 'generateThirdPartyFabricComponentsProviderH' + ; + +type ViewGeneratorNames = + | 'generateViewConfigJs' + ; + +export type AllGenerators = + & { readonly [key in LibraryGeneratorNames]: LibraryGeneratorFunction; } + & { readonly [key in SchemaGeneratorNames]: SchemaGeneratorFunction; } + & { readonly [key in ViewGeneratorNames]: ViewGeneratorFunction; } + ; + +export type LibraryGenerators = + | 'componentsAndroid' + | 'componentsIOS' + | 'descriptors' + | 'events' + | 'props' + | 'states' + | 'tests' + | 'shadow-nodes' + | 'modulesAndroid' + | 'modulesCxx' + | 'modulesIOS' + ; + +export type SchemaGenerators = + | 'providerIOS' + ; + +export interface LibraryOptions { + libraryName: string; + schema: SchemaType; + outputDirectory: string; + packageName?: string | undefined; + assumeNonnull: boolean; +} + +export interface LibraryConfig { + generators: LibraryGenerators[]; + test?: boolean | undefined; +} + +export interface SchemasOptions { + schemas: { [key: string]: SchemaType }; + outputDirectory: string; +} + +export interface SchemasConfig { + generators: SchemaGenerators[]; + test?: boolean | undefined; +} + +export declare const allGenerators: AllGenerators; +export declare const libraryGenerators: { readonly [key in LibraryGenerators]: LibraryGeneratorFunction }; +export declare const schemaGenerators: { readonly [key in SchemaGenerators]: SchemaGeneratorFunction }; +export declare function generate(options: LibraryOptions, config: LibraryConfig): boolean; +export declare function generateFromSchemas(options: SchemasOptions, config: SchemasConfig): boolean; +export declare function generateViewConfig(options: LibraryOptions): string; diff --git a/packages/react-native-codegen/src/generators/RNCodegen.js b/packages/react-native-codegen/src/generators/RNCodegen.js index b2648c626c1a54..61441c715dc26a 100644 --- a/packages/react-native-codegen/src/generators/RNCodegen.js +++ b/packages/react-native-codegen/src/generators/RNCodegen.js @@ -29,8 +29,8 @@ const generateModuleH = require('./modules/GenerateModuleH.js'); const generateModuleCpp = require('./modules/GenerateModuleCpp.js'); const generateModuleObjCpp = require('./modules/GenerateModuleObjCpp'); const generateModuleJavaSpec = require('./modules/GenerateModuleJavaSpec.js'); -const GenerateModuleJniCpp = require('./modules/GenerateModuleJniCpp.js'); -const GenerateModuleJniH = require('./modules/GenerateModuleJniH.js'); +const generateModuleJniCpp = require('./modules/GenerateModuleJniCpp.js'); +const generateModuleJniH = require('./modules/GenerateModuleJniH.js'); const generatePropsJavaInterface = require('./components/GeneratePropsJavaInterface.js'); const generatePropsJavaDelegate = require('./components/GeneratePropsJavaDelegate.js'); const generateTests = require('./components/GenerateTests.js'); @@ -42,6 +42,33 @@ const generateViewConfigJs = require('./components/GenerateViewConfigJs.js'); const path = require('path'); const schemaValidator = require('../SchemaValidator.js'); +const ALL_GENERATORS = { + generateComponentDescriptorH: generateComponentDescriptorH.generate, + generateComponentHObjCpp: generateComponentHObjCpp.generate, + generateEventEmitterCpp: generateEventEmitterCpp.generate, + generateEventEmitterH: generateEventEmitterH.generate, + generatePropsCpp: generatePropsCpp.generate, + generatePropsH: generatePropsH.generate, + generateStateCpp: generateStateCpp.generate, + generateStateH: generateStateH.generate, + generateModuleH: generateModuleH.generate, + generateModuleCpp: generateModuleCpp.generate, + generateModuleObjCpp: generateModuleObjCpp.generate, + generateModuleJavaSpec: generateModuleJavaSpec.generate, + generateModuleJniCpp: generateModuleJniCpp.generate, + generateModuleJniH: generateModuleJniH.generate, + generatePropsJavaInterface: generatePropsJavaInterface.generate, + generatePropsJavaDelegate: generatePropsJavaDelegate.generate, + generateTests: generateTests.generate, + generateShadowNodeCpp: generateShadowNodeCpp.generate, + generateShadowNodeH: generateShadowNodeH.generate, + generateThirdPartyFabricComponentsProviderObjCpp: + generateThirdPartyFabricComponentsProviderObjCpp.generate, + generateThirdPartyFabricComponentsProviderH: + generateThirdPartyFabricComponentsProviderH.generate, + generateViewConfigJs: generateViewConfigJs.generate, +}; + import type {SchemaType} from '../CodegenSchema'; type LibraryOptions = $ReadOnly<{ @@ -122,8 +149,8 @@ const LIBRARY_GENERATORS = { generateShadowNodeH.generate, ], modulesAndroid: [ - GenerateModuleJniCpp.generate, - GenerateModuleJniH.generate, + generateModuleJniCpp.generate, + generateModuleJniH.generate, generateModuleJavaSpec.generate, ], modulesCxx: [generateModuleCpp.generate, generateModuleH.generate], @@ -194,6 +221,10 @@ function checkOrWriteFiles( } module.exports = { + allGenerators: ALL_GENERATORS, + libraryGenerators: LIBRARY_GENERATORS, + schemaGenerators: SCHEMAS_GENERATORS, + generate( { libraryName,