@@ -22,7 +22,7 @@ import {
22
22
import { deleteOutputDir } from '../../utils/delete-output-dir' ;
23
23
import { shouldWatchRoot } from '../../utils/environment-options' ;
24
24
import { NormalizedCachedOptions } from '../../utils/normalize-cache' ;
25
- import { NormalizedOutputOptions } from './options' ;
25
+ import { NormalizedApplicationBuildOptions , NormalizedOutputOptions } from './options' ;
26
26
27
27
// Watch workspace for package manager changes
28
28
const packageWatchFiles = [
@@ -38,6 +38,9 @@ const packageWatchFiles = [
38
38
'.pnp.data.json' ,
39
39
] ;
40
40
41
+ type BuildActionOutput = ( ExecutionResult [ 'outputWithFiles' ] | ExecutionResult [ 'output' ] ) &
42
+ BuilderOutput ;
43
+
41
44
export async function * runEsBuildBuildAction (
42
45
action : ( rebuildState ?: RebuildState ) => Promise < ExecutionResult > ,
43
46
options : {
@@ -59,7 +62,7 @@ export async function* runEsBuildBuildAction(
59
62
colors ?: boolean ;
60
63
jsonLogs ?: boolean ;
61
64
} ,
62
- ) : AsyncIterable < ( ExecutionResult [ 'outputWithFiles' ] | ExecutionResult [ 'output' ] ) & BuilderOutput > {
65
+ ) : AsyncIterable < BuildActionOutput > {
63
66
const {
64
67
writeToFileSystemFilter,
65
68
writeToFileSystem,
@@ -154,16 +157,7 @@ export async function* runEsBuildBuildAction(
154
157
// Output the first build results after setting up the watcher to ensure that any code executed
155
158
// higher in the iterator call stack will trigger the watcher. This is particularly relevant for
156
159
// unit tests which execute the builder and modify the file system programmatically.
157
- if ( writeToFileSystem ) {
158
- // Write output files
159
- await writeResultFiles ( result . outputFiles , result . assetFiles , outputOptions ) ;
160
-
161
- yield result . output ;
162
- } else {
163
- // Requires casting due to unneeded `JsonObject` requirement. Remove once fixed.
164
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
165
- yield result . outputWithFiles as any ;
166
- }
160
+ yield await writeAndEmitOutput ( writeToFileSystem , result , outputOptions , writeToFileSystemFilter ) ;
167
161
168
162
// Finish if watch mode is not enabled
169
163
if ( ! watcher ) {
@@ -213,19 +207,12 @@ export async function* runEsBuildBuildAction(
213
207
watcher . remove ( [ ...staleWatchFiles ] ) ;
214
208
}
215
209
216
- if ( writeToFileSystem ) {
217
- // Write output files
218
- const filesToWrite = writeToFileSystemFilter
219
- ? result . outputFiles . filter ( writeToFileSystemFilter )
220
- : result . outputFiles ;
221
- await writeResultFiles ( filesToWrite , result . assetFiles , outputOptions ) ;
222
-
223
- yield result . output ;
224
- } else {
225
- // Requires casting due to unneeded `JsonObject` requirement. Remove once fixed.
226
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
227
- yield result . outputWithFiles as any ;
228
- }
210
+ yield await writeAndEmitOutput (
211
+ writeToFileSystem ,
212
+ result ,
213
+ outputOptions ,
214
+ writeToFileSystemFilter ,
215
+ ) ;
229
216
}
230
217
} finally {
231
218
// Stop the watcher and cleanup incremental rebuild state
@@ -234,3 +221,25 @@ export async function* runEsBuildBuildAction(
234
221
shutdownSassWorkerPool ( ) ;
235
222
}
236
223
}
224
+
225
+ async function writeAndEmitOutput (
226
+ writeToFileSystem : boolean ,
227
+ { outputFiles, output, outputWithFiles, assetFiles } : ExecutionResult ,
228
+ outputOptions : NormalizedApplicationBuildOptions [ 'outputOptions' ] ,
229
+ writeToFileSystemFilter : ( ( file : BuildOutputFile ) => boolean ) | undefined ,
230
+ ) : Promise < BuildActionOutput > {
231
+ if ( writeToFileSystem ) {
232
+ // Write output files
233
+ const outputFilesToWrite = writeToFileSystemFilter
234
+ ? outputFiles . filter ( writeToFileSystemFilter )
235
+ : outputFiles ;
236
+
237
+ await writeResultFiles ( outputFilesToWrite , assetFiles , outputOptions ) ;
238
+
239
+ return output ;
240
+ } else {
241
+ // Requires casting due to unneeded `JsonObject` requirement. Remove once fixed.
242
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
243
+ return outputWithFiles as any ;
244
+ }
245
+ }
0 commit comments