@@ -3,22 +3,31 @@ import type { BundleWorkerRequest, BundleWorkerResponse } from "./protocol";
33
44let nextRequestId = 0 ;
55let bundleWorker : Worker | null = null ;
6+ const bundleRequestTimeoutMs = 60_000 ;
67
78const pendingRequests = new Map <
89 number ,
910 {
1011 resolve : ( result : BundleResult ) => void ;
1112 reject : ( error : Error ) => void ;
13+ timeout : ReturnType < typeof setTimeout > ;
1214 }
1315> ( ) ;
1416
1517function rejectPendingRequests ( error : Error ) {
16- for ( const { reject } of pendingRequests . values ( ) ) {
18+ for ( const { reject, timeout } of pendingRequests . values ( ) ) {
19+ clearTimeout ( timeout ) ;
1720 reject ( error ) ;
1821 }
1922 pendingRequests . clear ( ) ;
2023}
2124
25+ function resetWorker ( error : Error ) {
26+ rejectPendingRequests ( error ) ;
27+ bundleWorker ?. terminate ( ) ;
28+ bundleWorker = null ;
29+ }
30+
2231function ensureWorker ( ) {
2332 if ( bundleWorker ) {
2433 return bundleWorker ;
@@ -34,6 +43,7 @@ function ensureWorker() {
3443 }
3544
3645 pendingRequests . delete ( response . id ) ;
46+ clearTimeout ( pending . timeout ) ;
3747 if ( response . ok ) {
3848 pending . resolve ( response . result ) ;
3949 return ;
@@ -44,9 +54,7 @@ function ensureWorker() {
4454
4555 bundleWorker . onerror = ( event ) => {
4656 const error = new Error ( event . message || "Rspack worker crashed" ) ;
47- rejectPendingRequests ( error ) ;
48- bundleWorker ?. terminate ( ) ;
49- bundleWorker = null ;
57+ resetWorker ( error ) ;
5058 } ;
5159
5260 return bundleWorker ;
@@ -63,9 +71,18 @@ export async function bundle(files: SourceFile[], version: string): Promise<Bund
6371 } ;
6472
6573 return new Promise ( ( resolve , reject ) => {
74+ const timeout = setTimeout ( ( ) => {
75+ if ( ! pendingRequests . has ( id ) ) {
76+ return ;
77+ }
78+
79+ resetWorker ( new Error ( "Rspack worker timed out while bundling" ) ) ;
80+ } , bundleRequestTimeoutMs ) ;
81+
6682 pendingRequests . set ( id , {
6783 resolve,
6884 reject,
85+ timeout,
6986 } ) ;
7087 worker . postMessage ( request ) ;
7188 } ) ;
0 commit comments