GT2/Ejectable/node_modules/babel-plugin-module-resolver/lib/resolvePath.js

109 lines
3.2 KiB
JavaScript

"use strict";
exports.__esModule = true;
exports.default = resolvePath;
var _path = _interopRequireDefault(require("path"));
var _log = require("./log");
var _mapToRelative = _interopRequireDefault(require("./mapToRelative"));
var _normalizeOptions = _interopRequireDefault(require("./normalizeOptions"));
var _utils = require("./utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getRelativePath(sourcePath, currentFile, absFileInRoot, opts) {
const realSourceFileExtension = _path.default.extname(absFileInRoot);
const sourceFileExtension = _path.default.extname(sourcePath);
let relativePath = (0, _mapToRelative.default)(opts.cwd, currentFile, absFileInRoot);
if (realSourceFileExtension !== sourceFileExtension) {
relativePath = (0, _utils.replaceExtension)(relativePath, opts);
}
return (0, _utils.toLocalPath)((0, _utils.toPosixPath)(relativePath));
}
function findPathInRoots(sourcePath, {
extensions,
root
}) {
// Search the source path inside every custom root directory
let resolvedSourceFile;
root.some(basedir => {
resolvedSourceFile = (0, _utils.nodeResolvePath)(`./${sourcePath}`, basedir, extensions);
return resolvedSourceFile !== null;
});
return resolvedSourceFile;
}
function resolvePathFromRootConfig(sourcePath, currentFile, opts) {
const absFileInRoot = findPathInRoots(sourcePath, opts);
if (!absFileInRoot) {
return null;
}
return getRelativePath(sourcePath, currentFile, absFileInRoot, opts);
}
function checkIfPackageExists(modulePath, currentFile, extensions, loglevel) {
const resolvedPath = (0, _utils.nodeResolvePath)(modulePath, currentFile, extensions);
if (resolvedPath === null && loglevel !== 'silent') {
(0, _log.warn)(`Could not resolve "${modulePath}" in file ${currentFile}.`);
}
}
function resolvePathFromAliasConfig(sourcePath, currentFile, opts) {
let aliasedSourceFile;
opts.alias.find(([regExp, substitute]) => {
const execResult = regExp.exec(sourcePath);
if (execResult === null) {
return false;
}
aliasedSourceFile = substitute(execResult);
return true;
});
if (!aliasedSourceFile) {
return null;
}
if ((0, _utils.isRelativePath)(aliasedSourceFile)) {
return (0, _utils.toLocalPath)((0, _utils.toPosixPath)((0, _mapToRelative.default)(opts.cwd, currentFile, aliasedSourceFile)));
}
if (process.env.NODE_ENV !== 'production') {
checkIfPackageExists(aliasedSourceFile, currentFile, opts.extensions, opts.loglevel);
}
return aliasedSourceFile;
}
const resolvers = [resolvePathFromAliasConfig, resolvePathFromRootConfig];
function resolvePath(sourcePath, currentFile, opts) {
if ((0, _utils.isRelativePath)(sourcePath)) {
return sourcePath;
}
const normalizedOpts = (0, _normalizeOptions.default)(currentFile, opts); // File param is a relative path from the environment current working directory
// (not from cwd param)
const absoluteCurrentFile = _path.default.resolve(currentFile);
let resolvedPath = null;
resolvers.some(resolver => {
resolvedPath = resolver(sourcePath, absoluteCurrentFile, normalizedOpts);
return resolvedPath !== null;
});
return resolvedPath;
}