Skip to content

Commit 3b4b83d

Browse files
committed
upgrade enhanced-resolve to v3
1 parent b5062db commit 3b4b83d

File tree

4 files changed

+10
-59
lines changed

4 files changed

+10
-59
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"homepage": "https://github.com/TypeStrong/ts-loader",
3030
"dependencies": {
3131
"colors": "^1.0.3",
32-
"enhanced-resolve": "^0.9.0",
32+
"enhanced-resolve": "^3.0.0",
3333
"loader-utils": "^0.2.6",
3434
"object-assign": "^4.1.0",
3535
"semver": "^5.0.1"

src/interfaces.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,8 @@ export interface Resolve {
116116
unsafeCache?: RegExp | RegExp[] | boolean;
117117
}
118118

119-
export interface Resolver {
120-
resolveSync(path: string, moduleName: string): string;
119+
export interface ResolveSync {
120+
(context: string, path: string, moduleName: string): string;
121121
}
122122

123123
export interface ModuleResolutionHost {

src/resolver.ts

+3-52
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,9 @@
1-
// This file serves as a hacky workaround for the lack of "resolveSync" support in webpack.
2-
// We make our own resolver using a sync file system but using the same plugins & options
3-
// that webpack does.
41
import interfaces = require('./interfaces');
52

6-
const Resolver = require("enhanced-resolve/lib/Resolver");
7-
const SyncNodeJsInputFileSystem = require("enhanced-resolve/lib/SyncNodeJsInputFileSystem");
8-
const CachedInputFileSystem = require("enhanced-resolve/lib/CachedInputFileSystem");
9-
const UnsafeCachePlugin = require("enhanced-resolve/lib/UnsafeCachePlugin");
10-
const ModulesInDirectoriesPlugin = require("enhanced-resolve/lib/ModulesInDirectoriesPlugin");
11-
const ModulesInRootPlugin = require("enhanced-resolve/lib/ModulesInRootPlugin");
12-
const ModuleAsFilePlugin = require("enhanced-resolve/lib/ModuleAsFilePlugin");
13-
const ModuleAsDirectoryPlugin = require("enhanced-resolve/lib/ModuleAsDirectoryPlugin");
14-
const ModuleAliasPlugin = require("enhanced-resolve/lib/ModuleAliasPlugin");
15-
const DirectoryDefaultFilePlugin = require("enhanced-resolve/lib/DirectoryDefaultFilePlugin");
16-
const DirectoryDescriptionFilePlugin = require("enhanced-resolve/lib/DirectoryDescriptionFilePlugin");
17-
const DirectoryDescriptionFileFieldAliasPlugin = require("enhanced-resolve/lib/DirectoryDescriptionFileFieldAliasPlugin");
18-
const FileAppendPlugin = require("enhanced-resolve/lib/FileAppendPlugin");
19-
const ResultSymlinkPlugin = require("enhanced-resolve/lib/ResultSymlinkPlugin");
3+
const node = require("enhanced-resolve/lib/node");
204

21-
function makeRootPlugin(name: string, root: string | string[]) {
22-
if (typeof root === "string") {
23-
return new ModulesInRootPlugin(name, root);
24-
} else if (Array.isArray(root)) {
25-
return function() {
26-
root.forEach(function(root) {
27-
this.apply(new ModulesInRootPlugin(name, root));
28-
}, this);
29-
};
30-
}
31-
return function() {};
32-
}
33-
34-
function makeResolver(options: { resolve: interfaces.Resolve }) {
35-
let fileSystem = new CachedInputFileSystem(new SyncNodeJsInputFileSystem(), 60000);
36-
37-
let resolver = new Resolver(fileSystem);
38-
39-
// apply the same plugins that webpack does, see webpack/lib/WebpackOptionsApply.js
40-
resolver.apply(
41-
new UnsafeCachePlugin(options.resolve.unsafeCache),
42-
options.resolve.packageAlias ? new DirectoryDescriptionFileFieldAliasPlugin("package.json", options.resolve.packageAlias) : function() {},
43-
new ModuleAliasPlugin(options.resolve.alias),
44-
makeRootPlugin("module", options.resolve.root),
45-
new ModulesInDirectoriesPlugin("module", options.resolve.modulesDirectories),
46-
makeRootPlugin("module", options.resolve.fallback),
47-
new ModuleAsFilePlugin("module"),
48-
new ModuleAsDirectoryPlugin("module"),
49-
new DirectoryDescriptionFilePlugin("package.json", options.resolve.packageMains),
50-
new DirectoryDefaultFilePlugin(["index"]),
51-
new FileAppendPlugin(options.resolve.extensions),
52-
new ResultSymlinkPlugin()
53-
);
54-
55-
return resolver;
5+
function makeResolver(options: { resolve: interfaces.Resolve }): interfaces.ResolveSync {
6+
return node.create.sync(options.resolve);
567
}
578

589
export = makeResolver;

src/servicesHost.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ function makeServicesHost(
7777
}
7878

7979
function resolveModuleNames(
80-
resolver: interfaces.Resolver,
80+
resolver: interfaces.ResolveSync,
8181
moduleResolutionHost: interfaces.ModuleResolutionHost,
8282
appendTsSuffixTo: RegExp[],
8383
scriptRegex: RegExp,
@@ -97,7 +97,7 @@ function resolveModuleNames(
9797
}
9898

9999
function resolveModuleName(
100-
resolver: interfaces.Resolver,
100+
resolveSync: interfaces.ResolveSync,
101101
moduleResolutionHost: interfaces.ModuleResolutionHost,
102102
appendTsSuffixTo: RegExp[],
103103
scriptRegex: RegExp,
@@ -107,11 +107,11 @@ function resolveModuleName(
107107
containingFile: string
108108
) {
109109
const { compiler, compilerOptions } = instance;
110-
110+
111111
let resolutionResult: interfaces.ResolvedModule;
112112

113113
try {
114-
let resolvedFileName = resolver.resolveSync(path.normalize(path.dirname(containingFile)), moduleName);
114+
let resolvedFileName = resolveSync(undefined, path.normalize(path.dirname(containingFile)), moduleName);
115115
resolvedFileName = utils.appendTsSuffixIfMatch(appendTsSuffixTo, resolvedFileName);
116116

117117
if (resolvedFileName.match(scriptRegex)) {

0 commit comments

Comments
 (0)