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.
74 lines
1.6 KiB
74 lines
1.6 KiB
/* 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); |
|
}; |
|
};
|
|
|