diff options
author | Kristóf Marussy <kristof@marussy.com> | 2022-01-09 23:34:24 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2022-01-09 23:38:28 +0100 |
commit | 528aacfe86682df3fcb375277a5de83feaeb8e08 (patch) | |
tree | 2f361b0cf8306f7a019e5b5d959ed4aced527118 /scripts | |
parent | build: Add eslint-plugin-unicorn (diff) | |
download | sophie-528aacfe86682df3fcb375277a5de83feaeb8e08.tar.gz sophie-528aacfe86682df3fcb375277a5de83feaeb8e08.tar.zst sophie-528aacfe86682df3fcb375277a5de83feaeb8e08.zip |
build: Add eslint-plugin-promise
Signed-off-by: Kristóf Marussy <kristof@marussy.com>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/watch.js | 141 |
1 files changed, 83 insertions, 58 deletions
diff --git a/scripts/watch.js b/scripts/watch.js index 455cfd9..91f3583 100644 --- a/scripts/watch.js +++ b/scripts/watch.js | |||
@@ -35,7 +35,7 @@ const stderrIgnorePatterns = [ | |||
35 | * @param {string} packageName | 35 | * @param {string} packageName |
36 | * @param {string[]} [extraPaths] | 36 | * @param {string[]} [extraPaths] |
37 | * @param {() => void} [callback] | 37 | * @param {() => void} [callback] |
38 | * @return {Promise<void>} | 38 | * @returns {Promise<void>} |
39 | */ | 39 | */ |
40 | async function setupEsbuildWatcher(packageName, extraPaths, callback) { | 40 | async function setupEsbuildWatcher(packageName, extraPaths, callback) { |
41 | /** @type {{ default: import('esbuild').BuildOptions }} */ | 41 | /** @type {{ default: import('esbuild').BuildOptions }} */ |
@@ -56,47 +56,56 @@ async function setupEsbuildWatcher(packageName, extraPaths, callback) { | |||
56 | ignoreInitial: true, | 56 | ignoreInitial: true, |
57 | persistent: true, | 57 | persistent: true, |
58 | }); | 58 | }); |
59 | |||
59 | if (callback) { | 60 | if (callback) { |
60 | callback(); | 61 | callback(); |
61 | } | 62 | } |
62 | watcher.on('change', () => { | 63 | |
63 | incrementalBuild | 64 | /** |
64 | .rebuild?.() | 65 | * @returns {Promise<void>} |
65 | .then(() => { | 66 | */ |
66 | if (callback) { | 67 | async function rebuild() { |
67 | console.log(`\u26A1 Reloading package ${packageName}`); | 68 | try { |
68 | callback(); | 69 | await incrementalBuild.rebuild?.(); |
69 | } | 70 | } catch (error) { |
70 | }) | 71 | if (typeof error === 'object' && error !== null && 'errors' in error) { |
71 | .catch((error) => { | 72 | const { errors } = /** @type {{ errors: unknown }} */ (error); |
72 | if (typeof error === 'object' && 'errors' in error) { | 73 | if (Array.isArray(errors)) { |
73 | // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- We just checked. | 74 | const errCount = errors.length; |
74 | const { errors } = error; | 75 | console.error( |
75 | if (Array.isArray(errors)) { | 76 | '\uD83D\uDD25', |
76 | const errCount = errors.length; | 77 | errCount, |
77 | console.error( | 78 | errCount > 1 ? 'errors' : 'error', |
78 | '\uD83D\uDD25', | 79 | 'while rebuilding package', |
79 | errCount, | 80 | packageName, |
80 | errCount > 1 ? 'errors' : 'error', | 81 | ); |
81 | 'while rebuilding package', | 82 | return; |
82 | packageName, | ||
83 | ); | ||
84 | return; | ||
85 | } | ||
86 | } | 83 | } |
87 | console.error( | 84 | } |
88 | '\uD83D\uDD25', | 85 | console.error( |
89 | 'error while rebuilding package', | 86 | '\uD83D\uDD25', |
90 | packageName, | 87 | 'error while rebuilding package', |
91 | error, | 88 | packageName, |
92 | ); | 89 | error, |
93 | }); | 90 | ); |
91 | return; | ||
92 | } | ||
93 | if (callback) { | ||
94 | console.log(`\u26A1 Reloading package ${packageName}`); | ||
95 | callback(); | ||
96 | } | ||
97 | } | ||
98 | |||
99 | watcher.on('change', () => { | ||
100 | rebuild().catch((error) => { | ||
101 | console.error('Unexpected error while rebuilding', error); | ||
102 | }); | ||
94 | }); | 103 | }); |
95 | } | 104 | } |
96 | 105 | ||
97 | /** | 106 | /** |
98 | * @param {string} packageName | 107 | * @param {string} packageName |
99 | * @return {Promise<import('vite').ViteDevServer>} | 108 | * @returns {Promise<import('vite').ViteDevServer>} |
100 | */ | 109 | */ |
101 | async function setupDevServer(packageName) { | 110 | async function setupDevServer(packageName) { |
102 | const viteDevServer = await createServer({ | 111 | const viteDevServer = await createServer({ |
@@ -114,7 +123,7 @@ async function setupDevServer(packageName) { | |||
114 | 123 | ||
115 | /** | 124 | /** |
116 | * @param {(event: import('vite').HMRPayload) => void} sendEvent | 125 | * @param {(event: import('vite').HMRPayload) => void} sendEvent |
117 | * @return {Promise<void>} | 126 | * @returns {Promise<void>} |
118 | */ | 127 | */ |
119 | function setupPreloadPackageWatcher(sendEvent) { | 128 | function setupPreloadPackageWatcher(sendEvent) { |
120 | return setupEsbuildWatcher('preload', [sharedModule], () => { | 129 | return setupEsbuildWatcher('preload', [sharedModule], () => { |
@@ -127,7 +136,7 @@ function setupPreloadPackageWatcher(sendEvent) { | |||
127 | /** | 136 | /** |
128 | * @param {string} packageName | 137 | * @param {string} packageName |
129 | * @param {(event: import('vite').HMRPayload) => void} sendEvent | 138 | * @param {(event: import('vite').HMRPayload) => void} sendEvent |
130 | * @return {Promise<void>} | 139 | * @returns {Promise<void>} |
131 | */ | 140 | */ |
132 | function setupServicePackageWatcher(packageName, sendEvent) { | 141 | function setupServicePackageWatcher(packageName, sendEvent) { |
133 | return setupEsbuildWatcher(packageName, [serviceSharedModule], () => { | 142 | return setupEsbuildWatcher(packageName, [serviceSharedModule], () => { |
@@ -140,7 +149,7 @@ function setupServicePackageWatcher(packageName, sendEvent) { | |||
140 | 149 | ||
141 | /** | 150 | /** |
142 | * @param {import('vite').ViteDevServer} viteDevServer | 151 | * @param {import('vite').ViteDevServer} viteDevServer |
143 | * @return {Promise<void>} | 152 | * @returns {Promise<void>} |
144 | */ | 153 | */ |
145 | function setupMainPackageWatcher(viteDevServer) { | 154 | function setupMainPackageWatcher(viteDevServer) { |
146 | // Write a value to an environment variable to pass it to the main process. | 155 | // Write a value to an environment variable to pass it to the main process. |
@@ -190,31 +199,47 @@ async function setupDevEnvironment() { | |||
190 | 199 | ||
191 | /** @type {import('vite').ViteDevServer | undefined} */ | 200 | /** @type {import('vite').ViteDevServer | undefined} */ |
192 | let viteDevServer; | 201 | let viteDevServer; |
193 | /** @type {(event: import('vite').HMRPayload) => void} */ | 202 | |
194 | const sendEvent = (event) => { | 203 | /** |
204 | * @param {import('vite').HMRPayload} event | ||
205 | * @returns {void} | ||
206 | */ | ||
207 | function sendEvent(event) { | ||
195 | if (viteDevServer !== undefined) { | 208 | if (viteDevServer !== undefined) { |
196 | viteDevServer.ws.send(event); | 209 | viteDevServer.ws.send(event); |
197 | } | 210 | } |
198 | }; | 211 | } |
199 | 212 | ||
200 | const sharedWatcher = setupEsbuildWatcher('shared'); | 213 | /** |
201 | const serviceSharedWatcher = setupEsbuildWatcher('service-shared'); | 214 | * @returns {Promise<void>} |
202 | await Promise.all([ | 215 | */ |
203 | sharedWatcher.then(() => | 216 | async function startDevServer() { |
204 | Promise.all([ | 217 | viteDevServer = await setupDevServer('renderer'); |
205 | setupPreloadPackageWatcher(sendEvent), | 218 | } |
206 | setupDevServer('renderer').then((devServer) => { | 219 | |
207 | viteDevServer = devServer; | 220 | /** |
208 | }), | 221 | * @returns {Promise<void>} |
209 | ]), | 222 | */ |
210 | ), | 223 | async function watchRendererPackages() { |
211 | serviceSharedWatcher.then(() => | 224 | await setupEsbuildWatcher('shared'); |
212 | Promise.all([ | 225 | await Promise.all([ |
213 | setupServicePackageWatcher('service-inject', sendEvent), | 226 | setupPreloadPackageWatcher(sendEvent), |
214 | setupServicePackageWatcher('service-preload', sendEvent), | 227 | startDevServer(), |
215 | ]), | 228 | ]); |
216 | ), | 229 | } |
217 | ]); | 230 | |
231 | /** | ||
232 | * @returns {Promise<void>} | ||
233 | */ | ||
234 | async function watchServicePackages() { | ||
235 | await setupEsbuildWatcher('service-shared'); | ||
236 | await Promise.all([ | ||
237 | setupServicePackageWatcher('service-inject', sendEvent), | ||
238 | setupServicePackageWatcher('service-preload', sendEvent), | ||
239 | ]); | ||
240 | } | ||
241 | |||
242 | await Promise.all([watchRendererPackages(), watchServicePackages()]); | ||
218 | 243 | ||
219 | if (viteDevServer === undefined) { | 244 | if (viteDevServer === undefined) { |
220 | console.error('Failed to create vite dev server'); | 245 | console.error('Failed to create vite dev server'); |