1*082815dcSEvan Baconimport fs from 'fs';
2*082815dcSEvan Baconimport path from 'path';
3*082815dcSEvan Bacon
4*082815dcSEvan Baconimport gradleScript from './EasBuildGradleScript';
5*082815dcSEvan Baconimport * as Paths from './Paths';
6*082815dcSEvan Bacon
7*082815dcSEvan Baconconst APPLY_EAS_GRADLE = 'apply from: "./eas-build.gradle"';
8*082815dcSEvan Bacon
9*082815dcSEvan Baconfunction hasApplyLine(content: string, applyLine: string): boolean {
10*082815dcSEvan Bacon  return (
11*082815dcSEvan Bacon    content
12*082815dcSEvan Bacon      .replace(/\r\n/g, '\n')
13*082815dcSEvan Bacon      .split('\n')
14*082815dcSEvan Bacon      // Check for both single and double quotes
15*082815dcSEvan Bacon      .some((line) => line === applyLine || line === applyLine.replace(/"/g, "'"))
16*082815dcSEvan Bacon  );
17*082815dcSEvan Bacon}
18*082815dcSEvan Bacon
19*082815dcSEvan Baconexport function getEasBuildGradlePath(projectRoot: string): string {
20*082815dcSEvan Bacon  return path.join(projectRoot, 'android', 'app', 'eas-build.gradle');
21*082815dcSEvan Bacon}
22*082815dcSEvan Bacon
23*082815dcSEvan Baconexport async function configureEasBuildAsync(projectRoot: string): Promise<void> {
24*082815dcSEvan Bacon  const buildGradlePath = Paths.getAppBuildGradleFilePath(projectRoot);
25*082815dcSEvan Bacon  const easGradlePath = getEasBuildGradlePath(projectRoot);
26*082815dcSEvan Bacon
27*082815dcSEvan Bacon  await fs.promises.writeFile(easGradlePath, gradleScript);
28*082815dcSEvan Bacon
29*082815dcSEvan Bacon  const buildGradleContent = await fs.promises.readFile(path.join(buildGradlePath), 'utf8');
30*082815dcSEvan Bacon
31*082815dcSEvan Bacon  const hasEasGradleApply = hasApplyLine(buildGradleContent, APPLY_EAS_GRADLE);
32*082815dcSEvan Bacon
33*082815dcSEvan Bacon  if (!hasEasGradleApply) {
34*082815dcSEvan Bacon    await fs.promises.writeFile(
35*082815dcSEvan Bacon      buildGradlePath,
36*082815dcSEvan Bacon      `${buildGradleContent.trim()}\n${APPLY_EAS_GRADLE}\n`
37*082815dcSEvan Bacon    );
38*082815dcSEvan Bacon  }
39*082815dcSEvan Bacon}
40*082815dcSEvan Bacon
41*082815dcSEvan Baconexport async function isEasBuildGradleConfiguredAsync(projectRoot: string): Promise<boolean> {
42*082815dcSEvan Bacon  const buildGradlePath = Paths.getAppBuildGradleFilePath(projectRoot);
43*082815dcSEvan Bacon  const easGradlePath = getEasBuildGradlePath(projectRoot);
44*082815dcSEvan Bacon
45*082815dcSEvan Bacon  const hasEasGradleFile = await fs.existsSync(easGradlePath);
46*082815dcSEvan Bacon
47*082815dcSEvan Bacon  const buildGradleContent = await fs.promises.readFile(path.join(buildGradlePath), 'utf8');
48*082815dcSEvan Bacon  const hasEasGradleApply = hasApplyLine(buildGradleContent, APPLY_EAS_GRADLE);
49*082815dcSEvan Bacon
50*082815dcSEvan Bacon  return hasEasGradleApply && hasEasGradleFile;
51*082815dcSEvan Bacon}
52