requisite
Version:
A cosmic javascript bundler.
102 lines (93 loc) • 3 kB
JavaScript
// Generated by CoffeeScript 1.7.1
var NODE_PATHS, browserResolve, ext, extensions, os, path, resolve, _ref;
browserResolve = require('browser-resolve-sync');
os = require('os');
path = require('path');
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(':');
resolve = function(pkg, opts) {
return browserResolve(pkg, {
filename: path.join(opts.basedir, 'ENOENT'),
extensions: opts.extensions
});
};
module.exports = function() {
var cache;
cache = {};
return function(requiredAs, options) {
var absolutePath, basePath, cached, err, extension, nextPath, normalizedPath, paths, requireAs, requiredBy, resolveFrom, start, _ref1, _ref2, _ref3;
if (options == null) {
options = {};
}
if (options.cache != null) {
cache[options.resolveFrom + requiredAs] = options;
return;
}
paths = NODE_PATHS.concat((_ref1 = options.paths) != null ? _ref1 : []);
if (options.extensions == null) {
options.extensions = extensions;
}
if ((requiredBy = options.requiredBy) != null) {
resolveFrom = path.dirname(requiredBy);
basePath = options.basePath;
} else {
resolveFrom = (_ref2 = options.basePath) != null ? _ref2 : path.dirname(path.resolve(requiredAs));
basePath = resolveFrom;
requiredAs = './' + path.basename(requiredAs);
}
if ((cached = cache[resolveFrom + requiredAs]) != null) {
return cached;
}
try {
absolutePath = resolve(requiredAs, {
basedir: resolveFrom,
extensions: options.extensions
});
} catch (_error) {
err = _error;
}
while ((absolutePath == null) && ((nextPath = paths.shift()) != null)) {
try {
absolutePath = resolve(requiredAs, {
basedir: nextPath,
extensions: options.extensions
});
} catch (_error) {
err = _error;
}
}
if (absolutePath == null) {
throw err;
}
extension = path.extname(absolutePath);
if ((absolutePath.indexOf(basePath)) !== -1) {
normalizedPath = absolutePath.replace(basePath, '');
} else {
start = absolutePath.indexOf('node_modules');
normalizedPath = absolutePath.substring(start, absolutePath.length);
}
if (os.platform() === 'win32') {
normalizedPath = normalizedPath.replace(/^\\+/, '');
} else {
normalizedPath = normalizedPath.replace(/^\/+/, '');
}
requireAs = (_ref3 = options.requireAs) != null ? _ref3 : normalizedPath.replace(extension, '');
return cache[resolveFrom + requiredAs] = {
absolutePath: absolutePath,
basePath: basePath,
extension: extension,
normalizedPath: normalizedPath,
requireAs: requireAs,
requiredAs: requiredAs,
requiredBy: requiredBy
};
};
};
//# sourceMappingURL=resolver.map