From ec8cf16514d18a85a109fc9a9daf87b29e43f19d Mon Sep 17 00:00:00 2001 From: Rob Hogan Date: Mon, 5 Aug 2024 14:24:04 -0700 Subject: [PATCH] Resolver perf 1/n: Optimise package exports `flattenLegacySubpaths` Differential Revision: D56701232 --- .../src/PackageExportsResolve.js | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/packages/metro-resolver/src/PackageExportsResolve.js b/packages/metro-resolver/src/PackageExportsResolve.js index 6811802aec..1fe1b45d1d 100644 --- a/packages/metro-resolver/src/PackageExportsResolve.js +++ b/packages/metro-resolver/src/PackageExportsResolve.js @@ -202,21 +202,23 @@ function flattenLegacySubpathValues( exportMap: ExportMap | ExportMapWithFallbacks, createConfigError: (reason: string) => Error, ): ExportMap { - return Object.keys(exportMap).reduce((result: ExportMap, subpath: string) => { - const value = exportMap[subpath]; - - // We do not support empty or nested arrays (non-standard) - if (Array.isArray(value) && (!value.length || Array.isArray(value[0]))) { - throw createConfigError( - 'Could not parse non-standard array value in "exports" field.', - ); - } - - return { - ...result, - [subpath]: Array.isArray(value) ? value[0] : value, - }; - }, {}); + return Object.entries(exportMap).reduce( + (result, [subpath, value]) => { + // We do not support empty or nested arrays (non-standard) + if (Array.isArray(value)) { + if (!value.length || Array.isArray(value[0])) { + throw createConfigError( + 'Could not parse non-standard array value in "exports" field.', + ); + } + result[subpath] = value[0]; + } else { + result[subpath] = value; + } + return result; + }, + {} as {[subpathOrCondition: string]: string | ExportMap | null}, + ); } /**