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