rmdir.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const noop = require('./noop');
  2. const parallel = require('./parallel');
  3. const fs = require('fs');
  4. const path = require('path');
  5. exports = function(p, cb) {
  6. cb = cb || noop;
  7. p = path.resolve(p);
  8. fs.lstat(p, function(err, stat) {
  9. if (err) return cb(err);
  10. const isDir = stat.isDirectory();
  11. if (!isDir) {
  12. return fs.unlink(p, function(err) {
  13. return err ? cb(err) : cb();
  14. });
  15. }
  16. fs.readdir(p, function(err, files) {
  17. if (err) return cb(err);
  18. const len = files.length;
  19. const cbs = [];
  20. for (let i = 0; i < len; i++) {
  21. cbs.push(
  22. (function(file) {
  23. return function(cb) {
  24. exports(file, cb);
  25. };
  26. })(path.resolve(p, files[i]))
  27. );
  28. }
  29. parallel(cbs, function(err) {
  30. if (err) return cb(err);
  31. fs.rmdir(p, function(err) {
  32. return err ? cb(err) : cb();
  33. });
  34. });
  35. });
  36. });
  37. };
  38. module.exports = exports;