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; };