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