bs-config.js 2.26 KB
'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|css|html)/);

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 in case of .js, .css, .html
        req.url = req.url.replace('/onos/ui/', '/apps/' + viewName[1] + '/app/src/main/resources/');
        proxy.web(req, res);
      }
      // NOTE onos.js and index.html should not be proxied (require server side injection)
      else if(req.url.match(/(?:js|css|html)/) && req.url !== '/onos/ui/onos.js' && req.url !== '/onos/ui/index.html' && req.url !== '/onos/ui/nav.html'){
        // 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
};