Sha256: 682e0812a9f4f7e4cee568a94f3b51ba0d9e5aec3fb0ec3042d9d5444cf892cf

Contents?: true

Size: 1.29 KB

Versions: 33

Compression:

Stored size: 1.29 KB

Contents

'use strict';
const {Transform, PassThrough} = require('stream');
const zlib = require('zlib');
const mimicResponse = require('mimic-response');

module.exports = response => {
	const contentEncoding = (response.headers['content-encoding'] || '').toLowerCase();

	if (!['gzip', 'deflate', 'br'].includes(contentEncoding)) {
		return response;
	}

	// TODO: Remove this when targeting Node.js 12.
	const isBrotli = contentEncoding === 'br';
	if (isBrotli && typeof zlib.createBrotliDecompress !== 'function') {
		response.destroy(new Error('Brotli is not supported on Node.js < 12'));
		return response;
	}

	let isEmpty = true;

	const checker = new Transform({
		transform(data, _encoding, callback) {
			isEmpty = false;

			callback(null, data);
		},

		flush(callback) {
			callback();
		}
	});

	const finalStream = new PassThrough({
		autoDestroy: false,
		destroy(error, callback) {
			response.destroy();

			callback(error);
		}
	});

	const decompressStream = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip();

	decompressStream.once('error', error => {
		if (isEmpty && !response.readable) {
			finalStream.end();
			return;
		}

		finalStream.destroy(error);
	});

	mimicResponse(response, finalStream);
	response.pipe(checker).pipe(decompressStream).pipe(finalStream);

	return finalStream;
};

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
immosquare-cleaner-0.1.40 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.39 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.38 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.32 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.31 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.30 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.29 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.28 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.27 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.26 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.25 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.24 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.23 node_modules/decompress-response/index.js