11import { readFile } from "node:fs/promises" ;
22import process from "node:process" ;
3+ import { parseArgs } from "node:util" ;
4+
5+ const { values, positionals : files } = parseArgs ( {
6+ args : process . argv . slice ( 2 ) ,
7+
8+ options : {
9+ lines : {
10+ type : "boolean" ,
11+ short : "l" ,
12+ } ,
13+
14+ words : {
15+ type : "boolean" ,
16+ short : "w" ,
17+ } ,
18+
19+ bytes : {
20+ type : "boolean" ,
21+ short : "c" ,
22+ } ,
23+ } ,
24+
25+ allowPositionals : true ,
26+ } ) ;
27+
28+ const countLines = values . lines ?? false ;
29+ const countWords = values . words ?? false ;
30+ const countBytes = values . bytes ?? false ;
31+
32+ function printCounts ( lines , words , bytes , label ) {
33+ const parts = [ ] ;
34+
35+ if ( countLines ) {
36+ parts . push ( lines ) ;
37+ }
38+
39+ if ( countWords ) {
40+ parts . push ( words ) ;
41+ }
42+
43+ if ( countBytes ) {
44+ parts . push ( bytes ) ;
45+ }
46+
47+ if ( ! countLines && ! countWords && ! countBytes ) {
48+ parts . push ( lines , words , bytes ) ;
49+ }
50+
51+ const output = parts . map ( ( value ) => String ( value ) . padStart ( 8 ) ) . join ( "" ) ;
52+
53+ process . stdout . write ( `${ output } ${ label } \n` ) ;
54+ }
355
4- const argvs = process . argv . slice ( 2 ) ;
5- let countLines = false ;
6- let countWords = false ;
7- let countBytes = false ;
856let totalWords = 0 ;
957let totalLines = 0 ;
1058let totalBytes = 0 ;
11- const files = [ ]
12-
13- for ( const arg of argvs ) {
14- if ( arg === "-l" ) {
15- countLines = true ;
16- } else if ( arg === "-w" ) {
17- countWords = true ;
18- } else if ( arg === "-c" ) {
19- countBytes = true ;
20- } else {
21- files . push ( arg ) ;
22- }
23- }
2459
2560for ( const file of files ) {
2661 try {
@@ -32,47 +67,19 @@ for (const file of files) {
3267 const words = arrayOfWords . length ;
3368 totalLines += lines ;
3469 totalBytes += bytes ;
35- totalWords += words
36- if ( countLines && countWords ) {
37- process . stdout . write ( ` ${ lines } ${ words } ${ file } \n` ) ;
38-
39- } else if ( countLines ) {
40- process . stdout . write ( ` ${ lines } ${ file } \n` ) ;
41-
42- } else if ( countWords ) {
43- process . stdout . write ( ` ${ words } ${ file } \n` ) ;
44-
45- } else if ( countBytes ) {
46- process . stdout . write ( ` ${ bytes } ${ file } \n` ) ;
47-
48- } else {
49- process . stdout . write ( ` ${ lines } ${ words } ${ bytes } ${ file } \n` ) ;
50- }
51-
52- } catch ( err ) {
53- console . error ( err . message ) ;
54- }
55- }
56-
57- if ( files . length > 1 ) {
58- if ( countLines && countWords ) {
59- process . stdout . write ( ` ${ totalLines } ${ totalWords } total\n` ) ;
70+ totalWords += words ;
71+ printCounts ( lines , words , bytes , file ) ;
6072
61- } else if ( countLines ) {
62- process . stdout . write ( ` ${ totalLines } total\n` ) ;
63-
64- } else if ( countWords ) {
65- process . stdout . write ( ` ${ totalWords } total\n` ) ;
66-
67- } else if ( countBytes ) {
68- process . stdout . write ( ` ${ totalBytes } total\n` ) ;
69-
70- } else {
71- process . stdout . write ( ` ${ totalLines } ${ totalWords } ${ totalBytes } total\n` ) ;
73+ } catch ( err ) {
74+ console . error ( err . message ) ;
7275 }
7376}
7477
75-
76-
77-
78-
78+ if ( files . length > 1 ) {
79+ printCounts (
80+ totalLines ,
81+ totalWords ,
82+ totalBytes ,
83+ "total"
84+ ) ;
85+ }
0 commit comments