Skip to content

Commit 5a0b8d8

Browse files
fix: update typing for webpack@^5.94.0 (#110)
* fix: update typing for webpack@^5.94.0 * chore: remove explicit declaration of tapable types
1 parent a6629fc commit 5a0b8d8

File tree

3 files changed

+1736
-1778
lines changed

3 files changed

+1736
-1778
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"dependencies": {
1111
"chalk": "^4.1.0",
1212
"enhanced-resolve": "^5.7.0",
13+
"tapable": "^2.2.1",
1314
"tsconfig-paths": "^4.1.2"
1415
},
1516
"devDependencies": {
@@ -30,7 +31,7 @@
3031
"ts-jest": "^27.0.7",
3132
"ts-loader": "^8.0.18",
3233
"typescript": "^4.2.3",
33-
"webpack": "^5.65.0",
34+
"webpack": "^5.94.0",
3435
"webpack-cli": "^4.5.0"
3536
},
3637
"scripts": {

src/plugin.ts

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,19 @@ import * as Options from "./options";
55
import * as Logger from "./logger";
66
import * as fs from "fs";
77
import { ResolvePluginInstance, Resolver } from "webpack";
8-
import { ResolveRequest, ResolveContext } from "enhanced-resolve";
8+
import { AsyncSeriesBailHook } from "tapable";
9+
import { ResolveContext, ResolveRequest } from "enhanced-resolve";
10+
11+
type TapAsyncCallback = Parameters<
12+
AsyncSeriesBailHook<
13+
[ResolveRequest, ResolveContext],
14+
null | ResolveRequest
15+
>["tapAsync"]
16+
>[1];
17+
18+
type TapAsyncInnerCallback = Parameters<TapAsyncCallback>[2];
919

1020
type FileSystem = Resolver["fileSystem"];
11-
type TapAsyncCallback = (
12-
request: ResolveRequest,
13-
context: ResolveContext,
14-
callback: TapAsyncInnerCallback
15-
) => void;
16-
type TapAsyncInnerCallback = (
17-
error?: Error | null | false,
18-
result?: null | ResolveRequest
19-
) => void;
2021

2122
export interface LegacyResolverPlugin {
2223
readonly apply: (resolver: LegacyResolver) => void;
@@ -28,7 +29,12 @@ export interface LegacyResolver {
2829
readonly doResolve: doResolveLegacy | doResolve;
2930
readonly join: (relativePath: string, innerRequest: Request) => Request;
3031
readonly fileSystem: LegacyResolverFileSystem;
31-
readonly getHook: (hook: string) => Tapable;
32+
readonly getHook: (
33+
hook: string
34+
) => AsyncSeriesBailHook<
35+
[ResolveRequest, ResolveContext],
36+
null | ResolveRequest
37+
>;
3238
}
3339

3440
export type doResolveLegacy = (
@@ -39,14 +45,20 @@ export type doResolveLegacy = (
3945
) => void;
4046

4147
export type doResolve = (
42-
hook: Tapable,
48+
hook: AsyncSeriesBailHook<
49+
[ResolveRequest, ResolveContext],
50+
null | ResolveRequest
51+
>,
4352
req: Request,
4453
message: string,
4554
resolveContext: LegacyResolveContext,
4655
callback: Callback
4756
) => void;
4857

49-
export type ReadJsonCallback = (error: Error | undefined, result?: {}) => void;
58+
export type ReadJsonCallback = (
59+
error: Error | undefined | null,
60+
result?: {}
61+
) => void;
5062

5163
export type ReadJson = (path2: string, callback: ReadJsonCallback) => void;
5264

@@ -58,17 +70,6 @@ export interface LegacyResolveContext {
5870
missing?: string;
5971
}
6072

61-
export interface Tapable {
62-
readonly tapAsync: (
63-
options: TapableOptions,
64-
callback: TapAsyncCallback
65-
) => void;
66-
}
67-
68-
export interface TapableOptions {
69-
readonly name: string;
70-
}
71-
7273
export type ResolverCallbackLegacy = (
7374
request: Request,
7475
callback: Callback
@@ -120,7 +121,9 @@ export interface Callback {
120121
// eslint-disable-next-line no-redeclare
121122
const getInnerRequest: getInnerRequest = require("enhanced-resolve/lib/getInnerRequest");
122123

123-
export class TsconfigPathsPlugin implements ResolvePluginInstance {
124+
export class TsconfigPathsPlugin
125+
implements Exclude<ResolvePluginInstance, Function>
126+
{
124127
source: string = "described-resolve";
125128
target: string = "resolve";
126129

@@ -216,12 +219,12 @@ export class TsconfigPathsPlugin implements ResolvePluginInstance {
216219
);
217220
} else if ("plugin" in resolver) {
218221
// This is the legacy (Webpack < 4.0.0) way of using the plugin system.
219-
const legacyResolver = (resolver as unknown) as LegacyResolver;
222+
const legacyResolver = resolver as unknown as LegacyResolver;
220223
legacyResolver.plugin(
221224
this.source,
222225
createPluginLegacy(
223226
this.matchPath,
224-
(resolver as unknown) as LegacyResolver,
227+
resolver as unknown as LegacyResolver,
225228
this.absoluteBaseUrl,
226229
this.target,
227230
this.extensions
@@ -251,7 +254,10 @@ function createPluginCallback(
251254
baseMatchPath: TsconfigPaths.MatchPathAsync,
252255
resolver: Resolver,
253256
baseAbsoluteBaseUrl: string,
254-
hook: Tapable,
257+
hook: AsyncSeriesBailHook<
258+
[ResolveRequest, ResolveContext],
259+
null | ResolveRequest
260+
>,
255261
extensions: ReadonlyArray<string>
256262
): TapAsyncCallback {
257263
const fileExistAsync = createFileExistAsync(resolver.fileSystem);
@@ -420,7 +426,7 @@ function createPluginLegacy(
420426
}
421427

422428
function readJson(
423-
fileSystem: FileSystem,
429+
fileSystem: FileSystem | LegacyResolverFileSystem,
424430
path2: string,
425431
callback: ReadJsonCallback
426432
): void {
@@ -447,7 +453,7 @@ function readJson(
447453
}
448454

449455
function createReadJsonAsync(
450-
filesystem: FileSystem
456+
filesystem: FileSystem | LegacyResolverFileSystem
451457
): TsconfigPaths.ReadJsonAsync {
452458
// eslint-disable-next-line @typescript-eslint/no-explicit-any
453459
return (path2: string, callback2: (err?: Error, content?: any) => void) => {
@@ -463,7 +469,7 @@ function createReadJsonAsync(
463469
}
464470

465471
function createFileExistAsync(
466-
filesystem: FileSystem
472+
filesystem: FileSystem | LegacyResolverFileSystem
467473
): TsconfigPaths.FileExistsAsync {
468474
return (
469475
path2: string,

0 commit comments

Comments
 (0)