Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 32 additions & 10 deletions packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ export function createCompilerPlugin(
// eslint-disable-next-line max-lines-per-function
async setup(build: PluginBuild): Promise<void> {
let setupWarnings: PartialMessage[] | undefined = [];
let diagnosticsPromise: ReturnType<AngularCompilation['diagnoseFiles']> | undefined;
const preserveSymlinks = build.initialOptions.preserveSymlinks;

// Initialize a worker pool for JavaScript transformations.
Expand Down Expand Up @@ -157,6 +158,7 @@ export function createCompilerPlugin(

// eslint-disable-next-line max-lines-per-function
build.onStart(async () => {
hasCompilationErrors = true;
await initializeHash();

const result: OnStartResult = {
Expand Down Expand Up @@ -402,15 +404,21 @@ export function createCompilerPlugin(
}
}

const diagnostics = await compilation.diagnoseFiles(
useTypeChecking ? DiagnosticModes.All : DiagnosticModes.All & ~DiagnosticModes.Semantic,
);
if (diagnostics.errors?.length) {
(result.errors ??= []).push(...diagnostics.errors);
}
if (diagnostics.warnings?.length) {
(result.warnings ??= []).push(...diagnostics.warnings);
}
const diagnosticModes = useTypeChecking
? DiagnosticModes.All
: DiagnosticModes.All & ~DiagnosticModes.Semantic;
diagnosticsPromise = compilation.diagnoseFiles(diagnosticModes).catch((error) => ({
errors: [
{
text: 'Angular compilation diagnostics failed.',
notes: [
{
text: error instanceof Error ? (error.stack ?? error.message) : String(error),
},
],
},
],
}));

// Add errors from failed additional results.
// This must be done after emit to capture latest web worker results.
Expand Down Expand Up @@ -617,7 +625,7 @@ export function createCompilerPlugin(
);
}

build.onEnd((result) => {
build.onEnd(async (result) => {
Comment thread
alan-agius4 marked this conversation as resolved.
// Ensure other compilations are unblocked if the main compilation throws during start
if (angularCompilationContext.isPrimary()) {
angularCompilationContext.markAsReady(hasCompilationErrors);
Expand All @@ -640,6 +648,20 @@ export function createCompilerPlugin(
}

logCumulativeDurations();

if (diagnosticsPromise) {
try {
const diagnostics = await diagnosticsPromise;
const errors = diagnostics.errors?.length ? diagnostics.errors : undefined;
const warnings = diagnostics.warnings?.length ? diagnostics.warnings : undefined;

if (errors || warnings) {
return { errors, warnings };
}
} finally {
diagnosticsPromise = undefined;
}
}
});

build.onDispose(() => {
Expand Down