summaryrefslogtreecommitdiffhomepage
path: root/gui/packages
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2019-02-12 16:40:31 +0100
committerAndrej Mihajlov <and@mullvad.net>2019-02-13 13:45:10 +0100
commit193ecd39cbda641c76ce10c2473df38d423ff4a0 (patch)
tree3a792942ed0c0a30554d24fe9fb340e223cd5bc8 /gui/packages
parent3571f7a58af0fd838110d06beb91f21b737deccb (diff)
downloadmullvadvpn-193ecd39cbda641c76ce10c2473df38d423ff4a0.tar.xz
mullvadvpn-193ecd39cbda641c76ce10c2473df38d423ff4a0.zip
Fix typescript watch script
Diffstat (limited to 'gui/packages')
-rw-r--r--gui/packages/desktop/package.json7
-rw-r--r--gui/packages/desktop/scripts/serve.js84
2 files changed, 56 insertions, 35 deletions
diff --git a/gui/packages/desktop/package.json b/gui/packages/desktop/package.json
index 37e360b76b..b3e658dd8a 100644
--- a/gui/packages/desktop/package.json
+++ b/gui/packages/desktop/package.json
@@ -68,6 +68,7 @@
"rimraf": "^2.5.4",
"sinon": "^7.1.1",
"ts-node": "^7.0.1",
+ "tsc-watch": "^2.1.1",
"tslint": "^5.12.1",
"typescript": "^3.3.3"
},
@@ -75,7 +76,7 @@
"postinstall": "electron-builder install-app-deps",
"build": "run-s private:clean private:copy-assets private:compile",
"lint": "tslint -t stylish -p .",
- "develop": "cross-env run-s private:copy-assets private:compile:dev && run-p -r private:watch private:serve",
+ "develop": "cross-env run-s private:copy-assets private:watch",
"test": "electron-mocha --renderer -R spec --require ts-node/register --require-main ts-node/register --require-main \"test/setup/main.ts\" --preload \"test/setup/renderer.ts\" \"test/*.spec.ts\" \"test/**/*.spec.ts\" \"test/**/*.spec.tsx\" || true",
"pack:mac": "run-s build private:build:mac private:postbuild:mac",
"pack:win": "run-s build private:build:win",
@@ -89,10 +90,8 @@
"private:assets:main": "cross-env mkdir -p ./build/assets && cp -R ./assets ./build",
"private:assets:html": "cross-env mkdir -p ./build/src/renderer && cp ./src/renderer/index.html ./build/src/renderer",
"private:assets:css": "cross-env mkdir -p ./build/src/renderer/components && cp ./src/renderer/components/*.css ./build/src/renderer/components",
- "private:watch": "cross-env yarn run private:compile:dev --watch --preserveWatchOutput",
- "private:serve": "cross-env node scripts/serve.js",
+ "private:watch": "cross-env node \"scripts/serve.js\"",
"private:compile": "tsc",
- "private:compile:dev": "tsc --sourceMap",
"private:clean": "rimraf build"
}
}
diff --git a/gui/packages/desktop/scripts/serve.js b/gui/packages/desktop/scripts/serve.js
index effbc93446..10c0cd2086 100644
--- a/gui/packages/desktop/scripts/serve.js
+++ b/gui/packages/desktop/scripts/serve.js
@@ -1,8 +1,9 @@
const { spawn } = require('child_process');
+const path = require('path');
+const TscWatchClient = require('tsc-watch/client');
const electron = require('electron');
const browserSync = require('browser-sync');
const browserSyncConnectUtils = require('browser-sync/dist/connect-utils');
-
const bsync = browserSync.create();
const getRootUrl = (options) => {
@@ -26,8 +27,7 @@ function runElectron(browserSyncUrl) {
},
stdio: 'inherit',
});
-
- child.on('close', onCloseElectron);
+ child.once('close', onCloseElectron);
return child;
}
@@ -36,37 +36,59 @@ function onCloseElectron() {
process.exit();
}
-bsync.init(
- {
- ui: false,
- // Port 35829 = LiveReload's default port 35729 + 100.
- // If the port is occupied, Browsersync uses next free port automatically.
- port: 35829,
- ghostMode: false,
- open: false,
- notify: false,
- logSnippet: false,
- socket: {
- // Use the actual port here.
- domain: getRootUrl,
+function startBrowserSync() {
+ bsync.init(
+ {
+ ui: false,
+ // Port 35829 = LiveReload's default port 35729 + 100.
+ // If the port is occupied, Browsersync uses next free port automatically.
+ port: 35829,
+ ghostMode: false,
+ open: false,
+ notify: false,
+ logSnippet: false,
+ socket: {
+ // Use the actual port here.
+ domain: getRootUrl,
+ },
+ },
+ (err, bs) => {
+ if (err) return console.error(err);
+
+ const browserSyncUrl = getClientUrl(bs.options);
+
+ let child = runElectron(browserSyncUrl);
+
+ bsync
+ .watch(['build/src/config.json', 'build/src/main/**/*', 'build/src/shared/**/*'])
+ .on('change', () => {
+ child.removeListener('close', onCloseElectron);
+ child.once('close', () => {
+ child = runElectron(browserSyncUrl);
+ });
+ child.kill();
+ });
+
+ bsync
+ .watch(['build/src/renderer/**/*', path.resolve('../components/build/**')])
+ .on('change', bsync.reload);
},
- },
- (err, bs) => {
- if (err) return console.error(err);
+ );
+}
- const browserSyncUrl = getClientUrl(bs.options);
+function prepareWatchArguments(projectPath) {
+ return ['--noClear', '--sourceMap', '--project', projectPath];
+}
- let child = runElectron(browserSyncUrl);
+const appWatcher = new TscWatchClient();
+const componentsWatcher = new TscWatchClient();
- bsync
- .watch(['build/src/config.json', 'build/src/main/**/*', 'build/src/shared/**/*'])
- .on('change', () => {
- child.removeListener('close', onCloseElectron);
- child.kill();
+componentsWatcher.on('first_success', () => {
+ appWatcher.start(...prepareWatchArguments(path.resolve(__dirname, '..')));
+});
- child = runElectron(browserSyncUrl);
- });
+appWatcher.on('first_success', () => {
+ startBrowserSync();
+});
- bsync.watch('build/src/renderer/**/*').on('change', bsync.reload);
- },
-);
+componentsWatcher.start(...prepareWatchArguments(path.resolve(__dirname, '../../components')));