@@ -21,7 +21,7 @@ import {
2121import { deleteOutputDir } from '../../utils/delete-output-dir' ;
2222import { shouldWatchRoot } from '../../utils/environment-options' ;
2323import { NormalizedCachedOptions } from '../../utils/normalize-cache' ;
24- import { NormalizedOutputOptions } from './options' ;
24+ import { NormalizedApplicationBuildOptions , NormalizedOutputOptions } from './options' ;
2525
2626// Watch workspace for package manager changes
2727const packageWatchFiles = [
@@ -37,6 +37,9 @@ const packageWatchFiles = [
3737 '.pnp.data.json' ,
3838] ;
3939
40+ type BuildActionOutput = ( ExecutionResult [ 'outputWithFiles' ] | ExecutionResult [ 'output' ] ) &
41+ BuilderOutput ;
42+
4043export async function * runEsBuildBuildAction (
4144 action : ( rebuildState ?: RebuildState ) => Promise < ExecutionResult > ,
4245 options : {
@@ -58,7 +61,7 @@ export async function* runEsBuildBuildAction(
5861 colors ?: boolean ;
5962 jsonLogs ?: boolean ;
6063 } ,
61- ) : AsyncIterable < ( ExecutionResult [ 'outputWithFiles' ] | ExecutionResult [ 'output' ] ) & BuilderOutput > {
64+ ) : AsyncIterable < BuildActionOutput > {
6265 const {
6366 writeToFileSystemFilter,
6467 writeToFileSystem,
@@ -153,16 +156,7 @@ export async function* runEsBuildBuildAction(
153156 // Output the first build results after setting up the watcher to ensure that any code executed
154157 // higher in the iterator call stack will trigger the watcher. This is particularly relevant for
155158 // unit tests which execute the builder and modify the file system programmatically.
156- if ( writeToFileSystem ) {
157- // Write output files
158- await writeResultFiles ( result . outputFiles , result . assetFiles , outputOptions ) ;
159-
160- yield result . output ;
161- } else {
162- // Requires casting due to unneeded `JsonObject` requirement. Remove once fixed.
163- // eslint-disable-next-line @typescript-eslint/no-explicit-any
164- yield result . outputWithFiles as any ;
165- }
159+ yield await writeAndEmitOutput ( writeToFileSystem , result , outputOptions , writeToFileSystemFilter ) ;
166160
167161 // Finish if watch mode is not enabled
168162 if ( ! watcher ) {
@@ -212,19 +206,12 @@ export async function* runEsBuildBuildAction(
212206 watcher . remove ( [ ...staleWatchFiles ] ) ;
213207 }
214208
215- if ( writeToFileSystem ) {
216- // Write output files
217- const filesToWrite = writeToFileSystemFilter
218- ? result . outputFiles . filter ( writeToFileSystemFilter )
219- : result . outputFiles ;
220- await writeResultFiles ( filesToWrite , result . assetFiles , outputOptions ) ;
221-
222- yield result . output ;
223- } else {
224- // Requires casting due to unneeded `JsonObject` requirement. Remove once fixed.
225- // eslint-disable-next-line @typescript-eslint/no-explicit-any
226- yield result . outputWithFiles as any ;
227- }
209+ yield await writeAndEmitOutput (
210+ writeToFileSystem ,
211+ result ,
212+ outputOptions ,
213+ writeToFileSystemFilter ,
214+ ) ;
228215 }
229216 } finally {
230217 // Stop the watcher and cleanup incremental rebuild state
@@ -233,3 +220,25 @@ export async function* runEsBuildBuildAction(
233220 shutdownSassWorkerPool ( ) ;
234221 }
235222}
223+
224+ async function writeAndEmitOutput (
225+ writeToFileSystem : boolean ,
226+ { outputFiles, output, outputWithFiles, assetFiles } : ExecutionResult ,
227+ outputOptions : NormalizedApplicationBuildOptions [ 'outputOptions' ] ,
228+ writeToFileSystemFilter : ( ( file : BuildOutputFile ) => boolean ) | undefined ,
229+ ) : Promise < BuildActionOutput > {
230+ if ( writeToFileSystem ) {
231+ // Write output files
232+ const outputFilesToWrite = writeToFileSystemFilter
233+ ? outputFiles . filter ( writeToFileSystemFilter )
234+ : outputFiles ;
235+
236+ await writeResultFiles ( outputFilesToWrite , assetFiles , outputOptions ) ;
237+
238+ return output ;
239+ } else {
240+ // Requires casting due to unneeded `JsonObject` requirement. Remove once fixed.
241+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
242+ return outputWithFiles as any ;
243+ }
244+ }
0 commit comments