From e8657211ea5d94d090a53833d4f378af060bb471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Gu=CC=88ner?= Date: Fri, 11 Apr 2025 16:02:21 +0300 Subject: [PATCH 1/2] pass source flag to codegen cli when possible --- .../src/targets/codegen/index.ts | 18 +++++++++++++++--- .../patches/removeCodegenAppLevelCode.ts | 16 ++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/packages/react-native-builder-bob/src/targets/codegen/index.ts b/packages/react-native-builder-bob/src/targets/codegen/index.ts index 315424733..88dd2f6d6 100644 --- a/packages/react-native-builder-bob/src/targets/codegen/index.ts +++ b/packages/react-native-builder-bob/src/targets/codegen/index.ts @@ -4,7 +4,10 @@ import { patchCodegenAndroidPackage } from './patches/patchCodegenAndroidPackage import fs from 'fs-extra'; import path from 'path'; import del from 'del'; -import { removeCodegenAppLevelCode } from './patches/removeCodegenAppLevelCode'; +import { + getCodegenCLISourceSupport, + removeCodegenAppLevelCode, +} from './patches/removeCodegenAppLevelCode'; import { spawn } from '../../utils/spawn'; type Options = Omit; @@ -42,12 +45,21 @@ export default async function build({ root, report }: Options) { } try { - await spawn('npx', ['@react-native-community/cli', 'codegen']); + const codegenCLISupportsSource = await getCodegenCLISourceSupport(); + + await spawn('npx', [ + '@react-native-community/cli', + 'codegen', + ...(codegenCLISupportsSource ? ['--source', 'library'] : []), + ]); if (codegenType === 'modules' || codegenType === 'all') { await patchCodegenAndroidPackage(root, packageJson, report); } - await removeCodegenAppLevelCode(root, packageJson); + + if (!codegenCLISupportsSource) { + await removeCodegenAppLevelCode(root, packageJson); + } report.success('Generated native code with codegen'); } catch (e: unknown) { diff --git a/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.ts b/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.ts index cf2f1594d..1154496a9 100644 --- a/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.ts +++ b/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.ts @@ -1,6 +1,7 @@ import fs from 'fs-extra'; import path from 'path'; import { CODEGEN_DOCS } from './patchCodegenAndroidPackage'; +import { spawn } from '../../../utils/spawn'; const FILES_TO_REMOVE = [ 'RCTAppDependencyProvider.h', @@ -68,3 +69,18 @@ export async function removeCodegenAppLevelCode( await Promise.allSettled([...androidPromises, ...iosPromises]); } + +/** + * Codegen generates a different set of files if the target is an app instead. + * The following commit adds support for a --source argument to support calling codegen as a library: + * https://github.com/facebook/react-native/commit/98b8f178110472e5fed97de80766c03b0b5e988c + * Here we just check if the --source argument is supported. + */ +export async function getCodegenCLISourceSupport(): Promise { + const codegenCLIHelpOutput = await spawn('npx', [ + '@react-native-community/cli', + 'codegen', + '--help', + ]); + return codegenCLIHelpOutput.includes('--source'); +} From 370b8e3312dc08790e3c1bd3f7c00ae6178a3a69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Gu=CC=88ner?= Date: Fri, 11 Apr 2025 16:21:01 +0300 Subject: [PATCH 2/2] bump minimum bob version --- packages/create-react-native-library/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-react-native-library/src/index.ts b/packages/create-react-native-library/src/index.ts index 322d910a3..cbe912091 100644 --- a/packages/create-react-native-library/src/index.ts +++ b/packages/create-react-native-library/src/index.ts @@ -20,7 +20,7 @@ import { createInitialGitCommit } from './utils/initialCommit'; import { prompt } from './utils/prompt'; import { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion'; -const FALLBACK_BOB_VERSION = '0.40.4'; +const FALLBACK_BOB_VERSION = '0.40.5'; const FALLBACK_NITRO_MODULES_VERSION = '0.22.1'; const SUPPORTED_REACT_NATIVE_VERSION = '0.78.2';