67 lines
1.4 KiB
JavaScript
67 lines
1.4 KiB
JavaScript
var path = require('path');
|
|
|
|
var extension = require('./lib/extension');
|
|
var normalize = require('./lib/normalize');
|
|
var register = require('./lib/register');
|
|
|
|
exports.prepare = function(extensions, filepath, cwd, nothrow) {
|
|
var config, usedExtension, err, option, attempt, error;
|
|
var attempts = [];
|
|
var onlyErrors = true;
|
|
var exts = extension(filepath);
|
|
|
|
if (exts) {
|
|
exts.some(function(ext) {
|
|
usedExtension = ext;
|
|
config = normalize(extensions[ext]);
|
|
return !!config;
|
|
});
|
|
}
|
|
|
|
if (Object.keys(require.extensions).indexOf(usedExtension) !== -1) {
|
|
return true;
|
|
}
|
|
|
|
if (!config) {
|
|
if (nothrow) {
|
|
return;
|
|
}
|
|
|
|
throw new Error('No module loader found for "' + usedExtension + '".');
|
|
}
|
|
|
|
if (!cwd) {
|
|
cwd = path.dirname(path.resolve(filepath));
|
|
}
|
|
if (!Array.isArray(config)) {
|
|
config = [config];
|
|
}
|
|
|
|
for (var i in config) {
|
|
option = config[i];
|
|
attempt = register(cwd, option.module, option.register);
|
|
error = (attempt instanceof Error) ? attempt : null;
|
|
if (error) {
|
|
attempt = null;
|
|
}
|
|
attempts.push({
|
|
moduleName: option.module,
|
|
module: attempt,
|
|
error: error,
|
|
});
|
|
if (!error) {
|
|
onlyErrors = false;
|
|
break;
|
|
}
|
|
}
|
|
if (onlyErrors) {
|
|
err = new Error('Unable to use specified module loaders for "' + usedExtension + '".');
|
|
err.failures = attempts;
|
|
if (nothrow) {
|
|
return err;
|
|
}
|
|
|
|
throw err;
|
|
}
|
|
return attempts;
|
|
};
|