UNPKG

requisite

Version:
127 lines (114 loc) 3.65 kB
// Generated by CoffeeScript 1.12.4 var NODE_PATHS, bresolve, builtins, cwd, ext, extensions, normalizePath, os, path, ref, resolve; bresolve = (require('browser-resolve')).sync; os = require('os'); path = require('path'); builtins = require('./builtins'); normalizePath = require('./utils').normalizePath; extensions = (function() { var results; results = []; for (ext in require('./compilers')) { results.push('.' + ext); } return results; })(); NODE_PATHS = ((ref = process.env.NODE_PATH) != null ? ref : '').split(':'); NODE_PATHS.push(process.cwd()); cwd = process.cwd(); resolve = function(pkg, opts) { var absolutePath, err; try { return absolutePath = bresolve(pkg, { filename: path.join(opts.basedir, 'ENOENT'), extensions: opts.extensions }); } catch (error) { err = error; return null; } }; module.exports = function() { var cache; cache = (function() { var _cache; _cache = {}; return function(resolveFrom, requiredAs, mod) { var key; if (requiredAs.charAt(0) === '.') { key = resolveFrom + requiredAs; } else { key = requiredAs; } if (mod != null) { return _cache[key] = mod; } else { return _cache[key]; } }; })(); return function(requiredAs, opts) { var absolutePath, base, basePath, cached, err, extension, extensionRe, match, nextPath, normalizedPath, paths, ref1, ref2, relativePath, requireAs, requiredBy, resolveFrom; if (opts == null) { opts = {}; } if (opts.cache != null) { cache(opts.resolveFrom, requiredAs, opts); return; } paths = NODE_PATHS.concat((ref1 = opts.paths) != null ? ref1 : []); if (opts.extensions == null) { opts.extensions = extensions; } if ((requiredBy = opts.requiredBy) != null) { resolveFrom = path.dirname(requiredBy); basePath = opts.basePath; } else { base = (ref2 = opts.basePath) != null ? ref2 : path.dirname(path.resolve(requiredAs)); basePath = resolveFrom = path.resolve(base); requiredAs = './' + (path.resolve(requiredAs)).replace(basePath, ''); } if ((cached = cache(resolveFrom, requiredAs)) != null) { return cached; } if (builtins[requiredAs] != null) { absolutePath = builtins[requiredAs]; } else { absolutePath = resolve(requiredAs, { basedir: resolveFrom, extensions: opts.extensions }); while ((absolutePath == null) && ((nextPath = paths.shift()) != null)) { absolutePath = resolve(requiredAs, { basedir: nextPath, extensions: opts.extensions }); } } if (absolutePath == null) { err = "Unable to resolve module '" + requiredAs + "' required from '" + requiredBy + "'"; throw new Error(err); } extension = path.extname(absolutePath); extensionRe = new RegExp(extension + '$'); normalizedPath = normalizePath(absolutePath, basePath); relativePath = normalizePath(absolutePath, cwd); requireAs = normalizedPath.replace(extensionRe, '').replace(/\/index$/, ''); if ((match = /(.*node_modules\/)([\/._-\w])+$/.exec(requireAs))) { requireAs = requireAs.replace(match[1], ''); } else { requireAs = './' + requireAs; } return cache(resolveFrom, requiredAs, { absolutePath: absolutePath, basePath: basePath, extension: extension, normalizedPath: normalizedPath, relativePath: relativePath, requireAs: requireAs, requiredAs: requiredAs, requiredBy: requiredBy }); }; }; //# sourceMappingURL=resolver.js.map