summaryrefslogtreecommitdiff
path: root/bucky/app/index.js
blob: efdaf024dcd86be58dd0be9251b1cadcd48d1ed6 (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
var api = require('./api')

var apis = {}

var xpress = {
  get: () => { this.match('get', arguments) },
  post: () => { this.match('post', arguments) },
  put: () => { this.match('put', arguments) },
  delete: () => { this.match('delete', arguments) },
  match: (type, args) => {
    var uri = args[0]
    var cbs = args.slice(1)
    apis[type] = apis[type] || {}
    apis[type][uri] = cbs
  },
}

var router = module.exports = {
  get: (uri) => { router.match('get', uri) },
  put: (uri) => { router.match('put', uri) },
  post: (uri) => { router.match('post', uri) },
  delete: (uri) => { router.match('delete', uri) },
  match: (type, uri) => {
    return (req, res, next) => {
      var fns = apis[type][uri]
      req.isAuthenticated = () => true
      res.json = (data) => { next && next(data) }
      var promises = fns.map(fn => {
        return new Promise((resolve, reject) => {
          newRes = { ...res }
          fn(req, newRes, () => {
            res = newRes
            resolve(req, res)
          })
        })
      })
      return Promise.all(promises)
    }
  },
}