@@ -21,7 +21,7 @@ import {
21
21
import { deleteOutputDir } from '../../utils/delete-output-dir' ;
22
22
import { shouldWatchRoot } from '../../utils/environment-options' ;
23
23
import { NormalizedCachedOptions } from '../../utils/normalize-cache' ;
24
- import { NormalizedOutputOptions } from './options' ;
24
+ import { NormalizedApplicationBuildOptions , NormalizedOutputOptions } from './options' ;
25
25
26
26
// Watch workspace for package manager changes
27
27
const packageWatchFiles = [
@@ -37,6 +37,9 @@ const packageWatchFiles = [
37
37
'.pnp.data.json' ,
38
38
] ;
39
39
40
+ type BuildActionOutput = ( ExecutionResult [ 'outputWithFiles' ] | ExecutionResult [ 'output' ] ) &
41
+ BuilderOutput ;
42
+
40
43
export async function * runEsBuildBuildAction (
41
44
action : ( rebuildState ?: RebuildState ) => Promise < ExecutionResult > ,
42
45
options : {
@@ -58,7 +61,7 @@ export async function* runEsBuildBuildAction(
58
61
colors ?: boolean ;
59
62
jsonLogs ?: boolean ;
60
63
} ,
61
- ) : AsyncIterable < ( ExecutionResult [ 'outputWithFiles' ] | ExecutionResult [ 'output' ] ) & BuilderOutput > {
64
+ ) : AsyncIterable < BuildActionOutput > {
62
65
const {
63
66
writeToFileSystemFilter,
64
67
writeToFileSystem,
@@ -153,16 +156,7 @@ export async function* runEsBuildBuildAction(
153
156
// Output the first build results after setting up the watcher to ensure that any code executed
154
157
// higher in the iterator call stack will trigger the watcher. This is particularly relevant for
155
158
// 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 ) ;
166
160
167
161
// Finish if watch mode is not enabled
168
162
if ( ! watcher ) {
@@ -212,19 +206,12 @@ export async function* runEsBuildBuildAction(
212
206
watcher . remove ( [ ...staleWatchFiles ] ) ;
213
207
}
214
208
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
+ ) ;
228
215
}
229
216
} finally {
230
217
// Stop the watcher and cleanup incremental rebuild state
@@ -233,3 +220,25 @@ export async function* runEsBuildBuildAction(
233
220
shutdownSassWorkerPool ( ) ;
234
221
}
235
222
}
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