Support mapbox content type (#1500)

This commit is contained in:
Tomas Della Vedova
2021-08-02 11:19:28 +02:00
committed by GitHub
parent 728868f3ea
commit b0a7a21f72
4 changed files with 91 additions and 7 deletions

View File

@ -237,6 +237,7 @@ class Transport {
const contentEncoding = (result.headers['content-encoding'] || '').toLowerCase()
const isCompressed = contentEncoding.indexOf('gzip') > -1 || contentEncoding.indexOf('deflate') > -1
const isVectorTile = (result.headers['content-type'] || '').indexOf('application/vnd.mapbox-vector-tile') > -1
/* istanbul ignore else */
if (result.headers['content-length'] !== undefined) {
@ -255,8 +256,9 @@ class Transport {
}
// if the response is compressed, we must handle it
// as buffer for allowing decompression later
let payload = isCompressed ? [] : ''
const onData = isCompressed
// while if it's a vector tile, we should return it as buffer
let payload = isCompressed || isVectorTile ? [] : ''
const onData = isCompressed || isVectorTile
? chunk => { payload.push(chunk) }
: chunk => { payload += chunk }
const onEnd = err => {
@ -272,7 +274,7 @@ class Transport {
if (isCompressed) {
unzip(Buffer.concat(payload), onBody)
} else {
onBody(null, payload)
onBody(null, isVectorTile ? Buffer.concat(payload) : payload)
}
}
@ -281,7 +283,7 @@ class Transport {
onEnd(new Error('Response aborted while reading the body'))
}
if (!isCompressed) {
if (!isCompressed && !isVectorTile) {
response.setEncoding('utf8')
}
@ -297,7 +299,9 @@ class Transport {
this.emit('response', err, result)
return callback(err, result)
}
if (Buffer.isBuffer(payload)) {
const isVectorTile = (result.headers['content-type'] || '').indexOf('application/vnd.mapbox-vector-tile') > -1
if (Buffer.isBuffer(payload) && !isVectorTile) {
payload = payload.toString()
}
const isHead = params.method === 'HEAD'