This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 7fc9974a7c fix(deps): remove encodable dependency and pin query-string
to fix Dependabot CI failures (#37450)
7fc9974a7c is described below
commit 7fc9974a7cf05cb3e66d71b433a18ee213bad51b
Author: Evan Rusackas <[email protected]>
AuthorDate: Mon Jan 26 15:52:22 2026 -0800
fix(deps): remove encodable dependency and pin query-string to fix
Dependabot CI failures (#37450)
Co-authored-by: Claude Opus 4.5 <[email protected]>
---
superset-frontend/package-lock.json | 320 +--------------------
superset-frontend/package.json | 1 +
.../packages/superset-ui-demo/package.json | 1 -
.../plugins/plugin-chart-echarts/package.json | 1 +
.../plugins/plugin-chart-word-cloud/package.json | 3 +-
.../src/chart/WordCloud.tsx | 201 +++++++++----
.../src/configureEncodable.ts | 83 ------
.../plugins/plugin-chart-word-cloud/src/index.ts | 1 -
.../plugin-chart-word-cloud/src/plugin/index.ts | 3 -
9 files changed, 150 insertions(+), 464 deletions(-)
diff --git a/superset-frontend/package-lock.json
b/superset-frontend/package-lock.json
index 6662ef53d5..492016be47 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -97,6 +97,7 @@
"nanoid": "^5.1.6",
"ol": "^7.5.2",
"prop-types": "^15.8.1",
+ "query-string": "6.14.1",
"re-resizable": "^6.11.2",
"react": "^17.0.2",
"react-checkbox-tree": "^1.8.0",
@@ -4427,157 +4428,6 @@
"integrity":
"sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
"license": "MIT"
},
- "node_modules/@encodable/color": {
- "version": "1.1.1",
- "resolved":
"https://registry.npmjs.org/@encodable/color/-/color-1.1.1.tgz",
- "integrity":
"sha512-3QlHqsaD+D4W4T6E4Wq4mp7MBpt5yCkCmgTh6AfsoUfJeAEogA92d8r3Y67Zuppcs/eepHW0ip8zfehS2jZNkQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@encodable/registry": "^1.0.3",
- "@types/d3-interpolate": "^1.3.1",
- "@types/d3-scale": "^3.1.0",
- "@types/d3-scale-chromatic": "^1.2.0",
- "d3-interpolate": "^2.0.1",
- "d3-scale": "^3.2.1",
- "d3-scale-chromatic": "^2.0.0"
- }
- },
- "node_modules/@encodable/color/node_modules/@types/d3-color": {
- "version": "1.4.5",
- "resolved":
"https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.5.tgz",
- "integrity":
"sha512-5sNP3DmtSnSozxcjqmzQKsDOuVJXZkceo1KJScDc1982kk/TS9mTPc6lpli1gTu1MIBF1YWutpHpjucNWcIj5g==",
- "license": "MIT"
- },
- "node_modules/@encodable/color/node_modules/@types/d3-interpolate": {
- "version": "1.4.5",
- "resolved":
"https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.4.5.tgz",
- "integrity":
"sha512-k9L18hXXv7OvK4PqW1kSFYIzasGOvfhPUWmHFkoZ8/ci99EAmY4HoF6zMefrHl0SGV7XYc7Qq2MNh8dK3edg5A==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-color": "^1"
- }
- },
- "node_modules/@encodable/color/node_modules/@types/d3-scale": {
- "version": "3.3.5",
- "resolved":
"https://registry.npmjs.org/@types/d3-scale/-/d3-scale-3.3.5.tgz",
- "integrity":
"sha512-YOpKj0kIEusRf7ofeJcSZQsvKbnTwpe1DUF+P2qsotqG53kEsjm7EzzliqQxMkAWdkZcHrg5rRhB4JiDOQPX+A==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-time": "^2"
- }
- },
- "node_modules/@encodable/color/node_modules/@types/d3-time": {
- "version": "2.1.4",
- "resolved":
"https://registry.npmjs.org/@types/d3-time/-/d3-time-2.1.4.tgz",
- "integrity":
"sha512-BTfLsxTeo7yFxI/haOOf1ZwJ6xKgQLT9dCp+EcmQv87Gox6X+oKl4mLKfO6fnWm3P22+A6DknMNEZany8ql2Rw==",
- "license": "MIT"
- },
- "node_modules/@encodable/color/node_modules/d3-interpolate": {
- "version": "2.0.1",
- "resolved":
"https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz",
- "integrity":
"sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-color": "1 - 2"
- }
- },
- "node_modules/@encodable/color/node_modules/d3-scale": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz",
- "integrity":
"sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-array": "^2.3.0",
- "d3-format": "1 - 2",
- "d3-interpolate": "1.2.0 - 2",
- "d3-time": "^2.1.1",
- "d3-time-format": "2 - 3"
- }
- },
- "node_modules/@encodable/color/node_modules/d3-time": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz",
- "integrity":
"sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-array": "2"
- }
- },
- "node_modules/@encodable/color/node_modules/d3-time-format": {
- "version": "3.0.0",
- "resolved":
"https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz",
- "integrity":
"sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-time": "1 - 2"
- }
- },
- "node_modules/@encodable/format": {
- "version": "1.0.6",
- "resolved":
"https://registry.npmjs.org/@encodable/format/-/format-1.0.6.tgz",
- "integrity":
"sha512-gtzLMQyw4AJ7m3TIANm2z2QfzZJLGLdhVmKbizRRu9MRMlYIVXhk+46zPm10RNxGv4ybpsfcCfkCd4nL3RlZRg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@encodable/registry": "^1.0.3",
- "@types/d3-format": "^1.3.1",
- "@types/d3-time": "^1.0.10",
- "@types/d3-time-format": "^2.1.1",
- "d3-format": "^2.0.0",
- "d3-time": "^2.0.0",
- "d3-time-format": "^3.0.0"
- }
- },
- "node_modules/@encodable/format/node_modules/@types/d3-format": {
- "version": "1.4.5",
- "resolved":
"https://registry.npmjs.org/@types/d3-format/-/d3-format-1.4.5.tgz",
- "integrity":
"sha512-mLxrC1MSWupOSncXN/HOlWUAAIffAEBaI4+PKy2uMPsKe4FNZlk7qrbTjmzJXITQQqBHivaks4Td18azgqnotA==",
- "license": "MIT"
- },
- "node_modules/@encodable/format/node_modules/@types/d3-time": {
- "version": "1.1.4",
- "resolved":
"https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.4.tgz",
- "integrity":
"sha512-JIvy2HjRInE+TXOmIGN5LCmeO0hkFZx5f9FZ7kiN+D+YTcc8pptsiLiuHsvwxwC7VVKmJ2ExHUgNlAiV7vQM9g==",
- "license": "MIT"
- },
- "node_modules/@encodable/format/node_modules/@types/d3-time-format": {
- "version": "2.3.4",
- "resolved":
"https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.3.4.tgz",
- "integrity":
"sha512-xdDXbpVO74EvadI3UDxjxTdR6QIxm1FKzEA/+F8tL4GWWUg/hgvBqf6chql64U5A9ZUGWo7pEu4eNlyLwbKdhg==",
- "license": "MIT"
- },
- "node_modules/@encodable/format/node_modules/d3-format": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz",
- "integrity":
"sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@encodable/format/node_modules/d3-time": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz",
- "integrity":
"sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-array": "2"
- }
- },
- "node_modules/@encodable/format/node_modules/d3-time-format": {
- "version": "3.0.0",
- "resolved":
"https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz",
- "integrity":
"sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-time": "1 - 2"
- }
- },
- "node_modules/@encodable/registry": {
- "version": "1.0.3",
- "resolved":
"https://registry.npmjs.org/@encodable/registry/-/registry-1.0.3.tgz",
- "integrity":
"sha512-YH2nSBZJKgbH/9MkQXzAEE9UwTaVcWiKgVFyEU/gvrfmNWqecYaHMTyObo+ADSTGF4kk0cZZkr7VqZgIQbvrUw==",
- "license": "Apache-2.0",
- "peerDependencies": {
- "global-box": "*"
- }
- },
"node_modules/@epic-web/invariant": {
"version": "1.0.0",
"resolved":
"https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz",
@@ -19313,9 +19163,9 @@
"license": "MIT"
},
"node_modules/@types/d3-array": {
- "version": "2.12.7",
- "resolved":
"https://registry.npmjs.org/@types/d3-array/-/d3-array-2.12.7.tgz",
- "integrity":
"sha512-SVvxzxRVnIgtJbNTj5ZVJ9CZkVOANCpW0nQbRi7EOU5Q9G+JQQjXD2SCpr1OYCX09b3Yr7o0+CBofZAgU42rbQ==",
+ "version": "3.2.2",
+ "resolved":
"https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
+ "integrity":
"sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
"license": "MIT"
},
"node_modules/@types/d3-cloud": {
@@ -19376,21 +19226,17 @@
"version": "2.2.10",
"resolved":
"https://registry.npmjs.org/@types/d3-scale/-/d3-scale-2.2.10.tgz",
"integrity":
"sha512-j4V7qQ+CQzK2KpvI5NDejdPAcds+fTzNGqWXrCXv1zNR33HRir0bMdhzN1OHDQLNXYffW/zOr3FOS2qlHDEgrw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@types/d3-time": "^1"
}
},
- "node_modules/@types/d3-scale-chromatic": {
- "version": "1.5.4",
- "resolved":
"https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-1.5.4.tgz",
- "integrity":
"sha512-HwLVEm8laYTNOR9Kc9745XDKgRa69VIIChNkSKJgrJOsDLI9QSiFSH2Bi4wMbGrvFs+X64azev7NfBPq+VOFVg==",
- "license": "MIT"
- },
"node_modules/@types/d3-scale/node_modules/@types/d3-time": {
"version": "1.1.4",
"resolved":
"https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.4.tgz",
"integrity":
"sha512-JIvy2HjRInE+TXOmIGN5LCmeO0hkFZx5f9FZ7kiN+D+YTcc8pptsiLiuHsvwxwC7VVKmJ2ExHUgNlAiV7vQM9g==",
+ "dev": true,
"license": "MIT"
},
"node_modules/@types/d3-shape": {
@@ -19974,15 +19820,6 @@
"@types/lodash": "*"
}
},
- "node_modules/@types/lodash.get": {
- "version": "4.4.9",
- "resolved":
"https://registry.npmjs.org/@types/lodash.get/-/lodash.get-4.4.9.tgz",
- "integrity":
"sha512-J5dvW98sxmGnamqf+/aLP87PYXyrha9xIgc2ZlHl6OHMFR2Ejdxep50QfU0abO1+CH6+ugx+8wEUN1toImAinA==",
- "license": "MIT",
- "dependencies": {
- "@types/lodash": "*"
- }
- },
"node_modules/@types/mapbox__geojson-extent": {
"version": "1.0.3",
"resolved":
"https://registry.npmjs.org/@types/mapbox__geojson-extent/-/mapbox__geojson-extent-1.0.3.tgz",
@@ -28323,25 +28160,6 @@
"d3-time-format": "2"
}
},
- "node_modules/d3-scale-chromatic": {
- "version": "2.0.0",
- "resolved":
"https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz",
- "integrity":
"sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-color": "1 - 2",
- "d3-interpolate": "1 - 2"
- }
- },
- "node_modules/d3-scale-chromatic/node_modules/d3-interpolate": {
- "version": "2.0.1",
- "resolved":
"https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz",
- "integrity":
"sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-color": "1 - 2"
- }
- },
"node_modules/d3-scale/node_modules/d3-array": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
@@ -28671,7 +28489,6 @@
"resolved":
"https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
"integrity":
"sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10"
}
@@ -29687,97 +29504,6 @@
"node": ">= 4"
}
},
- "node_modules/encodable": {
- "version": "0.7.8",
- "resolved": "https://registry.npmjs.org/encodable/-/encodable-0.7.8.tgz",
- "integrity":
"sha512-rh5isin1c3ZJuultMyJZGBRbGIh8IrVHQuwlEG3lPMGZQ5yQUb2STIbXGGEbSifxT4POnojKjTxhm3ITTSdriw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@encodable/color": "^1.1.0",
- "@encodable/format": "^1.0.5",
- "@types/d3-array": "^2.0.0",
- "@types/d3-interpolate": "^1.3.1",
- "@types/d3-scale": "^2.1.1",
- "@types/d3-time": "^1.0.10",
- "@types/lodash.get": "^4.4.6",
- "d3-array": "^2.3.1",
- "d3-interpolate": "^2.0.1",
- "d3-scale": "^3.0.1",
- "d3-time": "^2.0.0",
- "lodash.get": "^4.4.2",
- "reselect": "^4.0.0"
- },
- "peerDependencies": {
- "global-box": "*"
- }
- },
- "node_modules/encodable/node_modules/@types/d3-color": {
- "version": "1.4.5",
- "resolved":
"https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.5.tgz",
- "integrity":
"sha512-5sNP3DmtSnSozxcjqmzQKsDOuVJXZkceo1KJScDc1982kk/TS9mTPc6lpli1gTu1MIBF1YWutpHpjucNWcIj5g==",
- "license": "MIT"
- },
- "node_modules/encodable/node_modules/@types/d3-interpolate": {
- "version": "1.4.5",
- "resolved":
"https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.4.5.tgz",
- "integrity":
"sha512-k9L18hXXv7OvK4PqW1kSFYIzasGOvfhPUWmHFkoZ8/ci99EAmY4HoF6zMefrHl0SGV7XYc7Qq2MNh8dK3edg5A==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-color": "^1"
- }
- },
- "node_modules/encodable/node_modules/@types/d3-time": {
- "version": "1.1.4",
- "resolved":
"https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.4.tgz",
- "integrity":
"sha512-JIvy2HjRInE+TXOmIGN5LCmeO0hkFZx5f9FZ7kiN+D+YTcc8pptsiLiuHsvwxwC7VVKmJ2ExHUgNlAiV7vQM9g==",
- "license": "MIT"
- },
- "node_modules/encodable/node_modules/d3-interpolate": {
- "version": "2.0.1",
- "resolved":
"https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz",
- "integrity":
"sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-color": "1 - 2"
- }
- },
- "node_modules/encodable/node_modules/d3-scale": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz",
- "integrity":
"sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-array": "^2.3.0",
- "d3-format": "1 - 2",
- "d3-interpolate": "1.2.0 - 2",
- "d3-time": "^2.1.1",
- "d3-time-format": "2 - 3"
- }
- },
- "node_modules/encodable/node_modules/d3-time": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz",
- "integrity":
"sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-array": "2"
- }
- },
- "node_modules/encodable/node_modules/d3-time-format": {
- "version": "3.0.0",
- "resolved":
"https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz",
- "integrity":
"sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-time": "1 - 2"
- }
- },
- "node_modules/encodable/node_modules/reselect": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
- "integrity":
"sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==",
- "license": "MIT"
- },
"node_modules/encodeurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
@@ -32547,7 +32273,6 @@
"resolved":
"https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz",
"integrity":
"sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -34606,13 +34331,6 @@
"process": "^0.11.10"
}
},
- "node_modules/global-box": {
- "version": "2.0.2",
- "resolved":
"https://registry.npmjs.org/global-box/-/global-box-2.0.2.tgz",
- "integrity":
"sha512-vVSNq3+oEEqG565ProXN7iKHcK8hehtbXNLjsOmywHDTBXlwgP/Bt1Soqf4NGeOq3W3u1o7UE3t0RgiNG0BTkQ==",
- "license": "Apache-2.0",
- "peer": true
- },
"node_modules/global-directory": {
"version": "4.0.1",
"resolved":
"https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz",
@@ -49059,7 +48777,6 @@
"resolved":
"https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz",
"integrity":
"sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"decode-uri-component": "^0.2.0",
"filter-obj": "^1.1.0",
@@ -54464,7 +54181,6 @@
"resolved":
"https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz",
"integrity":
"sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
@@ -54998,7 +54714,6 @@
"resolved":
"https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
"integrity":
"sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
@@ -65126,7 +64841,6 @@
},
"peerDependencies": {
"@apache-superset/core": "*",
- "@encodable/color": "=1.1.1",
"@superset-ui/core": "*",
"@superset-ui/legacy-plugin-chart-calendar": "*",
"@superset-ui/legacy-plugin-chart-chord": "*",
@@ -66197,12 +65911,6 @@
"integrity":
"sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==",
"license": "BSD-2-Clause"
},
- "plugins/legacy-preset-chart-deckgl/node_modules/@types/d3-array": {
- "version": "3.2.2",
- "resolved":
"https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
- "integrity":
"sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
- "license": "MIT"
- },
"plugins/legacy-preset-chart-deckgl/node_modules/d3-array": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
@@ -66348,12 +66056,6 @@
"react-dom": "^17.0.2"
}
},
- "plugins/plugin-chart-ag-grid-table/node_modules/@types/d3-array": {
- "version": "3.2.2",
- "resolved":
"https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
- "integrity":
"sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
- "license": "MIT"
- },
"plugins/plugin-chart-ag-grid-table/node_modules/d3-array": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
@@ -66398,6 +66100,7 @@
"version": "0.20.3",
"license": "Apache-2.0",
"dependencies": {
+ "@types/d3-array": "^3.2.2",
"@types/react-redux": "^7.1.34",
"d3-array": "^3.2.4",
"lodash": "^4.17.23"
@@ -66543,12 +66246,6 @@
"react-dom": "^17.0.2"
}
},
- "plugins/plugin-chart-table/node_modules/@types/d3-array": {
- "version": "3.2.2",
- "resolved":
"https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
- "integrity":
"sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
- "license": "MIT"
- },
"plugins/plugin-chart-table/node_modules/d3-array": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
@@ -66568,8 +66265,7 @@
"dependencies": {
"@types/d3-scale": "^4.0.9",
"d3-cloud": "^1.2.8",
- "d3-scale": "^3.0.1",
- "encodable": "^0.7.8"
+ "d3-scale": "^3.0.1"
},
"devDependencies": {
"@types/d3-cloud": "^1.2.9"
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index 01a739c31e..30ef0d1d66 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -178,6 +178,7 @@
"nanoid": "^5.1.6",
"ol": "^7.5.2",
"prop-types": "^15.8.1",
+ "query-string": "6.14.1",
"re-resizable": "^6.11.2",
"react": "^17.0.2",
"react-checkbox-tree": "^1.8.0",
diff --git a/superset-frontend/packages/superset-ui-demo/package.json
b/superset-frontend/packages/superset-ui-demo/package.json
index f1dd21c5e8..344e7a268f 100644
--- a/superset-frontend/packages/superset-ui-demo/package.json
+++ b/superset-frontend/packages/superset-ui-demo/package.json
@@ -63,7 +63,6 @@
"typescript": "^5.9.3"
},
"peerDependencies": {
- "@encodable/color": "=1.1.1",
"@superset-ui/core": "*",
"@apache-superset/core": "*",
"@superset-ui/legacy-plugin-chart-calendar": "*",
diff --git a/superset-frontend/plugins/plugin-chart-echarts/package.json
b/superset-frontend/plugins/plugin-chart-echarts/package.json
index 3d8de503a2..3bba8cfea3 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/package.json
+++ b/superset-frontend/plugins/plugin-chart-echarts/package.json
@@ -24,6 +24,7 @@
"lib"
],
"dependencies": {
+ "@types/d3-array": "^3.2.2",
"@types/react-redux": "^7.1.34",
"d3-array": "^3.2.4",
"lodash": "^4.17.23"
diff --git a/superset-frontend/plugins/plugin-chart-word-cloud/package.json
b/superset-frontend/plugins/plugin-chart-word-cloud/package.json
index eb43ea1979..54bb2d7c55 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/package.json
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/package.json
@@ -31,8 +31,7 @@
"dependencies": {
"@types/d3-scale": "^4.0.9",
"d3-cloud": "^1.2.8",
- "d3-scale": "^3.0.1",
- "encodable": "^0.7.8"
+ "d3-scale": "^3.0.1"
},
"peerDependencies": {
"@superset-ui/chart-controls": "*",
diff --git
a/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx
b/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx
index 5818b3e7bc..6d1abedb77 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx
@@ -18,18 +18,15 @@
*/
import { PureComponent } from 'react';
import cloudLayout from 'd3-cloud';
-import {
- PlainObject,
- createEncoderFactory,
- DeriveEncoding,
- Encoder,
-} from 'encodable';
+import { scaleLinear } from 'd3-scale';
import { seed, CategoricalColorNamespace } from '@superset-ui/core';
import { SupersetTheme, withTheme } from '@apache-superset/core/ui';
import { isEqual } from 'lodash';
const seedRandom = seed('superset-ui');
+export type PlainObject = Record<string, unknown>;
+
// Polyfill Word type since it's not exported from 'd3-cloud'
export type Word = {
text: string;
@@ -49,15 +46,27 @@ export const ROTATION = {
export type RotationType = keyof typeof ROTATION;
-export type WordCloudEncoding = DeriveEncoding<WordCloudEncodingConfig>;
-
-type WordCloudEncodingConfig = {
- color: ['Color', string];
- fontFamily: ['Category', string];
- fontSize: ['Numeric', number];
- fontWeight: ['Category', string | number];
- text: ['Text', string];
-};
+/**
+ * Encoding configuration for mapping data fields to visual properties.
+ * Supports field-based mappings with optional scale configurations.
+ */
+export interface WordCloudEncoding {
+ color?: {
+ field?: string;
+ value?: string;
+ scale?: { scheme?: string };
+ type?: string;
+ };
+ fontFamily?: { field?: string; value?: string };
+ fontSize?: {
+ field?: string;
+ value?: number;
+ scale?: { range?: [number, number]; zero?: boolean };
+ type?: string;
+ };
+ fontWeight?: { field?: string; value?: string | number };
+ text?: { field?: string; value?: string };
+}
export interface WordCloudVisualProps {
encoding?: Partial<WordCloudEncoding>;
@@ -88,38 +97,118 @@ type FullWordCloudProps = WordCloudProps &
const SCALE_FACTOR_STEP = 0.5;
const MAX_SCALE_FACTOR = 3;
const TOP_RESULTS_PERCENTAGE = 0.1;
-class WordCloud extends PureComponent<FullWordCloudProps, WordCloudState> {
- static defaultProps = defaultProps;
- isComponentMounted = false;
+/**
+ * Simple encoder that maps data fields to visual properties.
+ * Replaces the encodable library with direct field access and d3 scales.
+ */
+class SimpleEncoder {
+ private encoding: WordCloudEncoding;
+
+ private defaults: {
+ color: string;
+ fontFamily: string;
+ fontSize: number;
+ fontWeight: string | number;
+ text: string;
+ };
- wordCloudEncoderFactory = createEncoderFactory<WordCloudEncodingConfig>({
- channelTypes: {
- color: 'Color',
- fontFamily: 'Category',
- fontSize: 'Numeric',
- fontWeight: 'Category',
- text: 'Text',
- },
- defaultEncoding: {
- color: { value: this.props.theme.colorTextLabel },
- fontFamily: { value: this.props.theme.fontFamily },
- fontSize: { value: 20 },
- fontWeight: { value: 'bold' },
- text: { value: '' },
+ private fontSizeScale: ((value: number) => number) | null = null;
+
+ constructor(
+ encoding: WordCloudEncoding,
+ defaults: {
+ color: string;
+ fontFamily: string;
+ fontSize: number;
+ fontWeight: string | number;
+ text: string;
},
- });
+ ) {
+ this.encoding = encoding;
+ this.defaults = defaults;
+ }
- createEncoder = (
- encoding?: Partial<WordCloudEncoding>,
- ): Encoder<WordCloudEncodingConfig> => {
- const selector: (
- e: Partial<WordCloudEncoding>,
- ) => Encoder<WordCloudEncodingConfig> =
- this.wordCloudEncoderFactory.createSelector();
+ /**
+ * Set domain from dataset to configure scales
+ */
+ setDomainFromDataset(data: PlainObject[]): void {
+ const fontSizeConfig = this.encoding.fontSize;
+ if (fontSizeConfig?.field && fontSizeConfig?.scale?.range) {
+ const values = data
+ .map(d => Number(d[fontSizeConfig.field!]) || 0)
+ .filter(v => !Number.isNaN(v));
+
+ if (values.length > 0) {
+ const min = fontSizeConfig.scale.zero ? 0 : Math.min(...values);
+ const max = Math.max(...values);
+ const [rangeMin, rangeMax] = fontSizeConfig.scale.range;
+
+ this.fontSizeScale = scaleLinear()
+ .domain([min, max])
+ .range([rangeMin, rangeMax]);
+ }
+ }
+ }
- return selector(encoding ?? {});
- };
+ getText(d: PlainObject): string {
+ const config = this.encoding.text;
+ if (config?.field && d[config.field] !== undefined) {
+ return String(d[config.field]);
+ }
+ return config?.value ?? this.defaults.text;
+ }
+
+ getFontSize(d: PlainObject): number {
+ const config = this.encoding.fontSize;
+ if (config?.field && d[config.field] !== undefined) {
+ const value = Number(d[config.field]) || 0;
+ if (this.fontSizeScale) {
+ return this.fontSizeScale(value);
+ }
+ return value || this.defaults.fontSize;
+ }
+ return config?.value ?? this.defaults.fontSize;
+ }
+
+ getColor(d: PlainObject): string {
+ const config = this.encoding.color;
+ if (config?.field && d[config.field] !== undefined) {
+ return String(d[config.field]);
+ }
+ return config?.value ?? this.defaults.color;
+ }
+
+ getFontFamily(d: PlainObject): string {
+ const config = this.encoding.fontFamily;
+ if (config?.field && d[config.field] !== undefined) {
+ return String(d[config.field]);
+ }
+ return config?.value ?? this.defaults.fontFamily;
+ }
+
+ getFontWeight(d: PlainObject): string | number {
+ const config = this.encoding.fontWeight;
+ if (config?.field && d[config.field] !== undefined) {
+ return d[config.field] as string | number;
+ }
+ return config?.value ?? this.defaults.fontWeight;
+ }
+}
+
+class WordCloud extends PureComponent<FullWordCloudProps, WordCloudState> {
+ static defaultProps = defaultProps;
+
+ isComponentMounted = false;
+
+ createEncoder = (encoding?: Partial<WordCloudEncoding>): SimpleEncoder =>
+ new SimpleEncoder(encoding ?? {}, {
+ color: this.props.theme.colorTextLabel,
+ fontFamily: this.props.theme.fontFamily,
+ fontSize: 20,
+ fontWeight: 'bold',
+ text: '',
+ });
constructor(props: FullWordCloudProps) {
super(props);
@@ -165,9 +254,7 @@ class WordCloud extends PureComponent<FullWordCloudProps,
WordCloudState> {
encoder.setDomainFromDataset(data);
const sortedData = [...data].sort(
- (a, b) =>
- encoder.channels.fontSize.encodeDatum(b, 0) -
- encoder.channels.fontSize.encodeDatum(a, 0),
+ (a, b) => encoder.getFontSize(b) - encoder.getFontSize(a),
);
const topResultsCount = Math.max(
sortedData.length * TOP_RESULTS_PERCENTAGE,
@@ -177,15 +264,13 @@ class WordCloud extends PureComponent<FullWordCloudProps,
WordCloudState> {
this.generateCloud(encoder, 1, (words: Word[]) =>
topResults.every((d: PlainObject) =>
- words.find(
- ({ text }) => encoder.channels.text.getValueFromDatum(d) === text,
- ),
+ words.find(({ text }) => encoder.getText(d) === text),
),
);
}
generateCloud(
- encoder: Encoder<WordCloudEncodingConfig>,
+ encoder: SimpleEncoder,
scaleFactor: number,
isValid: (word: Word[]) => boolean,
) {
@@ -196,14 +281,10 @@ class WordCloud extends PureComponent<FullWordCloudProps,
WordCloudState> {
.words(data.map((d: Word) => ({ ...d })))
.padding(5)
.rotate(ROTATION[rotation] || ROTATION.flat)
- .text((d: PlainObject) => encoder.channels.text.getValueFromDatum(d))
- .font((d: PlainObject) =>
- encoder.channels.fontFamily.encodeDatum(d,
this.props.theme.fontFamily),
- )
- .fontWeight((d: PlainObject) =>
- encoder.channels.fontWeight.encodeDatum(d, 'normal'),
- )
- .fontSize((d: PlainObject) => encoder.channels.fontSize.encodeDatum(d,
0))
+ .text((d: PlainObject) => encoder.getText(d))
+ .font((d: PlainObject) => encoder.getFontFamily(d))
+ .fontWeight((d: PlainObject) => encoder.getFontWeight(d))
+ .fontSize((d: PlainObject) => encoder.getFontSize(d))
.on('end', (words: Word[]) => {
if (isValid(words) || scaleFactor > MAX_SCALE_FACTOR) {
this.setWords(words);
@@ -219,7 +300,6 @@ class WordCloud extends PureComponent<FullWordCloudProps,
WordCloudState> {
const { width, height, encoding, sliceId, colorScheme } = this.props;
const encoder = this.createEncoder(encoding);
- encoder.channels.color.setDomainFromDataset(words);
const colorFn = CategoricalColorNamespace.getScale(colorScheme);
const viewBoxWidth = width * scaleFactor;
@@ -238,10 +318,7 @@ class WordCloud extends PureComponent<FullWordCloudProps,
WordCloudState> {
fontSize={`${w.size}px`}
fontWeight={w.weight}
fontFamily={w.font}
- fill={colorFn(
- encoder.channels.color.getValueFromDatum(w) as string,
- sliceId,
- )}
+ fill={colorFn(encoder.getColor(w as PlainObject), sliceId)}
textAnchor="middle"
transform={`translate(${w.x}, ${w.y}) rotate(${w.rotate})`}
>
diff --git
a/superset-frontend/plugins/plugin-chart-word-cloud/src/configureEncodable.ts
b/superset-frontend/plugins/plugin-chart-word-cloud/src/configureEncodable.ts
deleted file mode 100644
index 05a2041286..0000000000
---
a/superset-frontend/plugins/plugin-chart-word-cloud/src/configureEncodable.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
- Encodable,
- ColorSchemeResolver,
- TimeFormatResolver,
- CategoricalColorScaleResolver,
- defaultColorSchemeResolver,
- addPrefix,
-} from 'encodable';
-import {
- CategoricalColorNamespace,
- getCategoricalSchemeRegistry,
- getSequentialSchemeRegistry,
- getNumberFormatter,
- getTimeFormatter,
- LOCAL_PREFIX,
- getTimeFormatterRegistry,
-} from '@superset-ui/core';
-
-const timeFormat: TimeFormatResolver = ({
- format,
- formatInLocalTime = false,
-} = {}) => {
- const formatString = formatInLocalTime
- ? addPrefix(
- LOCAL_PREFIX,
- format ?? getTimeFormatterRegistry().getDefaultKey()!,
- )
- : format;
-
- return getTimeFormatter(formatString);
-};
-
-const colorSchemeResolver: ColorSchemeResolver = ({
- name,
- type = 'categorical',
-} = {}) => {
- if (type === 'sequential') {
- const scheme = getSequentialSchemeRegistry().get(name);
-
- return typeof scheme === 'undefined'
- ? scheme
- : { type: 'sequential', ...scheme };
- }
- if (type === 'categorical') {
- const scheme = getCategoricalSchemeRegistry().get(name);
-
- return typeof scheme === 'undefined'
- ? scheme
- : { type: 'categorical', ...scheme };
- }
- return defaultColorSchemeResolver({ name, type });
-};
-
-const colorScaleResolver: CategoricalColorScaleResolver = ({
- name,
- namespace,
-} = {}) => CategoricalColorNamespace.getScale(name, namespace);
-
-export default function configureEncodable() {
- Encodable.setNumberFormatResolver(getNumberFormatter)
- .setTimeFormatResolver(timeFormat)
- .setColorSchemeResolver(colorSchemeResolver)
- .setCategoricalColorScaleResolver(colorScaleResolver);
-}
diff --git a/superset-frontend/plugins/plugin-chart-word-cloud/src/index.ts
b/superset-frontend/plugins/plugin-chart-word-cloud/src/index.ts
index c265e837a4..87bc4ff60b 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/src/index.ts
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/src/index.ts
@@ -19,4 +19,3 @@
export { default as WordCloudChartPlugin } from './plugin';
export * from './types';
-export { default as configureEncodable } from './configureEncodable';
diff --git
a/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/index.ts
b/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/index.ts
index a8305489dc..c37d27d8cc 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/index.ts
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/index.ts
@@ -29,9 +29,6 @@ import example1Dark from '../images/Word_Cloud-dark.jpg';
import example2 from '../images/Word_Cloud_2.jpg';
import example2Dark from '../images/Word_Cloud_2-dark.jpg';
import controlPanel from './controlPanel';
-import configureEncodable from '../configureEncodable';
-
-configureEncodable();
const metadata = new ChartMetadata({
category: t('Ranking'),