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 | ||||
|  | ||||
| ## 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) | ||||
| Improve task logging and update dependencies | ||||
|  | ||||
|   | ||||
| @@ -3,6 +3,6 @@ | ||||
|  */ | ||||
| export const commitinfo = { | ||||
|   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.' | ||||
| } | ||||
|   | ||||
| @@ -280,14 +280,6 @@ export class TsBuild { | ||||
|     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 | ||||
| @@ -413,10 +405,11 @@ export class TsBuild { | ||||
|      | ||||
|     // Check for pre-emit diagnostics first | ||||
|     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 | ||||
|     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('   Type errors must be resolved before the compiler can emit output files.\n'); | ||||
|       process.exit(1); | ||||
| @@ -424,7 +417,7 @@ export class TsBuild { | ||||
|      | ||||
|     // If no pre-emit errors, proceed with emit | ||||
|     const emitResult = program.emit(); | ||||
|     const hasEmitErrors = this.handleDiagnostics(emitResult.diagnostics); | ||||
|     const emitErrorSummary = this.processDiagnostics(emitResult.diagnostics); | ||||
|  | ||||
|     const exitCode = emitResult.emitSkipped ? 1 : 0; | ||||
|     if (exitCode === 0) { | ||||
| @@ -442,6 +435,7 @@ export class TsBuild { | ||||
|        | ||||
|       done.resolve(emitResult.emittedFiles); | ||||
|     } else { | ||||
|       this.displayErrorSummary(emitErrorSummary); | ||||
|       console.error('\n❌ TypeScript emit failed. Please investigate the errors listed above!'); | ||||
|       console.error('   No output files have been generated.\n'); | ||||
|       process.exit(exitCode); | ||||
| @@ -465,18 +459,27 @@ export class TsBuild { | ||||
|      | ||||
|     // Check for pre-emit diagnostics | ||||
|     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 | ||||
|     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) { | ||||
|       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`); | ||||
|     } else { | ||||
|       this.displayErrorSummary(combinedErrorSummary); | ||||
|       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'); | ||||
|     } | ||||
| @@ -499,15 +502,16 @@ export class TsBuild { | ||||
|      | ||||
|     // Check for type errors | ||||
|     const diagnostics = plugins.typescript.getPreEmitDiagnostics(program); | ||||
|     const hasErrors = this.handleDiagnostics(diagnostics); | ||||
|     const errorSummary = this.processDiagnostics(diagnostics); | ||||
|      | ||||
|     // Set success flag | ||||
|     const success = !hasErrors; | ||||
|     const success = errorSummary.totalErrors === 0; | ||||
|      | ||||
|     if (success) { | ||||
|       console.log('\n✅ TypeScript type check passed! No type errors found.'); | ||||
|       console.log(`   All ${fileCount} file${fileCount !== 1 ? 's' : ''} passed type checking successfully.\n`); | ||||
|     } else { | ||||
|       this.displayErrorSummary(errorSummary); | ||||
|       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'); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user