code: function traverseDirectory(pathname, callback) {
  	pathname = pathname.replace(/\\/g, "/")
  	return new Promise(function(resolve, reject) {
  		fs.lstat(pathname, function(err, stat) {
  			if (err) reject(err)
  			if (stat.isDirectory()) {
  				fs.readdir(pathname, function(err, pathnames) {
  					if (err) reject(err)
  					var promises = []
  					for (var i = 0; i < pathnames.length; i++) {
  						pathnames[i] = path.join(pathname, pathnames[i])
  						promises.push(traverseDirectory(pathnames[i], callback))
  					}
  					callback(pathname, stat, pathnames)
  					resolve(Promise.all(promises))
  				})
  			}
  			else {
  				callback(pathname, stat)
  				resolve(pathname)
  			}
  		})
  	})
  }
docs: runner