From 3c66f2bab66623460115cb3f06c1db36f0eac87a Mon Sep 17 00:00:00 2001 From: Nicholas Paun Date: Wed, 7 Aug 2024 13:24:17 -0700 Subject: [PATCH] node:zlib implem: Expose zlib.constants --- src/node/internal/internal_zlib.ts | 18 +- src/node/internal/zlib.d.ts | 114 +++++++++++ src/node/zlib.ts | 4 +- src/workerd/api/node/BUILD.bazel | 2 +- .../api/node/tests/zlib-nodejs-test.js | 117 ++++++++++- src/workerd/api/node/zlib-util.c++ | 4 - src/workerd/api/node/zlib-util.h | 186 +++++++++++++++++- 7 files changed, 435 insertions(+), 10 deletions(-) diff --git a/src/node/internal/internal_zlib.ts b/src/node/internal/internal_zlib.ts index 89b2d13cd66..275c13a631c 100644 --- a/src/node/internal/internal_zlib.ts +++ b/src/node/internal/internal_zlib.ts @@ -1,6 +1,6 @@ import { default as zlibUtil } from 'node-internal:zlib'; import { Buffer } from 'node-internal:internal_buffer'; -import { validateUint32 } from 'node-internal:validators'; +import { validateUint32 } from 'node-internal:validators'; import { isArrayBufferView } from 'node-internal:internal_types'; import { ERR_INVALID_ARG_TYPE } from 'node-internal:internal_errors'; @@ -14,6 +14,22 @@ function crc32(data: ArrayBufferView | string, value: number = 0): number { return zlibUtil.crc32(data, value); } + +const constPrefix = 'CONST_'; +const constants = {}; + +// eslint-disable-next-line @typescript-eslint/no-unsafe-argument +Object.defineProperties(constants, Object.fromEntries(Object.entries(Object.getPrototypeOf(zlibUtil)) + .filter(([k,]) => k.startsWith(constPrefix)) + .map(([k, v]) => [k.slice(constPrefix.length), { + value: v, + writable: false, + configurable: false, + enumerable: true + }]) +)); + export { crc32, + constants, } diff --git a/src/node/internal/zlib.d.ts b/src/node/internal/zlib.d.ts index acc60819dcd..247e34aa816 100644 --- a/src/node/internal/zlib.d.ts +++ b/src/node/internal/zlib.d.ts @@ -1 +1,115 @@ export function crc32(data: ArrayBufferView, value: number): number; + +// zlib.constants (part of the API contract for node:zlib) +export const CONST_Z_NO_FLUSH: number; +export const CONST_Z_PARTIAL_FLUSH: number; +export const CONST_Z_SYNC_FLUSH: number; +export const CONST_Z_FULL_FLUSH: number; +export const CONST_Z_FINISH: number; +export const CONST_Z_BLOCK: number; + +export const CONST_Z_OK: number; +export const CONST_Z_STREAM_END: number; +export const CONST_Z_NEED_DICT: number; +export const CONST_Z_ERRNO: number; +export const CONST_Z_STREAM_ERROR: number; +export const CONST_Z_DATA_ERROR: number; +export const CONST_Z_MEM_ERROR: number; +export const CONST_Z_BUF_ERROR: number; +export const CONST_Z_VERSION_ERROR: number; + +export const CONST_Z_NO_COMPRESSION: number; +export const CONST_Z_BEST_SPEED: number; +export const CONST_Z_BEST_COMPRESSION: number; +export const CONST_Z_DEFAULT_COMPRESSION: number; +export const CONST_Z_FILTERED: number; +export const CONST_Z_HUFFMAN_ONLY: number; +export const CONST_Z_RLE: number; +export const CONST_Z_FIXED: number; +export const CONST_Z_DEFAULT_STRATEGY: number; +export const CONST_ZLIB_VERNUM: number; + +export const CONST_DEFLATE: number; +export const CONST_INFLATE: number; +export const CONST_GZIP: number; +export const CONST_GUNZIP: number; +export const CONST_DEFLATERAW: number; +export const CONST_INFLATERAW: number; +export const CONST_UNZIP: number; +export const CONST_BROTLI_DECODE: number; +export const CONST_BROTLI_ENCODE: number; + +export const CONST_Z_MIN_WINDOWBITS: number; +export const CONST_Z_MAX_WINDOWBITS: number; +export const CONST_Z_DEFAULT_WINDOWBITS: number; +export const CONST_Z_MIN_CHUNK: number; +export const CONST_Z_MAX_CHUNK: number; +export const CONST_Z_DEFAULT_CHUNK: number; +export const CONST_Z_MIN_MEMLEVEL: number; +export const CONST_Z_MAX_MEMLEVEL: number; +export const CONST_Z_DEFAULT_MEMLEVEL: number; +export const CONST_Z_MIN_LEVEL: number; +export const CONST_Z_MAX_LEVEL: number; +export const CONST_Z_DEFAULT_LEVEL: number; + +export const CONST_BROTLI_OPERATION_PROCESS: number; +export const CONST_BROTLI_OPERATION_FLUSH: number; +export const CONST_BROTLI_OPERATION_FINISH: number; +export const CONST_BROTLI_OPERATION_EMIT_METADATA: number; +export const CONST_BROTLI_PARAM_MODE: number; +export const CONST_BROTLI_MODE_GENERIC: number; +export const CONST_BROTLI_MODE_TEXT: number; +export const CONST_BROTLI_MODE_FONT: number; +export const CONST_BROTLI_DEFAULT_MODE: number; +export const CONST_BROTLI_PARAM_QUALITY: number; +export const CONST_BROTLI_MIN_QUALITY: number; +export const CONST_BROTLI_MAX_QUALITY: number; +export const CONST_BROTLI_DEFAULT_QUALITY: number; +export const CONST_BROTLI_PARAM_LGWIN: number; +export const CONST_BROTLI_MIN_WINDOW_BITS: number; +export const CONST_BROTLI_MAX_WINDOW_BITS: number; +export const CONST_BROTLI_LARGE_MAX_WINDOW_BITS: number; +export const CONST_BROTLI_DEFAULT_WINDOW: number; +export const CONST_BROTLI_PARAM_LGBLOCK: number; +export const CONST_BROTLI_MIN_INPUT_BLOCK_BITS: number; +export const CONST_BROTLI_MAX_INPUT_BLOCK_BITS: number; +export const CONST_BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: number; +export const CONST_BROTLI_PARAM_SIZE_HINT: number; +export const CONST_BROTLI_PARAM_LARGE_WINDOW: number; +export const CONST_BROTLI_PARAM_NPOSTFIX: number; +export const CONST_BROTLI_PARAM_NDIRECT: number; +export const CONST_BROTLI_DECODER_RESULT_ERROR: number; +export const CONST_BROTLI_DECODER_RESULT_SUCCESS: number; +export const CONST_BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: number; +export const CONST_BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: number; +export const CONST_BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: number; +export const CONST_BROTLI_DECODER_PARAM_LARGE_WINDOW: number; +export const CONST_BROTLI_DECODER_NO_ERROR: number; +export const CONST_BROTLI_DECODER_SUCCESS: number; +export const CONST_BROTLI_DECODER_NEEDS_MORE_INPUT: number; +export const CONST_BROTLI_DECODER_NEEDS_MORE_OUTPUT: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_RESERVED: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_PADDING_1: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_PADDING_2: number; +export const CONST_BROTLI_DECODER_ERROR_FORMAT_DISTANCE: number; +export const CONST_BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: number; +export const CONST_BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: number; +export const CONST_BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: number; +export const CONST_BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: number; +export const CONST_BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: number; +export const CONST_BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: number; +export const CONST_BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: number; +export const CONST_BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: number; +export const CONST_BROTLI_DECODER_ERROR_UNREACHABLE: number; diff --git a/src/node/zlib.ts b/src/node/zlib.ts index 8fdf053b252..488c0057fb6 100644 --- a/src/node/zlib.ts +++ b/src/node/zlib.ts @@ -1,9 +1,11 @@ -import { crc32 } from 'node-internal:internal_zlib'; +import { crc32, constants } from 'node-internal:internal_zlib'; export { crc32, + constants, } export default { crc32, + constants, } diff --git a/src/workerd/api/node/BUILD.bazel b/src/workerd/api/node/BUILD.bazel index e563b61ce30..d770ec5a8b2 100644 --- a/src/workerd/api/node/BUILD.bazel +++ b/src/workerd/api/node/BUILD.bazel @@ -8,13 +8,13 @@ wd_cc_library( hdrs = glob(["**/*.h"]), implementation_deps = [ "//src/workerd/util:perfetto", - "@capnp-cpp//src/kj/compat:kj-brotli", "@capnp-cpp//src/kj/compat:kj-gzip", "@simdutf", ], visibility = ["//visibility:public"], deps = [ "//src/workerd/io", + "@capnp-cpp//src/kj/compat:kj-brotli", ], ) diff --git a/src/workerd/api/node/tests/zlib-nodejs-test.js b/src/workerd/api/node/tests/zlib-nodejs-test.js index 24a5852384d..69c5a48533c 100644 --- a/src/workerd/api/node/tests/zlib-nodejs-test.js +++ b/src/workerd/api/node/tests/zlib-nodejs-test.js @@ -1,9 +1,10 @@ import { strictEqual, throws, + deepStrictEqual } from 'node:assert'; import { Buffer } from 'node:buffer'; -import { crc32 } from 'node:zlib'; +import { crc32, constants } from 'node:zlib'; // The following test data comes from @@ -213,3 +214,117 @@ export const crc32Test = { }); } } + +export const constantsTest = { + test() { + deepStrictEqual(Object.keys(constants).sort(), [ + "BROTLI_DECODE", + "BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES", + "BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP", + "BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES", + "BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1", + "BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2", + "BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS", + "BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET", + "BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1", + "BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2", + "BROTLI_DECODER_ERROR_FORMAT_CL_SPACE", + "BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT", + "BROTLI_DECODER_ERROR_FORMAT_DICTIONARY", + "BROTLI_DECODER_ERROR_FORMAT_DISTANCE", + "BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE", + "BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE", + "BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE", + "BROTLI_DECODER_ERROR_FORMAT_PADDING_1", + "BROTLI_DECODER_ERROR_FORMAT_PADDING_2", + "BROTLI_DECODER_ERROR_FORMAT_RESERVED", + "BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET", + "BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME", + "BROTLI_DECODER_ERROR_FORMAT_TRANSFORM", + "BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS", + "BROTLI_DECODER_ERROR_INVALID_ARGUMENTS", + "BROTLI_DECODER_ERROR_UNREACHABLE", + "BROTLI_DECODER_NEEDS_MORE_INPUT", + "BROTLI_DECODER_NEEDS_MORE_OUTPUT", + "BROTLI_DECODER_NO_ERROR", + "BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION", + "BROTLI_DECODER_PARAM_LARGE_WINDOW", + "BROTLI_DECODER_RESULT_ERROR", + "BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT", + "BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT", + "BROTLI_DECODER_RESULT_SUCCESS", + "BROTLI_DECODER_SUCCESS", + "BROTLI_DEFAULT_MODE", + "BROTLI_DEFAULT_QUALITY", + "BROTLI_DEFAULT_WINDOW", + "BROTLI_ENCODE", + "BROTLI_LARGE_MAX_WINDOW_BITS", + "BROTLI_MAX_INPUT_BLOCK_BITS", + "BROTLI_MAX_QUALITY", + "BROTLI_MAX_WINDOW_BITS", + "BROTLI_MIN_INPUT_BLOCK_BITS", + "BROTLI_MIN_QUALITY", + "BROTLI_MIN_WINDOW_BITS", + "BROTLI_MODE_FONT", + "BROTLI_MODE_GENERIC", + "BROTLI_MODE_TEXT", + "BROTLI_OPERATION_EMIT_METADATA", + "BROTLI_OPERATION_FINISH", + "BROTLI_OPERATION_FLUSH", + "BROTLI_OPERATION_PROCESS", + "BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING", + "BROTLI_PARAM_LARGE_WINDOW", + "BROTLI_PARAM_LGBLOCK", + "BROTLI_PARAM_LGWIN", + "BROTLI_PARAM_MODE", + "BROTLI_PARAM_NDIRECT", + "BROTLI_PARAM_NPOSTFIX", + "BROTLI_PARAM_QUALITY", + "BROTLI_PARAM_SIZE_HINT", + "DEFLATE", + "DEFLATERAW", + "GUNZIP", + "GZIP", + "INFLATE", + "INFLATERAW", + "UNZIP", + "ZLIB_VERNUM", + "Z_BEST_COMPRESSION", + "Z_BEST_SPEED", + "Z_BLOCK", + "Z_BUF_ERROR", + "Z_DATA_ERROR", + "Z_DEFAULT_CHUNK", + "Z_DEFAULT_COMPRESSION", + "Z_DEFAULT_LEVEL", + "Z_DEFAULT_MEMLEVEL", + "Z_DEFAULT_STRATEGY", + "Z_DEFAULT_WINDOWBITS", + "Z_ERRNO", + "Z_FILTERED", + "Z_FINISH", + "Z_FIXED", + "Z_FULL_FLUSH", + "Z_HUFFMAN_ONLY", + "Z_MAX_CHUNK", + "Z_MAX_LEVEL", + "Z_MAX_MEMLEVEL", + "Z_MAX_WINDOWBITS", + "Z_MEM_ERROR", + "Z_MIN_CHUNK", + "Z_MIN_LEVEL", + "Z_MIN_MEMLEVEL", + "Z_MIN_WINDOWBITS", + "Z_NEED_DICT", + "Z_NO_COMPRESSION", + "Z_NO_FLUSH", + "Z_OK", + "Z_PARTIAL_FLUSH", + "Z_RLE", + "Z_STREAM_END", + "Z_STREAM_ERROR", + "Z_SYNC_FLUSH", + "Z_VERSION_ERROR" + ]); + } +} diff --git a/src/workerd/api/node/zlib-util.c++ b/src/workerd/api/node/zlib-util.c++ index b8131d73dda..567d4062d74 100644 --- a/src/workerd/api/node/zlib-util.c++ +++ b/src/workerd/api/node/zlib-util.c++ @@ -3,13 +3,9 @@ // https://opensource.org/licenses/Apache-2.0 #include "zlib-util.h" -#include "zlib.h" - namespace workerd::api::node { - uint32_t ZlibUtil::crc32Sync(kj::Array data, uint32_t value) { // Note: Bytef is defined in zlib.h return crc32(value, reinterpret_cast(data.begin()), data.size()); } - } // namespace workerd::api::node diff --git a/src/workerd/api/node/zlib-util.h b/src/workerd/api/node/zlib-util.h index 44b9fe7ef41..522deddf560 100644 --- a/src/workerd/api/node/zlib-util.h +++ b/src/workerd/api/node/zlib-util.h @@ -1,9 +1,16 @@ // Copyright (c) 2017-2022 Cloudflare, Inc. // Licensed under the Apache 2.0 license found in the LICENSE file or at: // https://opensource.org/licenses/Apache-2.0 -#include + #include +#include +#include +#include "zlib.h" + +#include +#include + namespace workerd::api::node { // Implements utilities in support of the Node.js Zlib @@ -12,11 +19,186 @@ class ZlibUtil final : public jsg::Object { ZlibUtil() = default; ZlibUtil(jsg::Lock&, const jsg::Url&) {} + // Certain zlib constants are defined by NodeJS itself + static constexpr auto Z_MIN_CHUNK = 64; + static constexpr auto Z_MAX_CHUNK = 128 * 1024; + static constexpr auto Z_DEFAULT_CHUNK = 16 * 1024; + static constexpr auto Z_MIN_MEMLEVEL = 1; + + static constexpr auto Z_MAX_MEMLEVEL = 9; + static constexpr auto Z_DEFAULT_MEMLEVEL = 8; + static constexpr auto Z_MIN_LEVEL = -1; + static constexpr auto Z_MAX_LEVEL = 9; + static constexpr auto Z_DEFAULT_LEVEL = Z_DEFAULT_COMPRESSION; + static constexpr auto Z_MIN_WINDOWBITS = 8; + static constexpr auto Z_MAX_WINDOWBITS = 15; + static constexpr auto Z_DEFAULT_WINDOWBITS = 15; + + using ZlibModeValue = uint8_t; + enum class ZlibMode: ZlibModeValue { + NONE, + DEFLATE, + INFLATE, + GZIP, + GUNZIP, + DEFLATERAW, + INFLATERAW, + UNZIP, + BROTLI_DECODE, + BROTLI_ENCODE + }; + uint32_t crc32Sync(kj::Array data, uint32_t value); JSG_RESOURCE_TYPE(ZlibUtil) { JSG_METHOD_NAMED(crc32, crc32Sync); - } + + // zlib.constants (part of the API contract for node:zlib) + JSG_STATIC_CONSTANT_NAMED(CONST_Z_NO_FLUSH, Z_NO_FLUSH); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_PARTIAL_FLUSH, Z_PARTIAL_FLUSH); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_SYNC_FLUSH, Z_SYNC_FLUSH); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_FULL_FLUSH, Z_FULL_FLUSH); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_FINISH, Z_FINISH); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_BLOCK, Z_BLOCK); + + JSG_STATIC_CONSTANT_NAMED(CONST_Z_OK, Z_OK); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_STREAM_END, Z_STREAM_END); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_NEED_DICT, Z_NEED_DICT); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_ERRNO, Z_ERRNO); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_STREAM_ERROR, Z_STREAM_ERROR); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_DATA_ERROR, Z_DATA_ERROR); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_MEM_ERROR, Z_MEM_ERROR); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_BUF_ERROR, Z_BUF_ERROR); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_VERSION_ERROR, Z_VERSION_ERROR); + + JSG_STATIC_CONSTANT_NAMED(CONST_Z_NO_COMPRESSION, Z_NO_COMPRESSION); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_BEST_SPEED, Z_BEST_SPEED); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_BEST_COMPRESSION, Z_BEST_COMPRESSION); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_DEFAULT_COMPRESSION, Z_DEFAULT_COMPRESSION); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_FILTERED, Z_FILTERED); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_HUFFMAN_ONLY, Z_HUFFMAN_ONLY); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_RLE, Z_RLE); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_FIXED, Z_FIXED); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_DEFAULT_STRATEGY, Z_DEFAULT_STRATEGY); + JSG_STATIC_CONSTANT_NAMED(CONST_ZLIB_VERNUM, ZLIB_VERNUM); + + JSG_STATIC_CONSTANT_NAMED(CONST_DEFLATE, static_cast(ZlibMode::DEFLATE)); + JSG_STATIC_CONSTANT_NAMED(CONST_INFLATE, static_cast(ZlibMode::INFLATE)); + JSG_STATIC_CONSTANT_NAMED(CONST_GZIP, static_cast(ZlibMode::GZIP)); + JSG_STATIC_CONSTANT_NAMED(CONST_GUNZIP, static_cast(ZlibMode::GUNZIP)); + JSG_STATIC_CONSTANT_NAMED(CONST_DEFLATERAW, static_cast(ZlibMode::DEFLATERAW)); + JSG_STATIC_CONSTANT_NAMED(CONST_INFLATERAW, static_cast(ZlibMode::INFLATERAW)); + JSG_STATIC_CONSTANT_NAMED(CONST_UNZIP, static_cast(ZlibMode::UNZIP)); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODE, static_cast(ZlibMode::BROTLI_DECODE)); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_ENCODE, static_cast(ZlibMode::BROTLI_ENCODE)); + + JSG_STATIC_CONSTANT_NAMED(CONST_Z_MIN_WINDOWBITS, Z_MIN_WINDOWBITS); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_MAX_WINDOWBITS, Z_MAX_WINDOWBITS); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_DEFAULT_WINDOWBITS, Z_DEFAULT_WINDOWBITS); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_MIN_CHUNK, Z_MIN_CHUNK); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_MAX_CHUNK, Z_MAX_CHUNK); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_DEFAULT_CHUNK, Z_DEFAULT_CHUNK); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_MIN_MEMLEVEL, Z_MIN_MEMLEVEL); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_MAX_MEMLEVEL, Z_MAX_MEMLEVEL); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_DEFAULT_MEMLEVEL, Z_DEFAULT_MEMLEVEL); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_MIN_LEVEL, Z_MIN_LEVEL); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_MAX_LEVEL, Z_MAX_LEVEL); + JSG_STATIC_CONSTANT_NAMED(CONST_Z_DEFAULT_LEVEL, Z_DEFAULT_LEVEL); + + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_OPERATION_PROCESS, BROTLI_OPERATION_PROCESS); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_OPERATION_FLUSH, BROTLI_OPERATION_FLUSH); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_OPERATION_FINISH, BROTLI_OPERATION_FINISH); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_OPERATION_EMIT_METADATA, BROTLI_OPERATION_EMIT_METADATA); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_PARAM_MODE, BROTLI_PARAM_MODE); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_MODE_GENERIC, BROTLI_MODE_GENERIC); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_MODE_TEXT, BROTLI_MODE_TEXT); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_MODE_FONT, BROTLI_MODE_FONT); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DEFAULT_MODE, BROTLI_DEFAULT_MODE); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_PARAM_QUALITY, BROTLI_PARAM_QUALITY); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_MIN_QUALITY, BROTLI_MIN_QUALITY); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_MAX_QUALITY, BROTLI_MAX_QUALITY); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DEFAULT_QUALITY, BROTLI_DEFAULT_QUALITY); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_PARAM_LGWIN, BROTLI_PARAM_LGWIN); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_MIN_WINDOW_BITS, BROTLI_MIN_WINDOW_BITS); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_MAX_WINDOW_BITS, BROTLI_MAX_WINDOW_BITS); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_LARGE_MAX_WINDOW_BITS, BROTLI_LARGE_MAX_WINDOW_BITS); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DEFAULT_WINDOW, BROTLI_DEFAULT_WINDOW); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_PARAM_LGBLOCK, BROTLI_PARAM_LGBLOCK); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_MIN_INPUT_BLOCK_BITS, BROTLI_MIN_INPUT_BLOCK_BITS); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_MAX_INPUT_BLOCK_BITS, BROTLI_MAX_INPUT_BLOCK_BITS); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING, + BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_PARAM_SIZE_HINT, BROTLI_PARAM_SIZE_HINT); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_PARAM_LARGE_WINDOW, BROTLI_PARAM_LARGE_WINDOW); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_PARAM_NPOSTFIX, BROTLI_PARAM_NPOSTFIX); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_PARAM_NDIRECT, BROTLI_PARAM_NDIRECT); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_RESULT_ERROR, BROTLI_DECODER_RESULT_ERROR); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_RESULT_SUCCESS, BROTLI_DECODER_RESULT_SUCCESS); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT, + BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT, + BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION, + BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_PARAM_LARGE_WINDOW, + BROTLI_DECODER_PARAM_LARGE_WINDOW); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_NO_ERROR, BROTLI_DECODER_NO_ERROR); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_SUCCESS, BROTLI_DECODER_SUCCESS); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_NEEDS_MORE_INPUT, + BROTLI_DECODER_NEEDS_MORE_INPUT); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_NEEDS_MORE_OUTPUT, + BROTLI_DECODER_NEEDS_MORE_OUTPUT); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE, + BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_RESERVED, + BROTLI_DECODER_ERROR_FORMAT_RESERVED); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE, + BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET, + BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME, + BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_CL_SPACE, + BROTLI_DECODER_ERROR_FORMAT_CL_SPACE); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE, + BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT, + BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1, + BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2, + BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_TRANSFORM, + BROTLI_DECODER_ERROR_FORMAT_TRANSFORM); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_DICTIONARY, + BROTLI_DECODER_ERROR_FORMAT_DICTIONARY); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS, + BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_PADDING_1, + BROTLI_DECODER_ERROR_FORMAT_PADDING_1); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_PADDING_2, + BROTLI_DECODER_ERROR_FORMAT_PADDING_2); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_FORMAT_DISTANCE, + BROTLI_DECODER_ERROR_FORMAT_DISTANCE); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET, + BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_INVALID_ARGUMENTS, + BROTLI_DECODER_ERROR_INVALID_ARGUMENTS); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES, + BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS, + BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP, + BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1, + BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2, + BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES, + BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES); + JSG_STATIC_CONSTANT_NAMED(CONST_BROTLI_DECODER_ERROR_UNREACHABLE, + BROTLI_DECODER_ERROR_UNREACHABLE); + }; }; #define EW_NODE_ZLIB_ISOLATE_TYPES api::node::ZlibUtil