"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

function _pick() {
  const data = _interopRequireDefault(require("lodash/pick"));

  _pick = function () {
    return data;
  };

  return data;
}

function _size() {
  const data = _interopRequireDefault(require("lodash/size"));

  _size = function () {
    return data;
  };

  return data;
}

function _IOSUploader() {
  const data = _interopRequireWildcard(require("./upload/IOSUploader"));

  _IOSUploader = function () {
    return data;
  };

  return data;
}

function _AndroidUploader() {
  const data = _interopRequireDefault(require("./upload/AndroidUploader"));

  _AndroidUploader = function () {
    return data;
  };

  return data;
}

function _log() {
  const data = _interopRequireDefault(require("../log"));

  _log = function () {
    return data;
  };

  return data;
}

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const COMMON_OPTIONS = ['id', 'latest', 'path'];

var _default = program => {
  const ANDROID_OPTIONS = [...COMMON_OPTIONS, 'key', 'track'];
  const androidCommand = program.command('upload:android [projectDir]').alias('ua');
  setCommonOptions(androidCommand, '.apk');
  androidCommand.option('--key <key>', 'path to the JSON key used to authenticate with Google Play').option('--track <track>', 'the track of the application to use, choose from: production, beta, alpha, internal, rollout', /^(production|beta|alpha|internal|rollout)$/i, 'internal').description('Uploads a standalone Android app to Google Play (works on macOS only). Uploads the latest build by default.').asyncActionProjectDir(createUploadAction(_AndroidUploader().default, ANDROID_OPTIONS));
  const IOS_OPTIONS = [...COMMON_OPTIONS, 'appleId', 'appleIdPassword', 'itcTeamId', 'appName', 'sku', 'language', 'publicUrl'];
  const iosCommand = program.command('upload:ios [projectDir]').alias('ui');
  setCommonOptions(iosCommand, '.ipa');
  iosCommand.option('--apple-id <apple-id>', 'your Apple ID username (you can also set EXPO_APPLE_ID env variable)') // apple unified App Store Connect and Developer Portal teams, this is temporary solution until fastlane implements those changes
  // https://github.com/fastlane/fastlane/issues/14229
  // after updating fastlane this value will be unnecessary
  .option('--itc-team-id <itc-team-id>', 'App Store Connect Team ID (optional if there is only one team available)').option('--apple-id-password <apple-id-password>', 'your Apple ID password (you can also set EXPO_APPLE_ID_PASSWORD env variable)').option('--app-name <app-name>', `the name of your app as it will appear on the App Store, this can't be longer than 30 characters (default: expo.name from app.json)`).option('--sku <sku>', 'a unique ID for your app that is not visible on the App Store, will be generated unless provided').option('--language <language>', `primary language (e.g. English, German; run \`expo upload:ios --help\` to see the list of available languages)`, 'English').option('--public-url <url>', 'The URL of an externally hosted manifest (for self-hosted apps)').description('Uploads a standalone app to Apple TestFlight (works on macOS only). Uploads the latest build by default.').on('--help', function () {
    console.log('Available languages:');
    console.log(`  ${_IOSUploader().LANGUAGES.join(', ')}`);
    console.log();
  }).asyncActionProjectDir(createUploadAction(_IOSUploader().default, IOS_OPTIONS));
};

exports.default = _default;

function setCommonOptions(command, fileExtension) {
  command.option('--latest', 'uploads the latest build (default)').option('--id <id>', 'id of the build to upload').option('--path <path>', `path to the ${fileExtension} file`);
}

function createUploadAction(UploaderClass, optionKeys) {
  return async (projectDir, command) => {
    try {
      ensurePlatformIsSupported();
      await ensureOptionsAreValid(command);
      const options = (0, _pick().default)(command, optionKeys);

      if (UploaderClass.validateOptions) {
        UploaderClass.validateOptions(options);
      }

      const uploader = new UploaderClass(projectDir, options);
      await uploader.upload();
    } catch (err) {
      _log().default.error('Failed to upload the standalone app to the app store.');

      throw err;
    }
  };
}

function ensurePlatformIsSupported() {
  if (process.platform !== 'darwin') {
    _log().default.error('Unsupported platform! This feature works on macOS only.');

    process.exit(1);
  }
}

async function ensureOptionsAreValid(command) {
  const args = (0, _pick().default)(command, COMMON_OPTIONS);

  if ((0, _size().default)(args) > 1) {
    throw new Error(`You have to choose only one of --path, --id or --latest parameters`);
  }
}
//# sourceMappingURL=../__sourcemaps__/commands/upload.js.map