test-executor
Version:
Executes test scripts in the specified dirs.
63 lines (60 loc) • 1.87 kB
JavaScript
const fs = require('fs')
const path = require('path')
const readDir = (dir, options, callback, retrievedFiles, dirsCountObj) => {
if (!retrievedFiles) {
retrievedFiles = []
}
if (!dirsCountObj) {
dirsCountObj = { count: 1 }
}
fs.stat(dir, (error, stats) => {
if (error) {
callback(error)
} else {
if (stats.isDirectory()) {
fs.readdir(dir, options, (error, files) => {
if (error) {
callback(error)
} else {
let filesCount = 0
if (files.length === 0) {
dirsCountObj.count -= 1
if (dirsCountObj.count === 0) {
callback(null, retrievedFiles)
}
}
files.forEach(file => {
let fullPathFile = path.join(dir, file)
fs.stat(fullPathFile, (error, stats) => {
if (error) {
callback(error)
} else {
filesCount += 1
if (stats.isDirectory()) {
dirsCountObj.count += 1
if (filesCount === files.length) {
dirsCountObj.count -= 1
}
readDir(fullPathFile, options, callback, retrievedFiles, dirsCountObj)
} else if (stats.isFile()) {
retrievedFiles.push(fullPathFile)
if (filesCount === files.length) {
dirsCountObj.count -= 1
if (dirsCountObj.count === 0) {
callback(null, retrievedFiles)
}
}
}
}
})
})
}
})
} else {
retrievedFiles.push(dir)
callback(null, retrievedFiles)
}
}
})
}
module.exports = readDir