@@ -103,6 +103,8 @@ async function createDepsOptimizer(
103
103
104
104
let handle : NodeJS . Timeout | undefined
105
105
106
+ let closed = false
107
+
106
108
let metadata =
107
109
cachedMetadata || initDepsOptimizerMetadata ( config , ssr , sessionTimestamp )
108
110
@@ -118,6 +120,7 @@ async function createDepsOptimizer(
118
120
delayDepsOptimizerUntil,
119
121
resetRegisteredIds,
120
122
ensureFirstRun,
123
+ close,
121
124
options : getDepOptimizationConfig ( config , ssr )
122
125
}
123
126
@@ -159,6 +162,13 @@ async function createDepsOptimizer(
159
162
160
163
let postScanOptimizationResult : Promise < DepOptimizationResult > | undefined
161
164
165
+ let optimizingNewDeps : Promise < DepOptimizationResult > | undefined
166
+ async function close ( ) {
167
+ closed = true
168
+ await postScanOptimizationResult
169
+ await optimizingNewDeps
170
+ }
171
+
162
172
if ( ! cachedMetadata ) {
163
173
// Enter processing state until crawl of static imports ends
164
174
currentlyProcessing = true
@@ -288,15 +298,24 @@ async function createDepsOptimizer(
288
298
// Ensure that a rerun will not be issued for current discovered deps
289
299
if ( handle ) clearTimeout ( handle )
290
300
291
- if ( Object . keys ( metadata . discovered ) . length === 0 ) {
301
+ if ( closed || Object . keys ( metadata . discovered ) . length === 0 ) {
292
302
currentlyProcessing = false
293
303
return
294
304
}
295
305
296
306
currentlyProcessing = true
297
307
298
308
try {
299
- const processingResult = preRunResult ?? ( await optimizeNewDeps ( ) )
309
+ const processingResult =
310
+ preRunResult ?? ( await ( optimizingNewDeps = optimizeNewDeps ( ) ) )
311
+ optimizingNewDeps = undefined
312
+
313
+ if ( closed ) {
314
+ currentlyProcessing = false
315
+ processingResult . cancel ( )
316
+ resolveEnqueuedProcessingPromises ( )
317
+ return
318
+ }
300
319
301
320
const newData = processingResult . metadata
302
321
@@ -665,7 +684,7 @@ async function createDepsOptimizer(
665
684
function ensureFirstRun ( ) {
666
685
if ( ! firstRunEnsured && ! firstRunCalled && registeredIds . length === 0 ) {
667
686
setTimeout ( ( ) => {
668
- if ( registeredIds . length === 0 ) {
687
+ if ( ! closed && registeredIds . length === 0 ) {
669
688
onCrawlEnd ( )
670
689
}
671
690
} , runOptimizerIfIdleAfterMs )
@@ -699,7 +718,7 @@ async function createDepsOptimizer(
699
718
waitingOn = next . id
700
719
const afterLoad = ( ) => {
701
720
waitingOn = undefined
702
- if ( ! workersSources . has ( next . id ) ) {
721
+ if ( ! closed && ! workersSources . has ( next . id ) ) {
703
722
if ( registeredIds . length > 0 ) {
704
723
runOptimizerWhenIdle ( )
705
724
} else {
@@ -745,6 +764,8 @@ async function createDevSsrDepsOptimizer(
745
764
delayDepsOptimizerUntil : ( id : string , done : ( ) => Promise < any > ) => { } ,
746
765
resetRegisteredIds : ( ) => { } ,
747
766
ensureFirstRun : ( ) => { } ,
767
+
768
+ close : async ( ) => { } ,
748
769
options : config . ssr . optimizeDeps
749
770
}
750
771
devSsrDepsOptimizerMap . set ( config , depsOptimizer )
0 commit comments