Guest User

Untitled

a guest
Apr 26th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. var sys = require('sys'), posix = require('posix');
  2.  
  3. function requireDirAsync(dir) {
  4. var promise = new process.Promise();
  5. posix.readdir(dir).addCallback(function(files) {
  6. var numFiles = files.length;
  7. var result = {};
  8.  
  9. files.forEach(function(filename) {
  10. var fullname = buildPath(dir, filename);
  11. var callback = function(obj) {
  12. result[filename] = obj;
  13. numFiles--;
  14. if(numFiles == 0) {
  15. promise.emitSuccess(result);
  16. }
  17. };
  18.  
  19. posix.stat(fullname).addCallback(function(stat) {
  20. if(stat.isDirectory(fullname)) {
  21. requireDirAsync(fullname).addCallback(callback);
  22. } else if(isJSFile(filename)) {
  23. filename = removeExtension(filename);
  24. require.async(buildPath(dir, filename)).addCallback(callback);
  25. }
  26. });
  27. });
  28. });
  29. return promise;
  30. };
  31.  
  32. this.requireDir = function(dir) {
  33. return requireDirAsync(dir).wait();
  34. };
  35. this.requireDir.async = requireDirAsync;
  36.  
  37. // utilities
  38. function isJSFile(filename) {
  39. return filename.match(/\.js$/);
  40. };
  41.  
  42. function buildPath(dir, file) {
  43. return dir + '/' + file;
  44. };
  45.  
  46. function removeExtension(jsFilename) {
  47. return jsFilename.replace(/\.js$/, '');
  48. };
Add Comment
Please, Sign In to add comment