@@ -8,6 +8,9 @@ const { v4: uuidv4 } = require('uuid');
88const browserstack = require ( 'browserstack-local' ) ;
99const crypto = require ( 'crypto' ) ;
1010const util = require ( 'util' ) ;
11+ const { promisify } = require ( 'util' ) ;
12+ const readdir = promisify ( fs . readdir ) ;
13+ const stat = promisify ( fs . stat ) ;
1114
1215const usageReporting = require ( "./usageReporting" ) ,
1316 logger = require ( "./logger" ) . winstonLogger ,
@@ -1278,6 +1281,34 @@ exports.fetchZipSize = (fileName) => {
12781281 }
12791282}
12801283
1284+ const getDirectorySize = async function ( dir ) {
1285+ try {
1286+ const subdirs = ( await readdir ( dir ) ) ;
1287+ const files = await Promise . all ( subdirs . map ( async ( subdir ) => {
1288+ const res = path . resolve ( dir , subdir ) ;
1289+ const s = ( await stat ( res ) ) ;
1290+ return s . isDirectory ( ) ? getDirectorySize ( res ) : ( s . size ) ;
1291+ } ) ) ;
1292+ return files . reduce ( ( a , f ) => a + f , 0 ) ;
1293+ } catch ( e ) {
1294+ console . log ( `Error ${ e } ` )
1295+ logger . debug ( 'Failed to get file or directory.' ) ;
1296+ return 0 ;
1297+ }
1298+ } ;
1299+
1300+ exports . fetchFolderSize = async ( dir ) => {
1301+ try {
1302+ if ( fs . existsSync ( dir ) ) {
1303+ return ( await getDirectorySize ( dir ) / 1024 / 1024 ) ;
1304+ }
1305+ return 0 ;
1306+ } catch ( error ) {
1307+ logger . debug ( `Failed to get directory size.` ) ;
1308+ return 0 ;
1309+ }
1310+ }
1311+
12811312exports . getVideoConfig = ( cypressConfig ) => {
12821313 let conf = {
12831314 video : true ,
0 commit comments