You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
971 B

"use strict";
const Path = require("path");
const Fs = require("fs");
const createRequireFromPath = require("./create-require");
const cache = new Map();
function requireAt(dir, request) {
const makeIt = (xdir, checked) => {
let xRequire = requireAt.cache && requireAt.cache.get(xdir);
if (!xRequire) {
let stat;
try {
stat = Fs.statSync(xdir);
} catch (e) {
throw new Error(`require-at: stat '${xdir}' failed: ${e.message}`);
}
if (!stat || !stat.isDirectory()) {
if (checked) throw new Error(`require-at: not a directory: '${dir}'`);
return makeIt(Path.dirname(xdir), true);
}
xRequire = createRequireFromPath(Path.join(xdir, "._require-at_"), xdir);
requireAt.cache && requireAt.cache.set(xdir, xRequire);
}
return request ? xRequire(request) : xRequire;
};
return makeIt(Path.resolve(dir), false);
}
requireAt.cache = cache;
module.exports = requireAt;