You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

23 lines
593 B

1 month ago
  1. const { join, resolve } = require('path');
  2. const { readdir, stat } = require('fs');
  3. const { promisify } = require('util');
  4. const toStats = promisify(stat);
  5. const toRead = promisify(readdir);
  6. async function totalist(dir, callback, pre='') {
  7. dir = resolve('.', dir);
  8. await toRead(dir).then(arr => {
  9. return Promise.all(
  10. arr.map(str => {
  11. let abs = join(dir, str);
  12. return toStats(abs).then(stats => {
  13. return stats.isDirectory()
  14. ? totalist(abs, callback, join(pre, str))
  15. : callback(join(pre, str), abs, stats)
  16. });
  17. })
  18. );
  19. });
  20. }
  21. exports.totalist = totalist;