summaryrefslogtreecommitdiff
path: root/src/fauxton/tasks/couchserver.js
blob: a3f620ffce38e9af150216514fa756f3cebecaea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.

module.exports = function (grunt) {
  var log = grunt.log;

 grunt.registerTask("couchserver", 'Run a couch dev proxy server', function () {
    var fs = require("fs"),
    path = require("path"),
    httpProxy = require('http-proxy'),
    express = require("express"),
    options = grunt.config('couchserver'), 
    app = express();

    // Options
    var dist_dir = options.dist || './dist/debug/';
    var port = options.port || 8000;

    // Proxy options with default localhost
    var proxy_target = options.proxy || {
          host: 'localhost',
          port: 5984,
          https: false
        };

    // inform grunt that this task is async
    var done = this.async();

    // serve any javascript or css files from here
    app.get(/\.css$|\.js$|img/, function (req, res) {
      res.sendfile(path.join(dist_dir,req.url));
    });

    // serve main index file from here
    app.get('/', function (req, res) {
      res.sendfile(path.join(dist_dir, 'index.html'));
    });

    // create proxy to couch for all couch requests
    var proxy = new httpProxy.HttpProxy({ 
      target: proxy_target
    });

    app.all('*', function (req, res) {
      proxy.proxyRequest(req, res);
    });

    // Fail this task if any errors have been logged
    if (grunt.errors) { 
      return false;
    }

    var watch = grunt.util.spawn({cmd: 'bbb', grunt: true, args: ['watch']}, function (error, result, code) {/* log.writeln(String(result));*/ });

    watch.stdout.pipe(process.stdout);
    watch.stderr.pipe(process.stderr);

    log.writeln('Listening on ' + port);
    app.listen(port);

  });

};