ncjsm
Version:
CJS (Node.js) style modules resolver
41 lines (34 loc) • 1.03 kB
JavaScript
// Sync module resolver
;
const { resolve } = require("path")
, PassThru = require("../utils/pass-thru")
, getResolver = require("../lib/get-node-resolver");
const { statSync: stat, readFileSync: readFile, realpathSync: realpath } = require("fs");
const { parse } = JSON;
const resolver = getResolver(
targetPath => {
let stats;
targetPath = resolve(targetPath);
try {
stats = stat(targetPath);
} catch (e) {
if (e.code === "ENOENT") return new PassThru(null);
throw e;
}
if (stats.isFile()) return new PassThru({ targetPath, realPath: realpath(targetPath) });
return new PassThru(null);
},
path => {
let data, result;
try {
data = readFile(resolve(path, "package.json"));
} catch (e) {
if (e.code === "ENOENT") return new PassThru(null);
throw e;
}
try { result = parse(data).main; }
catch (e) { result = null; }
return new PassThru(result);
}
);
module.exports = function (dir, path, options = {}) { return resolver(dir, path, options).value; };