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