aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/watch.js
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/watch.js')
-rw-r--r--scripts/watch.js44
1 files changed, 27 insertions, 17 deletions
diff --git a/scripts/watch.js b/scripts/watch.js
index d4229e9..82a8feb 100644
--- a/scripts/watch.js
+++ b/scripts/watch.js
@@ -1,20 +1,20 @@
1// @ts-check 1import { build as esbuildBuild } from 'esbuild';
2import { spawn } from 'child_process';
3import { watch } from 'chokidar';
4import electronPath from 'electron';
5import { join } from 'path';
6import { createServer } from 'vite';
2 7
3const esbuild = require('esbuild'); 8import { fileURLToDirname } from '../config/build-common.js';
4const { spawn } = require('child_process');
5const chokidar = require('chokidar');
6const electronPath = require('electron');
7const { join } = require('path');
8const { createServer } = require('vite');
9 9
10process.env.MODE = 'development'; 10/** @type {string} */
11process.env.NODE_ENV = 'development'; 11const thisDir = fileURLToDirname(import.meta.url);
12 12
13/** @type {string} */ 13/** @type {string} */
14const sharedModule = join(__dirname, '../packages/shared/dist/index.mjs'); 14const sharedModule = join(thisDir, '../packages/shared/dist/index.mjs');
15 15
16/** @type {string} */ 16/** @type {string} */
17const serviceSharedModule = join(__dirname, '../packages/service-shared/dist/index.mjs'); 17const serviceSharedModule = join(thisDir, '../packages/service-shared/dist/index.mjs');
18 18
19/** @type {RegExp[]} */ 19/** @type {RegExp[]} */
20const stderrIgnorePatterns = [ 20const stderrIgnorePatterns = [
@@ -34,15 +34,17 @@ const stderrIgnorePatterns = [
34 * @return {Promise<void>} 34 * @return {Promise<void>}
35 */ 35 */
36async function setupEsbuildWatcher(packageName, extraPaths, callback) { 36async function setupEsbuildWatcher(packageName, extraPaths, callback) {
37 const config = require(`../packages/${packageName}/esbuild.config.js`); 37 /** @type {{ default: import('esbuild').BuildOptions }} */
38 const { default: config } = await import(`../packages/${packageName}/esbuild.config.js`);
38 config.logLevel = 'info'; 39 config.logLevel = 'info';
39 config.incremental = true; 40 config.incremental = true;
40 const incrementalBuild = await esbuild.build(config); 41
42 const incrementalBuild = await esbuildBuild(config);
41 const paths = [ 43 const paths = [
42 join(__dirname, `../packages/${packageName}/src`), 44 join(thisDir, `../packages/${packageName}/src`),
43 ...(extraPaths || []), 45 ...(extraPaths || []),
44 ]; 46 ];
45 const watcher = chokidar.watch(paths, { 47 const watcher = watch(paths, {
46 ignored: /(^|[\/\\])\.|__(tests|mocks)__|\.(spec|test)\.[jt]sx?$/, 48 ignored: /(^|[\/\\])\.|__(tests|mocks)__|\.(spec|test)\.[jt]sx?$/,
47 ignoreInitial: true, 49 ignoreInitial: true,
48 persistent: true, 50 persistent: true,
@@ -51,7 +53,7 @@ async function setupEsbuildWatcher(packageName, extraPaths, callback) {
51 callback(); 53 callback();
52 } 54 }
53 watcher.on('change', () => { 55 watcher.on('change', () => {
54 incrementalBuild.rebuild().then(() => { 56 incrementalBuild.rebuild?.().then(() => {
55 if (callback) { 57 if (callback) {
56 console.log(`\u26a1 Reloading package ${packageName}`); 58 console.log(`\u26a1 Reloading package ${packageName}`);
57 callback(); 59 callback();
@@ -81,7 +83,7 @@ async function setupDevServer(packageName) {
81 clearScreen: false, 83 clearScreen: false,
82 }, 84 },
83 }, 85 },
84 configFile: join(__dirname, `../packages/${packageName}/vite.config.js`), 86 configFile: join(thisDir, `../packages/${packageName}/vite.config.js`),
85 }); 87 });
86 await viteDevServer.listen(); 88 await viteDevServer.listen();
87 return viteDevServer; 89 return viteDevServer;
@@ -158,6 +160,9 @@ function setupMainPackageWatcher(viteDevServer) {
158 * @returns {Promise<void>} 160 * @returns {Promise<void>}
159 */ 161 */
160async function setupDevEnvironment() { 162async function setupDevEnvironment() {
163 process.env.MODE = 'development';
164 process.env.NODE_ENV = 'development';
165
161 /** @type {import('vite').ViteDevServer | null} */ 166 /** @type {import('vite').ViteDevServer | null} */
162 let viteDevServer = null; 167 let viteDevServer = null;
163 /** @type {(event: import('vite').HMRPayload) => void} */ 168 /** @type {(event: import('vite').HMRPayload) => void} */
@@ -182,6 +187,11 @@ async function setupDevEnvironment() {
182 ])), 187 ])),
183 ]); 188 ]);
184 189
190 if (viteDevServer === null) {
191 console.error('Failed to create vite dev server');
192 return;
193 }
194
185 console.log('\ud83c\udf80 Sophie is starting up') 195 console.log('\ud83c\udf80 Sophie is starting up')
186 return setupMainPackageWatcher(viteDevServer); 196 return setupMainPackageWatcher(viteDevServer);
187} 197}