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