50 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var LoaderLoadingError = require("./LoaderLoadingError");
 | 
						|
 | 
						|
module.exports = function loadLoader(loader, callback) {
 | 
						|
	if(typeof System === "object" && typeof System.import === "function") {
 | 
						|
		System.import(loader.path).catch(callback).then(function(module) {
 | 
						|
			loader.normal = typeof module === "function" ? module : module.default;
 | 
						|
			loader.pitch = module.pitch;
 | 
						|
			loader.raw = module.raw;
 | 
						|
			if(typeof loader.normal !== "function" && typeof loader.pitch !== "function") {
 | 
						|
				return callback(new LoaderLoadingError(
 | 
						|
					"Module '" + loader.path + "' is not a loader (must have normal or pitch function)"
 | 
						|
				));
 | 
						|
			}
 | 
						|
			callback();
 | 
						|
		});
 | 
						|
	} else {
 | 
						|
		try {
 | 
						|
			var module = require(loader.path);
 | 
						|
		} catch(e) {
 | 
						|
			// it is possible for node to choke on a require if the FD descriptor
 | 
						|
			// limit has been reached. give it a chance to recover.
 | 
						|
			if(e instanceof Error && e.code === "EMFILE") {
 | 
						|
				var retry = loadLoader.bind(null, loader, callback);
 | 
						|
				if(typeof setImmediate === "function") {
 | 
						|
					// node >= 0.9.0
 | 
						|
					return setImmediate(retry);
 | 
						|
				} else {
 | 
						|
					// node < 0.9.0
 | 
						|
					return process.nextTick(retry);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return callback(e);
 | 
						|
		}
 | 
						|
		if(typeof module !== "function" && typeof module !== "object") {
 | 
						|
			return callback(new LoaderLoadingError(
 | 
						|
				"Module '" + loader.path + "' is not a loader (export function or es6 module)"
 | 
						|
			));
 | 
						|
		}
 | 
						|
		loader.normal = typeof module === "function" ? module : module.default;
 | 
						|
		loader.pitch = module.pitch;
 | 
						|
		loader.raw = module.raw;
 | 
						|
		if(typeof loader.normal !== "function" && typeof loader.pitch !== "function") {
 | 
						|
			return callback(new LoaderLoadingError(
 | 
						|
				"Module '" + loader.path + "' is not a loader (must have normal or pitch function)"
 | 
						|
			));
 | 
						|
		}
 | 
						|
		callback();
 | 
						|
	}
 | 
						|
};
 |