requisite
Version:
A cosmic javascript bundler.
127 lines (114 loc) • 3.65 kB
JavaScript
// 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