diff --git a/packages/@expo/cli/src/utils/mergeGitIgnorePaths.ts b/packages/@expo/cli/src/utils/mergeGitIgnorePaths.ts index dab487df678413..af868e21e572ae 100644 --- a/packages/@expo/cli/src/utils/mergeGitIgnorePaths.ts +++ b/packages/@expo/cli/src/utils/mergeGitIgnorePaths.ts @@ -35,8 +35,9 @@ export function mergeGitIgnorePaths( return null; } - const targetGitIgnore = fs.readFileSync(targetGitIgnorePath).toString(); - const sourceGitIgnore = fs.readFileSync(sourceGitIgnorePath).toString(); + // Optimization: pass 'utf8' directly to avoid intermediate buffer allocation + const targetGitIgnore = fs.readFileSync(targetGitIgnorePath, 'utf8'); + const sourceGitIgnore = fs.readFileSync(sourceGitIgnorePath, 'utf8'); const merged = mergeGitIgnoreContents(targetGitIgnore, sourceGitIgnore); // Only rewrite the file if it was modified. if (merged.contents) { diff --git a/packages/@expo/config-plugins/src/android/Package.ts b/packages/@expo/config-plugins/src/android/Package.ts index 96222ebf4ba553..6cbf417bab57e4 100644 --- a/packages/@expo/config-plugins/src/android/Package.ts +++ b/packages/@expo/config-plugins/src/android/Package.ts @@ -125,7 +125,8 @@ export async function renameJniOnDiskForType({ filesToUpdate.forEach((filepath: string) => { try { if (fs.lstatSync(filepath).isFile() && ['.h', '.cpp'].includes(path.extname(filepath))) { - let contents = fs.readFileSync(filepath).toString(); + // Optimization: pass 'utf8' directly to avoid intermediate buffer allocation + let contents = fs.readFileSync(filepath, 'utf8'); contents = contents.replace( new RegExp(transformJavaClassDescriptor(currentPackageName).replace(/\//g, '\\/'), 'g'), transformJavaClassDescriptor(packageName) @@ -207,7 +208,8 @@ export async function renamePackageOnDiskForType({ filesToUpdate.forEach((filepath: string) => { try { if (fs.lstatSync(filepath).isFile()) { - let contents = fs.readFileSync(filepath).toString(); + // Optimization: pass 'utf8' directly to avoid intermediate buffer allocation + let contents = fs.readFileSync(filepath, 'utf8'); if (path.extname(filepath) === '.kt') { contents = replacePackageName(contents, currentPackageName, kotlinSanitizedPackageName); } else { diff --git a/packages/expo-brownfield/plugin/src/common/filesystem.ts b/packages/expo-brownfield/plugin/src/common/filesystem.ts index dfbcceaeb05b2d..4d26b240084397 100644 --- a/packages/expo-brownfield/plugin/src/common/filesystem.ts +++ b/packages/expo-brownfield/plugin/src/common/filesystem.ts @@ -26,13 +26,16 @@ const maybeReadOverwrittenTemplate = (template: string, platform?: PlatformStrin try { accessSync(path.join(process.cwd(), '.brownfield-templates')); if (existsSync(path.join(process.cwd(), '.brownfield-templates', template))) { - return readFileSync(path.join(process.cwd(), '.brownfield-templates', template)).toString(); + // Optimization: pass 'utf8' directly to avoid intermediate buffer allocation + return readFileSync(path.join(process.cwd(), '.brownfield-templates', template), 'utf8'); } if (existsSync(path.join(process.cwd(), '.brownfield-templates', platform ?? '.', template))) { + // Optimization: pass 'utf8' directly to avoid intermediate buffer allocation return readFileSync( - path.join(process.cwd(), '.brownfield-templates', platform ?? '.', template) - ).toString(); + path.join(process.cwd(), '.brownfield-templates', platform ?? '.', template), + 'utf8' + ); } // eslint-disable-next-line no-empty } catch {} @@ -55,7 +58,8 @@ const readTemplate = (template: string, platform?: PlatformString): string => { throw new Error(`Template ${template} doesn't exist at ${templatePath}`); } - return readFileSync(templatePath).toString(); + // Optimization: pass 'utf8' directly to avoid intermediate buffer allocation + return readFileSync(templatePath, 'utf8'); }; const createFileFromTemplateInternal = ( diff --git a/packages/pod-install/src/index.ts b/packages/pod-install/src/index.ts index 15184c3f113372..36d7ffd72e9ff9 100644 --- a/packages/pod-install/src/index.ts +++ b/packages/pod-install/src/index.ts @@ -41,7 +41,8 @@ async function runAsync(maybeProjectDirectory?: string): Promise { process.exit(1); } - const jsonData = JSON.parse(readFileSync(packageJsonPath).toString()); + // Optimization: pass 'utf8' directly to avoid intermediate buffer allocation + const jsonData = JSON.parse(readFileSync(packageJsonPath, 'utf8')); const hasExpoPackage = jsonData.dependencies?.hasOwnProperty('expo'); if (hasExpoPackage) {