1*82ade864SWill Schurmanimport { getConfig } from '@expo/config';
2082815dcSEvan Baconimport { ModPlatform } from '@expo/config-plugins';
3082815dcSEvan Bacon
4082815dcSEvan Baconimport { getAutolinkedPackagesAsync } from './getAutolinkedPackages';
5082815dcSEvan Baconimport {
6082815dcSEvan Bacon  withAndroidExpoPlugins,
7082815dcSEvan Bacon  withIosExpoPlugins,
8082815dcSEvan Bacon  withLegacyExpoPlugins,
9082815dcSEvan Bacon  withVersionedExpoSDKPlugins,
10082815dcSEvan Bacon} from './plugins/withDefaultPlugins';
11082815dcSEvan Bacon
12082815dcSEvan Baconexport async function getPrebuildConfigAsync(
13082815dcSEvan Bacon  projectRoot: string,
14082815dcSEvan Bacon  props: {
15082815dcSEvan Bacon    bundleIdentifier?: string;
16082815dcSEvan Bacon    packageName?: string;
17082815dcSEvan Bacon    platforms: ModPlatform[];
18082815dcSEvan Bacon  }
19082815dcSEvan Bacon): Promise<ReturnType<typeof getConfig>> {
20082815dcSEvan Bacon  const autolinkedModules = await getAutolinkedPackagesAsync(projectRoot, props.platforms);
21082815dcSEvan Bacon
22082815dcSEvan Bacon  return getPrebuildConfig(projectRoot, {
23082815dcSEvan Bacon    ...props,
24082815dcSEvan Bacon    autolinkedModules,
25082815dcSEvan Bacon  });
26082815dcSEvan Bacon}
27082815dcSEvan Bacon
28082815dcSEvan Baconfunction getPrebuildConfig(
29082815dcSEvan Bacon  projectRoot: string,
30082815dcSEvan Bacon  {
31082815dcSEvan Bacon    platforms,
32082815dcSEvan Bacon    bundleIdentifier,
33082815dcSEvan Bacon    packageName,
34082815dcSEvan Bacon    autolinkedModules,
35082815dcSEvan Bacon  }: {
36082815dcSEvan Bacon    bundleIdentifier?: string;
37082815dcSEvan Bacon    packageName?: string;
38082815dcSEvan Bacon    platforms: ModPlatform[];
39082815dcSEvan Bacon    autolinkedModules?: string[];
40082815dcSEvan Bacon  }
41082815dcSEvan Bacon) {
42082815dcSEvan Bacon  // let config: ExpoConfig;
43082815dcSEvan Bacon  let { exp: config, ...rest } = getConfig(projectRoot, {
44082815dcSEvan Bacon    skipSDKVersionRequirement: true,
45082815dcSEvan Bacon    isModdedConfig: true,
46082815dcSEvan Bacon  });
47082815dcSEvan Bacon
48082815dcSEvan Bacon  if (autolinkedModules) {
49082815dcSEvan Bacon    if (!config._internal) {
50082815dcSEvan Bacon      config._internal = {};
51082815dcSEvan Bacon    }
52082815dcSEvan Bacon    config._internal.autolinkedModules = autolinkedModules;
53082815dcSEvan Bacon  }
54082815dcSEvan Bacon
55082815dcSEvan Bacon  // Add all built-in plugins first because they should take
56082815dcSEvan Bacon  // priority over the unversioned plugins.
57*82ade864SWill Schurman  config = withVersionedExpoSDKPlugins(config);
58082815dcSEvan Bacon  config = withLegacyExpoPlugins(config);
59082815dcSEvan Bacon
60082815dcSEvan Bacon  if (platforms.includes('ios')) {
61082815dcSEvan Bacon    if (!config.ios) config.ios = {};
62082815dcSEvan Bacon    config.ios.bundleIdentifier =
63082815dcSEvan Bacon      bundleIdentifier ?? config.ios.bundleIdentifier ?? `com.placeholder.appid`;
64082815dcSEvan Bacon
65082815dcSEvan Bacon    // Add all built-in plugins
66082815dcSEvan Bacon    config = withIosExpoPlugins(config, {
67082815dcSEvan Bacon      bundleIdentifier: config.ios.bundleIdentifier,
68082815dcSEvan Bacon    });
69082815dcSEvan Bacon  }
70082815dcSEvan Bacon
71082815dcSEvan Bacon  if (platforms.includes('android')) {
72082815dcSEvan Bacon    if (!config.android) config.android = {};
73082815dcSEvan Bacon    config.android.package = packageName ?? config.android.package ?? `com.placeholder.appid`;
74082815dcSEvan Bacon
75082815dcSEvan Bacon    // Add all built-in plugins
76082815dcSEvan Bacon    config = withAndroidExpoPlugins(config, {
77082815dcSEvan Bacon      package: config.android.package,
78082815dcSEvan Bacon    });
79082815dcSEvan Bacon  }
80082815dcSEvan Bacon
81082815dcSEvan Bacon  return { exp: config, ...rest };
82082815dcSEvan Bacon}
83