1 | var qs = require('query-string')
|
2 | var toOsm = require('obj2osm')
|
3 | var fromArray = require('from2-array')
|
4 |
|
5 | var errors = require('../errors')
|
6 | var cmpFork = require('../lib/util').cmpFork
|
7 |
|
8 | module.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 |
|