From 17b37dacdba031908665fc9d3a776ea8a0db8c47 Mon Sep 17 00:00:00 2001 From: Nicholas Paun Date: Fri, 27 Sep 2024 09:48:40 -0700 Subject: [PATCH] Expose zlib constants directly under zlib module --- src/node/zlib.ts | 223 ++++++++++++++++++ .../api/node/tests/zlib-nodejs-test.js | 9 + 2 files changed, 232 insertions(+) diff --git a/src/node/zlib.ts b/src/node/zlib.ts index 9966c4d8e65..ee98a86aa12 100644 --- a/src/node/zlib.ts +++ b/src/node/zlib.ts @@ -4,6 +4,119 @@ import { constants, codes } from 'node-internal:internal_zlib_constants'; import { default as compatFlags } from 'workerd:compatibility-flags'; const { nodeJsZlib } = compatFlags; +const { + Z_NO_FLUSH, + Z_PARTIAL_FLUSH, + Z_SYNC_FLUSH, + Z_FULL_FLUSH, + Z_FINISH, + Z_BLOCK, + + Z_OK, + Z_STREAM_END, + Z_NEED_DICT, + Z_ERRNO, + Z_STREAM_ERROR, + Z_DATA_ERROR, + Z_MEM_ERROR, + Z_BUF_ERROR, + Z_VERSION_ERROR, + + Z_NO_COMPRESSION, + Z_BEST_SPEED, + Z_BEST_COMPRESSION, + Z_DEFAULT_COMPRESSION, + Z_FILTERED, + Z_HUFFMAN_ONLY, + Z_RLE, + Z_FIXED, + Z_DEFAULT_STRATEGY, + ZLIB_VERNUM, + + DEFLATE, + INFLATE, + GZIP, + GUNZIP, + DEFLATERAW, + INFLATERAW, + UNZIP, + BROTLI_DECODE, + BROTLI_ENCODE, + + Z_MIN_WINDOWBITS, + Z_MAX_WINDOWBITS, + Z_DEFAULT_WINDOWBITS, + Z_MIN_CHUNK, + Z_MAX_CHUNK, + Z_DEFAULT_CHUNK, + Z_MIN_MEMLEVEL, + Z_MAX_MEMLEVEL, + Z_DEFAULT_MEMLEVEL, + Z_MIN_LEVEL, + Z_MAX_LEVEL, + Z_DEFAULT_LEVEL, + + BROTLI_OPERATION_PROCESS, + BROTLI_OPERATION_FLUSH, + BROTLI_OPERATION_FINISH, + BROTLI_OPERATION_EMIT_METADATA, + BROTLI_PARAM_MODE, + BROTLI_MODE_GENERIC, + BROTLI_MODE_TEXT, + BROTLI_MODE_FONT, + BROTLI_DEFAULT_MODE, + BROTLI_PARAM_QUALITY, + BROTLI_MIN_QUALITY, + BROTLI_MAX_QUALITY, + BROTLI_DEFAULT_QUALITY, + BROTLI_PARAM_LGWIN, + BROTLI_MIN_WINDOW_BITS, + BROTLI_MAX_WINDOW_BITS, + BROTLI_LARGE_MAX_WINDOW_BITS, + BROTLI_DEFAULT_WINDOW, + BROTLI_PARAM_LGBLOCK, + BROTLI_MIN_INPUT_BLOCK_BITS, + BROTLI_MAX_INPUT_BLOCK_BITS, + BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING, + BROTLI_PARAM_LARGE_WINDOW, + BROTLI_PARAM_NPOSTFIX, + BROTLI_PARAM_NDIRECT, + BROTLI_DECODER_RESULT_ERROR, + BROTLI_DECODER_RESULT_SUCCESS, + BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT, + BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT, + BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION, + BROTLI_DECODER_PARAM_LARGE_WINDOW, + BROTLI_DECODER_NO_ERROR, + BROTLI_DECODER_SUCCESS, + BROTLI_DECODER_NEEDS_MORE_INPUT, + BROTLI_DECODER_NEEDS_MORE_OUTPUT, + BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE, + BROTLI_DECODER_ERROR_FORMAT_RESERVED, + BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE, + BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET, + BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME, + BROTLI_DECODER_ERROR_FORMAT_CL_SPACE, + BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE, + BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT, + BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1, + BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2, + BROTLI_DECODER_ERROR_FORMAT_TRANSFORM, + BROTLI_DECODER_ERROR_FORMAT_DICTIONARY, + BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS, + BROTLI_DECODER_ERROR_FORMAT_PADDING_1, + BROTLI_DECODER_ERROR_FORMAT_PADDING_2, + BROTLI_DECODER_ERROR_FORMAT_DISTANCE, + BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET, + BROTLI_DECODER_ERROR_INVALID_ARGUMENTS, + BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES, + BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS, + BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP, + BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1, + BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2, + BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES, + BROTLI_DECODER_ERROR_UNREACHABLE, +} = constants; function protectMethod(method: unknown): unknown { if (!nodeJsZlib) { @@ -100,12 +213,122 @@ export { brotliDecompressSync, brotliCompress, brotliCompressSync, + + // NodeJS also exports all constants directly under zlib, but this is deprecated + Z_NO_FLUSH, + Z_PARTIAL_FLUSH, + Z_SYNC_FLUSH, + Z_FULL_FLUSH, + Z_FINISH, + Z_BLOCK, + Z_OK, + Z_STREAM_END, + Z_NEED_DICT, + Z_ERRNO, + Z_STREAM_ERROR, + Z_DATA_ERROR, + Z_MEM_ERROR, + Z_BUF_ERROR, + Z_VERSION_ERROR, + Z_NO_COMPRESSION, + Z_BEST_SPEED, + Z_BEST_COMPRESSION, + Z_DEFAULT_COMPRESSION, + Z_FILTERED, + Z_HUFFMAN_ONLY, + Z_RLE, + Z_FIXED, + Z_DEFAULT_STRATEGY, + ZLIB_VERNUM, + DEFLATE, + INFLATE, + GZIP, + GUNZIP, + DEFLATERAW, + INFLATERAW, + UNZIP, + BROTLI_DECODE, + BROTLI_ENCODE, + Z_MIN_WINDOWBITS, + Z_MAX_WINDOWBITS, + Z_DEFAULT_WINDOWBITS, + Z_MIN_CHUNK, + Z_MAX_CHUNK, + Z_DEFAULT_CHUNK, + Z_MIN_MEMLEVEL, + Z_MAX_MEMLEVEL, + Z_DEFAULT_MEMLEVEL, + Z_MIN_LEVEL, + Z_MAX_LEVEL, + Z_DEFAULT_LEVEL, + BROTLI_OPERATION_PROCESS, + BROTLI_OPERATION_FLUSH, + BROTLI_OPERATION_FINISH, + BROTLI_OPERATION_EMIT_METADATA, + BROTLI_PARAM_MODE, + BROTLI_MODE_GENERIC, + BROTLI_MODE_TEXT, + BROTLI_MODE_FONT, + BROTLI_DEFAULT_MODE, + BROTLI_PARAM_QUALITY, + BROTLI_MIN_QUALITY, + BROTLI_MAX_QUALITY, + BROTLI_DEFAULT_QUALITY, + BROTLI_PARAM_LGWIN, + BROTLI_MIN_WINDOW_BITS, + BROTLI_MAX_WINDOW_BITS, + BROTLI_LARGE_MAX_WINDOW_BITS, + BROTLI_DEFAULT_WINDOW, + BROTLI_PARAM_LGBLOCK, + BROTLI_MIN_INPUT_BLOCK_BITS, + BROTLI_MAX_INPUT_BLOCK_BITS, + BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING, + BROTLI_PARAM_LARGE_WINDOW, + BROTLI_PARAM_NPOSTFIX, + BROTLI_PARAM_NDIRECT, + BROTLI_DECODER_RESULT_ERROR, + BROTLI_DECODER_RESULT_SUCCESS, + BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT, + BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT, + BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION, + BROTLI_DECODER_PARAM_LARGE_WINDOW, + BROTLI_DECODER_NO_ERROR, + BROTLI_DECODER_SUCCESS, + BROTLI_DECODER_NEEDS_MORE_INPUT, + BROTLI_DECODER_NEEDS_MORE_OUTPUT, + BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE, + BROTLI_DECODER_ERROR_FORMAT_RESERVED, + BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE, + BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET, + BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME, + BROTLI_DECODER_ERROR_FORMAT_CL_SPACE, + BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE, + BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT, + BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1, + BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2, + BROTLI_DECODER_ERROR_FORMAT_TRANSFORM, + BROTLI_DECODER_ERROR_FORMAT_DICTIONARY, + BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS, + BROTLI_DECODER_ERROR_FORMAT_PADDING_1, + BROTLI_DECODER_ERROR_FORMAT_PADDING_2, + BROTLI_DECODER_ERROR_FORMAT_DISTANCE, + BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET, + BROTLI_DECODER_ERROR_INVALID_ARGUMENTS, + BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES, + BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS, + BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP, + BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1, + BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2, + BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES, + BROTLI_DECODER_ERROR_UNREACHABLE, }; export default { crc32, codes, constants, + // NodeJS also exports all constants directly under zlib, but this is deprecated + ...constants, // Classes Gzip, diff --git a/src/workerd/api/node/tests/zlib-nodejs-test.js b/src/workerd/api/node/tests/zlib-nodejs-test.js index a717f0c88bc..a0e614f1571 100644 --- a/src/workerd/api/node/tests/zlib-nodejs-test.js +++ b/src/workerd/api/node/tests/zlib-nodejs-test.js @@ -373,6 +373,15 @@ export const constantsTest = { }, }; +// This test makes sure constants can be accessed from the zlib module directly +// This is supported by NodeJS, but is deprecated. +export const constantsDirectlyUnderZlibTest = { + test() { + assert.deepStrictEqual(zlib.Z_NEED_DICT, 2); + assert.deepStrictEqual(zlib.Z_OK, 0); + }, +}; + // Tests are taken from: // https://github.com/nodejs/node/blob/561bc87c7607208f0d3db6dcd9231efeb48cfe2f/test/parallel/test-zlib-zero-windowBits.js export const testZeroWindowBits = {