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    bareExpo: options.bare,
23    configuration,
24  });
25}
26
27export default (program: Command) => {
28  program
29    .command('android-generate-dynamic-macros')
30    .option(
31      '--buildConstantsPath [string]',
32      'Path to ExponentBuildConstants.java relative to `android` folder. Optional.'
33    )
34    .option(
35      '--configuration [string]',
36      'Build configuration. Defaults to `process.env.CONFIGURATION` or "debug".'
37    )
38    .option('--bare', 'Generate macros only for the bare-expo project.')
39    .description('Generates dynamic macros for Android client.')
40    .asyncAction(generateAction);
41};
42