UNPKG

1.19 kBJavaScriptView Raw
1var qs = require('query-string')
2var toOsm = require('obj2osm')
3var fromArray = require('from2-array')
4
5var errors = require('../errors')
6var cmpFork = require('../lib/util').cmpFork
7
8module.exports = function (req, res, api, params, next) {
9 var query = qs.parse(qs.extract(req.url))
10 if (!query[params.type]) {
11 return next(new errors.MissingParameter(params.type))
12 }
13 var ids = query[params.type].split(',')
14 var results = []
15 var pending = 1
16 var sent = false
17 ids.forEach(function (id, i) {
18 pending++
19 api.getElement(id, function (err, forks) {
20 if (sent) return
21 if (err) {
22 sent = true
23 return next(err)
24 }
25 if (!query.forks) {
26 forks = forks.sort(cmpFork).slice(0, 1)
27 }
28 results[i] = forks
29 if (--pending === 0) done()
30 })
31 })
32 if (--pending === 0) done()
33
34 function done () {
35 var flattened = []
36 results.forEach(function (group) {
37 group.forEach(function (g) {
38 flattened.push(g)
39 })
40 })
41 var r = fromArray.obj(flattened).on('error', next)
42 var t = toOsm().on('error', next)
43 res.setHeader('content-type', 'text/xml; charset=utf-8')
44 r.pipe(t).pipe(res)
45 }
46}
47