chainscript
Version:
Client for chainscript.io
62 lines (44 loc) • 1.42 kB
JavaScript
;
exports.__esModule = true;
exports['default'] = walkDir;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _promisify = require('./promisify');
var _promisify2 = _interopRequireDefault(_promisify);
var readdir = _promisify2['default'](_fs2['default'].readdir);
var lstat = _promisify2['default'](_fs2['default'].lstat);
function walkDir(dir, filter, fileCb) {
return readdir(dir).then(function (fileList) {
var files = fileList.map(function (f) {
return _path.join(dir, f);
});
files = filter ? filter(files) : files;
var next = function next() {
var _again = true;
_function: while (_again) {
file = undefined;
_again = false;
if (files.length < 1) {
return true;
}
var file = files.shift();
if (!file) {
_again = true;
continue _function;
}
return lstat(file).then(function (stats) {
if (stats.isDirectory()) {
return walkDir(file, filter, fileCb).then(next);
} else if (!stats.isSymbolicLink() && fileCb) {
return fileCb(file).then(next);
}
return next();
});
}
};
return next();
});
}
module.exports = exports['default'];