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 IOS_DIR = Directories.getIosDir();
9const SUPPORTING_DIR = path.join(IOS_DIR, 'Exponent', 'Supporting');
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(SUPPORTING_DIR, 'EXBuildConstants.plist');
15  const infoPlistPath = options.infoPlistPath || path.join(SUPPORTING_DIR, 'Info.plist');
16  const configuration = options.configuration || process.env.CONFIGURATION;
17
18  await generateDynamicMacrosAsync({
19    buildConstantsPath,
20    platform: 'ios',
21    infoPlistPath,
22    expoKitPath: EXPO_DIR,
23    templateFilesPath: TEMPLATE_FILES_DIR,
24    configuration,
25    skipTemplates: options.skipTemplate,
26  });
27}
28
29function collect(val, memo) {
30  memo.push(val);
31  return memo;
32}
33
34export default (program: Command) => {
35  program
36    .command('ios-generate-dynamic-macros')
37    .option(
38      '--buildConstantsPath [string]',
39      'Path to EXBuildConstants.plist relative to `ios` folder. Optional.'
40    )
41    .option(
42      '--infoPlistPath [string]',
43      "Path to app's Info.plist relative to `ios` folder. Optional."
44    )
45    .option(
46      '--configuration [string]',
47      'Build configuration. Defaults to `process.env.CONFIGURATION`.'
48    )
49    .option(
50      '--skip-template [string]',
51      'Skip generating a template (ie) GoogleService-Info.plist. Optional.',
52      collect,
53      []
54    )
55    .description('Generates dynamic macros for iOS client.')
56    .asyncAction(generateAction);
57};
58