Skip to content

Commit cfbc208

Browse files
authored
fix(rspack): prevents an unhandled promise rejection when throwing in the async loader (#536)
1 parent 376d578 commit cfbc208

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

src/rspack/loaders/load.ts

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,29 @@ export default async function load(this: LoaderContext, source: string, map: any
1818

1919
const context = createContext(this)
2020
const { handler } = normalizeObjectHook('load', plugin.load)
21-
const res = await handler.call(
22-
Object.assign(
23-
{},
24-
this._compilation && createBuildContext(this._compiler, this._compilation, this),
25-
context,
26-
),
27-
normalizeAbsolutePath(id),
28-
)
21+
try {
22+
const res = await handler.call(
23+
Object.assign(
24+
{},
25+
this._compilation && createBuildContext(this._compiler, this._compilation, this),
26+
context,
27+
),
28+
normalizeAbsolutePath(id),
29+
)
2930

30-
if (res == null)
31-
callback(null, source, map)
32-
else if (typeof res !== 'string')
33-
callback(null, res.code, res.map ?? map)
34-
else
35-
callback(null, res, map)
31+
if (res == null)
32+
callback(null, source, map)
33+
else if (typeof res !== 'string')
34+
callback(null, res.code, res.map ?? map)
35+
else
36+
callback(null, res, map)
37+
}
38+
catch (error) {
39+
if (error instanceof Error) {
40+
callback(error)
41+
}
42+
else {
43+
callback(new Error(String(error)))
44+
}
45+
}
3646
}

0 commit comments

Comments
 (0)