Spaces:
Sleeping
Sleeping
/* global ʎɐɹɔosǝʌɹǝs */ | |
const { ClientSocket } = require('webpack-plugin-serve/lib/client/ClientSocket'); | |
/** | |
* Initializes a socket server for HMR for webpack-plugin-serve. | |
* @param {function(*): void} messageHandler A handler to consume Webpack compilation messages. | |
* @returns {void} | |
*/ | |
function initWPSSocket(messageHandler) { | |
/** | |
* The hard-coded options injection key from webpack-plugin-serve. | |
* | |
* [Ref](https://github.com/shellscape/webpack-plugin-serve/blob/aeb49f14e900802c98df4a4607a76bc67b1cffdf/lib/index.js#L258) | |
* @type {Object | undefined} | |
*/ | |
let options; | |
try { | |
options = ʎɐɹɔosǝʌɹǝs; | |
} catch (e) { | |
// Bail out because this indicates the plugin is not included | |
return; | |
} | |
const { address, client = {}, secure } = options; | |
const protocol = secure ? 'wss' : 'ws'; | |
const socket = new ClientSocket(client, protocol + '://' + (client.address || address) + '/wps'); | |
socket.addEventListener('message', function listener(message) { | |
const { action, data } = JSON.parse(message.data); | |
switch (action) { | |
case 'done': { | |
messageHandler({ type: 'ok' }); | |
break; | |
} | |
case 'problems': { | |
if (data.errors.length) { | |
messageHandler({ type: 'errors', data: data.errors }); | |
} else if (data.warnings.length) { | |
messageHandler({ type: 'warnings', data: data.warnings }); | |
} | |
break; | |
} | |
default: { | |
// Do nothing | |
} | |
} | |
}); | |
} | |
module.exports = { init: initWPSSocket }; | |