UNPKG

2.16 kBJavaScriptView Raw
1/**
2 * Module dependencies
3 */
4
5var basename = require('path').basename;
6
7function DirectoryDefaultFileResolveSelfPlugin() {}
8module.exports = DirectoryDefaultFileResolveSelfPlugin;
9
10DirectoryDefaultFileResolveSelfPlugin.prototype.apply = function(resolver) {
11 resolver.plugin("directory", function(request, callback) {
12 var fs = this.fileSystem;
13 var topLevelCallback = callback;
14 var directory = this.join(request.path, request.request);
15 fs.stat(directory, function(err, stat) {
16 if(err || !stat) {
17 if(callback.log) callback.log(directory + " doesn't exist (directory default file)");
18 return callback();
19 }
20 if(!stat.isDirectory()) {
21 if(callback.log) callback.log(directory + " is not a directory (directory default file)");
22 return callback();
23 }
24 // only try to load files that don't have a package.json
25 fs.stat(this.join(directory, 'package.json'), function(err, packageStat) {
26 if (packageStat) return callback();
27
28 this.forEachBail([basename(directory)], function(file, callback) {
29 this.doResolve("file", {
30 path: directory,
31 query: request.query,
32 request: file
33 }, createInnerCallback(function(err, result) {
34 if(!err && result) return callback(result);
35 return callback();
36 }, topLevelCallback, "directory default file " + file));
37 }.bind(this), function(result) {
38 if(!result) return callback();
39 return callback(null, result);
40 });
41 }.bind(this));
42 }.bind(this));
43 });
44};
45
46function createInnerCallback(callback, options, message) {
47 var log = options.log;
48 if(!log) {
49 if(options.stack !== callback.stack) {
50 function callbackWrapper() {
51 return callback.apply(this, arguments);
52 }
53 callbackWrapper.stack = options.stack;
54 }
55 return callback;
56 }
57 function loggingCallbackWrapper() {
58 log(message);
59 for(var i = 0; i < theLog.length; i++)
60 log(" " + theLog[i]);
61 return callback.apply(this, arguments);
62 }
63 var theLog = [];
64 loggingCallbackWrapper.log = function writeLog(msg) {
65 theLog.push(msg);
66 };
67 loggingCallbackWrapper.stack = options.stack;
68 return loggingCallbackWrapper;
69}