1import { getConfig } from '@expo/config'; 2import { ModPlatform } from '@expo/config-plugins'; 3 4import { getAutolinkedPackagesAsync } from './getAutolinkedPackages'; 5import { 6 withAndroidExpoPlugins, 7 withIosExpoPlugins, 8 withLegacyExpoPlugins, 9 withVersionedExpoSDKPlugins, 10} from './plugins/withDefaultPlugins'; 11 12export async function getPrebuildConfigAsync( 13 projectRoot: string, 14 props: { 15 bundleIdentifier?: string; 16 packageName?: string; 17 platforms: ModPlatform[]; 18 } 19): Promise<ReturnType<typeof getConfig>> { 20 const autolinkedModules = await getAutolinkedPackagesAsync(projectRoot, props.platforms); 21 22 return getPrebuildConfig(projectRoot, { 23 ...props, 24 autolinkedModules, 25 }); 26} 27 28function getPrebuildConfig( 29 projectRoot: string, 30 { 31 platforms, 32 bundleIdentifier, 33 packageName, 34 autolinkedModules, 35 }: { 36 bundleIdentifier?: string; 37 packageName?: string; 38 platforms: ModPlatform[]; 39 autolinkedModules?: string[]; 40 } 41) { 42 // let config: ExpoConfig; 43 let { exp: config, ...rest } = getConfig(projectRoot, { 44 skipSDKVersionRequirement: true, 45 isModdedConfig: true, 46 }); 47 48 if (autolinkedModules) { 49 if (!config._internal) { 50 config._internal = {}; 51 } 52 config._internal.autolinkedModules = autolinkedModules; 53 } 54 55 // Add all built-in plugins first because they should take 56 // priority over the unversioned plugins. 57 config = withVersionedExpoSDKPlugins(config); 58 config = withLegacyExpoPlugins(config); 59 60 if (platforms.includes('ios')) { 61 if (!config.ios) config.ios = {}; 62 config.ios.bundleIdentifier = 63 bundleIdentifier ?? config.ios.bundleIdentifier ?? `com.placeholder.appid`; 64 65 // Add all built-in plugins 66 config = withIosExpoPlugins(config, { 67 bundleIdentifier: config.ios.bundleIdentifier, 68 }); 69 } 70 71 if (platforms.includes('android')) { 72 if (!config.android) config.android = {}; 73 config.android.package = packageName ?? config.android.package ?? `com.placeholder.appid`; 74 75 // Add all built-in plugins 76 config = withAndroidExpoPlugins(config, { 77 package: config.android.package, 78 }); 79 } 80 81 return { exp: config, ...rest }; 82} 83