diff --git a/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compilation-state.ts b/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compilation-state.ts index 6b8aa0381a32..5940c9454ab8 100644 --- a/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compilation-state.ts +++ b/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compilation-state.ts @@ -8,12 +8,13 @@ export class SharedTSCompilationState { #pendingCompilation = true; - #resolveCompilationReady: (() => void) | undefined; - #compilationReadyPromise: Promise | undefined; + #resolveCompilationReady: ((value: boolean) => void) | undefined; + #compilationReadyPromise: Promise | undefined; + #hasErrors = true; - get waitUntilReady(): Promise { + get waitUntilReady(): Promise { if (!this.#pendingCompilation) { - return Promise.resolve(); + return Promise.resolve(this.#hasErrors); } this.#compilationReadyPromise ??= new Promise((resolve) => { @@ -23,8 +24,9 @@ export class SharedTSCompilationState { return this.#compilationReadyPromise; } - markAsReady(): void { - this.#resolveCompilationReady?.(); + markAsReady(hasErrors: boolean): void { + this.#hasErrors = hasErrors; + this.#resolveCompilationReady?.(hasErrors); this.#compilationReadyPromise = undefined; this.#pendingCompilation = false; } @@ -34,7 +36,7 @@ export class SharedTSCompilationState { } dispose(): void { - this.markAsReady(); + this.markAsReady(true); globalSharedCompilationState = undefined; } } diff --git a/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compiler-plugin.ts b/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compiler-plugin.ts index 9ddc95f7d114..102d674db127 100644 --- a/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compiler-plugin.ts +++ b/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compiler-plugin.ts @@ -263,8 +263,7 @@ export function createCompilerPlugin( } if (compilation instanceof NoopCompilation) { - await sharedTSCompilationState.waitUntilReady; - hasCompilationErrors = false; + hasCompilationErrors = await sharedTSCompilationState.waitUntilReady; return result; } @@ -318,7 +317,7 @@ export function createCompilerPlugin( // Reset the setup warnings so that they are only shown during the first build. setupWarnings = undefined; - sharedTSCompilationState.markAsReady(); + sharedTSCompilationState.markAsReady(hasCompilationErrors); return result; }); @@ -409,7 +408,7 @@ export function createCompilerPlugin( build.onEnd((result) => { // Ensure other compilations are unblocked if the main compilation throws during start - sharedTSCompilationState?.markAsReady(); + sharedTSCompilationState?.markAsReady(hasCompilationErrors); for (const { outputFiles, metafile } of additionalResults.values()) { // Add any additional output files to the main output files