@@ -1087,37 +1087,38 @@ namespace ts {
10871087 }
10881088
10891089 function readFile ( fileName : string , _encoding ?: string ) : string | undefined {
1090- try {
1091- perfLogger . logStartReadFile ( fileName ) ;
1092- if ( ! fileExists ( fileName ) ) {
1093- return undefined ;
1094- }
1095- const buffer = _fs . readFileSync ( fileName ) ;
1096- let len = buffer . length ;
1097- if ( len >= 2 && buffer [ 0 ] === 0xFE && buffer [ 1 ] === 0xFF ) {
1098- // Big endian UTF-16 byte order mark detected. Since big endian is not supported by node.js,
1099- // flip all byte pairs and treat as little endian.
1100- len &= ~ 1 ; // Round down to a multiple of 2
1101- for ( let i = 0 ; i < len ; i += 2 ) {
1102- const temp = buffer [ i ] ;
1103- buffer [ i ] = buffer [ i + 1 ] ;
1104- buffer [ i + 1 ] = temp ;
1105- }
1106- return buffer . toString ( "utf16le" , 2 ) ;
1107- }
1108- if ( len >= 2 && buffer [ 0 ] === 0xFF && buffer [ 1 ] === 0xFE ) {
1109- // Little endian UTF-16 byte order mark detected
1110- return buffer . toString ( "utf16le" , 2 ) ;
1111- }
1112- if ( len >= 3 && buffer [ 0 ] === 0xEF && buffer [ 1 ] === 0xBB && buffer [ 2 ] === 0xBF ) {
1113- // UTF-8 byte order mark detected
1114- return buffer . toString ( "utf8" , 3 ) ;
1090+ perfLogger . logStartReadFile ( fileName ) ;
1091+ if ( ! fileExists ( fileName ) ) {
1092+ return undefined ;
1093+ }
1094+ const buffer = _fs . readFileSync ( fileName ) ;
1095+ let len = buffer . length ;
1096+ let result : string ;
1097+ if ( len >= 2 && buffer [ 0 ] === 0xFE && buffer [ 1 ] === 0xFF ) {
1098+ // Big endian UTF-16 byte order mark detected. Since big endian is not supported by node.js,
1099+ // flip all byte pairs and treat as little endian.
1100+ len &= ~ 1 ; // Round down to a multiple of 2
1101+ for ( let i = 0 ; i < len ; i += 2 ) {
1102+ const temp = buffer [ i ] ;
1103+ buffer [ i ] = buffer [ i + 1 ] ;
1104+ buffer [ i + 1 ] = temp ;
11151105 }
1106+ result = buffer . toString ( "utf16le" , 2 ) ;
1107+ }
1108+ else if ( len >= 2 && buffer [ 0 ] === 0xFF && buffer [ 1 ] === 0xFE ) {
1109+ // Little endian UTF-16 byte order mark detected
1110+ result = buffer . toString ( "utf16le" , 2 ) ;
1111+ }
1112+ else if ( len >= 3 && buffer [ 0 ] === 0xEF && buffer [ 1 ] === 0xBB && buffer [ 2 ] === 0xBF ) {
1113+ // UTF-8 byte order mark detected
1114+ result = buffer . toString ( "utf8" , 3 ) ;
1115+ }
1116+ else {
11161117 // Default is UTF-8 with no byte order mark
1117- return buffer . toString ( "utf8" ) ;
1118- } finally {
1119- perfLogger . logStopReadFile ( ) ;
1118+ result = buffer . toString ( "utf8" ) ;
11201119 }
1120+ perfLogger . logStopReadFile ( ) ;
1121+ return result ;
11211122 }
11221123
11231124 function writeFile ( fileName : string , data : string , writeByteOrderMark ?: boolean ) : void {
0 commit comments