"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.getBinariesPath = getBinariesPath;
exports.addToPathAsync = addToPathAsync;
exports.writePathToUserSettingsAsync = writePathToUserSettingsAsync;
exports.isXcodeInstalled = isXcodeInstalled;
exports.OSX_SOURCE_PATH = void 0;

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

  _fsExtra = function () {
    return data;
  };

  return data;
}

function _hasbin() {
  const data = _interopRequireDefault(require("hasbin"));

  _hasbin = function () {
    return data;
  };

  return data;
}

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

  _path = function () {
    return data;
  };

  return data;
}

function _UserSettings() {
  const data = _interopRequireDefault(require("./UserSettings"));

  _UserSettings = function () {
    return data;
  };

  return data;
}

function _XDLError() {
  const data = _interopRequireDefault(require("./XDLError"));

  _XDLError = function () {
    return data;
  };

  return data;
}

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

const OSX_SOURCE_PATH = _path().default.join(__dirname, '..', 'binaries', 'osx');

exports.OSX_SOURCE_PATH = OSX_SOURCE_PATH;

function _hasbinAsync(name) {
  return new Promise((resolve, reject) => {
    (0, _hasbin().default)(name, result => {
      resolve(result);
    });
  });
}

function getBinariesPath() {
  if (process.platform === 'darwin') {
    return _path().default.join(__dirname, '..', 'binaries', 'osx');
  } else if (process.platform === 'win32') {
    return _path().default.join(__dirname, '..', 'binaries', 'windows');
  } else if (process.platform === 'linux') {
    return _path().default.join(__dirname, '..', 'binaries', 'linux');
  } else {
    throw new (_XDLError().default)('PLATFORM_NOT_SUPPORTED', 'Platform not supported.');
  }
}

async function addToPathAsync(name) {
  if (await _hasbinAsync(name)) {
    return;
  } // Users can set {ignoreBundledBinaries: ["watchman"]} to tell us to never use our version


  let ignoreBundledBinaries = await _UserSettings().default.getAsync('ignoreBundledBinaries', []);

  if (ignoreBundledBinaries.includes(name)) {
    return;
  }

  let binariesPath = _path().default.join(getBinariesPath(), name);

  _prependToPath(binariesPath);
}

function _prependToPath(newPath) {
  let currentPath = process.env.PATH ? process.env.PATH : '';

  if (currentPath.length > 0) {
    let delimiter = process.platform === 'win32' ? ';' : ':';
    currentPath = `${delimiter}${currentPath}`;
  }

  process.env.PATH = `${newPath}${currentPath}`;
}

async function writePathToUserSettingsAsync() {
  await _UserSettings().default.setAsync('PATH', process.env.PATH); // Used in detach app

  let pathFile = _path().default.join(_UserSettings().default.dotExpoHomeDirectory(), 'PATH');

  await _fsExtra().default.writeFile(pathFile, process.env.PATH);
}

function _isDirectory(dir) {
  try {
    if (_fsExtra().default.statSync(dir).isDirectory()) {
      return true;
    }

    return false;
  } catch (e) {
    return false;
  }
}

function isXcodeInstalled() {
  return _isDirectory('/Applications/Xcode.app/');
}
//# sourceMappingURL=__sourcemaps__/Binaries.js.map