@@ -103,6 +103,8 @@ async function createDepsOptimizer(
103103
104104 let handle : NodeJS . Timeout | undefined
105105
106+ let closed = false
107+
106108 let metadata =
107109 cachedMetadata || initDepsOptimizerMetadata ( config , ssr , sessionTimestamp )
108110
@@ -118,6 +120,7 @@ async function createDepsOptimizer(
118120 delayDepsOptimizerUntil,
119121 resetRegisteredIds,
120122 ensureFirstRun,
123+ close,
121124 options : getDepOptimizationConfig ( config , ssr )
122125 }
123126
@@ -159,6 +162,13 @@ async function createDepsOptimizer(
159162
160163 let postScanOptimizationResult : Promise < DepOptimizationResult > | undefined
161164
165+ let optimizingNewDeps : Promise < DepOptimizationResult > | undefined
166+ async function close ( ) {
167+ closed = true
168+ await postScanOptimizationResult
169+ await optimizingNewDeps
170+ }
171+
162172 if ( ! cachedMetadata ) {
163173 // Enter processing state until crawl of static imports ends
164174 currentlyProcessing = true
@@ -288,15 +298,24 @@ async function createDepsOptimizer(
288298 // Ensure that a rerun will not be issued for current discovered deps
289299 if ( handle ) clearTimeout ( handle )
290300
291- if ( Object . keys ( metadata . discovered ) . length === 0 ) {
301+ if ( closed || Object . keys ( metadata . discovered ) . length === 0 ) {
292302 currentlyProcessing = false
293303 return
294304 }
295305
296306 currentlyProcessing = true
297307
298308 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+ }
300319
301320 const newData = processingResult . metadata
302321
@@ -665,7 +684,7 @@ async function createDepsOptimizer(
665684 function ensureFirstRun ( ) {
666685 if ( ! firstRunEnsured && ! firstRunCalled && registeredIds . length === 0 ) {
667686 setTimeout ( ( ) => {
668- if ( registeredIds . length === 0 ) {
687+ if ( ! closed && registeredIds . length === 0 ) {
669688 onCrawlEnd ( )
670689 }
671690 } , runOptimizerIfIdleAfterMs )
@@ -699,7 +718,7 @@ async function createDepsOptimizer(
699718 waitingOn = next . id
700719 const afterLoad = ( ) => {
701720 waitingOn = undefined
702- if ( ! workersSources . has ( next . id ) ) {
721+ if ( ! closed && ! workersSources . has ( next . id ) ) {
703722 if ( registeredIds . length > 0 ) {
704723 runOptimizerWhenIdle ( )
705724 } else {
@@ -745,6 +764,8 @@ async function createDevSsrDepsOptimizer(
745764 delayDepsOptimizerUntil : ( id : string , done : ( ) => Promise < any > ) => { } ,
746765 resetRegisteredIds : ( ) => { } ,
747766 ensureFirstRun : ( ) => { } ,
767+
768+ close : async ( ) => { } ,
748769 options : config . ssr . optimizeDeps
749770 }
750771 devSsrDepsOptimizerMap . set ( config , depsOptimizer )
0 commit comments