You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							75 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							75 lines
						
					
					
						
							1.8 KiB
						
					
					
				| /* eslint-disable no-undef */ | |
| /* eslint-disable @typescript-eslint/no-var-requires */ | |
| const cp = require('child_process'); | |
| const chokidar = require('chokidar'); | |
| const electron = require('electron'); | |
| 
 | |
| let child = null; | |
| const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm'; | |
| const reloadWatcher = { | |
|   debouncer: null, | |
|   ready: false, | |
|   watcher: null, | |
|   restarting: false, | |
| }; | |
| 
 | |
| ///* | |
| function runBuild() { | |
|   return new Promise((resolve, _reject) => { | |
|     let tempChild = cp.spawn(npmCmd, ['run', 'build']); | |
|     tempChild.once('exit', () => { | |
|       resolve(); | |
|     }); | |
|     tempChild.stdout.pipe(process.stdout); | |
|   }); | |
| } | |
| //*/ | |
|  | |
| async function spawnElectron() { | |
|   if (child !== null) { | |
|     child.stdin.pause(); | |
|     child.kill(); | |
|     child = null; | |
|     await runBuild(); | |
|   } | |
|   child = cp.spawn(electron, ['--inspect=5858', './']); | |
|   child.on('exit', () => { | |
|     if (!reloadWatcher.restarting) { | |
|       process.exit(0); | |
|     } | |
|   }); | |
|   child.stdout.pipe(process.stdout); | |
| } | |
| 
 | |
| function setupReloadWatcher() { | |
|   reloadWatcher.watcher = chokidar | |
|     .watch('./src/**/*', { | |
|       ignored: /[/\\]\./, | |
|       persistent: true, | |
|     }) | |
|     .on('ready', () => { | |
|       reloadWatcher.ready = true; | |
|     }) | |
|     .on('all', (_event, _path) => { | |
|       if (reloadWatcher.ready) { | |
|         clearTimeout(reloadWatcher.debouncer); | |
|         reloadWatcher.debouncer = setTimeout(async () => { | |
|           console.log('Restarting'); | |
|           reloadWatcher.restarting = true; | |
|           await spawnElectron(); | |
|           reloadWatcher.restarting = false; | |
|           reloadWatcher.ready = false; | |
|           clearTimeout(reloadWatcher.debouncer); | |
|           reloadWatcher.debouncer = null; | |
|           reloadWatcher.watcher = null; | |
|           setupReloadWatcher(); | |
|         }, 500); | |
|       } | |
|     }); | |
| } | |
| 
 | |
| (async () => { | |
|   await runBuild(); | |
|   await spawnElectron(); | |
|   setupReloadWatcher(); | |
| })();
 | |
| 
 |