Files
GDevelop/newIDE/electron-app/app/LocalGDJSDevelopmentWatcher.js
Florian Rival 3846a1553b Experimental in-game editor (#7974)
Co-authored-by: Davy Hélard <davy.helard@gmail.com>

Don't show in changelog
2025-11-11 18:22:37 +01:00

76 lines
2.0 KiB
JavaScript

// @flow
const chokidar = require('chokidar');
const debounce = require('lodash.debounce');
const electron = require('electron');
const child_process = require('child_process');
const process = require('process');
const path = require('path');
const log = require('electron-log');
let onRuntimeUpdatedCallback = () => {};
/**
* Returns the folder corresponding to newIDE/app in **development**.
* @returns {string}
*/
const findDevelopmentNewIdeAppPath = () => {
const developmentElectronAppFolder = process.cwd();
return path.join(developmentElectronAppFolder, '../app');
};
const onWatchEvent = debounce(
/**
* @param {string} event
* @param {string} filename
*/
(event, filename) => {
// Nothing to do for now.
log.info(`GDJS watcher found a change.`);
onRuntimeUpdatedCallback();
},
100 /* Avoid running the script too much in case multiple changes are fired at the same time. */
);
let watcher = null;
/**
* Set up some watchers for GDJS and Extensions sources.
*/
const setupLocalGDJSDevelopmentWatcher = () => {
if (watcher) {
log.info('GDJS changes watcher already set up - skipping.');
return;
}
const startTime = performance.now();
watcher = chokidar
.watch(path.join(findDevelopmentNewIdeAppPath(), 'resources/GDJS'), {
awaitWriteFinish: true,
ignoreInitial: true,
})
.on('all', onWatchEvent)
.on('error', e => log.error("Can't set up a watcher for GDJS changes:", e))
.on('ready', () => {
const totalTimeStr = (performance.now() - startTime).toFixed(2);
log.info(`Watchers for GDJS changes installed in ${totalTimeStr}ms.`);
});
};
const closeLocalGDJSDevelopmentWatcher = () => {
if (!watcher) return;
log.info('Closing GDJS changes watcher.');
watcher.close();
watcher = null;
};
const onLocalGDJSDevelopmentWatcherRuntimeUpdated = cb => {
onRuntimeUpdatedCallback = cb;
};
module.exports = {
setupLocalGDJSDevelopmentWatcher,
closeLocalGDJSDevelopmentWatcher,
onLocalGDJSDevelopmentWatcherRuntimeUpdated,
};