mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
b6a72bac69
Summary: ## New Functionality - Detect if the JS file represents a NativeModule spec. - **Note:** A JS file is a NativeModule spec if it contains a flow `interface` that extends `TurboModule`. This logic is copied over from the OSS Codegen, here: https://github.com/facebook/react-native/blob/7ccb67a49c087e7ee536c2ffb71717e68a79324b/packages/react-native-codegen/src/parsers/flow/index.js#L60-L75 - For all NativeModule specs, generate the spec's schema using the OSS Codegen for Modules, and conditionally inline it into every `TurboModuleRegistry.get(Enforcing)?` call in the spec, like so: **Before:** ``` /** * flow */ import type {TurboModule} from 'RCTExport'; export interface Spec extends TurboModule { //... } export default TurboModuleRegistry.get<Spec>('FooModule'); ``` **After:** ``` /** * flow */ import type {TurboModule} from 'RCTExport'; export interface Spec extends TurboModule { //... } export default TurboModuleRegistry.get<Spec>('FooModule', __getModuleShape()); function __getModuleShape() { if (!(global.RN$EnableTurboModuleJSCodegen === true)) { return undefined; } return {...}; } ``` Changelog: [General][Added] Extend react-native/babel-plugin-codegen to generate TurboModule JS codegen Reviewed By: TheSavior Differential Revision: D22803845 fbshipit-source-id: 18c157a1dbfcc575012184de31c38908acd53c36