"use strict";

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

function _fsExtra() {
  const data = _interopRequireDefault(require("fs-extra"));

  _fsExtra = function () {
    return data;
  };

  return data;
}

function _pngjs() {
  const data = require("pngjs");

  _pngjs = function () {
    return data;
  };

  return data;
}

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

  _pick = function () {
    return data;
  };

  return data;
}

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

  _xdl = function () {
    return data;
  };

  return data;
}

function _request() {
  const data = _interopRequireDefault(require("request"));

  _request = function () {
    return data;
  };

  return data;
}

function _validator() {
  const data = _interopRequireDefault(require("validator"));

  _validator = function () {
    return data;
  };

  return data;
}

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

async function ensurePNGIsNotTransparent(imagePathOrURL) {
  let hasAlreadyResolved = false;
  const stream = _validator().default.isURL(imagePathOrURL, {
    protocols: ['http', 'https'],
    require_protocol: true
  }) ? (0, _request().default)(imagePathOrURL) : _fsExtra().default.createReadStream(imagePathOrURL);
  return new Promise((res, rej) => {
    stream.pipe(new (_pngjs().PNG)({
      filterType: 4
    })).on('metadata', ({
      alpha
    }) => {
      if (!alpha) {
        hasAlreadyResolved = true;
        stream.close();
        res();
      }
    }).on('parsed', function () {
      if (hasAlreadyResolved) {
        return;
      }

      try {
        validateAlphaChannelIsEmpty(this.data, (0, _pick().default)(this, ['width', 'height']));
        res();
      } catch (err) {
        rej(err);
      }
    }).on('error', err => rej(err));
  });
}

function validateAlphaChannelIsEmpty(data, {
  width,
  height
}) {
  for (let y = 0; y < height; y++) {
    for (let x = 0; x < width; x++) {
      let idx = (width * y + x) * 4;

      if (data[idx + 3] !== 255) {
        throw new (_xdl().XDLError)('INVALID_ASSETS', `Your application icon can't have transparency if you wish to upload your app to Apple Store.`);
      }
    }
  }
}
//# sourceMappingURL=../../../../__sourcemaps__/commands/build/ios/utils/image.js.map