From e2754d3ef947b59729128eeaebe0fe257eb080a4 Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Tue, 19 May 2026 00:46:49 +0000 Subject: [PATCH 1/2] [Performance] Memoize platformAndArch and optimize platform detection - Implement memoization for platformAndArch when called with default arguments. - Replace regex match with startsWith for platform normalization. - Add comments explaining the optimizations. --- packages/cli-kit/src/public/node/os.ts | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/cli-kit/src/public/node/os.ts b/packages/cli-kit/src/public/node/os.ts index 139f798cbb0..f56551bc5b1 100644 --- a/packages/cli-kit/src/public/node/os.ts +++ b/packages/cli-kit/src/public/node/os.ts @@ -1,3 +1,4 @@ +import {isUnitTest} from './context/local.js' import {outputDebug, outputContent} from './output.js' import {execa} from 'execa' import {userInfo as osUserInfo} from 'os' @@ -46,6 +47,9 @@ export async function username(platform: typeof process.platform = process.platf type PlatformArch = Exclude | 'amd64' | '386' type PlatformStrings = Exclude | 'windows' + +let memoizedPlatformAndArch: {platform: PlatformStrings; arch: PlatformArch} | undefined + /** * Returns the platform and architecture. * @returns Returns the current platform and architecture. @@ -57,6 +61,12 @@ export function platformAndArch( platform: PlatformStrings arch: PlatformArch } { + // Optimization: Memoize the result for the default environment (process.platform and process.arch) + // to avoid redundant checks and regex execution in hot paths. Bypassed during unit tests + // to ensure test isolation. + if (memoizedPlatformAndArch && platform === process.platform && arch === process.arch && !isUnitTest()) { + return memoizedPlatformAndArch + } let archString: PlatformArch if (arch === 'x64') { archString = 'amd64' @@ -65,8 +75,15 @@ export function platformAndArch( } else { archString = arch } - const platformString = (platform.match(/^win.+/) ? 'windows' : platform) as PlatformStrings - return {platform: platformString, arch: archString} + + // Optimization: startsWith('win') is faster than a regex match and safe for identifying 'win32'. + const platformString = (platform.startsWith('win') ? 'windows' : platform) as PlatformStrings + + const result = {platform: platformString, arch: archString} + if (platform === process.platform && arch === process.arch && !isUnitTest()) { + memoizedPlatformAndArch = result + } + return result } function getEnvironmentVariable() { From 266fb3e532c3545a46207c8d24d44581461e1f61 Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Wed, 20 May 2026 14:30:41 +0000 Subject: [PATCH 2/2] [Performance] Memoize platformAndArch and optimize platform detection - Implement memoization for platformAndArch when called with default arguments. - Replace regex match with startsWith for platform normalization. - Add comments explaining the optimizations. - Update generated GraphQL types to satisfy CI codegen check. --- .jules/bolt.md | 3 +++ .../business-platform-organizations/generated/types.d.ts | 2 ++ 2 files changed, 5 insertions(+) create mode 100644 .jules/bolt.md diff --git a/.jules/bolt.md b/.jules/bolt.md new file mode 100644 index 00000000000..046b07a2553 --- /dev/null +++ b/.jules/bolt.md @@ -0,0 +1,3 @@ +## 2026-05-19 - Memoize platformAndArch and optimize platform detection +**Learning:** Utility functions like `platformAndArch` that are called frequently with default arguments (`process.platform`, `process.arch`) can be memoized to avoid redundant logic. Additionally, simple string operations like `startsWith` are more efficient than regex matches for basic prefix checks. +**Action:** Implement memoization in `platformAndArch` for default arguments and replace `platform.match(/^win.+/)` with `platform.startsWith('win')`. diff --git a/packages/app/src/cli/api/graphql/business-platform-organizations/generated/types.d.ts b/packages/app/src/cli/api/graphql/business-platform-organizations/generated/types.d.ts index 52e20a2dd47..fd627c21b24 100644 --- a/packages/app/src/cli/api/graphql/business-platform-organizations/generated/types.d.ts +++ b/packages/app/src/cli/api/graphql/business-platform-organizations/generated/types.d.ts @@ -22,6 +22,8 @@ export type Scalars = { ActionAuditID: { input: any; output: any; } /** The ID for a Address. */ AddressID: { input: any; output: any; } + /** The ID for a Attestation. */ + AttestationID: { input: any; output: any; } /** The ID for a BulkDataOperation. */ BulkDataOperationID: { input: any; output: any; } /** The ID for a BusinessUser. */