"use strict";

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

function _lodash() {
  const data = _interopRequireDefault(require("lodash"));

  _lodash = function () {
    return data;
  };

  return data;
}

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

  _fsExtra = function () {
    return data;
  };

  return data;
}

function _path() {
  const data = _interopRequireDefault(require("path"));

  _path = function () {
    return data;
  };

  return data;
}

function _url() {
  const data = _interopRequireDefault(require("url"));

  _url = function () {
    return data;
  };

  return data;
}

function _ExponentTools() {
  const data = require("./ExponentTools");

  _ExponentTools = function () {
    return data;
  };

  return data;
}

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

const EXPO_DOMAINS = ['expo.io', 'exp.host', 'expo.test', 'localhost'];
const ASSETS_DIR_DEFAULT_URL = 'https://d1wp6m56sqw74a.cloudfront.net/~assets';

async function bundleAsync(context, assets, dest) {
  if (!assets) {
    return;
  }

  await _fsExtra().default.ensureDir(dest);
  const urlResolver = createAssetsUrlResolver(context);

  const batches = _lodash().default.chunk(assets, 5);

  for (const batch of batches) {
    await Promise.all(batch.map(async asset => {
      const extensionIndex = asset.lastIndexOf('.');
      const prefixLength = 'asset_'.length;
      const hash = extensionIndex >= 0 ? asset.substring(prefixLength, extensionIndex) : asset.substring(prefixLength);
      await (0, _ExponentTools().saveUrlToPathAsync)(urlResolver(hash), _path().default.join(dest, asset));
    }));
  }
}

function createAssetsUrlResolver(context) {
  let assetsDirUrl = ASSETS_DIR_DEFAULT_URL;

  if (context && context.published) {
    const {
      assetUrlOverride = './assets'
    } = context.config;
    const publishedUrl = context.published.url;

    const {
      hostname
    } = _url().default.parse(publishedUrl);

    const maybeExpoDomain = _lodash().default.takeRight(hostname.split('.'), 2).join('.');

    if (!_lodash().default.includes(EXPO_DOMAINS, maybeExpoDomain)) {
      assetsDirUrl = _url().default.resolve(publishedUrl, assetUrlOverride);
    }
  }

  return hash => `${assetsDirUrl}/${hash}`;
}
//# sourceMappingURL=../__sourcemaps__/detach/AssetBundle.js.map