"use strict";

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

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

  _fsExtra = function () {
    return data;
  };

  return data;
}

function _uuid() {
  const data = _interopRequireDefault(require("uuid"));

  _uuid = function () {
    return data;
  };

  return data;
}

function _jsonFile() {
  const data = _interopRequireDefault(require("@expo/json-file"));

  _jsonFile = function () {
    return data;
  };

  return data;
}

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

  _path = function () {
    return data;
  };

  return data;
}

function Env() {
  const data = _interopRequireWildcard(require("./Env"));

  Env = function () {
    return data;
  };

  return data;
}

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }

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

const SETTINGS_FILE_NAME = 'state.json';

function userSettingsFile() {
  let dir = dotExpoHomeDirectory();

  let file = _path().default.join(dir, SETTINGS_FILE_NAME);

  try {
    // move exponent.json to state.json
    let oldFile = _path().default.join(dir, 'exponent.json');

    if (_fsExtra().default.statSync(oldFile).isFile()) {
      _fsExtra().default.renameSync(oldFile, file);
    }
  } catch (e) {// no old directory, continue
  }

  return file;
}

function userSettingsJsonFile() {
  return new (_jsonFile().default)(userSettingsFile(), {
    jsonParseErrorDefault: {},
    cantReadFileDefault: {}
  });
}

function recentExpsJsonFile() {
  // TODO(ville): Add array support to JsonFile.
  // @ts-ignore JsonFile doesn't officially support arrays, only objects
  return new (_jsonFile().default)(_path().default.join(dotExpoHomeDirectory(), 'xde-recent-exps.json'), {
    jsonParseErrorDefault: [],
    cantReadFileDefault: []
  });
}

var mkdirped = false;

function dotExpoHomeDirectory() {
  let dirPath;

  if (process.env.__UNSAFE_EXPO_HOME_DIRECTORY) {
    dirPath = process.env.__UNSAFE_EXPO_HOME_DIRECTORY;
  } else {
    const home = Env().home();

    if (!home) {
      throw new Error("Can't determine your home directory; make sure your $HOME environment variable is set.");
    }

    if (process.env.EXPO_STAGING) {
      dirPath = _path().default.join(home, '.expo-staging');
    } else if (process.env.EXPO_LOCAL) {
      dirPath = _path().default.join(home, '.expo-local');
    } else {
      dirPath = _path().default.join(home, '.expo');
    }

    try {
      // move .exponent to .expo
      let oldDirPath = _path().default.join(home, '.exponent');

      if (_fsExtra().default.statSync(oldDirPath).isDirectory()) {
        _fsExtra().default.renameSync(oldDirPath, dirPath);
      }
    } catch (e) {// no old directory, continue
    }
  }

  if (!mkdirped) {
    _fsExtra().default.mkdirpSync(dirPath);

    mkdirped = true;
  }

  return dirPath;
} // returns an anonymous, unique identifier for a user on the current computer


async function anonymousIdentifier() {
  const settings = await userSettingsJsonFile();
  let id = await settings.getAsync('uuid', null);

  if (!id) {
    id = _uuid().default.v4();
    await settings.setAsync('uuid', id);
  }

  return id;
}

const UserSettings = Object.assign(userSettingsJsonFile(), {
  dotExpoHomeDirectory,
  recentExpsJsonFile,
  userSettingsFile,
  userSettingsJsonFile,
  anonymousIdentifier,
  SETTINGS_FILE_NAME
});
var _default = UserSettings;
exports.default = _default;
//# sourceMappingURL=__sourcemaps__/UserSettings.js.map