diff options
author | Kristóf Marussy <kristof@marussy.com> | 2022-04-08 02:10:22 +0200 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2022-05-16 00:55:00 +0200 |
commit | ab1cda612cf6d427bffb66d5674a3673eb958e50 (patch) | |
tree | aeb01a0b431ca850b75d276af745bde807851839 /scripts | |
parent | fix(main): Do not show spurious abort error (diff) | |
download | sophie-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.js | 9 | ||||
-rw-r--r-- | scripts/watch.js | 90 |
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 @@ | |||
1 | import { spawn } from 'node:child_process'; | 1 | import { spawn } from 'node:child_process'; |
2 | import path from 'node:path'; | 2 | import path from 'node:path'; |
3 | import { exit, kill } from 'node:process'; | ||
4 | 3 | ||
5 | import { watch } from 'chokidar'; | 4 | import { watch } from 'chokidar'; |
6 | import electronPath from 'electron'; | 5 | import 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} */ | ||
24 | const serviceInjectModule = path.join( | ||
25 | thisDir, | ||
26 | '../packages/service-inject/dist/index.js', | ||
27 | ); | ||
28 | |||
24 | /** @type {RegExp[]} */ | 29 | /** @type {RegExp[]} */ |
25 | const stderrIgnorePatterns = [ | 30 | const 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 | */ | ||
117 | async 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 | */ | ||
135 | function 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 | */ | ||
148 | function 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 | } |