From 63f80dab3a8852e26d698e1367c7f4028534a4fa Mon Sep 17 00:00:00 2001 From: Oskar Eichler <62393985+OskarEichler@users.noreply.github.com> Date: Fri, 28 Aug 2026 10:07:54 +0300 Subject: [PATCH] perf(android): short-circuit package lookup and stream descriptor extraction --- .../src/config/findComponentDescriptors.ts | 18 +++++++------ .../src/config/findPackageClassName.ts | 26 ++++++++++--------- .../src/config/getMainActivity.ts | 2 +- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/packages/cli-config-android/src/config/findComponentDescriptors.ts b/packages/cli-config-android/src/config/findComponentDescriptors.ts index b86b38c95..25ea7a6b7 100644 --- a/packages/cli-config-android/src/config/findComponentDescriptors.ts +++ b/packages/cli-config-android/src/config/findComponentDescriptors.ts @@ -23,14 +23,16 @@ export function findComponentDescriptors(packageRoot: string) { onlyFiles: true, ignore: ['**/node_modules/**'], }); - const codegenComponent = files - .map((filePath) => - fs.readFileSync(path.join(packageRoot, filePath), 'utf8'), - ) - .map(extractComponentDescriptors) - .filter(Boolean); - // Filter out duplicates as it happens that libraries contain multiple outputs due to package publishing. // TODO: consider using "codegenConfig" to avoid this. - return Array.from(new Set(codegenComponent as string[])); + const descriptors = new Set(); + for (const filePath of files) { + const descriptor = extractComponentDescriptors( + fs.readFileSync(path.join(packageRoot, filePath), 'utf8'), + ); + if (descriptor) { + descriptors.add(descriptor); + } + } + return Array.from(descriptors); } diff --git a/packages/cli-config-android/src/config/findPackageClassName.ts b/packages/cli-config-android/src/config/findPackageClassName.ts index 6a72848b7..e136dc7d8 100644 --- a/packages/cli-config-android/src/config/findPackageClassName.ts +++ b/packages/cli-config-android/src/config/findPackageClassName.ts @@ -32,10 +32,10 @@ export function getMainActivityFiles( export default function getPackageClassName(folder: string) { let files = getMainActivityFiles(folder); - let packages = getClassNameMatches(files, folder); + const packageClassName = getClassName(files, folder); - if (packages && packages.length > 0 && Array.isArray(packages[0])) { - return packages[0][1]; + if (packageClassName) { + return packageClassName; } /* @@ -55,17 +55,19 @@ export default function getPackageClassName(folder: string) { } files = getMainActivityFiles(folder, false); - packages = getClassNameMatches(files, folder); - - // @ts-ignore - return packages.length ? packages[0][1] : null; + return getClassName(files, folder); } -function getClassNameMatches(files: string[], folder: string) { - return files - .map((filePath) => fs.readFileSync(path.join(folder, filePath), 'utf8')) - .map(matchClassName) - .filter((match) => match); +function getClassName(files: string[], folder: string) { + for (const filePath of files) { + const match = matchClassName( + fs.readFileSync(path.join(folder, filePath), 'utf8'), + ); + if (match) { + return match[1]; + } + } + return null; } export function matchClassName(file: string) { diff --git a/packages/cli-config-android/src/config/getMainActivity.ts b/packages/cli-config-android/src/config/getMainActivity.ts index 702452382..26b25b359 100644 --- a/packages/cli-config-android/src/config/getMainActivity.ts +++ b/packages/cli-config-android/src/config/getMainActivity.ts @@ -92,7 +92,7 @@ export default function getMainActivity(manifestPath: string): string | null { }); }); - return mainActivity ? mainActivity['@_android:name'] : null; + return mainActivity?.['@_android:name'] ?? null; } else { return null; }