diff --git a/lib/zlib.js b/lib/zlib.js index 5fcd736f6652a1b..ec327dc583da084 100644 --- a/lib/zlib.js +++ b/lib/zlib.js @@ -89,7 +89,7 @@ const { BROTLI_DECODE, BROTLI_ENCODE, // Brotli operations (~flush levels) BROTLI_OPERATION_PROCESS, BROTLI_OPERATION_FLUSH, - BROTLI_OPERATION_FINISH + BROTLI_OPERATION_FINISH, BROTLI_OPERATION_EMIT_METADATA, } = constants; // Translation table for return codes. @@ -238,8 +238,15 @@ const checkRangesOrGetDefault = hideStackFrames( } ); +function isBrotliHandle(handle) { + return (handle instanceof binding.BrotliEncoder) || + (handle instanceof binding.BrotliDecoder); +} + // The base class for all Zlib-style streams. function ZlibBase(opts, mode, handle, { flush, finishFlush, fullFlush }) { + const isBrotli = isBrotliHandle(handle); + let chunkSize = Z_DEFAULT_CHUNK; let maxOutputLength = kMaxLength; // The ZlibBase class is not exported to user land, the mode should only be @@ -256,13 +263,27 @@ function ZlibBase(opts, mode, handle, { flush, finishFlush, fullFlush }) { `>= ${Z_MIN_CHUNK}`, chunkSize); } - flush = checkRangesOrGetDefault( - opts.flush, 'options.flush', - Z_NO_FLUSH, Z_BLOCK, flush); + if (!isBrotli) { + flush = checkRangesOrGetDefault( + opts.flush, 'options.flush', + Z_NO_FLUSH, Z_BLOCK, flush); - finishFlush = checkRangesOrGetDefault( - opts.finishFlush, 'options.finishFlush', - Z_NO_FLUSH, Z_BLOCK, finishFlush); + finishFlush = checkRangesOrGetDefault( + opts.finishFlush, 'options.finishFlush', + Z_NO_FLUSH, Z_BLOCK, finishFlush); + } else { + flush = checkRangesOrGetDefault( + opts.flush, 'options.flush', + BROTLI_OPERATION_PROCESS, BROTLI_OPERATION_EMIT_METADATA, flush); + + finishFlush = checkRangesOrGetDefault( + opts.finishFlush, 'options.finishFlush', + BROTLI_OPERATION_PROCESS, BROTLI_OPERATION_EMIT_METADATA, finishFlush); + + fullFlush = checkRangesOrGetDefault( + opts.finishFlush, 'options.finishFlush', + BROTLI_OPERATION_PROCESS, BROTLI_OPERATION_EMIT_METADATA, finishFlush); + } maxOutputLength = checkRangesOrGetDefault( opts.maxOutputLength, 'options.maxOutputLength',