“use strict”;

Object.defineProperty(exports, “__esModule”, {

value: true

}); exports.resolvePlugin = resolvePlugin; exports.resolvePreset = resolvePreset; exports.loadPlugin = loadPlugin; exports.loadPreset = loadPreset;

function _debug() {

const data = _interopRequireDefault(require("debug"));

_debug = function () {
  return data;
};

return data;

}

function _resolve() {

const data = _interopRequireDefault(require("resolve"));

_resolve = function () {
  return data;
};

return data;

}

function _path() {

const data = _interopRequireDefault(require("path"));

_path = function () {
  return data;
};

return data;

}

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

const debug = (0, _debug().default)(“babel:config:loading:files:plugins”); const EXACT_RE = /^module:/; const BABEL_PLUGIN_PREFIX_RE = /^(?!@|module:|+/|babel-plugin-)/; const BABEL_PRESET_PREFIX_RE = /^(?!@|module:|+/|babel-preset-)/; const BABEL_PLUGIN_ORG_RE = /^(@babel/)(?!plugin-|+/)/; const BABEL_PRESET_ORG_RE = /^(@babel/)(?!preset-|+/)/; const OTHER_PLUGIN_ORG_RE = /^(@(?!babel/)+/)(?![^/]*babel-plugin(?:-|/|$)|+/)/; const OTHER_PRESET_ORG_RE = /^(@(?!babel/)+/)(?![^/]*babel-preset(?:-|/|$)|+/)/; const OTHER_ORG_DEFAULT_RE = /^(@(?!babel$)+)$/;

function resolvePlugin(name, dirname) {

return resolveStandardizedName("plugin", name, dirname);

}

function resolvePreset(name, dirname) {

return resolveStandardizedName("preset", name, dirname);

}

function loadPlugin(name, dirname) {

const filepath = resolvePlugin(name, dirname);

if (!filepath) {
  throw new Error(`Plugin ${name} not found relative to ${dirname}`);
}

const value = requireModule("plugin", filepath);
debug("Loaded plugin %o from %o.", name, dirname);
return {
  filepath,
  value
};

}

function loadPreset(name, dirname) {

const filepath = resolvePreset(name, dirname);

if (!filepath) {
  throw new Error(`Preset ${name} not found relative to ${dirname}`);
}

const value = requireModule("preset", filepath);
debug("Loaded preset %o from %o.", name, dirname);
return {
  filepath,
  value
};

}

function standardizeName(type, name) {

if (_path().default.isAbsolute(name)) return name;
const isPreset = type === "preset";
return name.replace(isPreset ? BABEL_PRESET_PREFIX_RE : BABEL_PLUGIN_PREFIX_RE, `babel-${type}-`).replace(isPreset ? BABEL_PRESET_ORG_RE : BABEL_PLUGIN_ORG_RE, `$1${type}-`).replace(isPreset ? OTHER_PRESET_ORG_RE : OTHER_PLUGIN_ORG_RE, `$1babel-${type}-`).replace(OTHER_ORG_DEFAULT_RE, `$1/babel-${type}`).replace(EXACT_RE, "");

}

function resolveStandardizedName(type, name, dirname = process.cwd()) {

const standardizedName = standardizeName(type, name);

try {
  return _resolve().default.sync(standardizedName, {
    basedir: dirname
  });
} catch (e) {
  if (e.code !== "MODULE_NOT_FOUND") throw e;

  if (standardizedName !== name) {
    let resolvedOriginal = false;

    try {
      _resolve().default.sync(name, {
        basedir: dirname
      });

      resolvedOriginal = true;
    } catch (e2) {}

    if (resolvedOriginal) {
      e.message += `\n- If you want to resolve "${name}", use "module:${name}"`;
    }
  }

  let resolvedBabel = false;

  try {
    _resolve().default.sync(standardizeName(type, "@babel/" + name), {
      basedir: dirname
    });

    resolvedBabel = true;
  } catch (e2) {}

  if (resolvedBabel) {
    e.message += `\n- Did you mean "@babel/${name}"?`;
  }

  let resolvedOppositeType = false;
  const oppositeType = type === "preset" ? "plugin" : "preset";

  try {
    _resolve().default.sync(standardizeName(oppositeType, name), {
      basedir: dirname
    });

    resolvedOppositeType = true;
  } catch (e2) {}

  if (resolvedOppositeType) {
    e.message += `\n- Did you accidentally pass a ${oppositeType} as a ${type}?`;
  }

  throw e;
}

}

const LOADING_MODULES = new Set();

function requireModule(type, name) {

if (LOADING_MODULES.has(name)) {
  throw new Error(`Reentrant ${type} detected trying to load "${name}". This module is not ignored ` + "and is trying to load itself while compiling itself, leading to a dependency cycle. " + 'We recommend adding it to your "ignore" list in your babelrc, or to a .babelignore.');
}

try {
  LOADING_MODULES.add(name);
  return require(name);
} finally {
  LOADING_MODULES.delete(name);
}

}