Skip to content

Commit e5c0896

Browse files
committed
Exclude selectively disabled libraries from codegen generation
1 parent 3af9e65 commit e5c0896

File tree

1 file changed

+44
-16
lines changed

1 file changed

+44
-16
lines changed

packages/react-native/scripts/codegen/generate-artifacts-executor.js

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -325,22 +325,13 @@ function findExternalLibraries(pkgJson, projectRoot) {
325325
});
326326
}
327327

328-
function findLibrariesFromReactNativeConfig(projectRoot) {
329-
const rnConfigFileName = 'react-native.config.js';
330-
328+
function findLibrariesFromReactNativeConfig(projectRoot, rnConfig) {
331329
codegenLog(
332-
`Searching for codegen-enabled libraries in ${rnConfigFileName}`,
330+
`Searching for codegen-enabled libraries in react-native.config.js`,
333331
true,
334332
);
335333

336-
const rnConfigFilePath = path.resolve(projectRoot, rnConfigFileName);
337-
338-
if (!fs.existsSync(rnConfigFilePath)) {
339-
return [];
340-
}
341-
const rnConfig = require(rnConfigFilePath);
342-
343-
if (rnConfig.dependencies == null) {
334+
if (!rnConfig.dependencies) {
344335
return [];
345336
}
346337
return Object.keys(rnConfig.dependencies).flatMap(name => {
@@ -364,6 +355,19 @@ function findLibrariesFromReactNativeConfig(projectRoot) {
364355
});
365356
}
366357

358+
/**
359+
* Finds all disabled libraries by platform based the react native config.
360+
*
361+
* This is needed when selectively disabling libraries in react-native.config.js since codegen should exclude those libraries as well.
362+
*/
363+
function findDisabledLibrariesByPlatform(reactNativeConfig, platform) {
364+
const dependencies = reactNativeConfig.dependencies ?? {};
365+
366+
return Object.keys(dependencies).filter(
367+
dependency => dependencies[dependency].platforms?.[platform] === null,
368+
);
369+
}
370+
367371
function findProjectRootLibraries(pkgJson, projectRoot) {
368372
codegenLog('Searching for codegen-enabled libraries in the app.', true);
369373

@@ -592,19 +596,29 @@ function mustGenerateNativeCode(includeLibraryPath, schemaInfo) {
592596
);
593597
}
594598

595-
function findCodegenEnabledLibraries(pkgJson, projectRoot) {
599+
function findCodegenEnabledLibraries(pkgJson, projectRoot, reactNativeConfig) {
596600
const projectLibraries = findProjectRootLibraries(pkgJson, projectRoot);
597601
if (pkgJsonIncludesGeneratedCode(pkgJson)) {
598602
return projectLibraries;
599603
} else {
600604
return [
601605
...projectLibraries,
602606
...findExternalLibraries(pkgJson, projectRoot),
603-
...findLibrariesFromReactNativeConfig(projectRoot),
607+
...findLibrariesFromReactNativeConfig(projectRoot, reactNativeConfig),
604608
];
605609
}
606610
}
607611

612+
function readReactNativeConfig(projectRoot) {
613+
const rnConfigFilePath = path.resolve(projectRoot, 'react-native.config.js');Add commentMore actions
614+
615+
if (!fs.existsSync(rnConfigFilePath)) {
616+
return {};
617+
}
618+
619+
return require(rnConfigFilePath);
620+
}
621+
608622
function generateCustomURLHandlers(libraries, outputDir) {
609623
const customImageURLLoaderClasses = libraries
610624
.flatMap(
@@ -1053,9 +1067,10 @@ function execute(projectRoot, targetPlatform, baseOutputPath, source) {
10531067

10541068
buildCodegenIfNeeded();
10551069

1056-
const libraries = findCodegenEnabledLibraries(pkgJson, projectRoot);
1070+
const reactNativeConfig = readReactNativeConfig(projectRoot);
1071+
const codegenEnabledLibraries = findCodegenEnabledLibraries(pkgJson, projectRoot, reactNativeConfig);
10571072

1058-
if (libraries.length === 0) {
1073+
if (codegenEnabledLibraries.length === 0) {
10591074
codegenLog('No codegen-enabled libraries found.', true);
10601075
return;
10611076
}
@@ -1064,6 +1079,19 @@ function execute(projectRoot, targetPlatform, baseOutputPath, source) {
10641079
targetPlatform === 'all' ? supportedPlatforms : [targetPlatform];
10651080

10661081
for (const platform of platforms) {
1082+
const disabledLibraries = findDisabledLibrariesByPlatform(Add commentMore actions
1083+
reactNativeConfig,
1084+
platform,
1085+
);
1086+
1087+
const libraries = codegenEnabledLibraries.filter(
1088+
({name}) => !disabledLibraries.includes(name),
1089+
);
1090+
1091+
if (!libraries.length) {
1092+
continue;
1093+
}
1094+
10671095
const outputPath = computeOutputPath(
10681096
projectRoot,
10691097
baseOutputPath,

0 commit comments

Comments
 (0)