| const { join, resolve } = require('path'); |
| const { readdir, stat } = require('fs'); |
| const { promisify } = require('util'); |
| |
| const toStats = promisify(stat); |
| const toRead = promisify(readdir); |
| |
| module.exports = async function list(dir, callback, pre='') { |
| dir = resolve('.', dir); |
| await toRead(dir).then(arr => { |
| return Promise.all( |
| arr.map(str => { |
| let abs = join(dir, str); |
| return toStats(abs).then(stats => { |
| return stats.isDirectory() |
| ? list(abs, callback, join(pre, str)) |
| : callback(join(pre, str), abs, stats) |
| }); |
| }) |
| ); |
| }); |
| } |