summaryrefslogtreecommitdiff
path: root/electron/service/commands/dev.js
diff options
context:
space:
mode:
Diffstat (limited to 'electron/service/commands/dev.js')
-rw-r--r--electron/service/commands/dev.js102
1 files changed, 102 insertions, 0 deletions
diff --git a/electron/service/commands/dev.js b/electron/service/commands/dev.js
new file mode 100644
index 00000000..bea42021
--- /dev/null
+++ b/electron/service/commands/dev.js
@@ -0,0 +1,102 @@
+'use strict'
+
+const loadEnv = require('../utils/loadEnv')
+loadEnv()
+loadEnv('development')
+const chalk = require('chalk')
+const webpack = require('webpack')
+const WebpackDevServer = require('webpack-dev-server')
+const { info } = require('../utils/logger')
+const getLocalIP = require('../utils/getLocalIP')
+const devWebpackConfig = require('../config/dev')
+const devServerOptions = devWebpackConfig.devServer
+const { spawn } = require('node:child_process')
+const electron = require('electron')
+const path = require('path')
+const url = require('url')
+const fs = require('fs');
+
+let electronProcess = null
+let manualRestart = false
+// disable warnings in browser console
+process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'false'
+
+const protocol = devServerOptions.https ? 'https' : 'http'
+const host = devServerOptions.host || '0.0.0.0'
+const port = devServerOptions.port || 8080
+
+// older code that sets the url for the path I would assume
+var parseArg = process.argv[2] || ""
+var yarnArg = url.parse(parseArg)
+
+function resetPort() {
+ let resetData = { "_comment1": "port should not be declared when commiting" }
+ fs.writeFileSync(path.join(__dirname, "../../src/lib/flaskserverport.json"), JSON.stringify(resetData), 'utf8')
+ console.log("Resetting the flaskport")
+}
+
+function startElectron(webpackport) {
+var wbport = webpackport
+ // this sends url to proper position
+ process.argv.shift()
+ process.argv.shift()
+ // get URL from PrintPDF
+ // checks if url is http
+ if (yarnArg.protocol) {
+ var args = [
+ '--inspect=5858',
+ path.join(__dirname, '../../dist/electron/main.js')
+ ].concat(process.argv)
+ } else {
+ var args = [
+ '--inspect=5858',
+ `http://0.0.0.0:${wbport}/#${process.argv}`
+ ].concat(process.argv)
+ }
+ // detect yarn or npm and process commandline args accordingly
+ if (process.env.npm_execpath.endsWith('yarn.js')) {
+ args = args.concat(process.argv.slice(3))
+ } else if (process.env.npm_execpath.endsWith('npm-cli.js')) {
+ args = args.concat(process.argv.slice(2))
+ }
+ electronProcess = spawn(electron, args)
+ electronProcess.on('close', () => {
+ if (!manualRestart) {
+ process.exit()
+ } else {
+ process.kill(electronProcess.pid)
+ }
+ resetPort()
+ })
+ electronProcess.on('exit', () => {
+ resetPort()
+ })
+}
+
+info('Starting development server...')
+const compiler = webpack(devWebpackConfig)
+const server = new WebpackDevServer(devServerOptions, compiler)
+
+compiler.hooks.done.tap('serve', (stats) => {
+ console.log()
+ console.log()
+ console.log(`App running at:`)
+ console.log(` - Local: ${chalk.cyan(`${protocol}://${host}:${port}`)}`)
+ console.log(` - Network: ${chalk.cyan(`${protocol}://${getLocalIP()}:${port}`)}`)
+ console.log()
+
+ // allows livereload for webpack devserver to work without multiple instances of electron
+ if (electronProcess) {
+ manualRestart = true
+ } else {
+ manualRestart = false
+ // starts nodejs electron commandline browser
+ startElectron(devServerOptions.port)
+ }
+})
+
+server.start(port, host, (err) => {
+ if (err) {
+ process.exit(0)
+ }
+})