1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const Fs = require("fs");
|
4 | const Path = require("path");
|
5 | const resolveFrom = require("resolve-from");
|
6 | const get_pkg_1 = require("./get-pkg");
|
7 | function 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 |
|
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 | }
|
43 | exports.cascadeResolve = cascadeResolve;
|
44 | var ImportRelation;
|
45 | (function (ImportRelation) {
|
46 | ImportRelation["Relative"] = "Relative";
|
47 | ImportRelation["Absolute"] = "Absolute";
|
48 | ImportRelation["Id"] = "Id";
|
49 | })(ImportRelation = exports.ImportRelation || (exports.ImportRelation = {}));
|
50 | function 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 |
|
\ | No newline at end of file |