"use strict";

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

function _latestVersion() {
  const data = _interopRequireDefault(require("latest-version"));

  _latestVersion = function () {
    return data;
  };

  return data;
}

function _packageJson() {
  const data = _interopRequireDefault(require("package-json"));

  _packageJson = function () {
    return data;
  };

  return data;
}

function _pTimeout() {
  const data = _interopRequireDefault(require("p-timeout"));

  _pTimeout = function () {
    return data;
  };

  return data;
}

function _semver() {
  const data = _interopRequireDefault(require("semver"));

  _semver = function () {
    return data;
  };

  return data;
}

function _FsCache() {
  const data = require("./FsCache");

  _FsCache = function () {
    return data;
  };

  return data;
}

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

function createModuleVersionChecker(name, currentVersion) {
  const UpdateCacher = new (_FsCache().Cacher)(async () => {
    const pkgJson = await (0, _pTimeout().default)((0, _packageJson().default)(name, {
      version: currentVersion
    }), 2000);
    return {
      latestVersion: await (0, _pTimeout().default)((0, _latestVersion().default)(name), 2000),
      deprecated: pkgJson.deprecated
    };
  }, `${name}-updates.json`, 24 * 60 * 60 * 1000 // one day
  );

  async function checkAsync() {
    const {
      latestVersion,
      deprecated
    } = await UpdateCacher.getAsync();
    return {
      updateIsAvailable: _semver().default.gt(latestVersion, currentVersion),
      latest: latestVersion,
      current: currentVersion,
      deprecated
    };
  }

  return {
    checkAsync
  };
}
//# sourceMappingURL=../__sourcemaps__/tools/ModuleVersion.js.map