@@ -7,7 +7,6 @@ import glob = require('glob');
7
7
import fs = require( 'fs' ) ;
8
8
import os = require( 'os' ) ;
9
9
import languagePlugins = require( './lib/languagePlugins.js' ) ;
10
- import { setTimeout } from 'node:timers/promises' ;
11
10
import { getVSCodeFormattingSettings } from './lib/formatting.js' ;
12
11
13
12
const _reset = '\x1b[0m' ;
@@ -113,11 +112,11 @@ class Project {
113
112
const processFiles = new Set < string > ( ) ;
114
113
const tsconfigAndLanguages = new Map < string , string [ ] > ( ) ;
115
114
const formattingSettings = getFormattingSettings ( ) ;
115
+ const isTTY = process . stdout . isTTY ;
116
116
117
117
let projects : Project [ ] = [ ] ;
118
- let spinner = process . stdout . isTTY ? clack . spinner ( ) : undefined ;
118
+ let spinner = isTTY ? clack . spinner ( ) : undefined ;
119
119
let spinnerStopingWarn = false ;
120
- let lastSpinnerUpdate = Date . now ( ) ;
121
120
let hasFix = false ;
122
121
let allFilesNum = 0 ;
123
122
let processed = 0 ;
@@ -127,7 +126,7 @@ class Project {
127
126
let warnings = 0 ;
128
127
let cached = 0 ;
129
128
130
- if ( spinner ) {
129
+ if ( isTTY ) {
131
130
const write = process . stdout . write . bind ( process . stdout ) ;
132
131
process . stdout . write = ( ...args ) => {
133
132
if ( spinnerStopingWarn && typeof args [ 0 ] === 'string' ) {
@@ -322,12 +321,12 @@ class Project {
322
321
process . exit ( 1 ) ;
323
322
}
324
323
325
- if ( threads === 1 ) {
326
- await startWorker ( worker . createLocal ( ) as any ) ;
327
- } else {
324
+ if ( isTTY || threads >= 2 ) {
328
325
await Promise . all ( new Array ( threads ) . fill ( 0 ) . map ( ( ) => {
329
326
return startWorker ( worker . create ( ) ) ;
330
327
} ) ) ;
328
+ } else {
329
+ await startWorker ( worker . createLocal ( ) as any ) ;
331
330
}
332
331
333
332
( spinner ?. stop ?? clack . log . message ) (
@@ -408,20 +407,14 @@ class Project {
408
407
}
409
408
410
409
while ( project . currentFileIndex < project . fileNames . length ) {
411
- const i = project . currentFileIndex ++ ;
412
- const fileName = project . fileNames [ i ] ;
410
+ const fileName = project . fileNames [ project . currentFileIndex ++ ] ;
411
+ addProcessFile ( fileName ) ;
412
+
413
413
const fileStat = fs . statSync ( fileName , { throwIfNoEntry : false } ) ;
414
414
if ( ! fileStat ) {
415
415
continue ;
416
416
}
417
417
418
- addProcessFile ( fileName ) ;
419
-
420
- if ( spinner && Date . now ( ) - lastSpinnerUpdate > 100 ) {
421
- lastSpinnerUpdate = Date . now ( ) ;
422
- await setTimeout ( 0 ) ;
423
- }
424
-
425
418
let fileCache = project . cache [ fileName ] ;
426
419
if ( fileCache ) {
427
420
if ( fileCache [ 0 ] !== fileStat . mtimeMs ) {
@@ -478,7 +471,12 @@ class Project {
478
471
}
479
472
processed ++ ;
480
473
481
- removeProcessFile ( fileName ) ;
474
+ removeProcessFile (
475
+ fileName ,
476
+ project . currentFileIndex < project . fileNames . length
477
+ ? project . fileNames [ project . currentFileIndex ]
478
+ : undefined
479
+ ) ;
482
480
}
483
481
484
482
cache . saveCache ( project . tsconfig , project . configFile ! , project . cache , ts . sys . createHash ) ;
@@ -558,17 +556,28 @@ class Project {
558
556
updateSpinner ( ) ;
559
557
}
560
558
561
- function removeProcessFile ( fileName : string ) {
559
+ function removeProcessFile ( fileName : string , nextFileName ?: string ) {
562
560
processFiles . delete ( fileName ) ;
563
- updateSpinner ( ) ;
561
+ updateSpinner ( nextFileName ) ;
564
562
}
565
563
566
- function updateSpinner ( ) {
567
- if ( processFiles . size === 1 ) {
568
- const fileName = processFiles . values ( ) . next ( ) . value ! ;
569
- spinner ?. message ( darkGray ( `[${ processed + processFiles . size } /${ allFilesNum } ] ${ path . relative ( process . cwd ( ) , fileName ) } ` ) ) ;
564
+ function updateSpinner ( nextFileName ?: string ) {
565
+ let msg : string | undefined ;
566
+ if ( processFiles . size === 0 ) {
567
+ if ( nextFileName ) {
568
+ msg = darkGray ( `[${ processed + processFiles . size } /${ allFilesNum } ] ${ path . relative ( process . cwd ( ) , nextFileName ) } ` ) ;
569
+ }
570
+ }
571
+ else if ( processFiles . size === 1 ) {
572
+ msg = darkGray ( `[${ processed + processFiles . size } /${ allFilesNum } ] ${ path . relative ( process . cwd ( ) , [ ...processFiles ] [ 0 ] ) } ` ) ;
570
573
} else {
571
- spinner ?. message ( darkGray ( `[${ processed + processFiles . size } /${ allFilesNum } ] Processing ${ processFiles . size } files` ) ) ;
574
+ msg = darkGray ( `[${ processed + processFiles . size } /${ allFilesNum } ] Processing ${ processFiles . size } files` ) ;
575
+ }
576
+ if ( ! spinner && isTTY ) {
577
+ spinner = clack . spinner ( ) ;
578
+ spinner . start ( msg ) ;
579
+ } else {
580
+ spinner ?. message ( msg ) ;
572
581
}
573
582
}
574
583
@@ -577,8 +586,7 @@ class Project {
577
586
spinnerStopingWarn = code === 2 ;
578
587
spinner . stop ( msg , code ) ;
579
588
spinnerStopingWarn = false ;
580
- spinner = clack . spinner ( ) ;
581
- spinner . start ( ) ;
589
+ spinner = undefined ;
582
590
} else {
583
591
if ( code === 1 ) {
584
592
clack . log . error ( msg ) ;
0 commit comments