-
-
Notifications
You must be signed in to change notification settings - Fork 105
Expand file tree
/
Copy pathwc.js
More file actions
109 lines (82 loc) · 1.82 KB
/
Copy pathwc.js
File metadata and controls
109 lines (82 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
const fs = require("fs");
const path = require("path");
const args = process.argv.slice(2);
let countLines = false;
let countWords = false;
let countBytes = false;
let files = [];
for (const arg of args) {
if (arg === "-l") {
countLines = true;
} else if (arg === "-w") {
countWords = true;
} else if (arg === "-c") {
countBytes = true;
} else {
files.push(arg);
}
}
function expandWildcard(filePath) {
if (!filePath.includes("*")) {
return [filePath];
}
const dir = path.dirname(filePath);
const files = fs.readdirSync(dir);
return files.map(file => path.join(dir, file));
}
function getStats(filename) {
const content = fs.readFileSync(filename, "utf8");
const lines = content.split("\n").length - 1;
const words = content
.trim()
.split(/\s+/)
.filter(word => word.length > 0)
.length;
const bytes = fs.statSync(filename).size;
return {
lines,
words,
bytes
};
}
function printResult(stats, filename, showFilename = true) {
let output = [];
if (!countLines && !countWords && !countBytes) {
output.push(stats.lines);
output.push(stats.words);
output.push(stats.bytes);
} else {
if (countLines) {
output.push(stats.lines);
}
if (countWords) {
output.push(stats.words);
}
if (countBytes) {
output.push(stats.bytes);
}
}
if (showFilename) {
output.push(filename);
}
console.log(output.join(" "));
}
let allFiles = [];
for (const file of files) {
allFiles.push(...expandWildcard(file));
}
let total = {
lines: 0,
words: 0,
bytes: 0
};
for (const file of allFiles) {
const stats = getStats(file);
total.lines += stats.lines;
total.words += stats.words;
total.bytes += stats.bytes;
printResult(stats, file);
}
if (allFiles.length > 1) {
printResult(total, "total");
}