1import { ExpoConfig, modifyConfigAsync } from '@expo/config';
2
3import { warnAboutConfigAndThrow } from './modifyConfigAsync';
4import * as Log from '../log';
5
6export async function attemptAddingPluginsAsync(
7  projectRoot: string,
8  exp: Pick<ExpoConfig, 'plugins'>,
9  plugins: string[]
10): Promise<void> {
11  if (!plugins.length) return;
12
13  const edits = {
14    plugins: [...new Set((exp.plugins || []).concat(plugins))],
15  };
16  const modification = await modifyConfigAsync(projectRoot, edits, {
17    skipSDKVersionRequirement: true,
18    skipPlugins: true,
19  });
20  if (modification.type === 'success') {
21    Log.log(`\u203A Added config plugin${plugins.length === 1 ? '' : 's'}: ${plugins.join(', ')}`);
22  } else {
23    const exactEdits = {
24      plugins,
25    };
26    warnAboutConfigAndThrow(modification.type, modification.message!, exactEdits);
27  }
28}
29