aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-04-08 02:10:22 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-05-16 00:55:00 +0200
commitab1cda612cf6d427bffb66d5674a3673eb958e50 (patch)
treeaeb01a0b431ca850b75d276af745bde807851839 /scripts
parentfix(main): Do not show spurious abort error (diff)
downloadsophie-ab1cda612cf6d427bffb66d5674a3673eb958e50.tar.gz
sophie-ab1cda612cf6d427bffb66d5674a3673eb958e50.tar.zst
sophie-ab1cda612cf6d427bffb66d5674a3673eb958e50.zip
feat(service-preload): Embed service-inject
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 <kristof@marussy.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/build.js9
-rw-r--r--scripts/watch.js90
2 files changed, 39 insertions, 60 deletions
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() {
37 Promise.all([buildServiceShared, buildShared]).then(() => 37 Promise.all([buildServiceShared, buildShared]).then(() =>
38 buildPackageEsbuild('main'), 38 buildPackageEsbuild('main'),
39 ), 39 ),
40 buildServiceShared.then(() => 40 buildServiceShared
41 Promise.all([ 41 .then(() => buildPackageEsbuild('service-inject'))
42 buildPackageEsbuild('service-inject'), 42 .then(() => buildPackageEsbuild('service-preload')),
43 buildPackageEsbuild('service-preload'),
44 ]),
45 ),
46 buildShared.then(() => 43 buildShared.then(() =>
47 Promise.all([ 44 Promise.all([
48 buildPackageEsbuild('preload'), 45 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 @@
1import { spawn } from 'node:child_process'; 1import { spawn } from 'node:child_process';
2import path from 'node:path'; 2import path from 'node:path';
3import { exit, kill } from 'node:process';
4 3
5import { watch } from 'chokidar'; 4import { watch } from 'chokidar';
6import electronPath from 'electron'; 5import electronPath from 'electron';
@@ -21,6 +20,12 @@ const serviceSharedModule = path.join(
21 '../packages/service-shared/dist/index.mjs', 20 '../packages/service-shared/dist/index.mjs',
22); 21);
23 22
23/** @type {string} */
24const serviceInjectModule = path.join(
25 thisDir,
26 '../packages/service-inject/dist/index.js',
27);
28
24/** @type {RegExp[]} */ 29/** @type {RegExp[]} */
25const stderrIgnorePatterns = [ 30const stderrIgnorePatterns = [
26 // warning about devtools extension 31 // warning about devtools extension
@@ -111,50 +116,6 @@ async function setupEsbuildWatcher(packageName, extraPaths, callback) {
111} 116}
112 117
113/** 118/**
114 * @param {string} packageName
115 * @returns {Promise<import('vite').ViteDevServer>}
116 */
117async function setupDevServer(packageName) {
118 const viteDevServer = await createServer({
119 build: {
120 watch: {
121 skipWrite: true,
122 clearScreen: false,
123 },
124 },
125 configFile: path.join(thisDir, `../packages/${packageName}/vite.config.js`),
126 });
127 await viteDevServer.listen();
128 return viteDevServer;
129}
130
131/**
132 * @param {(event: import('vite').HMRPayload) => void} sendEvent
133 * @returns {Promise<void>}
134 */
135function setupPreloadPackageWatcher(sendEvent) {
136 return setupEsbuildWatcher('preload', [sharedModule], () => {
137 sendEvent({
138 type: 'full-reload',
139 });
140 });
141}
142
143/**
144 * @param {string} packageName
145 * @param {(event: import('vite').HMRPayload) => void} sendEvent
146 * @returns {Promise<void>}
147 */
148function setupServicePackageWatcher(packageName, sendEvent) {
149 return setupEsbuildWatcher(packageName, [serviceSharedModule], () => {
150 sendEvent({
151 type: 'custom',
152 event: 'sophie:reload-services',
153 });
154 });
155}
156
157/**
158 * @param {import('vite').ViteDevServer} viteDevServer 119 * @param {import('vite').ViteDevServer} viteDevServer
159 * @returns {Promise<void>} 120 * @returns {Promise<void>}
160 */ 121 */
@@ -280,7 +241,16 @@ async function setupDevEnvironment() {
280 * @returns {Promise<void>} 241 * @returns {Promise<void>}
281 */ 242 */
282 async function startDevServer() { 243 async function startDevServer() {
283 viteDevServer = await setupDevServer('renderer'); 244 viteDevServer = await createServer({
245 build: {
246 watch: {
247 skipWrite: true,
248 clearScreen: false,
249 },
250 },
251 configFile: path.join(thisDir, `../packages/renderer/vite.config.js`),
252 });
253 await viteDevServer.listen();
284 } 254 }
285 255
286 /** 256 /**
@@ -289,7 +259,11 @@ async function setupDevEnvironment() {
289 async function watchRendererPackages() { 259 async function watchRendererPackages() {
290 await setupEsbuildWatcher('shared'); 260 await setupEsbuildWatcher('shared');
291 await Promise.all([ 261 await Promise.all([
292 setupPreloadPackageWatcher(sendEvent), 262 setupEsbuildWatcher('preload', [sharedModule], () =>
263 sendEvent({
264 type: 'full-reload',
265 }),
266 ),
293 startDevServer(), 267 startDevServer(),
294 ]); 268 ]);
295 } 269 }
@@ -299,21 +273,29 @@ async function setupDevEnvironment() {
299 */ 273 */
300 async function watchServicePackages() { 274 async function watchServicePackages() {
301 await setupEsbuildWatcher('service-shared'); 275 await setupEsbuildWatcher('service-shared');
302 await Promise.all([ 276 await setupEsbuildWatcher('service-inject', [serviceSharedModule]);
303 setupServicePackageWatcher('service-inject', sendEvent), 277 await setupEsbuildWatcher(
304 setupServicePackageWatcher('service-preload', sendEvent), 278 'service-preload',
305 ]); 279 [serviceSharedModule, serviceInjectModule],
280 () =>
281 sendEvent({
282 type: 'custom',
283 event: 'sophie:reload-services',
284 }),
285 );
306 } 286 }
307 287
308 await Promise.all([watchRendererPackages(), watchServicePackages()]); 288 await Promise.all([
289 watchRendererPackages(),
290 watchServicePackages(),
291 setupTranslationsWatcher(sendEvent),
292 ]);
309 293
310 if (viteDevServer === undefined) { 294 if (viteDevServer === undefined) {
311 console.error('Failed to create vite dev server'); 295 console.error('Failed to create vite dev server');
312 return; 296 return;
313 } 297 }
314 298
315 setupTranslationsWatcher(sendEvent);
316
317 console.log('\uD83C\uDF80 Sophie is starting up'); 299 console.log('\uD83C\uDF80 Sophie is starting up');
318 await setupMainPackageWatcher(viteDevServer); 300 await setupMainPackageWatcher(viteDevServer);
319} 301}