summaryrefslogtreecommitdiffhomepage
path: root/gui/tasks/dev-server.js
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2020-11-25 10:56:20 +0100
committerOskar Nyberg <oskar@mullvad.net>2020-11-25 17:04:12 +0100
commitcc260080b8a0f9f446cb33f6d31545289533122c (patch)
tree5bc38b7b8b56115ddeeab057ff2ed6928028f971 /gui/tasks/dev-server.js
parentd0816e181992ff1fd772d383113fc27a673adcf9 (diff)
downloadmullvadvpn-cc260080b8a0f9f446cb33f6d31545289533122c.tar.xz
mullvadvpn-cc260080b8a0f9f446cb33f6d31545289533122c.zip
Use web server for renderer content in development
Third party devtools can't be loaded on `file://` URLs due to an issue in Electron. Using a web server locally works around that issue.
Diffstat (limited to 'gui/tasks/dev-server.js')
-rw-r--r--gui/tasks/dev-server.js40
1 files changed, 40 insertions, 0 deletions
diff --git a/gui/tasks/dev-server.js b/gui/tasks/dev-server.js
new file mode 100644
index 0000000000..067174ab17
--- /dev/null
+++ b/gui/tasks/dev-server.js
@@ -0,0 +1,40 @@
+const serverFactory = require('spa-server');
+
+function startWebServer(done) {
+ serverFactory
+ .create({
+ path: './build',
+ port: 8080,
+ middleware: [correctWorkingDirectory],
+ })
+ .start(done);
+}
+
+function correctWorkingDirectory(request, response, next) {
+ if (request.url === '/src/renderer/index.js') {
+ const write = response.write.bind(response);
+ response.write = (data) => {
+ let s = data.toString();
+
+ // Add code that changes to the correct working directory after `"use strict";` which is
+ // located on the first line of the source file.
+ const index = s.indexOf('\n');
+
+ if (index !== -1) {
+ const insertionIndex = index + 1;
+ s =
+ s.slice(0, insertionIndex) +
+ 'try{process.chdir("build/src/renderer")}catch(e){}\n' +
+ s.slice(insertionIndex);
+ }
+
+ write(s);
+ };
+ }
+
+ next();
+}
+
+startWebServer.displayName = 'start-dev-server';
+
+exports.start = startWebServer;