mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
/* global __resourceQuery */
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
if (typeof EventSource !== "function") {
 | 
						|
	throw new Error(
 | 
						|
		"Environment doesn't support lazy compilation (requires EventSource)"
 | 
						|
	);
 | 
						|
}
 | 
						|
 | 
						|
var urlBase = decodeURIComponent(__resourceQuery.slice(1));
 | 
						|
var activeEventSource;
 | 
						|
var activeKeys = new Map();
 | 
						|
var errorHandlers = new Set();
 | 
						|
 | 
						|
var updateEventSource = function updateEventSource() {
 | 
						|
	if (activeEventSource) activeEventSource.close();
 | 
						|
	if (activeKeys.size) {
 | 
						|
		activeEventSource = new EventSource(
 | 
						|
			urlBase + Array.from(activeKeys.keys()).join("@")
 | 
						|
		);
 | 
						|
		activeEventSource.onerror = function (event) {
 | 
						|
			errorHandlers.forEach(function (onError) {
 | 
						|
				onError(
 | 
						|
					new Error(
 | 
						|
						"Problem communicating active modules to the server: " +
 | 
						|
							event.message +
 | 
						|
							" " +
 | 
						|
							event.filename +
 | 
						|
							":" +
 | 
						|
							event.lineno +
 | 
						|
							":" +
 | 
						|
							event.colno +
 | 
						|
							" " +
 | 
						|
							event.error
 | 
						|
					)
 | 
						|
				);
 | 
						|
			});
 | 
						|
		};
 | 
						|
	} else {
 | 
						|
		activeEventSource = undefined;
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
exports.keepAlive = function (options) {
 | 
						|
	var data = options.data;
 | 
						|
	var onError = options.onError;
 | 
						|
	var active = options.active;
 | 
						|
	var module = options.module;
 | 
						|
	errorHandlers.add(onError);
 | 
						|
	var value = activeKeys.get(data) || 0;
 | 
						|
	activeKeys.set(data, value + 1);
 | 
						|
	if (value === 0) {
 | 
						|
		updateEventSource();
 | 
						|
	}
 | 
						|
	if (!active && !module.hot) {
 | 
						|
		console.log(
 | 
						|
			"Hot Module Replacement is not enabled. Waiting for process restart..."
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
	return function () {
 | 
						|
		errorHandlers.delete(onError);
 | 
						|
		setTimeout(function () {
 | 
						|
			var value = activeKeys.get(data);
 | 
						|
			if (value === 1) {
 | 
						|
				activeKeys.delete(data);
 | 
						|
				updateEventSource();
 | 
						|
			} else {
 | 
						|
				activeKeys.set(data, value - 1);
 | 
						|
			}
 | 
						|
		}, 1000);
 | 
						|
	};
 | 
						|
};
 |