@@ -4,6 +4,7 @@ import sharp from "sharp";
44import { writeFile , readFile } from 'node:fs/promises' ;
55import { minify } from 'html-minifier-terser' ;
66import { optimize } from 'svgo' ;
7+ import logUpdate from 'log-update' ;
78
89export 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