From 42dd3a8988ca1ca79e917fb54e922b54809618fe Mon Sep 17 00:00:00 2001 From: peternhale Date: Fri, 10 Apr 2026 20:13:00 -0600 Subject: [PATCH] perf: dedupe paths in getComponentSets Use Set-backed unique lists for deletes and non-deletes before resolution. --- src/shared/localComponentSetArray.ts | 9 ++- yarn.lock | 107 ++------------------------- 2 files changed, 12 insertions(+), 104 deletions(-) diff --git a/src/shared/localComponentSetArray.ts b/src/shared/localComponentSetArray.ts index b52f9f7c..add10d53 100644 --- a/src/shared/localComponentSetArray.ts +++ b/src/shared/localComponentSetArray.ts @@ -119,9 +119,12 @@ export const getComponentSets = ({ // we need virtual components for the deletes. // TODO: could we use the same for the non-deletes? - const resolverForDeletes = new MetadataResolver(registry, VirtualTreeContainer.fromFilePaths(grouping.deletes)); + const uniqueDeletes = [...new Set(grouping.deletes)]; + const uniqueNonDeletes = [...new Set(grouping.nonDeletes)]; - grouping.deletes + const resolverForDeletes = new MetadataResolver(registry, VirtualTreeContainer.fromFilePaths(uniqueDeletes)); + + uniqueDeletes .flatMap((filename) => resolverForDeletes.getComponentsFromPath(filename)) .filter(isDefined) .map((component) => { @@ -144,7 +147,7 @@ export const getComponentSets = ({ } }); - grouping.nonDeletes + uniqueNonDeletes .flatMap((filename) => { try { return resolverForNonDeletes.getComponentsFromPath(resolve(projectPath, filename)); diff --git a/yarn.lock b/yarn.lock index a9a6c536..e8a9181b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -570,22 +570,6 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jsforce/jsforce-node@^3.10.10": - version "3.10.10" - resolved "https://registry.yarnpkg.com/@jsforce/jsforce-node/-/jsforce-node-3.10.10.tgz#2d7bb77d1d739712733a30de7e9c941d2127bc4a" - integrity sha512-/zUOX9kapwk8lyjmTYgXlBF+GbqcEpb0zrkDfX9i94xu5cvzERZxRHqSSaS/IImoDmvoSbatFSVfB7Y4lmANOw== - dependencies: - "@sindresorhus/is" "^4" - base64url "^3.0.1" - csv-parse "^5.5.2" - csv-stringify "^6.6.0" - faye "^1.4.0" - form-data "^4.0.4" - https-proxy-agent "^5.0.0" - multistream "^3.1.0" - node-fetch "^2.6.1" - xml2js "^0.6.2" - "@jsforce/jsforce-node@^3.10.13": version "3.10.14" resolved "https://registry.yarnpkg.com/@jsforce/jsforce-node/-/jsforce-node-3.10.14.tgz#e6429626118a86247605f14b2466026f7180cff8" @@ -692,32 +676,7 @@ strip-ansi "6.0.1" ts-retry-promise "^0.8.1" -"@salesforce/core@^8.23.1", "@salesforce/core@^8.8.0": - version "8.24.0" - resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-8.24.0.tgz#13426f9f3b5ed0ec126b8009e5eda68e03db0401" - integrity sha512-8Ra5RT95bRkmHmaaFgABwkXbnHNSNS7l9gbJzJgO6VQpaEeytGPPyymnAE7TcTM2xp/QwlXn+PgX4biX7Lb7JA== - dependencies: - "@jsforce/jsforce-node" "^3.10.10" - "@salesforce/kit" "^3.2.4" - "@salesforce/ts-types" "^2.0.12" - ajv "^8.17.1" - change-case "^4.1.2" - fast-levenshtein "^3.0.0" - faye "^1.4.1" - form-data "^4.0.4" - js2xmlparser "^4.0.1" - jsonwebtoken "9.0.3" - jszip "3.10.1" - memfs "^4.30.1" - pino "^9.7.0" - pino-abstract-transport "^1.2.0" - pino-pretty "^11.3.0" - proper-lockfile "^4.1.2" - semver "^7.7.3" - ts-retry-promise "^0.8.1" - zod "^4.1.12" - -"@salesforce/core@^8.27.1": +"@salesforce/core@^8.23.1", "@salesforce/core@^8.27.1", "@salesforce/core@^8.8.0": version "8.27.1" resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-8.27.1.tgz#26b08b0d68dd1fc210d1dd7a7e3770e3b9f27e74" integrity sha512-1WpVt9tQAEINGzsQsSiVRmcmYUpKeK4P54624f9HvLIv7o7jTjdARwirJpOqivIihbDE8OJnYOdsr0vV5Dz93A== @@ -1310,17 +1269,7 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.11.0, ajv@^8.17.1: - version "8.17.1" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - -ajv@^8.18.0: +ajv@^8.11.0, ajv@^8.18.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== @@ -1562,14 +1511,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -brace-expansion@^2.0.2: +brace-expansion@^2.0.1, brace-expansion@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.3.tgz#0493338bdd58e319b1039c67cf7ee439892c01d9" integrity sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA== @@ -2806,16 +2748,7 @@ fast-xml-builder@^1.1.4: dependencies: path-expression-matcher "^1.1.3" -fast-xml-parser@^5.5.7: - version "5.5.7" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.5.7.tgz#e1ddc86662d808450a19cf2fb6ccc9c3c9933c5d" - integrity sha512-LteOsISQ2GEiDHZch6L9hB0+MLoYVLToR7xotrzU0opCICBkxOPgHAy1HxAvtxfJNXDJpgAsQN30mkrfpO2Prg== - dependencies: - fast-xml-builder "^1.1.4" - path-expression-matcher "^1.1.3" - strnum "^2.2.0" - -fast-xml-parser@^5.5.9: +fast-xml-parser@^5.5.7, fast-xml-parser@^5.5.9: version "5.5.9" resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.5.9.tgz#e59637abebec3dbfbb4053b532d787af6ea11527" integrity sha512-jldvxr1MC6rtiZKgrFnDSvT8xuH+eJqxqOBThUVjYrxssYTo1avZLGql5l0a0BAERR01CadYzZ83kVEkbyDg+g== @@ -4329,17 +4262,6 @@ memfs@4.38.1: tree-dump "^1.0.3" tslib "^2.0.0" -memfs@^4.30.1: - version "4.36.3" - resolved "https://registry.npmjs.org/memfs/-/memfs-4.36.3.tgz" - integrity sha512-rZIVsNPGdZDPls/ckWhIsod2zRNsI2f2kEru0gMldkrEve+fPn7CVBTvfKLNyHQ9rZDWwzVBF8tPsZivzDPiZQ== - dependencies: - "@jsonjoy.com/json-pack" "^1.11.0" - "@jsonjoy.com/util" "^1.9.0" - thingies "^2.5.0" - tree-dump "^1.0.3" - tslib "^2.0.0" - meow@^13.0.0: version "13.2.0" resolved "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz" @@ -4475,14 +4397,7 @@ minimatch@^5.0.1, minimatch@^5.1.6: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.4, minimatch@^9.0.5: - version "9.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.7: +minimatch@^9.0.4, minimatch@^9.0.5, minimatch@^9.0.7: version "9.0.9" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== @@ -4926,12 +4841,7 @@ path-exists@^4.0.0: resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-expression-matcher@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.1.3.tgz#8bf7c629dc1b114e42b633c071f06d14625b4e0d" - integrity sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ== - -path-expression-matcher@^1.2.0: +path-expression-matcher@^1.1.3, path-expression-matcher@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.2.0.tgz#9bdae3787f43b0857b0269e9caaa586c12c8abee" integrity sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ== @@ -5963,11 +5873,6 @@ strip-json-comments@^3.1.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strnum@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.2.1.tgz#d28f896b4ef9985212494ce8bcf7ca304fad8368" - integrity sha512-BwRvNd5/QoAtyW1na1y1LsJGQNvRlkde6Q/ipqqEaivoMdV+B1OMOTVdwR+N/cwVUcIt9PYyHmV8HyexCZSupg== - strnum@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.2.2.tgz#f11fd94ab62b536ba2ecc615858f3747c2881b3f"