@@ -331,33 +331,41 @@ namespace ts {
331331 }
332332 }
333333
334+ /**
335+ * Returns the result with affected file
336+ */
337+ function toAffectedFileResult < T > ( result : T , affectedFile ?: SourceFile ) : AffectedFileResult < T > {
338+ return { result, affectedFile } ;
339+ }
340+
334341 /**
335342 * Emits the next affected file, and returns the EmitResult along with source files emitted
336343 * Returns undefined when iteration is complete
337344 */
338- function emitNextAffectedFile ( programOfThisState : Program , writeFileCallback : WriteFileCallback , cancellationToken ?: CancellationToken , customTransformers ?: CustomTransformers ) : AffectedFileEmitResult | undefined {
345+ function emitNextAffectedFile ( programOfThisState : Program , writeFileCallback : WriteFileCallback , cancellationToken ?: CancellationToken , customTransformers ?: CustomTransformers ) : AffectedFileResult < EmitResult > {
339346 const affectedFile = getNextAffectedFile ( programOfThisState ) ;
340347 if ( ! affectedFile ) {
341348 // Done
342349 return undefined ;
343350 }
344351 else if ( affectedFile === programOfThisState ) {
345352 // When whole program is affected, do emit only once (eg when --out or --outFile is specified)
346- return programOfThisState . emit ( /*targetSourceFile*/ undefined , writeFileCallback , cancellationToken , /*emitOnlyDtsFiles*/ false , customTransformers ) ;
353+ return toAffectedFileResult ( programOfThisState . emit ( /*targetSourceFile*/ undefined , writeFileCallback , cancellationToken , /*emitOnlyDtsFiles*/ false , customTransformers ) ) ;
347354 }
348355
349356 // Emit the affected file
350357 const targetSourceFile = affectedFile as SourceFile ;
351- const result = programOfThisState . emit ( targetSourceFile , writeFileCallback , cancellationToken , /*emitOnlyDtsFiles*/ false , customTransformers ) as AffectedFileEmitResult ;
352- result . affectedFile = targetSourceFile ;
353- return result ;
358+ return toAffectedFileResult (
359+ programOfThisState . emit ( targetSourceFile , writeFileCallback , cancellationToken , /*emitOnlyDtsFiles*/ false , customTransformers ) ,
360+ targetSourceFile
361+ ) ;
354362 }
355363
356364 /**
357365 * Return the semantic diagnostics for the next affected file or undefined if iteration is complete
358366 * If provided ignoreSourceFile would be called before getting the diagnostics and would ignore the sourceFile if the returned value was true
359367 */
360- function getSemanticDiagnosticsOfNextAffectedFile ( programOfThisState : Program , cancellationToken ?: CancellationToken , ignoreSourceFile ?: ( sourceFile : SourceFile ) => boolean ) : ReadonlyArray < Diagnostic > {
368+ function getSemanticDiagnosticsOfNextAffectedFile ( programOfThisState : Program , cancellationToken ?: CancellationToken , ignoreSourceFile ?: ( sourceFile : SourceFile ) => boolean ) : AffectedFileResult < ReadonlyArray < Diagnostic > > {
361369 while ( true ) {
362370 const affectedFile = getNextAffectedFile ( programOfThisState ) ;
363371 if ( ! affectedFile ) {
@@ -366,7 +374,7 @@ namespace ts {
366374 }
367375 else if ( affectedFile === programOfThisState ) {
368376 // When whole program is affected, get all semantic diagnostics (eg when --out or --outFile is specified)
369- return programOfThisState . getSemanticDiagnostics ( /*targetSourceFile*/ undefined , cancellationToken ) ;
377+ return toAffectedFileResult ( programOfThisState . getSemanticDiagnostics ( /*targetSourceFile*/ undefined , cancellationToken ) ) ;
370378 }
371379
372380 // Get diagnostics for the affected file if its not ignored
@@ -376,7 +384,10 @@ namespace ts {
376384 continue ;
377385 }
378386
379- return getSemanticDiagnosticsOfFile ( programOfThisState , targetSourceFile , cancellationToken ) ;
387+ return toAffectedFileResult (
388+ getSemanticDiagnosticsOfFile ( programOfThisState , targetSourceFile , cancellationToken ) ,
389+ targetSourceFile
390+ ) ;
380391 }
381392 }
382393
@@ -682,9 +693,7 @@ namespace ts {
682693 text : string ;
683694 }
684695
685- export interface AffectedFileEmitResult extends EmitResult {
686- affectedFile ?: SourceFile ;
687- }
696+ export type AffectedFileResult < T > = { result : T ; affectedFile ?: SourceFile ; } | undefined ;
688697
689698 export interface BuilderOptions {
690699 getCanonicalFileName : ( fileName : string ) => string ;
@@ -714,7 +723,7 @@ namespace ts {
714723 * Gets the semantic diagnostics from the program for the next affected file and caches it
715724 * Returns undefined if the iteration is complete
716725 */
717- getSemanticDiagnosticsOfNextAffectedFile ( programOfThisState : Program , cancellationToken ?: CancellationToken , ignoreSourceFile ?: ( sourceFile : SourceFile ) => boolean ) : ReadonlyArray < Diagnostic > ;
726+ getSemanticDiagnosticsOfNextAffectedFile ( programOfThisState : Program , cancellationToken ?: CancellationToken , ignoreSourceFile ?: ( sourceFile : SourceFile ) => boolean ) : AffectedFileResult < ReadonlyArray < Diagnostic > > ;
718727
719728 /**
720729 * Gets the semantic diagnostics from the program corresponding to this state of file (if provided) or whole program
@@ -733,7 +742,7 @@ namespace ts {
733742 /**
734743 * Emits the next affected file's emit result (EmitResult and sourceFiles emitted) or returns undefined if iteration is complete
735744 */
736- emitNextAffectedFile ( programOfThisState : Program , writeFileCallback : WriteFileCallback , cancellationToken ?: CancellationToken , customTransformers ?: CustomTransformers ) : AffectedFileEmitResult | undefined ;
745+ emitNextAffectedFile ( programOfThisState : Program , writeFileCallback : WriteFileCallback , cancellationToken ?: CancellationToken , customTransformers ?: CustomTransformers ) : AffectedFileResult < EmitResult > ;
737746
738747 /**
739748 * Gets the semantic diagnostics from the program corresponding to this state of file (if provided) or whole program
0 commit comments