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