UNPKG

1.18 kBJavaScriptView Raw
1/**
2 * Create Changeset
3 * http://wiki.openstreetmap.org/wiki/API_v0.6#Create:_PUT_.2Fapi.2F0.6.2Fchangeset.2Fcreate
4 */
5
6var collect = require('collect-stream')
7var xtend = require('xtend')
8var osm2Obj = require('osm2json')
9
10var errors = require('../errors')
11var isValidContentType = require('../lib/util').isValidContentType
12
13module.exports = function (req, res, api, params, next) {
14 if (!isValidContentType(req)) {
15 return next(new errors.UnsupportedContentType())
16 }
17
18 var r = req.pipe(osm2Obj({types: ['changeset'], strict: true, coerceIds: false}))
19 collect(r, function (err, ops) {
20 if (err) return next(new errors.XmlParseError(err))
21 if (!ops.length) return next(new errors.XmlMissingElement('changeset'))
22
23 // If more than one changeset element is included in the PUT request
24 // tags are merged with later tags overwriting previous tags
25 var mergedChangeset = ops.reduce(function (p, v) {
26 p.tags = xtend(p.tags, v.tags)
27 return p
28 })
29 api.createChangeset(mergedChangeset, function (err, id, node) {
30 if (err) return next(err)
31 res.setHeader('content-type', 'text/plain; charset=utf-8')
32 res.end(id)
33 })
34 })
35}