lazy-compilation-node.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. "use strict";
  2. /* global __resourceQuery */
  3. var urlBase = decodeURIComponent(__resourceQuery.slice(1));
  4. /**
  5. * @param {{ data: string, onError: (err: Error) => void, active: boolean, module: module }} options options
  6. * @returns {() => void} function to destroy response
  7. */
  8. exports.keepAlive = function (options) {
  9. var data = options.data;
  10. /**
  11. * @param {Error} err error
  12. */
  13. function errorHandler(err) {
  14. err.message =
  15. "Problem communicating active modules to the server: " + err.message;
  16. options.onError(err);
  17. }
  18. /** @type {Promise<import("http") | import("https")>} */
  19. var mod = require("./load-http")(urlBase.startsWith("https"));
  20. /** @type {import("http").ClientRequest} */
  21. var request;
  22. /** @type {import("http").IncomingMessage} */
  23. var response;
  24. mod.then(function (client) {
  25. request = client.request(
  26. urlBase + data,
  27. {
  28. agent: false,
  29. headers: { accept: "text/event-stream" }
  30. },
  31. function (res) {
  32. response = res;
  33. response.on("error", errorHandler);
  34. if (!options.active && !options.module.hot) {
  35. console.log(
  36. "Hot Module Replacement is not enabled. Waiting for process restart..."
  37. );
  38. }
  39. }
  40. );
  41. request.on("error", errorHandler);
  42. request.end();
  43. });
  44. return function () {
  45. if (response) {
  46. response.destroy();
  47. }
  48. };
  49. };
  50. /**
  51. * @param {string} value new url value
  52. */
  53. exports.setUrl = function (value) {
  54. urlBase = value;
  55. };