@@ -71,13 +71,8 @@ export async function buildAction(actionContext: BuildActionContext): Promise<Ex
7171 return result ;
7272 }
7373
74- const collectedAssetsPromise =
75- actionContext . collectedAssets ?? buildState . collectAssets ( options , modifiedFiles ) ;
76- if ( collectedAssetsPromise instanceof Promise ) {
77- // Prevent unhandled promise rejections if compilation or bundling returns early.
78- collectedAssetsPromise . catch ( ( ) => { } ) ;
79- }
80-
74+ let collectedAssetsPromise : CollectedAssets | Promise < CollectedAssets > | undefined =
75+ actionContext . collectedAssets ;
8176 const filesToEmit : OutputFile [ ] = [ ] ;
8277
8378 if ( shouldCompileEntryPoints ) {
@@ -106,6 +101,13 @@ export async function buildAction(actionContext: BuildActionContext): Promise<Ex
106101 return result ;
107102 }
108103
104+ if ( ! collectedAssetsPromise ) {
105+ const promise = buildState . collectAssets ( options , modifiedFiles ) ;
106+ // Prevent unhandled promise rejections if bundling returns early.
107+ promise . catch ( ( ) => { } ) ;
108+ collectedAssetsPromise = promise ;
109+ }
110+
109111 const itemsToBundle = collectEntryPointsToBundle ( options , buildState ) ;
110112 let bundleOutput : BundleEntryPointsOutput ;
111113 try {
@@ -158,17 +160,26 @@ export async function buildAction(actionContext: BuildActionContext): Promise<Ex
158160 filesToEmit . push ( ...manifestFiles ) ;
159161 }
160162
161- const collectedAssets = await collectedAssetsPromise ;
163+ const collectedAssets = await ( collectedAssetsPromise ??
164+ buildState . collectAssets ( options , modifiedFiles ) ) ;
162165 filesToEmit . push ( ...collectedAssets . filesToEmit ) ;
163166
167+ const emitPromise = emitFilesToDisk ( filesToEmit , ( file ) =>
168+ path . posix . join ( options . outputPath , file . path ) ,
169+ ) ;
170+
164171 const filesToDelete = buildState . recordEmittedOutputs ( collectedAssets , manifestFiles ) ;
165172
166- await Promise . all ( [
167- deleteFilesFromDisk (
168- Array . from ( filesToDelete , ( file ) => path . posix . join ( options . outputPath , file ) ) ,
169- ) ,
170- emitFilesToDisk ( filesToEmit , ( file ) => path . posix . join ( options . outputPath , file . path ) ) ,
171- ] ) ;
173+ if ( filesToDelete . size ) {
174+ await Promise . all ( [
175+ emitPromise ,
176+ deleteFilesFromDisk (
177+ Array . from ( filesToDelete , ( file ) => path . posix . join ( options . outputPath , file ) ) ,
178+ ) ,
179+ ] ) ;
180+ } else {
181+ await emitPromise ;
182+ }
172183 } catch ( error ) {
173184 assertIsError ( error ) ;
174185 result . addError ( error . message ) ;
0 commit comments