1import chalk from 'chalk';
2import inquirer from 'inquirer';
3import semver from 'semver';
4
5import { Platform, getSDKVersionsAsync } from '../ProjectVersions';
6
7export default async function askForSDKVersionAsync(
8  platform: Platform,
9  defaultSdkVersion?: string
10) {
11  const sdkVersions = await getSDKVersionsAsync(platform);
12
13  if (process.env.CI) {
14    if (defaultSdkVersion) {
15      console.log(
16        `${chalk.red('`--sdkVersion`')} not provided - defaulting to ${chalk.cyan(
17          defaultSdkVersion
18        )}.`
19      );
20      return defaultSdkVersion;
21    }
22    throw new Error(
23      `${chalk.red('`--sdkVersion`')} not provided and unable to obtain default value.`
24    );
25  }
26
27  const defaultValue =
28    defaultSdkVersion && sdkVersions.includes(defaultSdkVersion)
29      ? defaultSdkVersion
30      : sdkVersions[sdkVersions.length - 1];
31  const { sdkVersion } = await inquirer.prompt<{ sdkVersion: string }>([
32    {
33      type: 'list',
34      name: 'sdkVersion',
35      message: 'What is the SDK version that you want to run this script against?',
36      default: defaultValue,
37      choices: sdkVersions,
38      validate(value) {
39        if (!semver.valid(value)) {
40          return `Invalid version: ${chalk.cyan(value)}`;
41        }
42        return true;
43      },
44    },
45  ]);
46  return sdkVersion;
47}
48