import {exec} from 'child_process' import fs from 'fs-extra' function filewalker (dir, done) { let results = [] fs.readdir(dir, function (err, list) { if (err) return done(err) let pending = list.length if (!pending) return done(null, results) list.forEach(function (file) { file = path.resolve(dir, file) fs.stat(file, function (err, stat) { if (err) return done(err) // If directory, execute a recursive call if (stat && stat.isDirectory()) { filewalker(file, function (err, res) { if (err) return done(err) results = results.concat(res) if (!--pending) done(null, results) }) } else { results.push(file) if (!--pending) done(null, results) } }) }) }) } function getFiles (dir) { return new Promise((resolve, reject) => { filewalker(dir, (err, files) => { if (err) return reject(err) resolve(files) }) }) } function promiseExec (cmd, opts) { return new Promise((resolve, reject) => { exec(cmd, opts, function (err, stdout, stderr) { if (err) return reject(err) resolve({stdout, stderr}) }) }) } function askAsync (rl, q) { return new Promise((resolve, reject) => { rl.question(q, resolve) }) } let a = {getFiles, promiseExec, askAsync} export default a