From e5ba13c1d571347229e3f27972ee9194c5bfe863 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 | 26 ++- src/node/internal/zlib.d.ts | 114 +++++++++++ src/node/zlib.ts | 4 +- src/workerd/api/BUILD.bazel | 1 + .../api/node/tests/zlib-nodejs-test.js | 117 +++++++++++- src/workerd/api/node/zlib-util.c++ | 4 - src/workerd/api/node/zlib-util.h | 180 +++++++++++++++++- src/workerd/io/BUILD.bazel | 1 + 8 files changed, 433 insertions(+), 14 deletions(-) diff --git a/src/node/internal/internal_zlib.ts b/src/node/internal/internal_zlib.ts index 89b2d13cd66..e8f9715a947 100644 --- a/src/node/internal/internal_zlib.ts +++ b/src/node/internal/internal_zlib.ts @@ -1,8 +1,8 @@ -import { default as zlibUtil } from 'node-internal:zlib'; -import { Buffer } from 'node-internal:internal_buffer'; -import { validateUint32 } from 'node-internal:validators'; -import { isArrayBufferView } from 'node-internal:internal_types'; -import { ERR_INVALID_ARG_TYPE } from 'node-internal:internal_errors'; +import {default as zlibUtil} from 'node-internal:zlib'; +import {Buffer} from 'node-internal:internal_buffer'; +import {validateUint32} from 'node-internal:validators'; +import {isArrayBufferView} from 'node-internal:internal_types'; +import {ERR_INVALID_ARG_TYPE} from 'node-internal:internal_errors'; function crc32(data: ArrayBufferView | string, value: number = 0): number { if (typeof data === 'string') { @@ -14,6 +14,20 @@ 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.entries(Object.getPrototypeOf(zlibUtil)) + .filter(([k,]) => k.startsWith(constPrefix)) + .forEach(([k, v]) => Object.defineProperty(constants, k.slice(constPrefix.length), { + value: v, + writable: false, + configurable: false, + enumerable: true + })); + export { crc32, -} + constants, +} \ No newline at end of file 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/BUILD.bazel b/src/workerd/api/BUILD.bazel index aab0bb0ba17..0be9a81cd7c 100644 --- a/src/workerd/api/BUILD.bazel +++ b/src/workerd/api/BUILD.bazel @@ -74,6 +74,7 @@ wd_cc_library( "//src/workerd/io", "//src/workerd/jsg:rtti", "//src/workerd/server:workerd_capnp", + "@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..816689d3488 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(JSON.stringify(constants, null, 2),`{ + "Z_NO_FLUSH": 0, + "Z_PARTIAL_FLUSH": 1, + "Z_SYNC_FLUSH": 2, + "Z_FULL_FLUSH": 3, + "Z_FINISH": 4, + "Z_BLOCK": 5, + "Z_OK": 0, + "Z_STREAM_END": 1, + "Z_NEED_DICT": 2, + "Z_ERRNO": -1, + "Z_STREAM_ERROR": -2, + "Z_DATA_ERROR": -3, + "Z_MEM_ERROR": -4, + "Z_BUF_ERROR": -5, + "Z_VERSION_ERROR": -6, + "Z_NO_COMPRESSION": 0, + "Z_BEST_SPEED": 1, + "Z_BEST_COMPRESSION": 9, + "Z_DEFAULT_COMPRESSION": -1, + "Z_FILTERED": 1, + "Z_HUFFMAN_ONLY": 2, + "Z_RLE": 3, + "Z_FIXED": 4, + "Z_DEFAULT_STRATEGY": 0, + "ZLIB_VERNUM": 4880, + "DEFLATE": 1, + "INFLATE": 2, + "GZIP": 3, + "GUNZIP": 4, + "DEFLATERAW": 5, + "INFLATERAW": 6, + "UNZIP": 7, + "BROTLI_DECODE": 8, + "BROTLI_ENCODE": 9, + "Z_MIN_WINDOWBITS": 8, + "Z_MAX_WINDOWBITS": 15, + "Z_DEFAULT_WINDOWBITS": 15, + "Z_MIN_CHUNK": 64, + "Z_MAX_CHUNK": null, + "Z_DEFAULT_CHUNK": 16384, + "Z_MIN_MEMLEVEL": 1, + "Z_MAX_MEMLEVEL": 9, + "Z_DEFAULT_MEMLEVEL": 8, + "Z_MIN_LEVEL": -1, + "Z_MAX_LEVEL": 9, + "Z_DEFAULT_LEVEL": -1, + "BROTLI_OPERATION_PROCESS": 0, + "BROTLI_OPERATION_FLUSH": 1, + "BROTLI_OPERATION_FINISH": 2, + "BROTLI_OPERATION_EMIT_METADATA": 3, + "BROTLI_PARAM_MODE": 0, + "BROTLI_MODE_GENERIC": 0, + "BROTLI_MODE_TEXT": 1, + "BROTLI_MODE_FONT": 2, + "BROTLI_DEFAULT_MODE": 0, + "BROTLI_PARAM_QUALITY": 1, + "BROTLI_MIN_QUALITY": 0, + "BROTLI_MAX_QUALITY": 11, + "BROTLI_DEFAULT_QUALITY": 11, + "BROTLI_PARAM_LGWIN": 2, + "BROTLI_MIN_WINDOW_BITS": 10, + "BROTLI_MAX_WINDOW_BITS": 24, + "BROTLI_LARGE_MAX_WINDOW_BITS": 30, + "BROTLI_DEFAULT_WINDOW": 22, + "BROTLI_PARAM_LGBLOCK": 3, + "BROTLI_MIN_INPUT_BLOCK_BITS": 16, + "BROTLI_MAX_INPUT_BLOCK_BITS": 24, + "BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING": 4, + "BROTLI_PARAM_SIZE_HINT": 5, + "BROTLI_PARAM_LARGE_WINDOW": 6, + "BROTLI_PARAM_NPOSTFIX": 7, + "BROTLI_PARAM_NDIRECT": 8, + "BROTLI_DECODER_RESULT_ERROR": 0, + "BROTLI_DECODER_RESULT_SUCCESS": 1, + "BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT": 2, + "BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT": 3, + "BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION": 0, + "BROTLI_DECODER_PARAM_LARGE_WINDOW": 1, + "BROTLI_DECODER_NO_ERROR": 0, + "BROTLI_DECODER_SUCCESS": 1, + "BROTLI_DECODER_NEEDS_MORE_INPUT": 2, + "BROTLI_DECODER_NEEDS_MORE_OUTPUT": 3, + "BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE": -1, + "BROTLI_DECODER_ERROR_FORMAT_RESERVED": -2, + "BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE": -3, + "BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET": -4, + "BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME": -5, + "BROTLI_DECODER_ERROR_FORMAT_CL_SPACE": -6, + "BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE": -7, + "BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT": -8, + "BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1": -9, + "BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2": -10, + "BROTLI_DECODER_ERROR_FORMAT_TRANSFORM": -11, + "BROTLI_DECODER_ERROR_FORMAT_DICTIONARY": -12, + "BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS": -13, + "BROTLI_DECODER_ERROR_FORMAT_PADDING_1": -14, + "BROTLI_DECODER_ERROR_FORMAT_PADDING_2": -15, + "BROTLI_DECODER_ERROR_FORMAT_DISTANCE": -16, + "BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET": -19, + "BROTLI_DECODER_ERROR_INVALID_ARGUMENTS": -20, + "BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES": -21, + "BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS": -22, + "BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP": -25, + "BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1": -26, + "BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2": -27, + "BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES": -30, + "BROTLI_DECODER_ERROR_UNREACHABLE": -31 +}`); + } +} 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..0f2983b6b81 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 + +#include +#include + namespace workerd::api::node { // Implements utilities in support of the Node.js Zlib @@ -12,11 +19,180 @@ 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 = std::numeric_limits::infinity(); + 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; + enum class ZlibMode { + 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 diff --git a/src/workerd/io/BUILD.bazel b/src/workerd/io/BUILD.bazel index 14000b70992..cade03f1d51 100644 --- a/src/workerd/io/BUILD.bazel +++ b/src/workerd/io/BUILD.bazel @@ -85,6 +85,7 @@ wd_cc_library( "@capnp-cpp//src/capnp:capnp-rpc", "@capnp-cpp//src/capnp/compat:http-over-capnp", "@capnp-cpp//src/kj:kj-async", + "@capnp-cpp//src/kj/compat:kj-brotli", "@ssl", ] + select({ ":set_enable_experimental_webgpu": ["@dawn"],