1import { ConfigPlugin, withPlugins } from '@expo/config-plugins';
2
3import { serializeAfterStaticPlugins } from '../Serialize';
4
5/**
6 * Resolves static plugins array as config plugin functions.
7 *
8 * @param config
9 * @param projectRoot
10 */
11export const withConfigPlugins: ConfigPlugin<boolean> = (config, skipPlugins) => {
12  // @ts-ignore: plugins not on config type yet -- TODO
13  if (!Array.isArray(config.plugins) || !config.plugins?.length) {
14    return config;
15  }
16  if (!skipPlugins) {
17    // Resolve and evaluate plugins
18    // @ts-ignore: TODO: add plugins to the config schema
19    config = withPlugins(config, config.plugins);
20  } else {
21    // Delete the plugins array in case someone added functions or other values which cannot be automatically serialized.
22    delete config.plugins;
23  }
24  // plugins aren't serialized by default, serialize the plugins after resolving them.
25  return serializeAfterStaticPlugins(config);
26};
27