@@ -3,6 +3,16 @@ import stripAnsi from 'strip-ansi';
33import { Esbuild , Babel , Err , Linter } from '@rsdoctor/types' ;
44import { DevToolError } from './error' ;
55
6+ const MAX_ERROR_MESSAGE_LENGTH = 1000 ;
7+
8+ function truncateMessage (
9+ input : unknown ,
10+ maxLen = MAX_ERROR_MESSAGE_LENGTH ,
11+ ) : string {
12+ const str = typeof input === 'string' ? input : String ( input ?? '' ) ;
13+ return str . length > maxLen ? str . slice ( 0 , maxLen ) : str ;
14+ }
15+
616function isEsbuildError ( err : any ) : err is Esbuild . Error {
717 return 'pluginName' in err && 'text' in err && 'location' in err ;
818}
@@ -16,7 +26,7 @@ function isDiagnosticError(err: any): err is Linter.Diagnostic {
1626}
1727
1828function parseBabelErrorMessage ( input : string ) {
19- const lines = stripAnsi ( input ) . split ( '\n' ) ;
29+ const lines = stripAnsi ( truncateMessage ( input ) ) . split ( '\n' ) ;
2030 const filePath = lines [ 0 ] . replace ( / ^ ( [ ^ : ] + ) : .* / , '$1' ) ;
2131 const message = lines [ 0 ] . replace ( / .* : ( .* ) \( \d + : \d + \) * / , '$1' ) ;
2232 const lineText =
@@ -30,7 +40,7 @@ function parseBabelErrorMessage(input: string) {
3040}
3141
3242function clearMessage ( str : string ) {
33- return stripAnsi ( str ) . replace ( / .* : ( .* ) \n \n [ \s \S ] * / g, '$1' ) ;
43+ return stripAnsi ( truncateMessage ( str ) ) . replace ( / .* : ( .* ) \n \n [ \s \S ] * / g, '$1' ) ;
3444}
3545
3646function clearStack ( str : string ) {
@@ -74,11 +84,15 @@ function transformBabelError(err: any, opt?: Err.DevToolErrorParams) {
7484 const errorCode = opt ?. code ?? err . code ?? 'BABEL' ;
7585 const title = err . reasonCode ;
7686 const errorParsed = parseBabelErrorMessage ( err . message ) ;
77- const speedyError = new DevToolError ( title , errorParsed . message , {
78- ...opt ,
79- code : errorCode ,
80- stack : err . stack && clearStack ( err . stack ) ,
81- } ) ;
87+ const speedyError = new DevToolError (
88+ title ,
89+ truncateMessage ( errorParsed . message ) ,
90+ {
91+ ...opt ,
92+ code : errorCode ,
93+ stack : err . stack && clearStack ( err . stack ) ,
94+ } ,
95+ ) ;
8296
8397 if ( err . loc ) {
8498 speedyError . setCodeFrame ( {
@@ -113,9 +127,10 @@ function transformErrorLike(err: any, opt?: Err.DevToolErrorParams) {
113127 // const stacks = stackParse(err); // TODO: add doctor stack-trace
114128 const stacks = [ ] as any [ ] ;
115129 const filePath = stacks ?. [ 0 ] ?. getFileName ?.( ) ;
130+ const message = truncateMessage ( err . message ) ;
116131 return new DevToolError (
117132 err . name || 'UNKNOWN_ERROR' ,
118- clearMessage ( err . message ) ,
133+ clearMessage ( message ) ,
119134 {
120135 ...opt ,
121136 codeFrame : filePath ? { filePath } : undefined ,
@@ -127,7 +142,7 @@ function transformErrorLike(err: any, opt?: Err.DevToolErrorParams) {
127142
128143function transformDiagnostic ( err : any , opt ?: Err . DevToolErrorParams ) {
129144 if ( isDiagnosticError ( err ) ) {
130- return new DevToolError ( err . title , err . message , {
145+ return new DevToolError ( err . title , truncateMessage ( err . message ) , {
131146 ...err ,
132147 ...opt ,
133148 hint : err . suggestions ?. description ,
0 commit comments