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