1import { getConfig } from '@expo/config';
2
3import { Log } from '../log';
4
5export async function typescript(projectRoot: string) {
6  const { TypeScriptProjectPrerequisite } = await import(
7    '../start/doctor/typescript/TypeScriptProjectPrerequisite.js'
8  );
9  const { MetroBundlerDevServer } = await import('../start/server/metro/MetroBundlerDevServer.js');
10  const { getPlatformBundlers } = await import('../start/server/platformBundlers.js');
11
12  try {
13    await new TypeScriptProjectPrerequisite(projectRoot).bootstrapAsync();
14  } catch (error: any) {
15    // Ensure the process doesn't fail if the TypeScript check fails.
16    // This could happen during the install.
17    Log.log();
18    Log.exception(error);
19    return;
20  }
21
22  const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });
23  await new MetroBundlerDevServer(
24    projectRoot,
25    getPlatformBundlers(exp),
26    true
27  ).startTypeScriptServices();
28}
29