From 75c500c9a53ce503b8636761f17b5b63eb8ee8e2 Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Wed, 28 Aug 2024 17:17:12 +0200 Subject: [PATCH] fix: Handle zstd encoding in webpack proxy config (#30034) --- Dockerfile | 3 +- superset-frontend/package-lock.json | 120 ++++++++++++++++++++-- superset-frontend/package.json | 1 + superset-frontend/webpack.proxy-config.js | 3 + 4 files changed, 117 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index cd859490d32b9..ab412446544e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,8 @@ RUN apt-get update -qq \ && apt-get install \ -yqq --no-install-recommends \ build-essential \ - python3 + python3 \ + zstd ENV BUILD_CMD=${NPM_BUILD_CMD} \ PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json index 1e5add29427cd..46931fce7d931 100644 --- a/superset-frontend/package-lock.json +++ b/superset-frontend/package-lock.json @@ -135,6 +135,7 @@ "rimraf": "^6.0.1", "rison": "^0.1.1", "scroll-into-view-if-needed": "^3.1.0", + "simple-zstd": "^1.4.2", "tinycolor2": "^1.4.2", "urijs": "^1.19.8", "use-event-callback": "^0.1.0", @@ -22209,6 +22210,12 @@ "version": "1.5.5", "license": "Apache-2.0" }, + "node_modules/duplex-maker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/duplex-maker/-/duplex-maker-1.0.0.tgz", + "integrity": "sha512-KoHuzggxg7f+vvjqOHfXxaQYI1POzBm+ah0eec7YDssZmbt6QFBI8d1nl5GQwAgR2f+VQCPvyvZtmWWqWuFtlA==", + "license": "MIT" + }, "node_modules/duplexer": { "version": "0.1.2", "dev": true, @@ -22223,7 +22230,6 @@ }, "node_modules/duplexify": { "version": "3.7.1", - "dev": true, "license": "MIT", "dependencies": { "end-of-stream": "^1.0.0", @@ -22408,7 +22414,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.1", - "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -29151,6 +29156,12 @@ "node": ">=8" } }, + "node_modules/is-zst": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-zst/-/is-zst-1.0.0.tgz", + "integrity": "sha512-ZA5lvshKAl8z30dX7saXLpVhpsq3d2EHK9uf7qtUjnOtdw4XBpAoWb2RvZ5kyoaebdoidnGI0g2hn9Z7ObPbww==", + "license": "MIT" + }, "node_modules/isarray": { "version": "1.0.0", "license": "MIT" @@ -42273,7 +42284,6 @@ }, "node_modules/peek-stream": { "version": "1.1.3", - "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -43168,6 +43178,19 @@ "node": ">=8" } }, + "node_modules/process-streams": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/process-streams/-/process-streams-1.0.3.tgz", + "integrity": "sha512-xkIaM5vYnyekB88WyET78YEqXiaJRy0xcvIdE22n+myhvBT7LlLmX6iAtq7jDvVH8CUx2rqQsd32JdRyJMV3NA==", + "funding": [ + "https://www.paypal.com/donate/?hosted_button_id=GB656ZSAEQEXN", + "https://de.liberapay.com/nils.knappmeier/" + ], + "license": "MIT", + "dependencies": { + "duplex-maker": "^1.0.0" + } + }, "node_modules/process-warning": { "version": "1.0.0", "dev": true, @@ -48078,6 +48101,41 @@ "version": "0.3.2", "license": "MIT" }, + "node_modules/simple-zstd": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/simple-zstd/-/simple-zstd-1.4.2.tgz", + "integrity": "sha512-kGYEvT33M5XfyQvvW4wxl3eKcWbdbCc1V7OZzuElnaXft0qbVzoIIXHXiCm3JCUki+MZKKmvjl8p2VGLJc5Y/A==", + "license": "MIT", + "dependencies": { + "is-zst": "^1.0.0", + "peek-stream": "^1.1.3", + "process-streams": "^1.0.1", + "through2": "^4.0.2" + } + }, + "node_modules/simple-zstd/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/simple-zstd/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, "node_modules/sinon": { "version": "18.0.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-18.0.0.tgz", @@ -49070,7 +49128,6 @@ }, "node_modules/stream-shift": { "version": "1.0.3", - "dev": true, "license": "MIT" }, "node_modules/streamx": { @@ -73343,6 +73400,11 @@ "draco3d": { "version": "1.5.5" }, + "duplex-maker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/duplex-maker/-/duplex-maker-1.0.0.tgz", + "integrity": "sha512-KoHuzggxg7f+vvjqOHfXxaQYI1POzBm+ah0eec7YDssZmbt6QFBI8d1nl5GQwAgR2f+VQCPvyvZtmWWqWuFtlA==" + }, "duplexer": { "version": "0.1.2", "dev": true @@ -73355,7 +73417,6 @@ }, "duplexify": { "version": "3.7.1", - "dev": true, "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -73498,7 +73559,6 @@ }, "end-of-stream": { "version": "1.4.1", - "dev": true, "requires": { "once": "^1.4.0" } @@ -77821,6 +77881,11 @@ "is-docker": "^2.0.0" } }, + "is-zst": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-zst/-/is-zst-1.0.0.tgz", + "integrity": "sha512-ZA5lvshKAl8z30dX7saXLpVhpsq3d2EHK9uf7qtUjnOtdw4XBpAoWb2RvZ5kyoaebdoidnGI0g2hn9Z7ObPbww==" + }, "isarray": { "version": "1.0.0" }, @@ -85783,7 +85848,6 @@ }, "peek-stream": { "version": "1.1.3", - "dev": true, "requires": { "buffer-from": "^1.0.0", "duplexify": "^3.5.0", @@ -86274,6 +86338,14 @@ "fromentries": "^1.2.0" } }, + "process-streams": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/process-streams/-/process-streams-1.0.3.tgz", + "integrity": "sha512-xkIaM5vYnyekB88WyET78YEqXiaJRy0xcvIdE22n+myhvBT7LlLmX6iAtq7jDvVH8CUx2rqQsd32JdRyJMV3NA==", + "requires": { + "duplex-maker": "^1.0.0" + } + }, "process-warning": { "version": "1.0.0", "dev": true @@ -89377,6 +89449,37 @@ } } }, + "simple-zstd": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/simple-zstd/-/simple-zstd-1.4.2.tgz", + "integrity": "sha512-kGYEvT33M5XfyQvvW4wxl3eKcWbdbCc1V7OZzuElnaXft0qbVzoIIXHXiCm3JCUki+MZKKmvjl8p2VGLJc5Y/A==", + "requires": { + "is-zst": "^1.0.0", + "peek-stream": "^1.1.3", + "process-streams": "^1.0.1", + "through2": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "requires": { + "readable-stream": "3" + } + } + } + }, "sinon": { "version": "18.0.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-18.0.0.tgz", @@ -90044,8 +90147,7 @@ } }, "stream-shift": { - "version": "1.0.3", - "dev": true + "version": "1.0.3" }, "streamx": { "version": "2.18.0", diff --git a/superset-frontend/package.json b/superset-frontend/package.json index 1c10bad2fbb22..17be2f3c1c70a 100644 --- a/superset-frontend/package.json +++ b/superset-frontend/package.json @@ -201,6 +201,7 @@ "rimraf": "^6.0.1", "rison": "^0.1.1", "scroll-into-view-if-needed": "^3.1.0", + "simple-zstd": "^1.4.2", "tinycolor2": "^1.4.2", "urijs": "^1.19.8", "use-event-callback": "^0.1.0", diff --git a/superset-frontend/webpack.proxy-config.js b/superset-frontend/webpack.proxy-config.js index 29823144d4e9e..c2070bb92b67d 100644 --- a/superset-frontend/webpack.proxy-config.js +++ b/superset-frontend/webpack.proxy-config.js @@ -17,6 +17,7 @@ * under the License. */ const zlib = require('zlib'); +const { ZSTDDecompress } = require('simple-zstd'); const yargs = require('yargs'); // eslint-disable-next-line import/no-extraneous-dependencies @@ -127,6 +128,8 @@ function processHTML(proxyResponse, response) { uncompress = zlib.createBrotliDecompress(); } else if (responseEncoding === 'deflate') { uncompress = zlib.createInflate(); + } else if (responseEncoding === 'zstd') { + uncompress = ZSTDDecompress(); } if (uncompress) { originalResponse.pipe(uncompress);