diff options
Diffstat (limited to 'scripts/watch.js')
-rw-r--r-- | scripts/watch.js | 101 |
1 files changed, 57 insertions, 44 deletions
diff --git a/scripts/watch.js b/scripts/watch.js index 1345a0f..cf5dbfd 100644 --- a/scripts/watch.js +++ b/scripts/watch.js | |||
@@ -15,7 +15,10 @@ const thisDir = fileURLToDirname(import.meta.url); | |||
15 | const sharedModule = join(thisDir, '../packages/shared/dist/index.mjs'); | 15 | const sharedModule = join(thisDir, '../packages/shared/dist/index.mjs'); |
16 | 16 | ||
17 | /** @type {string} */ | 17 | /** @type {string} */ |
18 | const serviceSharedModule = join(thisDir, '../packages/service-shared/dist/index.mjs'); | 18 | const serviceSharedModule = join( |
19 | thisDir, | ||
20 | '../packages/service-shared/dist/index.mjs', | ||
21 | ); | ||
19 | 22 | ||
20 | /** @type {RegExp[]} */ | 23 | /** @type {RegExp[]} */ |
21 | const stderrIgnorePatterns = [ | 24 | const stderrIgnorePatterns = [ |
@@ -37,7 +40,9 @@ const stderrIgnorePatterns = [ | |||
37 | async function setupEsbuildWatcher(packageName, extraPaths, callback) { | 40 | async function setupEsbuildWatcher(packageName, extraPaths, callback) { |
38 | /** @type {{ default: import('esbuild').BuildOptions }} */ | 41 | /** @type {{ default: import('esbuild').BuildOptions }} */ |
39 | // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- Read untyped config file. | 42 | // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- Read untyped config file. |
40 | const { default: config } = await import(`../packages/${packageName}/esbuild.config.js`); | 43 | const { default: config } = await import( |
44 | `../packages/${packageName}/esbuild.config.js` | ||
45 | ); | ||
41 | config.logLevel = 'info'; | 46 | config.logLevel = 'info'; |
42 | config.incremental = true; | 47 | config.incremental = true; |
43 | 48 | ||
@@ -55,34 +60,37 @@ async function setupEsbuildWatcher(packageName, extraPaths, callback) { | |||
55 | callback(); | 60 | callback(); |
56 | } | 61 | } |
57 | watcher.on('change', () => { | 62 | watcher.on('change', () => { |
58 | incrementalBuild.rebuild?.().then(() => { | 63 | incrementalBuild |
59 | if (callback) { | 64 | .rebuild?.() |
60 | console.log(`\u26a1 Reloading package ${packageName}`); | 65 | .then(() => { |
61 | callback(); | 66 | if (callback) { |
62 | } | 67 | console.log(`\u26a1 Reloading package ${packageName}`); |
63 | }).catch((err) => { | 68 | callback(); |
64 | if (typeof err === 'object' && 'errors' in err) { | ||
65 | // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- We just checked. | ||
66 | const { errors } = err; | ||
67 | if (Array.isArray(errors)) { | ||
68 | const errCount = errors.length; | ||
69 | console.error( | ||
70 | '\ud83d\udd25', | ||
71 | errCount, | ||
72 | errCount > 1 ? 'errors' : 'error', | ||
73 | 'while rebuilding package', | ||
74 | packageName, | ||
75 | ); | ||
76 | return; | ||
77 | } | 69 | } |
78 | } | 70 | }) |
79 | console.error( | 71 | .catch((err) => { |
80 | '\ud83d\udd25', | 72 | if (typeof err === 'object' && 'errors' in err) { |
81 | 'error while rebuilding package', | 73 | // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- We just checked. |
82 | packageName, | 74 | const { errors } = err; |
83 | err, | 75 | if (Array.isArray(errors)) { |
84 | ); | 76 | const errCount = errors.length; |
85 | }); | 77 | console.error( |
78 | '\ud83d\udd25', | ||
79 | errCount, | ||
80 | errCount > 1 ? 'errors' : 'error', | ||
81 | 'while rebuilding package', | ||
82 | packageName, | ||
83 | ); | ||
84 | return; | ||
85 | } | ||
86 | } | ||
87 | console.error( | ||
88 | '\ud83d\udd25', | ||
89 | 'error while rebuilding package', | ||
90 | packageName, | ||
91 | err, | ||
92 | ); | ||
93 | }); | ||
86 | }); | 94 | }); |
87 | } | 95 | } |
88 | 96 | ||
@@ -136,7 +144,11 @@ function setupServicePackageWatcher(packageName, sendEvent) { | |||
136 | */ | 144 | */ |
137 | function setupMainPackageWatcher(viteDevServer) { | 145 | function setupMainPackageWatcher(viteDevServer) { |
138 | // Write a value to an environment variable to pass it to the main process. | 146 | // Write a value to an environment variable to pass it to the main process. |
139 | const { config: { server: { port, https, host } } } = viteDevServer; | 147 | const { |
148 | config: { | ||
149 | server: { port, https, host }, | ||
150 | }, | ||
151 | } = viteDevServer; | ||
140 | const protocol = `http${https ? 's' : ''}:`; | 152 | const protocol = `http${https ? 's' : ''}:`; |
141 | const hostOrDefault = typeof host === 'string' ? host : 'localhost'; | 153 | const hostOrDefault = typeof host === 'string' ? host : 'localhost'; |
142 | const portOrDefault = port || 3000; | 154 | const portOrDefault = port || 3000; |
@@ -148,10 +160,7 @@ function setupMainPackageWatcher(viteDevServer) { | |||
148 | 160 | ||
149 | return setupEsbuildWatcher( | 161 | return setupEsbuildWatcher( |
150 | 'main', | 162 | 'main', |
151 | [ | 163 | [serviceSharedModule, sharedModule], |
152 | serviceSharedModule, | ||
153 | sharedModule, | ||
154 | ], | ||
155 | () => { | 164 | () => { |
156 | if (spawnProcess !== null) { | 165 | if (spawnProcess !== null) { |
157 | spawnProcess.kill('SIGINT'); | 166 | spawnProcess.kill('SIGINT'); |
@@ -191,16 +200,20 @@ async function setupDevEnvironment() { | |||
191 | const sharedWatcher = setupEsbuildWatcher('shared'); | 200 | const sharedWatcher = setupEsbuildWatcher('shared'); |
192 | const serviceSharedWatcher = setupEsbuildWatcher('service-shared'); | 201 | const serviceSharedWatcher = setupEsbuildWatcher('service-shared'); |
193 | await Promise.all([ | 202 | await Promise.all([ |
194 | sharedWatcher.then(() => Promise.all([ | 203 | sharedWatcher.then(() => |
195 | setupPreloadPackageWatcher(sendEvent), | 204 | Promise.all([ |
196 | setupDevServer('renderer').then((devServer) => { | 205 | setupPreloadPackageWatcher(sendEvent), |
197 | viteDevServer = devServer; | 206 | setupDevServer('renderer').then((devServer) => { |
198 | }), | 207 | viteDevServer = devServer; |
199 | ])), | 208 | }), |
200 | serviceSharedWatcher.then(() => Promise.all([ | 209 | ]), |
201 | setupServicePackageWatcher('service-inject', sendEvent), | 210 | ), |
202 | setupServicePackageWatcher('service-preload', sendEvent), | 211 | serviceSharedWatcher.then(() => |
203 | ])), | 212 | Promise.all([ |
213 | setupServicePackageWatcher('service-inject', sendEvent), | ||
214 | setupServicePackageWatcher('service-preload', sendEvent), | ||
215 | ]), | ||
216 | ), | ||
204 | ]); | 217 | ]); |
205 | 218 | ||
206 | if (viteDevServer === null) { | 219 | if (viteDevServer === null) { |