diff --git a/src/dev-server/index.ts b/src/dev-server/index.ts index 54f2b46f4e9..a051c35fe89 100644 --- a/src/dev-server/index.ts +++ b/src/dev-server/index.ts @@ -143,36 +143,38 @@ function startServer( } }; - const serverError = (msg: DevServerMessage) => { + const serverError = async (msg: DevServerMessage) => { if (hasStarted) { logger.error(msg.error.message + ' ' + msg.error.stack); } else { - close(); + await close(); reject(msg.error.message); } }; const requestBuildResults = () => { // we received a request to send up the latest build results - if (lastBuildResults != null) { - // we do have build results, so let's send them to the child process - const msg: DevServerMessage = { - buildResults: { ...lastBuildResults }, - isActivelyBuilding: isActivelyBuilding, - }; - - // but don't send any previous live reload data - delete msg.buildResults.hmr; - sendToWorker(msg); - } else { - sendToWorker({ - isActivelyBuilding: true, - }); + if (sendToWorker) { + if (lastBuildResults != null) { + // we do have build results, so let's send them to the child process + const msg: DevServerMessage = { + buildResults: { ...lastBuildResults }, + isActivelyBuilding: isActivelyBuilding, + }; + + // but don't send any previous live reload data + delete msg.buildResults.hmr; + sendToWorker(msg); + } else { + sendToWorker({ + isActivelyBuilding: true, + }); + } } }; const compilerRequest = async (compilerRequestPath: string) => { - if (watcher) { + if (watcher && watcher.request && sendToWorker) { const compilerRequestResults = await watcher.request({ path: compilerRequestPath }); sendToWorker({ compilerRequestResults }); } @@ -193,21 +195,28 @@ function startServer( requestLog(msg); } else if (msg.error) { serverError(msg); + } else { + logger.debug(`server msg not handled: ${JSON.stringify(msg)}`); } } catch (e) { logger.error('receiveFromWorker: ' + e); } }; - if (watcher) { - removeWatcher = watcher.on(emit); - } + try { + if (watcher) { + removeWatcher = watcher.on(emit); + } - sendToWorker = initServerProcess(receiveFromWorker); + sendToWorker = initServerProcess(receiveFromWorker); - sendToWorker({ - startServer: devServerConfig, - }); + sendToWorker({ + startServer: devServerConfig, + }); + } catch (e) { + close(); + reject(e); + } } export { DevServer, StencilDevServerConfig as DevServerConfig, Logger }; diff --git a/src/dev-server/server-worker-main.ts b/src/dev-server/server-worker-main.ts index d416641ff19..56f7c9d89b2 100644 --- a/src/dev-server/server-worker-main.ts +++ b/src/dev-server/server-worker-main.ts @@ -22,6 +22,8 @@ export function initServerProcessWorkerProxy(sendToMain: (msg: d.DevServerMessag // get a message from main to send to the worker if (serverProcess) { serverProcess.send(msg); + } else if (msg.closeServer) { + sendToMain({ serverClosed: true }); } };