UNPKG

2 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
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 this.forEachBail([basename(directory)], function(file, callback) {
25 this.doResolve("file", {
26 path: directory,
27 query: request.query,
28 request: file
29 }, createInnerCallback(function(err, result) {
30 if(!err && result) return callback(result);
31 return callback();
32 }, topLevelCallback, "directory default file " + file));
33 }.bind(this), function(result) {
34 if(!result) return callback();
35 return callback(null, result);
36 });
37 }.bind(this));
38 });
39};
40
41function createInnerCallback(callback, options, message) {
42 var log = options.log;
43 if(!log) {
44 if(options.stack !== callback.stack) {
45 function callbackWrapper() {
46 return callback.apply(this, arguments);
47 }
48 callbackWrapper.stack = options.stack;
49 }
50 return callback;
51 }
52 function loggingCallbackWrapper() {
53 log(message);
54 for(var i = 0; i < theLog.length; i++)
55 log(" " + theLog[i]);
56 return callback.apply(this, arguments);
57 }
58 var theLog = [];
59 loggingCallbackWrapper.log = function writeLog(msg) {
60 theLog.push(msg);
61 };
62 loggingCallbackWrapper.stack = options.stack;
63 return loggingCallbackWrapper;
64}