fix(tsbuild.classes): Improve error diagnostics handling by removing legacy helper and integrating more robust error summaries in the compilation process
This commit is contained in:
@@ -1,5 +1,13 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2025-05-21 - 2.6.1 - fix(tsbuild.classes)
|
||||||
|
Improve error diagnostics handling by removing legacy helper and integrating more robust error summaries in the compilation process
|
||||||
|
|
||||||
|
- Removed the handleDiagnostics method and its legacy usage
|
||||||
|
- Replaced legacy calls with inline processDiagnostics checks for pre-emit and emit phases
|
||||||
|
- Combined error summaries for clearer reporting during emit checks and type validation
|
||||||
|
- Enhanced error output to guide users on resolving TypeScript errors before emission
|
||||||
|
|
||||||
## 2025-05-21 - 2.6.0 - feat(tsbuild)
|
## 2025-05-21 - 2.6.0 - feat(tsbuild)
|
||||||
Improve task logging and update dependencies
|
Improve task logging and update dependencies
|
||||||
|
|
||||||
|
@@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@git.zone/tsbuild',
|
name: '@git.zone/tsbuild',
|
||||||
version: '2.6.0',
|
version: '2.6.1',
|
||||||
description: 'A tool for compiling TypeScript files using the latest nightly features, offering flexible APIs and a CLI for streamlined development.'
|
description: 'A tool for compiling TypeScript files using the latest nightly features, offering flexible APIs and a CLI for streamlined development.'
|
||||||
}
|
}
|
||||||
|
@@ -280,14 +280,6 @@ export class TsBuild {
|
|||||||
console.log('\n' + '='.repeat(80) + '\n');
|
console.log('\n' + '='.repeat(80) + '\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function to handle and log TypeScript diagnostics (legacy method)
|
|
||||||
*/
|
|
||||||
private handleDiagnostics(diagnostics: readonly plugins.typescript.Diagnostic[]): boolean {
|
|
||||||
const errorSummary = this.processDiagnostics(diagnostics);
|
|
||||||
this.displayErrorSummary(errorSummary);
|
|
||||||
return errorSummary.totalErrors > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a TypeScript program from file names and options
|
* Creates a TypeScript program from file names and options
|
||||||
@@ -413,10 +405,11 @@ export class TsBuild {
|
|||||||
|
|
||||||
// Check for pre-emit diagnostics first
|
// Check for pre-emit diagnostics first
|
||||||
const preEmitDiagnostics = plugins.typescript.getPreEmitDiagnostics(program);
|
const preEmitDiagnostics = plugins.typescript.getPreEmitDiagnostics(program);
|
||||||
const hasPreEmitErrors = this.handleDiagnostics(preEmitDiagnostics);
|
const preEmitErrorSummary = this.processDiagnostics(preEmitDiagnostics);
|
||||||
|
|
||||||
// Only continue to emit phase if no pre-emit errors
|
// Only continue to emit phase if no pre-emit errors
|
||||||
if (hasPreEmitErrors) {
|
if (preEmitErrorSummary.totalErrors > 0) {
|
||||||
|
this.displayErrorSummary(preEmitErrorSummary);
|
||||||
console.error('\n❌ TypeScript pre-emit checks failed. Please fix the issues listed above before proceeding.');
|
console.error('\n❌ TypeScript pre-emit checks failed. Please fix the issues listed above before proceeding.');
|
||||||
console.error(' Type errors must be resolved before the compiler can emit output files.\n');
|
console.error(' Type errors must be resolved before the compiler can emit output files.\n');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
@@ -424,7 +417,7 @@ export class TsBuild {
|
|||||||
|
|
||||||
// If no pre-emit errors, proceed with emit
|
// If no pre-emit errors, proceed with emit
|
||||||
const emitResult = program.emit();
|
const emitResult = program.emit();
|
||||||
const hasEmitErrors = this.handleDiagnostics(emitResult.diagnostics);
|
const emitErrorSummary = this.processDiagnostics(emitResult.diagnostics);
|
||||||
|
|
||||||
const exitCode = emitResult.emitSkipped ? 1 : 0;
|
const exitCode = emitResult.emitSkipped ? 1 : 0;
|
||||||
if (exitCode === 0) {
|
if (exitCode === 0) {
|
||||||
@@ -442,6 +435,7 @@ export class TsBuild {
|
|||||||
|
|
||||||
done.resolve(emitResult.emittedFiles);
|
done.resolve(emitResult.emittedFiles);
|
||||||
} else {
|
} else {
|
||||||
|
this.displayErrorSummary(emitErrorSummary);
|
||||||
console.error('\n❌ TypeScript emit failed. Please investigate the errors listed above!');
|
console.error('\n❌ TypeScript emit failed. Please investigate the errors listed above!');
|
||||||
console.error(' No output files have been generated.\n');
|
console.error(' No output files have been generated.\n');
|
||||||
process.exit(exitCode);
|
process.exit(exitCode);
|
||||||
@@ -465,18 +459,27 @@ export class TsBuild {
|
|||||||
|
|
||||||
// Check for pre-emit diagnostics
|
// Check for pre-emit diagnostics
|
||||||
const preEmitDiagnostics = plugins.typescript.getPreEmitDiagnostics(program);
|
const preEmitDiagnostics = plugins.typescript.getPreEmitDiagnostics(program);
|
||||||
const hasPreEmitErrors = this.handleDiagnostics(preEmitDiagnostics);
|
const preEmitErrorSummary = this.processDiagnostics(preEmitDiagnostics);
|
||||||
|
|
||||||
// Run the emit phase but with noEmit: true to check for emit errors without producing files
|
// Run the emit phase but with noEmit: true to check for emit errors without producing files
|
||||||
const emitResult = program.emit(undefined, undefined, undefined, true);
|
const emitResult = program.emit(undefined, undefined, undefined, true);
|
||||||
const hasEmitErrors = this.handleDiagnostics(emitResult.diagnostics);
|
const emitErrorSummary = this.processDiagnostics(emitResult.diagnostics);
|
||||||
|
|
||||||
const success = !hasPreEmitErrors && !hasEmitErrors && !emitResult.emitSkipped;
|
// Combine error summaries
|
||||||
|
const combinedErrorSummary: IErrorSummary = {
|
||||||
|
errorsByFile: { ...preEmitErrorSummary.errorsByFile, ...emitErrorSummary.errorsByFile },
|
||||||
|
generalErrors: [...preEmitErrorSummary.generalErrors, ...emitErrorSummary.generalErrors],
|
||||||
|
totalErrors: preEmitErrorSummary.totalErrors + emitErrorSummary.totalErrors,
|
||||||
|
totalFiles: Object.keys({ ...preEmitErrorSummary.errorsByFile, ...emitErrorSummary.errorsByFile }).length
|
||||||
|
};
|
||||||
|
|
||||||
|
const success = combinedErrorSummary.totalErrors === 0 && !emitResult.emitSkipped;
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
console.log('\n✅ TypeScript emit check passed! All files can be emitted successfully.');
|
console.log('\n✅ TypeScript emit check passed! All files can be emitted successfully.');
|
||||||
console.log(` ${fileCount} file${fileCount !== 1 ? 's' : ''} ${fileCount !== 1 ? 'are' : 'is'} ready to be compiled.\n`);
|
console.log(` ${fileCount} file${fileCount !== 1 ? 's' : ''} ${fileCount !== 1 ? 'are' : 'is'} ready to be compiled.\n`);
|
||||||
} else {
|
} else {
|
||||||
|
this.displayErrorSummary(combinedErrorSummary);
|
||||||
console.error('\n❌ TypeScript emit check failed. Please fix the issues listed above.');
|
console.error('\n❌ TypeScript emit check failed. Please fix the issues listed above.');
|
||||||
console.error(' The compilation cannot proceed until these errors are resolved.\n');
|
console.error(' The compilation cannot proceed until these errors are resolved.\n');
|
||||||
}
|
}
|
||||||
@@ -499,15 +502,16 @@ export class TsBuild {
|
|||||||
|
|
||||||
// Check for type errors
|
// Check for type errors
|
||||||
const diagnostics = plugins.typescript.getPreEmitDiagnostics(program);
|
const diagnostics = plugins.typescript.getPreEmitDiagnostics(program);
|
||||||
const hasErrors = this.handleDiagnostics(diagnostics);
|
const errorSummary = this.processDiagnostics(diagnostics);
|
||||||
|
|
||||||
// Set success flag
|
// Set success flag
|
||||||
const success = !hasErrors;
|
const success = errorSummary.totalErrors === 0;
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
console.log('\n✅ TypeScript type check passed! No type errors found.');
|
console.log('\n✅ TypeScript type check passed! No type errors found.');
|
||||||
console.log(` All ${fileCount} file${fileCount !== 1 ? 's' : ''} passed type checking successfully.\n`);
|
console.log(` All ${fileCount} file${fileCount !== 1 ? 's' : ''} passed type checking successfully.\n`);
|
||||||
} else {
|
} else {
|
||||||
|
this.displayErrorSummary(errorSummary);
|
||||||
console.error('\n❌ TypeScript type check failed. Please fix the type errors listed above.');
|
console.error('\n❌ TypeScript type check failed. Please fix the type errors listed above.');
|
||||||
console.error(' The type checker found issues that need to be resolved.\n');
|
console.error(' The type checker found issues that need to be resolved.\n');
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user