70 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.5 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;
 | 
						|
};
 |