Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var sys = require('sys'), posix = require('posix');
- function requireDirAsync(dir) {
- var promise = new process.Promise();
- posix.readdir(dir).addCallback(function(files) {
- var numFiles = files.length;
- var result = {};
- files.forEach(function(filename) {
- var fullname = buildPath(dir, filename);
- var callback = function(obj) {
- result[filename] = obj;
- numFiles--;
- if(numFiles == 0) {
- promise.emitSuccess(result);
- }
- };
- posix.stat(fullname).addCallback(function(stat) {
- if(stat.isDirectory(fullname)) {
- requireDirAsync(fullname).addCallback(callback);
- } else if(isJSFile(filename)) {
- filename = removeExtension(filename);
- require.async(buildPath(dir, filename)).addCallback(callback);
- }
- });
- });
- });
- return promise;
- };
- this.requireDir = function(dir) {
- return requireDirAsync(dir).wait();
- };
- this.requireDir.async = requireDirAsync;
- // utilities
- function isJSFile(filename) {
- return filename.match(/\.js$/);
- };
- function buildPath(dir, file) {
- return dir + '/' + file;
- };
- function removeExtension(jsFilename) {
- return jsFilename.replace(/\.js$/, '');
- };
Add Comment
Please, Sign In to add comment