32 lines
935 B
JavaScript
32 lines
935 B
JavaScript
|
'use strict';
|
||
|
const decompressResponse = require('decompress-response');
|
||
|
const is = require('@sindresorhus/is');
|
||
|
const mimicResponse = require('mimic-response');
|
||
|
const progress = require('./progress');
|
||
|
|
||
|
module.exports = (response, options, emitter) => {
|
||
|
const downloadBodySize = Number(response.headers['content-length']) || null;
|
||
|
|
||
|
const progressStream = progress.download(response, emitter, downloadBodySize);
|
||
|
|
||
|
mimicResponse(response, progressStream);
|
||
|
|
||
|
const newResponse = options.decompress === true &&
|
||
|
is.function(decompressResponse) &&
|
||
|
options.method !== 'HEAD' ? decompressResponse(progressStream) : progressStream;
|
||
|
|
||
|
if (!options.decompress && ['gzip', 'deflate'].includes(response.headers['content-encoding'])) {
|
||
|
options.encoding = null;
|
||
|
}
|
||
|
|
||
|
emitter.emit('response', newResponse);
|
||
|
|
||
|
emitter.emit('downloadProgress', {
|
||
|
percent: 0,
|
||
|
transferred: 0,
|
||
|
total: downloadBodySize
|
||
|
});
|
||
|
|
||
|
response.pipe(progressStream);
|
||
|
};
|