42 lines
844 B
JavaScript
42 lines
844 B
JavaScript
|
|
var zlib = require('zlib')
|
|
|
|
module.exports = inflate
|
|
|
|
function inflate(stream, options) {
|
|
if (!stream) {
|
|
throw new TypeError('argument stream is required')
|
|
}
|
|
|
|
options = options || {}
|
|
|
|
var encoding = options.encoding
|
|
|| (stream.headers && stream.headers['content-encoding'])
|
|
|| 'identity'
|
|
|
|
var decompression
|
|
switch (encoding) {
|
|
case 'gzip':
|
|
case 'deflate':
|
|
delete options.brotli
|
|
delete options.encoding
|
|
decompression = zlib.createUnzip(options)
|
|
break
|
|
case 'br':
|
|
if (zlib.createBrotliDecompress) {
|
|
decompression = zlib.createBrotliDecompress(options.brotli)
|
|
}
|
|
break
|
|
case 'identity':
|
|
return stream
|
|
}
|
|
|
|
if (!decompression) {
|
|
var err = new Error('Unsupported Content-Encoding: ' + encoding)
|
|
err.status = 415
|
|
throw err
|
|
}
|
|
|
|
return stream.pipe(decompression)
|
|
}
|