requisite
Version:
A cosmic javascript bundler.
108 lines (95 loc) • 3.17 kB
JavaScript
// Generated by CoffeeScript 1.10.0
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, error;
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 = {};
return function(requiredAs, opts) {
var absolutePath, base, basePath, cached, err, extension, 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);
normalizedPath = normalizePath(absolutePath, basePath);
relativePath = normalizePath(absolutePath, cwd);
requireAs = normalizedPath.replace(extension, '').replace(/^node_modules\//, '').replace(/\/index$/, '');
if (!/^node_modules/.test(normalizedPath)) {
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