Skip to content

Commit 7e11569

Browse files
committed
Remove resolve dependency
1 parent 08f8b06 commit 7e11569

4 files changed

Lines changed: 33 additions & 26 deletions

File tree

package-lock.json

Lines changed: 3 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
},
3838
"dependencies": {
3939
"enhanced-resolve": "^5.2.0",
40-
"resolve": "^1.15.1",
4140
"source-map": "^0.7.3",
4241
"typescript": "^3.9.2"
4342
},
@@ -46,7 +45,6 @@
4645
"@types/glob": "^7.1.1",
4746
"@types/jest": "^25.1.3",
4847
"@types/node": "^13.7.7",
49-
"@types/resolve": "1.14.0",
5048
"@typescript-eslint/eslint-plugin": "^2.31.0",
5149
"@typescript-eslint/parser": "^2.31.0",
5250
"eslint": "^6.8.0",

src/transpilation/transpilation.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { createResolutionErrorDiagnostic } from "./diagnostics";
1111
import { buildModule, Module } from "./module";
1212
import { applyBailPlugin, applySinglePlugin, getPlugins, Plugin } from "./plugins";
1313
import { Transpiler, TranspilerHost } from "./transpiler";
14+
import { isResolveError } from "./utils";
1415

1516
export class Transpilation {
1617
public readonly diagnostics: ts.Diagnostic[] = [];
@@ -70,26 +71,32 @@ export class Transpilation {
7071

7172
private buildModule(module: Module) {
7273
buildModule(module, request => {
73-
let resolvedModule: Module;
74-
try {
75-
resolvedModule = this.resolveRequestToModule(module.request, request);
76-
} catch (error) {
77-
this.diagnostics.push(createResolutionErrorDiagnostic(error.message, request, module.request));
78-
return { error: error.message };
74+
const result = this.resolveRequestToModule(module.request, request);
75+
if ("error" in result) {
76+
this.diagnostics.push(result.error);
77+
return { error: ts.flattenDiagnosticMessageText(result.error.messageText, "\n") };
7978
}
8079

81-
return this.getModuleId(resolvedModule);
80+
return this.getModuleId(result);
8281
});
8382
}
8483

8584
private resolveRequestToModule(issuer: string, request: string) {
86-
const resolvedPath = this.resolver.resolveSync({}, path.dirname(issuer), request);
87-
assert(typeof resolvedPath === "string", `Invalid resolution result: ${resolvedPath}`);
85+
let resolvedPath: string;
86+
try {
87+
const result = this.resolver.resolveSync({}, path.dirname(issuer), request);
88+
assert(typeof result === "string", `Invalid resolution result: ${result}`);
89+
resolvedPath = result;
90+
} catch (error) {
91+
if (!isResolveError(error)) throw error;
92+
return { error: createResolutionErrorDiagnostic(error.message, request, issuer) };
93+
}
8894

8995
let module = this.modules.find(m => m.request === resolvedPath);
9096
if (!module) {
9197
if (!resolvedPath.endsWith(".lua")) {
92-
throw new Error(`Resolved source file '${resolvedPath}' is not a part of the project.`);
98+
const messageText = `Resolved source file '${resolvedPath}' is not a part of the project.`;
99+
return { error: createResolutionErrorDiagnostic(messageText, request, issuer) };
93100
}
94101

95102
// TODO: Load source map files

src/transpilation/utils.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
1-
import * as resolve from "resolve";
1+
import { create as createResolve } from "enhanced-resolve";
22
import * as ts from "typescript";
33
// TODO: Don't depend on CLI?
44
import * as cliDiagnostics from "../cli/diagnostics";
5+
import { assert } from "../utils";
56
import * as diagnosticFactories from "./diagnostics";
67

8+
// https://github.com/webpack/enhanced-resolve/blob/0001f80dacf033ac4a0e690b2766e0965c458266/lib/Resolver.js#L280-L288
9+
export const isResolveError = (error: unknown): error is Error & { details: string } =>
10+
error instanceof Error && "details" in error;
11+
12+
const resolveImport = createResolve.sync({ extensions: [".js", ".ts", ".tsx"] });
13+
714
export function resolveConfigImport(
815
kind: string,
916
optionName: string,
@@ -17,9 +24,11 @@ export function resolveConfigImport(
1724

1825
let resolved: string;
1926
try {
20-
resolved = resolve.sync(query, { basedir, extensions: [".js", ".ts", ".tsx"] });
21-
} catch (err) {
22-
if (err.code !== "MODULE_NOT_FOUND") throw err;
27+
const result = resolveImport({}, basedir, query);
28+
assert(typeof result === "string");
29+
resolved = result;
30+
} catch (error) {
31+
if (!isResolveError(error)) throw error;
2332
return { error: diagnosticFactories.couldNotResolveFrom(kind, query, basedir) };
2433
}
2534

0 commit comments

Comments
 (0)