1import { ExpoConfig } from '@expo/config-types'; 2 3import { resolveMetroVersionFromProject } from '../../start/server/metro/resolveFromProject'; 4 5/** 6 * Get the unstable / experimental properties used within the Metro config. 7 * Note that this should match `metro-config`, but uses newer features that are not yet typed. 8 * 9 * @see https://github.com/facebook/metro/blob/1d51ffd33f54dba25c54b49ff059543dac519f21/packages/metro-config/src/configTypes.flow.js 10 */ 11export function getMetroProperties( 12 projectRoot: string, 13 exp: ExpoConfig, 14 metroConfig: Record<string, any> = {} 15) { 16 return { 17 sdkVersion: exp.sdkVersion, 18 metroVersion: resolveMetroVersionFromProject(projectRoot), 19 20 fileMapCacheManagerFactory: 21 Boolean(metroConfig.unstable_fileMapCacheManagerFactory) || undefined, // CacheManagerFactory 22 perfLogger: Boolean(metroConfig.unstable_perfLogger) || undefined, // PerfLoggerFactory 23 24 resolverEnableSymlinks: metroConfig.resolver?.unstable_enableSymlinks, // boolean 25 resolverConditionNames: metroConfig.resolver?.unstable_conditionNames, // string[] 26 resolverConditionsByPlatform: metroConfig.resolver?.unstable_conditionsByPlatform, // { [platform: string]: string[] } 27 resolverEnablePackageExports: metroConfig.resolver?.unstable_enablePackageExports, // boolean 28 29 serverImportBundleSupport: metroConfig.server?.experimentalImportBundleSupport, // boolean 30 serverServerRoot: Boolean(metroConfig.server?.unstable_serverRoot) || undefined, // string | null 31 32 transformerCollectDependenciesPath: metroConfig.transformer?.unstable_collectDependenciesPath, // string 33 transformerDependencyMapReservedName: 34 metroConfig.transformer?.unstable_dependencyMapReservedName, // string | null 35 transformerDisableModuleWrapping: metroConfig.transformer?.unstable_disableModuleWrapping, // boolean 36 transformerDisableNormalizePseudoGlobals: 37 metroConfig.transformer?.unstable_disableNormalizePseudoGlobals, // boolean 38 transformerCompactOutput: metroConfig.transformer?.unstable_compactOutput, // boolean 39 transformerAllowRequireContext: metroConfig.transformer?.unstable_allowRequireContext, // boolean 40 }; 41} 42