"use strict";

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

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

  _xdl = function () {
    return data;
  };

  return data;
}

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

  _log = function () {
    return data;
  };

  return data;
}

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

async function action(projectDir = './', options = {}) {
  const {
    exp
  } = await _xdl().ProjectUtils.readConfigJsonAsync(projectDir);

  if (exp === null) {
    _log().default.warn('No Expo configuration found. Are you sure this is a project directory?');

    process.exit(1);
  }

  const optimizationOptions = { ...options,
    quality: parseQuality(options)
  };
  const hasUnoptimizedAssets = await _xdl().AssetUtils.hasUnoptimizedAssetsAsync(projectDir, optimizationOptions);

  if (!options.save && hasUnoptimizedAssets) {
    _log().default.warn('This will overwrite the original assets.');
  }

  const optimizeOptions = await _xdl().Project.optimizeAsync(projectDir, optimizationOptions);
}

function parseQuality(options) {
  const defaultQuality = 80;

  if (options.quality == null) {
    return defaultQuality;
  }

  const quality = Number(options.quality);

  if (!(Number.isInteger(quality) && quality > 0 && quality <= 100)) {
    throw new Error('Invalid value for --quality flag. Must be an integer between 1 and 100.');
  }

  return quality;
}

function _default(program) {
  program.command('optimize [project-dir]').alias('o').description('Compress the assets in your Expo project').option('-s, --save', 'Save the original assets with a .orig extension').option('--quality [number]', 'Specify the quality the compressed image is reduced to. Default is 80').option('--include [pattern]', 'Include only assets that match this glob pattern relative to the project root').option('--exclude [pattern]', 'Exclude all assets that match this glob pattern relative to the project root').allowOffline().asyncAction(action);
}
//# sourceMappingURL=../__sourcemaps__/commands/optimize.js.map