From 528aacfe86682df3fcb375277a5de83feaeb8e08 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 9 Jan 2022 23:34:24 +0100 Subject: build: Add eslint-plugin-promise MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kristóf Marussy --- scripts/watch.js | 141 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 83 insertions(+), 58 deletions(-) (limited to 'scripts/watch.js') 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 = [ * @param {string} packageName * @param {string[]} [extraPaths] * @param {() => void} [callback] - * @return {Promise} + * @returns {Promise} */ async function setupEsbuildWatcher(packageName, extraPaths, callback) { /** @type {{ default: import('esbuild').BuildOptions }} */ @@ -56,47 +56,56 @@ async function setupEsbuildWatcher(packageName, extraPaths, callback) { ignoreInitial: true, persistent: true, }); + if (callback) { callback(); } - watcher.on('change', () => { - incrementalBuild - .rebuild?.() - .then(() => { - if (callback) { - console.log(`\u26A1 Reloading package ${packageName}`); - callback(); - } - }) - .catch((error) => { - if (typeof error === 'object' && 'errors' in error) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- We just checked. - const { errors } = error; - if (Array.isArray(errors)) { - const errCount = errors.length; - console.error( - '\uD83D\uDD25', - errCount, - errCount > 1 ? 'errors' : 'error', - 'while rebuilding package', - packageName, - ); - return; - } + + /** + * @returns {Promise} + */ + async function rebuild() { + try { + await incrementalBuild.rebuild?.(); + } catch (error) { + if (typeof error === 'object' && error !== null && 'errors' in error) { + const { errors } = /** @type {{ errors: unknown }} */ (error); + if (Array.isArray(errors)) { + const errCount = errors.length; + console.error( + '\uD83D\uDD25', + errCount, + errCount > 1 ? 'errors' : 'error', + 'while rebuilding package', + packageName, + ); + return; } - console.error( - '\uD83D\uDD25', - 'error while rebuilding package', - packageName, - error, - ); - }); + } + console.error( + '\uD83D\uDD25', + 'error while rebuilding package', + packageName, + error, + ); + return; + } + if (callback) { + console.log(`\u26A1 Reloading package ${packageName}`); + callback(); + } + } + + watcher.on('change', () => { + rebuild().catch((error) => { + console.error('Unexpected error while rebuilding', error); + }); }); } /** * @param {string} packageName - * @return {Promise} + * @returns {Promise} */ async function setupDevServer(packageName) { const viteDevServer = await createServer({ @@ -114,7 +123,7 @@ async function setupDevServer(packageName) { /** * @param {(event: import('vite').HMRPayload) => void} sendEvent - * @return {Promise} + * @returns {Promise} */ function setupPreloadPackageWatcher(sendEvent) { return setupEsbuildWatcher('preload', [sharedModule], () => { @@ -127,7 +136,7 @@ function setupPreloadPackageWatcher(sendEvent) { /** * @param {string} packageName * @param {(event: import('vite').HMRPayload) => void} sendEvent - * @return {Promise} + * @returns {Promise} */ function setupServicePackageWatcher(packageName, sendEvent) { return setupEsbuildWatcher(packageName, [serviceSharedModule], () => { @@ -140,7 +149,7 @@ function setupServicePackageWatcher(packageName, sendEvent) { /** * @param {import('vite').ViteDevServer} viteDevServer - * @return {Promise} + * @returns {Promise} */ function setupMainPackageWatcher(viteDevServer) { // Write a value to an environment variable to pass it to the main process. @@ -190,31 +199,47 @@ async function setupDevEnvironment() { /** @type {import('vite').ViteDevServer | undefined} */ let viteDevServer; - /** @type {(event: import('vite').HMRPayload) => void} */ - const sendEvent = (event) => { + + /** + * @param {import('vite').HMRPayload} event + * @returns {void} + */ + function sendEvent(event) { if (viteDevServer !== undefined) { viteDevServer.ws.send(event); } - }; - - const sharedWatcher = setupEsbuildWatcher('shared'); - const serviceSharedWatcher = setupEsbuildWatcher('service-shared'); - await Promise.all([ - sharedWatcher.then(() => - Promise.all([ - setupPreloadPackageWatcher(sendEvent), - setupDevServer('renderer').then((devServer) => { - viteDevServer = devServer; - }), - ]), - ), - serviceSharedWatcher.then(() => - Promise.all([ - setupServicePackageWatcher('service-inject', sendEvent), - setupServicePackageWatcher('service-preload', sendEvent), - ]), - ), - ]); + } + + /** + * @returns {Promise} + */ + async function startDevServer() { + viteDevServer = await setupDevServer('renderer'); + } + + /** + * @returns {Promise} + */ + async function watchRendererPackages() { + await setupEsbuildWatcher('shared'); + await Promise.all([ + setupPreloadPackageWatcher(sendEvent), + startDevServer(), + ]); + } + + /** + * @returns {Promise} + */ + async function watchServicePackages() { + await setupEsbuildWatcher('service-shared'); + await Promise.all([ + setupServicePackageWatcher('service-inject', sendEvent), + setupServicePackageWatcher('service-preload', sendEvent), + ]); + } + + await Promise.all([watchRendererPackages(), watchServicePackages()]); if (viteDevServer === undefined) { console.error('Failed to create vite dev server'); -- cgit v1.2.3-54-g00ecf