UNPKG

2.49 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const Fs = require("fs");
4const Path = require("path");
5const resolveFrom = require("resolve-from");
6const get_pkg_1 = require("./get-pkg");
7function cascadeResolve(id, { bases, cwd }) {
8 const result = bases.reduce((resolved, base) => {
9 if (resolved) {
10 return resolved;
11 }
12 return (resolveFrom.silent || resolveFrom)(base, id);
13 }, '');
14 if (typeof result === "string") {
15 return result;
16 }
17 const relation = getImportRelation(id);
18 if (relation !== ImportRelation.Id) {
19 const pathBases = bases.map(base => Path.join(base, id));
20 throw new Error(`${relation}ly required file "${id}" does not exist at ${pathBases.join(", ")}`);
21 }
22 // Global require path
23 const pkg = get_pkg_1.getPkg(cwd) || { dependencies: {}, devDependencies: {} };
24 const deps = Object.keys(pkg.dependencies || {});
25 const devDeps = Object.keys(pkg.devDependencies || {});
26 if (deps.indexOf(id) === -1 && devDeps.indexOf(id) === -1 && !Fs.existsSync(Path.join(cwd, "lerna.json"))) {
27 throw new Error(`"${id}" is not installed as dependency at ${cwd}/package.json. Please make sure to install it via npm.`);
28 }
29 const fragments = id.split("/");
30 const pkgFragments = id.charAt(0) === "@"
31 ? fragments.slice(0, 2)
32 : fragments.slice(0, 1);
33 const pkgId = pkgFragments.join("/");
34 const pkgManifest = resolveFrom.silent(process.cwd(), `${pkgId}/package`);
35 if (pkgManifest) {
36 const pkg = require(pkgManifest);
37 throw new Error(`"${pkgId}" can be resolved, but "${id.replace(pkgId, '')}" is not available, it might be corrupted.\nPlease reinstall your node_modules and file an issue at ${pkg.bugs.url} if the problem persists.`);
38 }
39 else {
40 throw new Error(`Could not resolve "${id}" from ${bases.join(", ")}`);
41 }
42}
43exports.cascadeResolve = cascadeResolve;
44var ImportRelation;
45(function (ImportRelation) {
46 ImportRelation["Relative"] = "Relative";
47 ImportRelation["Absolute"] = "Absolute";
48 ImportRelation["Id"] = "Id";
49})(ImportRelation = exports.ImportRelation || (exports.ImportRelation = {}));
50function getImportRelation(path) {
51 if (path.charAt(0) === ".") {
52 return ImportRelation.Relative;
53 }
54 if (path.charAt(0) === "/") {
55 return ImportRelation.Absolute;
56 }
57 return ImportRelation.Id;
58}
59//# sourceMappingURL=cascade-resolve.js.map
\No newline at end of file