"use strict";

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

function _indentString() {
  const data = _interopRequireDefault(require("indent-string"));

  _indentString = function () {
    return data;
  };

  return data;
}

function _qrcodeTerminal() {
  const data = _interopRequireDefault(require("qrcode-terminal"));

  _qrcodeTerminal = function () {
    return data;
  };

  return data;
}

function _xdl() {
  const data = require("@expo/xdl");

  _xdl = function () {
    return data;
  };

  return data;
}

function _CommandError() {
  const data = _interopRequireDefault(require("./CommandError"));

  _CommandError = function () {
    return data;
  };

  return data;
}

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

function addOptions(program) {
  program.option('-a, --android', 'Opens your app in Expo on a connected Android device').option('-i, --ios', 'Opens your app in Expo in a currently running iOS simulator on your computer').option('-w, --web', 'Opens your app in a web browser').option('-m, --host [mode]', 'lan (default), tunnel, localhost. Type of host to use. "tunnel" allows you to view your link on other networks').option('--tunnel', 'Same as --host tunnel').option('--lan', 'Same as --host lan').option('--localhost', 'Same as --host localhost').option('--dev', 'Turns dev flag on').option('--no-dev', 'Turns dev flag off').option('--minify', 'Turns minify flag on').option('--no-minify', 'Turns minify flag off').option('--https', 'To start webpack with https protocol').option('--no-https', 'To start webpack with http protocol');
}

function hasBooleanArg(rawArgs, argName) {
  return rawArgs.includes('--' + argName) || rawArgs.includes('--no-' + argName);
}

function getBooleanArg(rawArgs, argName) {
  if (rawArgs.includes('--' + argName)) {
    return true;
  } else {
    return false;
  }
}

async function optsAsync(projectDir, options) {
  var opts = await _xdl().ProjectSettings.readAsync(projectDir);

  if ([options.host, options.lan, options.localhost, options.tunnel].filter(i => i).length > 1) {
    throw new (_CommandError().default)('BAD_ARGS', 'Specify at most one of --host, --tunnel, --lan, and --localhost');
  }

  if (options.host) {
    opts.hostType = options.host;
  } else if (options.tunnel) {
    opts.hostType = 'tunnel';
  } else if (options.lan) {
    opts.hostType = 'lan';
  } else if (options.localhost) {
    opts.hostType = 'localhost';
  } else {
    opts.hostType = 'lan';
  }

  let rawArgs = options.parent.rawArgs;

  if (hasBooleanArg(rawArgs, 'dev')) {
    opts.dev = getBooleanArg(rawArgs, 'dev');
  }

  if (hasBooleanArg(rawArgs, 'minify')) {
    opts.minify = getBooleanArg(rawArgs, 'minify');
  }

  if (hasBooleanArg(rawArgs, 'https')) {
    opts.https = getBooleanArg(rawArgs, 'https');
  }

  await _xdl().ProjectSettings.setAsync(projectDir, opts);
  return opts;
}

function printQRCode(url) {
  _qrcodeTerminal().default.generate(url, code => console.log(`${(0, _indentString().default)(code, 2)}\n`));
}

async function handleMobileOptsAsync(projectDir, options) {
  if (options.android) {
    if (options.webOnly) {
      await _xdl().Android.openWebProjectAsync(projectDir);
    } else {
      await _xdl().Android.openProjectAsync(projectDir);
    }
  }

  if (options.ios) {
    if (options.webOnly) {
      await _xdl().Simulator.openWebProjectAsync(projectDir);
    } else {
      await _xdl().Simulator.openProjectAsync(projectDir);
    }
  }

  if (options.web) {
    await _xdl().Webpack.openAsync(projectDir);
  }

  return !!options.android || !!options.ios;
}

var _default = {
  addOptions,
  handleMobileOptsAsync,
  printQRCode,
  optsAsync
};
exports.default = _default;
//# sourceMappingURL=__sourcemaps__/urlOpts.js.map