ae-biu
Version:
Born For AE, Born To Do
54 lines (48 loc) • 1.3 kB
JavaScript
// @flow
import fs from 'fs'
import path from 'path'
import { promisify } from 'util'
import minimatch from 'minimatch'
export const readDirRecursive = async (dir: string, ext: ?string): Promise<Array<string>> => {
let files = []
const list = await promisify(fs.readdir)(dir)
await Promise.all(list.map(async (file) => {
file = path.resolve(dir, file)
const stat = await promisify(fs.stat)(file)
if (stat && stat.isDirectory()) {
const temp = await readDirRecursive(file, ext)
files = files.concat(temp)
} else {
if (ext) {
if (minimatch(file, ext, {})) {
files.push(file)
}
} else {
files.push(file)
}
}
}))
return files
}
export const readDirRecursiveSync = (dir: string, ext: ?string): Array<string> => {
let files = []
const list = fs.readdirSync(dir)
list.map(file => {
file = path.resolve(dir, file)
const stat = fs.statSync(file)
if (stat && stat.isDirectory()) {
const temp = readDirRecursiveSync(file, ext)
files = [...files, ...temp]
} else {
if (ext) {
if (minimatch(file, ext, {matchBase: true})) {
files.push(file)
}
} else {
files.push(file)
}
}
})
return files
}
export default readDirRecursive