WEB GUI: Live-reloading development environment
Change-Id: Ibe4a80905e7c140ff70f359d43a49e6430cc6838
diff --git a/web/gui/src/main/webapp/bs-config.js b/web/gui/src/main/webapp/bs-config.js
new file mode 100644
index 0000000..00aaa18
--- /dev/null
+++ b/web/gui/src/main/webapp/bs-config.js
@@ -0,0 +1,77 @@
+'use strict';
+/*
+ |--------------------------------------------------------------------------
+ | Browser-sync config file
+ |--------------------------------------------------------------------------
+ |
+ | For up-to-date information about the options:
+ | http://www.browsersync.io/docs/options/
+ |
+ | There are more options than you see here, these are just the ones that are
+ | set internally. See the website for more info.
+ |
+ |
+ */
+var fs = require('fs');
+var httpProxy = require('http-proxy');
+
+var proxy = httpProxy.createProxyServer({
+ target: 'http://localhost:8182',
+});
+
+var defaultViews = fs.readdirSync('./app/view/');
+var viewNameMatcher = new RegExp(/\/onos\/ui\/app\/view\/(.+)\/.+\.js/);
+
+proxy.on('upgrade', function (req, socket, head) {
+ console.log('[WS]: ', head);
+ proxy.ws(req, socket, head);
+});
+
+proxy.on('error', function(error, req, res) {
+ res.writeHead(500, {
+ 'Content-Type': 'text/plain'
+ });
+ console.error('[Proxy]', error);
+});
+
+module.exports = {
+ 'files': [
+ './app/**/*.css',
+ './app/**/*.js',
+ './app/**/*.json',
+ './app/**/*.html',
+ './app/**/*.jpg',
+ './app/**/*.png',
+ './app/**/*.gif',
+ '../../../../../apps/**/*.js',
+ '../../../../../apps/**/*.html',
+ '../../../../../apps/**/*.css'
+ ],
+ proxy: {
+ target: "http://localhost:8181",
+ ws: true,
+ middleware: function(req, res, next){
+
+
+ var viewName = viewNameMatcher.exec(req.url);
+
+ if(!!viewName && defaultViews.indexOf(viewName[1]) === -1){
+ // in this case it is an external application that extend the view
+ // so we redirect the request to the app folder
+ req.url = req.url.replace('/onos/ui/', '/apps/' + viewName[1] + '/app/src/main/resources/');
+ proxy.web(req, res);
+ }
+ // NOTE onos.js should not be proxied (require server side injection)
+ else if(req.url.match(/.js$/) && req.url !== '/onos/ui/onos.js'){
+ // redirect onos base js files to the source folder
+ req.url = req.url.replace('/onos/ui/', '/web/gui/src/main/webapp/');
+ proxy.web(req, res);
+ }
+ else{
+ return next();
+ }
+ }
+ },
+ 'port': 3000,
+ 'open': false
+};
\ No newline at end of file