lib/index.js
function walk(files, cb, list) {
    var i = 0;
    list = list || [];

    function check(file, cb) {
      fs.stat(file, function onStat(err, stats) {
        if(err) return cb(err);
        if(stats.isFile() && !/\.js$/.test(file)) {
          log.warning('ignoring %s', file);
          return cb();
        }
        if(stats.isFile()) {
          list.push(file);
          return cb(null, list);
        }else{
          return fs.readdir(file, function onRead(err, files) {
            if(err) return cb(err);
            if(!files.length) return cb();
            files = files.map(function(nm) {
              return path.join(file, nm);
            })
            //files.forEach()
            return walk(files, cb, list);
          })
        }
      });
    }

    check(files[i], function onCheck(err, list) {
      if(err) return cb(err);
      if(i === files.length - 1) {
        return cb(null, list);
      }
      i++;
      check(files[i], onCheck);
    });
  }
function walk(files, cb, list) {
    var i = 0;
    list = list || [];

    function check(file, cb) {
      fs.stat(file, function onStat(err, stats) {
        if(err) return cb(err);
        if(stats.isFile() && !/\.js$/.test(file)) {
          log.warning('ignoring %s', file);
          return cb();
        }
        if(stats.isFile()) {
          list.push(file);
          return cb(null, list);
        }else{
          return fs.readdir(file, function onRead(err, files) {
            if(err) return cb(err);
            if(!files.length) return cb();
            files = files.map(function(nm) {
              return path.join(file, nm);
            })
            //files.forEach()
            return walk(files, cb, list);
          })
        }
      });
    }

    check(files[i], function onCheck(err, list) {
      if(err) return cb(err);
      if(i === files.length - 1) {
        return cb(null, list);
      }
      i++;
      check(files[i], onCheck);
    });
  }
function walk ( files , cb , list ) { var i = 0 ; list = list || [ ] ; function check ( file , cb ) { fs . stat ( file , function onStat ( err , stats ) { if ( err ) return cb ( err ) ; if ( stats . isFile ( ) && ! / \.js$ / . test ( file ) ) { log . warning ( 'ignoring %s' , file ) ; return cb ( ) ; } if ( stats . isFile ( ) ) { list . push ( file ) ; return cb ( null , list ) ; } else { return fs . readdir ( file , function onRead ( err , files ) { if ( err ) return cb ( err ) ; if ( ! files . length ) return cb ( ) ; files = files . map ( function ( nm ) { return path . join ( file , nm ) ; } ) //files.forEach() return walk ( files , cb , list ) ; } ) } } ) ; } check ( files [ i ] , function onCheck ( err , list ) { if ( err ) return cb ( err ) ; if ( i === files . length - 1 ) { return cb ( null , list ) ; } i ++ ; check ( files [ i ] , onCheck ) ; } ) ; }
Walk the file list array.
Walk the file list array .