Skip to content

Commit 02a1eb7

Browse files
committed
Implement progress bar
1 parent 2890646 commit 02a1eb7

3 files changed

Lines changed: 191 additions & 16 deletions

File tree

package-lock.json

Lines changed: 119 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
"html-minifier-terser": "^7.2.0",
7878
"is-absolute-url": "^4.0.1",
7979
"jsdom": "^24.0.0",
80+
"log-update": "^6.1.0",
8081
"marked": "^4.0.10",
8182
"msw": "^2.2.9",
8283
"path": "^0.12.7",

src/scripts/fast-compress.ts

Lines changed: 71 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import sharp from "sharp";
44
import { writeFile, readFile } from 'node:fs/promises';
55
import { minify } from 'html-minifier-terser';
66
import { optimize } from 'svgo';
7+
import logUpdate from 'log-update';
78

89
export default () => {
910
return {
@@ -12,47 +13,85 @@ export default () => {
1213
"astro:build:done": async ({dir}: any) => {
1314
const dirPath = dir.pathname;
1415
const files = await fg(join(dirPath, "**/*.(webp|gif|jpg|jpeg|png|html|svg)"));
16+
let processing = 0;
17+
let writing = 0;
18+
let total = 0;
19+
20+
21+
function logMessage(){
22+
const processingProgress = 1 - (processing/total);
23+
const writingProgress = 1 - (writing/total);
24+
const processingBar = `[${'='.repeat(Math.round(processingProgress * 20))}${' '.repeat(20 - Math.round(processingProgress * 20))}]`;
25+
const writingBar = `[${'='.repeat(Math.round(writingProgress * 20))}${' '.repeat(20 - Math.round(writingProgress * 20))}]`;
26+
27+
logUpdate(
28+
`
29+
Processing ${processingBar} ${Math.floor(processingProgress * 100)}% (${total - processing}/${total})
30+
Writing ${writingBar} ${Math.floor(writingProgress * 100)}% (${total - writing}/${total})
31+
`
32+
);
33+
}
1534

1635
const promises = files.map(async (file) => {
1736
if(extname(file) === ".webp"){
1837
const data = await sharp(file, {animated: true})
1938
.webp({
2039
effort: 6
2140
})
22-
.toBuffer()
23-
console.log(`Processed: ${file}`);
41+
.toBuffer();
42+
43+
processing--;
44+
logMessage();
45+
// console.log(`Processed: ${file}`);
2446
await writeFile(file, data);
25-
console.log(`Written: ${file}`);
47+
// console.log(`Written: ${file}`);
48+
writing--;
49+
logMessage();
2650

2751
} else if(extname(file) === ".gif") {
2852
const data = await sharp(file, {animated: true})
2953
.gif({
3054
effort: 10
3155
})
32-
.toBuffer()
33-
console.log(`Processed: ${file}`);
56+
.toBuffer();
57+
58+
processing--;
59+
logMessage();
60+
// console.log(`Processed: ${file}`);
3461
await writeFile(file, data);
35-
console.log(`Written: ${file}`);
62+
// console.log(`Written: ${file}`);
63+
writing--;
64+
logMessage();
3665

3766
} else if(extname(file) === ".jpg" || extname(file) === ".jpeg") {
3867
const data = await sharp(file)
3968
.jpeg({
4069
})
41-
.toBuffer()
42-
console.log(`Processed: ${file}`);
70+
.toBuffer();
71+
72+
processing--;
73+
logMessage();
74+
// console.log(`Processed: ${file}`);
4375
await writeFile(file, data);
44-
console.log(`Written: ${file}`);
76+
// console.log(`Written: ${file}`);
77+
writing--;
78+
logMessage();
4579

4680
} else if(extname(file) === ".png") {
4781
const data = await sharp(file)
4882
.png({
4983
compressionLevel: 9,
5084
effort: 10
5185
})
52-
.toBuffer()
53-
console.log(`Processed: ${file}`);
86+
.toBuffer();
87+
88+
processing--;
89+
logMessage();
90+
// console.log(`Processed: ${file}`);
5491
await writeFile(file, data);
55-
console.log(`Written: ${file}`);
92+
// console.log(`Written: ${file}`);
93+
writing--;
94+
logMessage();
5695

5796
} else if(extname(file) === ".html") {
5897
const text = await readFile(file, {encoding: "utf8"});
@@ -142,9 +181,14 @@ export default () => {
142181
useShortDoctype: false,
143182
});
144183

145-
console.log(`Processed: ${file}`);
184+
processing--;
185+
logMessage();
186+
// console.log(`Processed: ${file}`);
146187
await writeFile(file, data);
147-
console.log(`Written: ${file}`);
188+
// console.log(`Written: ${file}`);
189+
writing--;
190+
logMessage();
191+
148192
}catch(err){
149193
console.warn(err);
150194
}
@@ -161,13 +205,24 @@ export default () => {
161205
},
162206
plugins: ["preset-default"],
163207
})
208+
processing--;
209+
logMessage();
164210

165-
console.log(`Processed: ${file}`);
211+
// console.log(`Processed: ${file}`);
166212
await writeFile(file, data);
167-
console.log(`Written: ${file}`);
213+
// console.log(`Written: ${file}`);
214+
215+
writing--;
216+
logMessage();
168217
}
169218
});
170219

220+
processing = promises.length;
221+
writing = promises.length;
222+
total = promises.length;
223+
224+
logMessage();
225+
171226
await Promise.all(promises);
172227
}
173228
}

0 commit comments

Comments
 (0)