CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
1'use strict';2const {Transform, PassThrough} = require('stream');3const zlib = require('zlib');4const mimicResponse = require('mimic-response');5 6module.exports = response => {7	const contentEncoding = (response.headers['content-encoding'] || '').toLowerCase();8 9	if (!['gzip', 'deflate', 'br'].includes(contentEncoding)) {10		return response;11	}12 13	// TODO: Remove this when targeting Node.js 12.14	const isBrotli = contentEncoding === 'br';15	if (isBrotli && typeof zlib.createBrotliDecompress !== 'function') {16		response.destroy(new Error('Brotli is not supported on Node.js < 12'));17		return response;18	}19 20	let isEmpty = true;21 22	const checker = new Transform({23		transform(data, _encoding, callback) {24			isEmpty = false;25 26			callback(null, data);27		},28 29		flush(callback) {30			callback();31		}32	});33 34	const finalStream = new PassThrough({35		autoDestroy: false,36		destroy(error, callback) {37			response.destroy();38 39			callback(error);40		}41	});42 43	const decompressStream = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip();44 45	decompressStream.once('error', error => {46		if (isEmpty && !response.readable) {47			finalStream.end();48			return;49		}50 51		finalStream.destroy(error);52	});53 54	mimicResponse(response, finalStream);55	response.pipe(checker).pipe(decompressStream).pipe(finalStream);56 57	return finalStream;58};59