51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* global __resourceQuery */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var urlBase = decodeURIComponent(__resourceQuery.slice(1));
 | |
| 
 | |
| /**
 | |
|  * @param {{ data: string, onError: (err: Error) => void, active: boolean, module: module }} options options
 | |
|  * @returns {() => void} function to destroy response
 | |
|  */
 | |
| exports.keepAlive = function (options) {
 | |
| 	var data = options.data;
 | |
| 	var onError = options.onError;
 | |
| 	var active = options.active;
 | |
| 	var module = options.module;
 | |
| 	/** @type {import("http").IncomingMessage} */
 | |
| 	var response;
 | |
| 	var request = (
 | |
| 		urlBase.startsWith("https") ? require("https") : require("http")
 | |
| 	).request(
 | |
| 		urlBase + data,
 | |
| 		{
 | |
| 			agent: false,
 | |
| 			headers: { accept: "text/event-stream" }
 | |
| 		},
 | |
| 		function (res) {
 | |
| 			response = res;
 | |
| 			response.on("error", errorHandler);
 | |
| 			if (!active && !module.hot) {
 | |
| 				console.log(
 | |
| 					"Hot Module Replacement is not enabled. Waiting for process restart..."
 | |
| 				);
 | |
| 			}
 | |
| 		}
 | |
| 	);
 | |
| 
 | |
| 	/**
 | |
| 	 * @param {Error} err error
 | |
| 	 */
 | |
| 	function errorHandler(err) {
 | |
| 		err.message =
 | |
| 			"Problem communicating active modules to the server: " + err.message;
 | |
| 		onError(err);
 | |
| 	}
 | |
| 	request.on("error", errorHandler);
 | |
| 	request.end();
 | |
| 	return function () {
 | |
| 		response.destroy();
 | |
| 	};
 | |
| };
 |