1import { loadMetroConfigAsync } from '../../start/server/metro/instantiateMetro';
2import { importCliBuildBundleWithConfigFromProject } from '../../start/server/metro/resolveFromProject';
3import { setNodeEnv } from '../../utils/nodeEnv';
4import { Options } from './resolveOptions';
5
6export async function exportEmbedAsync(projectRoot: string, options: Options) {
7  setNodeEnv(options.dev ? 'development' : 'production');
8
9  const { config } = await loadMetroConfigAsync(projectRoot, {
10    maxWorkers: options.maxWorkers,
11    resetCache: options.resetCache,
12    config: options.config,
13  });
14
15  const buildBundleWithConfig = importCliBuildBundleWithConfigFromProject(projectRoot);
16
17  // Import the internal `buildBundleWithConfig()` function from `react-native` for the purpose
18  // of exporting with `@expo/metro-config` and other defaults like a resolved project entry.
19  await buildBundleWithConfig(
20    options,
21    // @ts-expect-error: MetroConfig type mismatch.
22    config
23  );
24}
25