1 | var collect = require('collect-stream')
|
2 | var osm2Obj = require('osm2json')
|
3 | var toOsm = require('obj2osm')
|
4 | var fromArray = require('from2-array')
|
5 |
|
6 | var errors = require('../errors')
|
7 | var isValidContentType = require('../lib/util').isValidContentType
|
8 |
|
9 | module.exports = function (req, res, api, params, next) {
|
10 | if (!isValidContentType(req)) {
|
11 | return next(new errors.UnsupportedContentType())
|
12 | }
|
13 | var parts = params.id.split(':')
|
14 | var version = parts.length === 2 ? parts[1] : null
|
15 |
|
16 | var r = req.pipe(osm2Obj({coerceIds: false}))
|
17 | collect(r, function (err, changes) {
|
18 | if (err || !changes.length) return next(new errors.XmlParseError(err))
|
19 | api.putChanges(changes, params.id, version, function (err, diffResult) {
|
20 | if (err) return next(err)
|
21 | var r = fromArray.obj(diffResult).on('error', next)
|
22 | var t = toOsm({root: 'diffResult'}).on('error', next)
|
23 | res.setHeader('content-type', 'text/xml; charset=utf-8')
|
24 | r.pipe(t).pipe(res)
|
25 | })
|
26 | })
|
27 | }
|