Skip to content

Commit 8a62d61

Browse files
dmytrorykunfacebook-github-bot
authored andcommitted
Refactor generate-artifacts-executor.js: remove configFileDir CLI argument, use node resolution instead (#41557)
Summary: Pull Request resolved: #41557 The `configFileDir` CLI argument is used to help to find paths to the 3rd party dependencies of the app. Since we only care about dependencies listed in the root `package.json`, we can use `node` resolution instead of having to construct paths manually. In that case `configFileDir` becomes redundant. Changelog: [iOS][Breaking] - Delete configFileDir CLI argument. Reviewed By: cipolleschi Differential Revision: D51303793 fbshipit-source-id: 46cb61197ddf51515af634c8fc6b85a8d218c51e
1 parent 1e68e48 commit 8a62d61

File tree

6 files changed

+21
-40
lines changed

6 files changed

+21
-40
lines changed

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -173,12 +173,7 @@ describe('findCodegenEnabledLibraries', () => {
173173
},
174174
}));
175175

176-
const libraries = findCodegenEnabledLibraries(
177-
`${projectDir}/app`,
178-
baseCodegenConfigFileDir,
179-
`package.json`,
180-
'codegenConfig',
181-
);
176+
const libraries = findCodegenEnabledLibraries(`${projectDir}/app`);
182177

