1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- const path = require('path');
- const extension = require('./lib/extension');
- const normalize = require('./lib/normalize');
- const register = require('./lib/register');
- exports.prepare = function (extensions, filepath, cwd, nothrow) {
- var option, attempt;
- var attempts = [];
- var err;
- var onlyErrors = false;
- var ext = extension(filepath);
- if (Object.keys(require.extensions).indexOf(ext) !== -1) {
- return true;
- }
- var config = normalize(extensions[ext]);
- if (!config) {
- if (nothrow) {
- return;
- } else {
- throw new Error('No module loader found for "'+ext+'".');
- }
- }
- 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;
- } else {
- onlyErrors = true;
- }
- }
- if (onlyErrors) {
- err = new Error('Unable to use specified module loaders for "'+ext+'".');
- err.failures = attempts;
- if (nothrow) {
- return err;
- } else {
- throw err;
- }
- }
- return attempts;
- };
|