react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / resolve / lib / sync.js
80684 viewsvar core = require('./core');1var fs = require('fs');2var path = require('path');3var caller = require('./caller.js');4var nodeModulesPaths = require('./node-modules-paths.js');56module.exports = function (x, opts) {7if (!opts) opts = {};8var isFile = opts.isFile || function (file) {9try { var stat = fs.statSync(file) }10catch (err) { if (err && err.code === 'ENOENT') return false }11return stat.isFile() || stat.isFIFO();12};13var readFileSync = opts.readFileSync || fs.readFileSync;1415var extensions = opts.extensions || [ '.js' ];16var y = opts.basedir || path.dirname(caller());1718opts.paths = opts.paths || [];1920if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[\\\/])/.test(x)) {21var res = path.resolve(y, x);22if (x === '..') res += '/';23var m = loadAsFileSync(res) || loadAsDirectorySync(res);24if (m) return m;25} else {26var n = loadNodeModulesSync(x, y);27if (n) return n;28}2930if (core[x]) return x;3132throw new Error("Cannot find module '" + x + "' from '" + y + "'");3334function loadAsFileSync (x) {35if (isFile(x)) {36return x;37}3839for (var i = 0; i < extensions.length; i++) {40var file = x + extensions[i];41if (isFile(file)) {42return file;43}44}45}4647function loadAsDirectorySync (x) {48var pkgfile = path.join(x, '/package.json');49if (isFile(pkgfile)) {50var body = readFileSync(pkgfile, 'utf8');51try {52var pkg = JSON.parse(body);53if (opts.packageFilter) {54pkg = opts.packageFilter(pkg, x);55}5657if (pkg.main) {58var m = loadAsFileSync(path.resolve(x, pkg.main));59if (m) return m;60var n = loadAsDirectorySync(path.resolve(x, pkg.main));61if (n) return n;62}63}64catch (err) {}65}6667return loadAsFileSync(path.join( x, '/index'));68}6970function loadNodeModulesSync (x, start) {71var dirs = nodeModulesPaths(start, opts);72for (var i = 0; i < dirs.length; i++) {73var dir = dirs[i];74var m = loadAsFileSync(path.join( dir, '/', x));75if (m) return m;76var n = loadAsDirectorySync(path.join( dir, '/', x ));77if (n) return n;78}79}80};818283