183178
expect(libraries).toEqual([
184179
{

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

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -151,32 +151,32 @@ function handleReactNativeCoreLibraries() {
151151
);
152152
}
153153

154-
function handleThirdPartyLibraries(baseCodegenConfigFileDir, dependencies) {
154+
function handleThirdPartyLibraries(pkgJson) {
155+
const dependencies = {...pkgJson.dependencies, ...pkgJson.devDependencies};
155156
// Determine which of these are codegen-enabled libraries
156-
const configDir =
157-
baseCodegenConfigFileDir ||
158-
path.join(REACT_NATIVE_PACKAGE_ROOT_FOLDER, '..');
159157
console.log(
160-
`\n\n[Codegen] >>>>> Searching for codegen-enabled libraries in ${configDir}`,
158+
'\n\n[Codegen] >>>>> Searching for codegen-enabled libraries in the project dependencies.',
161159
);
162-
163160
// Handle third-party libraries
164161
return Object.keys(dependencies).flatMap(dependency => {
165162
if (dependency === REACT_NATIVE) {
166163
// react-native should already be added.
167164
return [];
168165
}
169-
let configFile;
170166
try {
171-
configFile = readPkgJsonInDirectory(codegenConfigFileDir);
172-
} catch {
167+
const configFilePath = require.resolve(
168+
path.join(dependency, 'package.json'),
169+
);
170+
const configFile = JSON.parse(fs.readFileSync(configFilePath));
171+
const codegenConfigFileDir = path.dirname(configFilePath);
172+
return extractLibrariesFromJSON(
173+
configFile,
174+
dependency,
175+
codegenConfigFileDir,
176+
);
177+
} catch (e) {
173178
return [];
174179
}
175-
return extractLibrariesFromJSON(
176-
configFile,
177-
dependency,
178-
codegenConfigFileDir,
179-
);
180180
});
181181
}
182182

@@ -338,12 +338,11 @@ function createComponentProvider(schemas) {
338338
console.log(`Generated provider in: ${outputDir}`);
339339
}
340340

341-
function findCodegenEnabledLibraries(appRootDir, baseCodegenConfigFileDir) {
341+
function findCodegenEnabledLibraries(appRootDir) {
342342
const pkgJson = readPkgJsonInDirectory(appRootDir);
343-
const dependencies = {...pkgJson.dependencies, ...pkgJson.devDependencies};
344343
return [
345344
...handleReactNativeCoreLibraries(),
346-
...handleThirdPartyLibraries(baseCodegenConfigFileDir, dependencies),
345+
...handleThirdPartyLibraries(pkgJson),
347346
...handleLibrariesFromReactNativeConfig(appRootDir),
348347
...handleInAppLibraries(pkgJson, appRootDir),
349348
];
@@ -393,23 +392,19 @@ function cleanupEmptyFilesAndFolders(filepath) {
393392
*
394393
* @parameter appRootDir: the directory with the app source code, where the package.json lives.
395394
* @parameter outputPath: the base output path for the CodeGen.
396-
* @parameter baseCodegenConfigFileDir: the directory of the codeGenConfigFile.
397395
* @throws If it can't find a config file for react-native.
398396
* @throws If it can't find a CodeGen configuration in the file.
399397
* @throws If it can't find a cli for the CodeGen.
400398
*/
401-
function execute(appRootDir, outputPath, baseCodegenConfigFileDir) {
399+
function execute(appRootDir, outputPath) {
402400
if (!isAppRootValid(appRootDir)) {
403401
return;
404402
}
405403

406404
buildCodegenIfNeeded();
407405

408406
try {
409-
const libraries = findCodegenEnabledLibraries(
410-
appRootDir,
411-
baseCodegenConfigFileDir,
412-
);
407+
const libraries = findCodegenEnabledLibraries(appRootDir);
413408

414409
if (libraries.length === 0) {
415410
console.log('[Codegen] No codegen-enabled libraries found.');

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,7 @@ const argv = yargs
2121
alias: 'outputPath',
2222
description: 'Path where generated artifacts will be output to',
2323
})
24-
.option('c', {
25-
alias: 'configFileDir',
26-
default: '',
27-
description:
28-
'Path where codegen config files are located (e.g. node_modules dir).',
29-
})
3024
.usage('Usage: $0 -p [path to app]')
3125
.demandOption(['p']).argv;
3226

33-
executor.execute(argv.path, argv.outputPath, argv.configFileDir);
27+
executor.execute(argv.path, argv.outputPath);

packages/react-native/scripts/react_native_pods_utils/__tests__/script_phases.snap.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ def snap_get_script_phases_with_codegen_discovery_with_config_file_dir()
1111
1212
export RCT_SCRIPT_RN_DIR=$RCT_SCRIPT_POD_INSTALLATION_ROOT/../..
1313
export RCT_SCRIPT_APP_PATH=$RCT_SCRIPT_POD_INSTALLATION_ROOT/
14-
export RCT_SCRIPT_CONFIG_FILE_DIR=$RCT_SCRIPT_POD_INSTALLATION_ROOT/node_modules
1514
export RCT_SCRIPT_OUTPUT_DIR=$RCT_SCRIPT_POD_INSTALLATION_ROOT
1615
export RCT_SCRIPT_TYPE=withCodegenDiscovery
1716
@@ -29,7 +28,6 @@ def snap_get_script_phases_with_codegen_discovery_without_config_file_dir()
2928
3029
export RCT_SCRIPT_RN_DIR=$RCT_SCRIPT_POD_INSTALLATION_ROOT/../..
3130
export RCT_SCRIPT_APP_PATH=$RCT_SCRIPT_POD_INSTALLATION_ROOT/
32-
export RCT_SCRIPT_CONFIG_FILE_DIR=
3331
export RCT_SCRIPT_OUTPUT_DIR=$RCT_SCRIPT_POD_INSTALLATION_ROOT
3432
export RCT_SCRIPT_TYPE=withCodegenDiscovery
3533

packages/react-native/scripts/react_native_pods_utils/script_phases.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ def get_script_phases_with_codegen_discovery(options)
1111
export_vars = {
1212
'RCT_SCRIPT_RN_DIR' => "$RCT_SCRIPT_POD_INSTALLATION_ROOT/#{options[:react_native_path]}",
1313
'RCT_SCRIPT_APP_PATH' => "$RCT_SCRIPT_POD_INSTALLATION_ROOT/#{options[:relative_app_root]}",
14-
'RCT_SCRIPT_CONFIG_FILE_DIR' => "#{options[:relative_config_file_dir] != '' ? "$RCT_SCRIPT_POD_INSTALLATION_ROOT/#{options[:relative_config_file_dir]}" : ''}",
1514
'RCT_SCRIPT_OUTPUT_DIR' => "$RCT_SCRIPT_POD_INSTALLATION_ROOT",
1615
'RCT_SCRIPT_TYPE' => "withCodegenDiscovery",
1716
}

packages/react-native/scripts/react_native_pods_utils/script_phases.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ generateCodegenArtifactsFromSchema () {
9696
generateArtifacts () {
9797
describe "Generating codegen artifacts"
9898
pushd "$RCT_SCRIPT_RN_DIR" >/dev/null || exit 1
99-
"$NODE_BINARY" "scripts/generate-codegen-artifacts.js" --path "$RCT_SCRIPT_APP_PATH" --outputPath "$TEMP_OUTPUT_DIR" --configFileDir "$RCT_SCRIPT_CONFIG_FILE_DIR"
99+
"$NODE_BINARY" "scripts/generate-codegen-artifacts.js" --path "$RCT_SCRIPT_APP_PATH" --outputPath "$TEMP_OUTPUT_DIR"
100100
popd >/dev/null || exit 1
101101
}
102102

0 commit comments

Comments
 (0)