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();
							 | 
						|
								})();
							 | 
						|
								
							 |