Comparing version
{ | ||
"name": "require-at", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"main": "require-at.js", | ||
@@ -5,0 +5,0 @@ "description": "Call require pretending your are at another directory", |
@@ -13,8 +13,9 @@ "use strict"; | ||
Module._findPath = function (request, paths, isMain) { | ||
return request.endsWith(contextFname) ? request : | ||
orig_findPath.call(Module, request, paths, isMain); | ||
Module._findPath = function(request, paths, isMain) { | ||
return request.endsWith(contextFname) | ||
? request | ||
: orig_findPath.call(Module, request, paths, isMain); | ||
}; | ||
Module._extensions[contextExt] = function (module, filename) { | ||
Module._extensions[contextExt] = function(module, filename) { | ||
module._compile("module.exports = require;", filename); | ||
@@ -30,15 +31,33 @@ }; | ||
dir = Path.resolve(dir); | ||
if (!contextMap.has(dir)) { | ||
if (!Fs.existsSync(dir)) { | ||
throw new Error(`require-at: dir '${dir}' doesn't exist`); | ||
let dirChecked = false; | ||
const makeIt = () => { | ||
if (!contextMap.has(dir)) { | ||
let stat; | ||
try { | ||
stat = Fs.statSync(dir); | ||
} catch (e) { | ||
throw new Error(`require-at: stat '${dir}' failed: ${e.message}`); | ||
} | ||
if (!dirChecked && !stat.isDirectory()) { | ||
dirChecked = true; | ||
dir = Path.dirname(dir); | ||
return makeIt(); | ||
} | ||
xRequire = require(Path.join(dir, contextFname)); | ||
contextMap.set(dir, xRequire); | ||
} else { | ||
xRequire = contextMap.get(dir); | ||
} | ||
xRequire = require(Path.join(dir, contextFname)); | ||
contextMap.set(dir, xRequire); | ||
} else { | ||
xRequire = contextMap.get(dir); | ||
} | ||
return request ? xRequire(request) : xRequire; | ||
return request ? xRequire(request) : xRequire; | ||
}; | ||
return makeIt(); | ||
} | ||
module.exports = requireAt; |
4867
6.57%45
40.63%