simplify logging in prebuild scripts (#51527)

Summary:
To reduce reduntant code by repeating the logging functionality in each JS module, this commit introduces a factory for creating a logger with a given prefix.

- Create factory `createLogger`
- Remove redundant log implementations
- Changed to use factory in hermes.js and ios-prebuild.js

bypass-github-export-checks

## Changelog:

[IOS] [CHANGED] - simplified logging in prebuild scripts

Pull Request resolved: https://github.com/facebook/react-native/pull/51527

Test Plan: No tests so far.

Reviewed By: cortinico

Differential Revision: D75213656

Pulled By: cipolleschi

fbshipit-source-id: 8403cfb8ed76ca3a30cfaaeabcd61ac790e7f0a1
This commit is contained in:
Christian Falch
2025-05-22 10:06:14 -07:00
committed by Facebook GitHub Bot
parent c937439e87
commit 1477cc0dbd
4 changed files with 27 additions and 47 deletions
+3 -1
View File
@@ -14,7 +14,7 @@ const {
} = require('./ios-prebuild/reactNativeDependencies');
const {
createFolderIfNotExists,
prebuildLog,
createLogger,
throwIfOnEden,
} = require('./ios-prebuild/utils');
const {execSync} = require('child_process');
@@ -27,6 +27,8 @@ const packageJsonPath = path.join(
'package.json',
);
const prebuildLog = createLogger('Prebuild');
// $FlowIgnore[unsupported-syntax]
const {version: currentVersion} = require(packageJsonPath);
+3 -16
View File
@@ -8,12 +8,15 @@
* @format
*/
const {createLogger} = require('./utils');
const {execSync} = require('child_process');
const fs = require('fs');
const path = require('path');
const stream = require('stream');
const {promisify} = require('util');
const pipeline = promisify(stream.pipeline);
const hermesLog = createLogger('Hermes');
/**
* Downloads hermes artifacts from the specified version and build type. If you want to specify a specific
@@ -382,22 +385,6 @@ function abort(message /*: string */) {
throw new Error(message);
}
function hermesLog(
message /*: string */,
level /*: 'info' | 'warning' | 'error' */ = 'warning',
) {
// Simple log coloring for terminal output
const prefix = '[Hermes] ';
let colorFn = (x /*:string*/) => x;
if (process.stdout.isTTY) {
if (level === 'info') colorFn = x => `\x1b[32m${x}\x1b[0m`;
else if (level === 'error') colorFn = x => `\x1b[31m${x}\x1b[0m`;
else colorFn = x => `\x1b[33m${x}\x1b[0m`;
}
console.log(colorFn(prefix + message));
}
module.exports = {
prepareHermesArtifactsAsync,
};
@@ -8,6 +8,7 @@
* @format
*/
const {createLogger} = require('./utils');
const {execSync} = require('child_process');
const fs = require('fs');
const path = require('path');
@@ -15,6 +16,8 @@ const stream = require('stream');
const {promisify} = require('util');
const pipeline = promisify(stream.pipeline);
const dependencyLog = createLogger('ReactNativeDependencies');
/**
* Downloads ReactNativeDependencies artifacts from the specified version and build type. If you want to specify a specific
* version of ReactNativeDependencies, use the RNDEP_VERSION environment variable. The path to the artifacts will be inside
@@ -366,22 +369,6 @@ function abort(message /*: string */) {
throw new Error(message);
}
function dependencyLog(
message /*: string */,
level /*: 'info' | 'warning' | 'error' */ = 'warning',
) {
// Simple log coloring for terminal output
const prefix = '[ReactNativeDependencies] ';
let colorFn = (x /*:string*/) => x;
if (process.stdout.isTTY) {
if (level === 'info') colorFn = x => `\x1b[32m${x}\x1b[0m`;
else if (level === 'error') colorFn = x => `\x1b[31m${x}\x1b[0m`;
else colorFn = x => `\x1b[33m${x}\x1b[0m`;
}
console.log(colorFn(prefix + message));
}
module.exports = {
prepareReactNativeDependenciesArtifactsAsync,
};
+18 -14
View File
@@ -37,24 +37,28 @@ function throwIfOnEden() {
throw new Error('Cannot prepare the iOS prebuilds on an Eden checkout');
}
function prebuildLog(
message /*: string */,
level /*: 'info' | 'warning' | 'error' */ = 'warning',
) {
// Simple log coloring for terminal output
const prefix = '[Prebuild] ';
let colorFn = (x /*:string*/) => x;
if (process.stdout.isTTY) {
if (level === 'info') colorFn = x => `\x1b[32m${x}\x1b[0m`;
else if (level === 'error') colorFn = x => `\x1b[31m${x}\x1b[0m`;
else colorFn = x => `\x1b[33m${x}\x1b[0m`;
}
function createLogger(
prefix /*: string */,
) /*: (message: string, level?: 'info' | 'warning' | 'error') => void */ {
return function (
message /*: string */,
level /*: 'info' | 'warning' | 'error' */ = 'info',
) {
// Simple log coloring for terminal output
const resolvedPrefix = `[${prefix}] `;
let colorFn = (x /*:string*/) => x;
if (process.stdout.isTTY) {
if (level === 'info') colorFn = x => `\x1b[32m${x}\x1b[0m`;
else if (level === 'error') colorFn = x => `\x1b[31m${x}\x1b[0m`;
else colorFn = x => `\x1b[33m${x}\x1b[0m`;
}
console.log(colorFn(prefix + message));
console.log(colorFn(resolvedPrefix) + message);
};
}
module.exports = {
createFolderIfNotExists,
throwIfOnEden,
prebuildLog,
createLogger,
};