You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					60 lines
				
				1.3 KiB
			
		
		
			
		
	
	
					60 lines
				
				1.3 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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;
							 | 
						||
| 
								 | 
							
								};
							 |