From ab1cda612cf6d427bffb66d5674a3673eb958e50 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Fri, 8 Apr 2022 02:10:22 +0200 Subject: feat(service-preload): Embed service-inject MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Embed the service-inject script into the service-preload script to avoid having to load it manually and reduce IPC communication when a service loads. Signed-off-by: Kristóf Marussy --- scripts/build.js | 9 ++---- scripts/watch.js | 90 +++++++++++++++++++++++--------------------------------- 2 files changed, 39 insertions(+), 60 deletions(-) (limited to 'scripts') diff --git a/scripts/build.js b/scripts/build.js index 66a1506..eb0e8a3 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -37,12 +37,9 @@ function buildAll() { Promise.all([buildServiceShared, buildShared]).then(() => buildPackageEsbuild('main'), ), - buildServiceShared.then(() => - Promise.all([ - buildPackageEsbuild('service-inject'), - buildPackageEsbuild('service-preload'), - ]), - ), + buildServiceShared + .then(() => buildPackageEsbuild('service-inject')) + .then(() => buildPackageEsbuild('service-preload')), buildShared.then(() => Promise.all([ buildPackageEsbuild('preload'), diff --git a/scripts/watch.js b/scripts/watch.js index 9cd65c8..3c3a8fd 100644 --- a/scripts/watch.js +++ b/scripts/watch.js @@ -1,6 +1,5 @@ import { spawn } from 'node:child_process'; import path from 'node:path'; -import { exit, kill } from 'node:process'; import { watch } from 'chokidar'; import electronPath from 'electron'; @@ -21,6 +20,12 @@ const serviceSharedModule = path.join( '../packages/service-shared/dist/index.mjs', ); +/** @type {string} */ +const serviceInjectModule = path.join( + thisDir, + '../packages/service-inject/dist/index.js', +); + /** @type {RegExp[]} */ const stderrIgnorePatterns = [ // warning about devtools extension @@ -110,50 +115,6 @@ async function setupEsbuildWatcher(packageName, extraPaths, callback) { }); } -/** - * @param {string} packageName - * @returns {Promise} - */ -async function setupDevServer(packageName) { - const viteDevServer = await createServer({ - build: { - watch: { - skipWrite: true, - clearScreen: false, - }, - }, - configFile: path.join(thisDir, `../packages/${packageName}/vite.config.js`), - }); - await viteDevServer.listen(); - return viteDevServer; -} - -/** - * @param {(event: import('vite').HMRPayload) => void} sendEvent - * @returns {Promise} - */ -function setupPreloadPackageWatcher(sendEvent) { - return setupEsbuildWatcher('preload', [sharedModule], () => { - sendEvent({ - type: 'full-reload', - }); - }); -} - -/** - * @param {string} packageName - * @param {(event: import('vite').HMRPayload) => void} sendEvent - * @returns {Promise} - */ -function setupServicePackageWatcher(packageName, sendEvent) { - return setupEsbuildWatcher(packageName, [serviceSharedModule], () => { - sendEvent({ - type: 'custom', - event: 'sophie:reload-services', - }); - }); -} - /** * @param {import('vite').ViteDevServer} viteDevServer * @returns {Promise} @@ -280,7 +241,16 @@ async function setupDevEnvironment() { * @returns {Promise} */ async function startDevServer() { - viteDevServer = await setupDevServer('renderer'); + viteDevServer = await createServer({ + build: { + watch: { + skipWrite: true, + clearScreen: false, + }, + }, + configFile: path.join(thisDir, `../packages/renderer/vite.config.js`), + }); + await viteDevServer.listen(); } /** @@ -289,7 +259,11 @@ async function setupDevEnvironment() { async function watchRendererPackages() { await setupEsbuildWatcher('shared'); await Promise.all([ - setupPreloadPackageWatcher(sendEvent), + setupEsbuildWatcher('preload', [sharedModule], () => + sendEvent({ + type: 'full-reload', + }), + ), startDevServer(), ]); } @@ -299,21 +273,29 @@ async function setupDevEnvironment() { */ async function watchServicePackages() { await setupEsbuildWatcher('service-shared'); - await Promise.all([ - setupServicePackageWatcher('service-inject', sendEvent), - setupServicePackageWatcher('service-preload', sendEvent), - ]); + await setupEsbuildWatcher('service-inject', [serviceSharedModule]); + await setupEsbuildWatcher( + 'service-preload', + [serviceSharedModule, serviceInjectModule], + () => + sendEvent({ + type: 'custom', + event: 'sophie:reload-services', + }), + ); } - await Promise.all([watchRendererPackages(), watchServicePackages()]); + await Promise.all([ + watchRendererPackages(), + watchServicePackages(), + setupTranslationsWatcher(sendEvent), + ]); if (viteDevServer === undefined) { console.error('Failed to create vite dev server'); return; } - setupTranslationsWatcher(sendEvent); - console.log('\uD83C\uDF80 Sophie is starting up'); await setupMainPackageWatcher(viteDevServer); } -- cgit v1.2.3-54-g00ecf