1import { Command } from '@expo/commander';
2import path from 'path';
3
4import { generateDynamicMacrosAsync } from '../dynamic-macros/generateDynamicMacros';
5import { Directories } from '../expotools';
6
7const EXPO_DIR = Directories.getExpoRepositoryRootDir();
8const ANDROID_DIR = Directories.getAndroidDir();
9const GENERATED_DIR = path.join(ANDROID_DIR, 'expoview/src/main/java/host/exp/exponent/generated');
10const TEMPLATE_FILES_DIR = path.join(EXPO_DIR, 'template-files');
11
12async function generateAction(options): Promise<void> {
13  const buildConstantsPath =
14    options.buildConstantsPath || path.join(GENERATED_DIR, 'ExponentBuildConstants.java');
15  const configuration = options.configuration || process.env.CONFIGURATION || 'release';
16
17  await generateDynamicMacrosAsync({
18    buildConstantsPath,
19    platform: 'android',
20    expoKitPath: EXPO_DIR,
21    templateFilesPath: TEMPLATE_FILES_DIR,
22    configuration,
23  });
24}
25
26export default (program: Command) => {
27  program
28    .command('android-generate-dynamic-macros')
29    .option(
30      '--buildConstantsPath [string]',
31      'Path to ExponentBuildConstants.java relative to `android` folder. Optional.'
32    )
33    .option(
34      '--configuration [string]',
35      'Build configuration. Defaults to `process.env.CONFIGURATION` or "debug".'
36    )
37    .description('Generates dynamic macros for Android client.')
38    .asyncAction(generateAction);
39};
40