1*3d6e487dSEvan Baconimport path from 'path'; 2*3d6e487dSEvan Bacon 3*3d6e487dSEvan Baconimport { CommandError } from '../../utils/errors'; 4*3d6e487dSEvan Bacon 5*3d6e487dSEvan Baconexport type GradleProps = { 6*3d6e487dSEvan Bacon /** Directory for the APK based on the `variant`. */ 7*3d6e487dSEvan Bacon apkVariantDirectory: string; 8*3d6e487dSEvan Bacon /** Name of the app, used in the `apkVariantDirectory`. */ 9*3d6e487dSEvan Bacon appName: string; 10*3d6e487dSEvan Bacon /** First section of the provided `variant`, indicates the last part of the file name for the output APK. */ 11*3d6e487dSEvan Bacon buildType: string; 12*3d6e487dSEvan Bacon /** Used to assemble the APK, also included in the output APK filename. */ 13*3d6e487dSEvan Bacon flavors?: string[]; 14*3d6e487dSEvan Bacon}; 15*3d6e487dSEvan Bacon 16*3d6e487dSEvan Baconfunction assertVariant(variant?: string) { 17*3d6e487dSEvan Bacon if (variant && typeof variant !== 'string') { 18*3d6e487dSEvan Bacon throw new CommandError('BAD_ARGS', '--variant must be a string'); 19*3d6e487dSEvan Bacon } 20*3d6e487dSEvan Bacon return variant ?? 'debug'; 21*3d6e487dSEvan Bacon} 22*3d6e487dSEvan Bacon 23*3d6e487dSEvan Baconexport function resolveGradleProps( 24*3d6e487dSEvan Bacon projectRoot: string, 25*3d6e487dSEvan Bacon options: { variant?: string } 26*3d6e487dSEvan Bacon): GradleProps { 27*3d6e487dSEvan Bacon const variant = assertVariant(options.variant); 28*3d6e487dSEvan Bacon // NOTE(EvanBacon): Why would this be different? Can we get the different name? 29*3d6e487dSEvan Bacon const appName = 'app'; 30*3d6e487dSEvan Bacon 31*3d6e487dSEvan Bacon const apkDirectory = path.join(projectRoot, 'android', appName, 'build', 'outputs', 'apk'); 32*3d6e487dSEvan Bacon 33*3d6e487dSEvan Bacon // buildDeveloperTrust -> build, developer, trust (where developer, and trust are flavors). 34*3d6e487dSEvan Bacon // This won't work for non-standard flavor names like "myFlavor" would be treated as "my", "flavor". 35*3d6e487dSEvan Bacon const [buildType, ...flavors] = variant.split(/(?=[A-Z])/).map((v) => v.toLowerCase()); 36*3d6e487dSEvan Bacon const apkVariantDirectory = path.join(apkDirectory, ...flavors, buildType); 37*3d6e487dSEvan Bacon 38*3d6e487dSEvan Bacon return { 39*3d6e487dSEvan Bacon appName, 40*3d6e487dSEvan Bacon buildType, 41*3d6e487dSEvan Bacon flavors, 42*3d6e487dSEvan Bacon apkVariantDirectory, 43*3d6e487dSEvan Bacon }; 44*3d6e487dSEvan Bacon} 45