1*82ade864SWill Schurmanimport { ExpoConfig } from '@expo/config';
28d307f52SEvan Baconimport { compileModsAsync, ModPlatform } from '@expo/config-plugins';
38d307f52SEvan Baconimport { getPrebuildConfigAsync } from '@expo/prebuild-config';
48d307f52SEvan Bacon
58d307f52SEvan Baconimport { logConfig } from '../config/configAsync';
68d307f52SEvan Baconimport * as Log from '../log';
7814b6fafSEvan Baconimport { env } from '../utils/env';
88d307f52SEvan Baconimport {
98d307f52SEvan Bacon  getOrPromptForBundleIdentifier,
108d307f52SEvan Bacon  getOrPromptForPackage,
118d307f52SEvan Bacon} from '../utils/getOrPromptApplicationId';
128d307f52SEvan Bacon
138d307f52SEvan Baconexport async function configureProjectAsync(
148d307f52SEvan Bacon  projectRoot: string,
158d307f52SEvan Bacon  {
168d307f52SEvan Bacon    platforms,
178d307f52SEvan Bacon  }: {
188d307f52SEvan Bacon    platforms: ModPlatform[];
198d307f52SEvan Bacon  }
208d307f52SEvan Bacon): Promise<ExpoConfig> {
218d307f52SEvan Bacon  let bundleIdentifier: string | undefined;
228d307f52SEvan Bacon  if (platforms.includes('ios')) {
238d307f52SEvan Bacon    // Check bundle ID before reading the config because it may mutate the config if the user is prompted to define it.
248d307f52SEvan Bacon    bundleIdentifier = await getOrPromptForBundleIdentifier(projectRoot);
258d307f52SEvan Bacon  }
268d307f52SEvan Bacon  let packageName: string | undefined;
278d307f52SEvan Bacon  if (platforms.includes('android')) {
288d307f52SEvan Bacon    // Check package before reading the config because it may mutate the config if the user is prompted to define it.
298d307f52SEvan Bacon    packageName = await getOrPromptForPackage(projectRoot);
308d307f52SEvan Bacon  }
318d307f52SEvan Bacon
328d307f52SEvan Bacon  let { exp: config } = await getPrebuildConfigAsync(projectRoot, {
338d307f52SEvan Bacon    platforms,
348d307f52SEvan Bacon    packageName,
358d307f52SEvan Bacon    bundleIdentifier,
368d307f52SEvan Bacon  });
378d307f52SEvan Bacon
388d307f52SEvan Bacon  // compile all plugins and mods
398d307f52SEvan Bacon  config = await compileModsAsync(config, {
408d307f52SEvan Bacon    projectRoot,
418d307f52SEvan Bacon    platforms,
428d307f52SEvan Bacon    assertMissingModProviders: false,
438d307f52SEvan Bacon  });
448d307f52SEvan Bacon
45814b6fafSEvan Bacon  if (env.EXPO_DEBUG) {
468d307f52SEvan Bacon    Log.log();
478d307f52SEvan Bacon    Log.log('Evaluated config:');
488d307f52SEvan Bacon    logConfig(config);
498d307f52SEvan Bacon    Log.log();
508d307f52SEvan Bacon  }
518d307f52SEvan Bacon
528d307f52SEvan Bacon  return config;
538d307f52SEvan Bacon}
54