Compare commits

..

1 Commits

Author SHA1 Message Date
Beto Dealmeida
83101b632d fix: regressions to docker 2026-06-15 17:50:07 -04:00
474 changed files with 13723 additions and 70500 deletions

View File

@@ -42,7 +42,7 @@ runs:
fi fi
echo "python-version=$RESOLVED_VERSION" >> "$GITHUB_OUTPUT" echo "python-version=$RESOLVED_VERSION" >> "$GITHUB_OUTPUT"
- name: Set up Python ${{ steps.set-python-version.outputs.python-version }} - name: Set up Python ${{ steps.set-python-version.outputs.python-version }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with: with:
python-version: ${{ steps.set-python-version.outputs.python-version }} python-version: ${{ steps.set-python-version.outputs.python-version }}
cache: ${{ inputs.cache }} cache: ${{ inputs.cache }}

View File

@@ -3,6 +3,10 @@ enable-beta-ecosystems: true
updates: updates:
- package-ecosystem: "github-actions" - package-ecosystem: "github-actions"
directory: "/" directory: "/"
ignore:
# Ignore temporarily as release schedule is too mentally taxing for dep-handling maintainers
# Additionally, very few PRs are reviewed by this action.
- dependency-name: anthropics/claude-code-action
schedule: schedule:
interval: "daily" interval: "daily"
cooldown: cooldown:

View File

@@ -114,7 +114,7 @@ testdata() {
say "::group::Load test data" say "::group::Load test data"
# must specify PYTHONPATH to make `tests.superset_test_config` importable # must specify PYTHONPATH to make `tests.superset_test_config` importable
export PYTHONPATH="$GITHUB_WORKSPACE" export PYTHONPATH="$GITHUB_WORKSPACE"
uv pip install --system -e . pip install -e .
superset db upgrade superset db upgrade
superset load_test_users superset load_test_users
superset load_examples --load-test-data superset load_examples --load-test-data
@@ -127,7 +127,7 @@ playwright_testdata() {
say "::group::Load all examples for Playwright tests" say "::group::Load all examples for Playwright tests"
# must specify PYTHONPATH to make `tests.superset_test_config` importable # must specify PYTHONPATH to make `tests.superset_test_config` importable
export PYTHONPATH="$GITHUB_WORKSPACE" export PYTHONPATH="$GITHUB_WORKSPACE"
uv pip install --system -e . pip install -e .
superset db upgrade superset db upgrade
superset load_test_users superset load_test_users
superset load_examples superset load_examples

View File

@@ -31,7 +31,7 @@ jobs:
checks: write checks: write
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: true persist-credentials: true
ref: master ref: master
@@ -40,7 +40,7 @@ jobs:
uses: ./.github/actions/setup-supersetbot/ uses: ./.github/actions/setup-supersetbot/
- name: Set up Python ${{ inputs.python-version }} - name: Set up Python ${{ inputs.python-version }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with: with:
python-version: "3.10" python-version: "3.10"

View File

@@ -22,7 +22,7 @@ jobs:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive

View File

@@ -25,7 +25,7 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: Check and notify - name: Check and notify

88
.github/workflows/claude.yml vendored Normal file
View File

@@ -0,0 +1,88 @@
name: Claude PR Assistant
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
permissions:
contents: read
jobs:
check-permissions:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude'))
runs-on: ubuntu-latest
outputs:
allowed: ${{ steps.check.outputs.allowed }}
steps:
- name: Check if user is allowed
id: check
env:
COMMENTER: ${{ github.event.comment.user.login }}
run: |
# List of allowed users
ALLOWED_USERS="mistercrunch,rusackas"
echo "Checking permissions for user: $COMMENTER"
# Check if user is in allowed list
if [[ ",$ALLOWED_USERS," == *",$COMMENTER,"* ]]; then
echo "allowed=true" >> $GITHUB_OUTPUT
echo "✅ User $COMMENTER is allowed to use Claude"
else
echo "allowed=false" >> $GITHUB_OUTPUT
echo "❌ User $COMMENTER is not allowed to use Claude"
fi
deny-access:
needs: check-permissions
if: needs.check-permissions.outputs.allowed == 'false'
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- name: Comment access denied
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
COMMENTER_LOGIN: ${{ github.event.comment.user.login || github.event.review.user.login || github.event.issue.user.login }}
with:
script: |
const commenter = process.env.COMMENTER_LOGIN;
const message = `👋 Hi @${commenter}!
Thanks for trying to use Claude Code, but currently only certain team members have access to this feature.
If you believe you should have access, please contact a project maintainer.`;
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: message
});
claude-code-action:
needs: check-permissions
if: needs.check-permissions.outputs.allowed == 'true'
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
fetch-depth: 1
- name: Run Claude PR Action
uses: anthropics/claude-code-action@5fb899572b81d2bb648d4d187173a2f423a9677c # beta
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
timeout_minutes: "60"

View File

@@ -26,7 +26,7 @@ jobs:
frontend: ${{ steps.check.outputs.frontend }} frontend: ${{ steps.check.outputs.frontend }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: Check for file changes - name: Check for file changes
@@ -47,7 +47,6 @@ jobs:
permissions: permissions:
actions: read actions: read
contents: read contents: read
pull-requests: read
security-events: write security-events: write
strategy: strategy:
@@ -58,7 +57,7 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false

View File

@@ -27,7 +27,7 @@ jobs:
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- name: "Checkout Repository" - name: "Checkout Repository"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: "Dependency Review" - name: "Dependency Review"
@@ -43,7 +43,7 @@ jobs:
# the latest version. It's MIT: https://github.com/nbubna/store/blob/master/LICENSE-MIT # the latest version. It's MIT: https://github.com/nbubna/store/blob/master/LICENSE-MIT
# pkg:npm/node-forge@1.3.1 # pkg:npm/node-forge@1.3.1
# selecting BSD-3-Clause licensing terms for node-forge to ensure compatibility with Apache # selecting BSD-3-Clause licensing terms for node-forge to ensure compatibility with Apache
allow-dependencies-licenses: pkg:npm/rgbcolor, pkg:npm/jszip@3.10.1 allow-dependencies-licenses: pkg:npm/store2@2.14.2, pkg:npm/node-forge@1.3.1, pkg:npm/rgbcolor, pkg:npm/jszip@3.10.1
python-dependency-liccheck: python-dependency-liccheck:
# NOTE: Configuration for liccheck lives in our pyproject.yml. # NOTE: Configuration for liccheck lives in our pyproject.yml.
@@ -51,7 +51,7 @@ jobs:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
- name: "Checkout Repository" - name: "Checkout Repository"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false

View File

@@ -30,7 +30,7 @@ jobs:
docker: ${{ steps.check.outputs.docker }} docker: ${{ steps.check.outputs.docker }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: Check for file changes - name: Check for file changes
@@ -71,28 +71,10 @@ jobs:
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: Free up disk space
shell: bash
run: |
# Reclaim large preinstalled toolchains we don't use. The image
# build, and especially the docker-compose sanity check (which
# rebuilds from scratch whenever the registry cache image
# apache/superset-cache is unavailable), can otherwise exhaust the
# runner's root disk and fail with "no space left on device".
echo "Disk before cleanup:"; df -h /
sudo rm -rf \
/usr/share/dotnet \
/usr/local/lib/android \
/opt/ghc \
/usr/local/.ghcup \
/opt/hostedtoolcache/CodeQL \
/usr/local/share/boost || true
echo "Disk after cleanup:"; df -h /
- name: Setup Docker Environment - name: Setup Docker Environment
uses: ./.github/actions/setup-docker uses: ./.github/actions/setup-docker
with: with:
@@ -119,27 +101,13 @@ jobs:
PUSH_OR_LOAD="--load" PUSH_OR_LOAD="--load"
fi fi
# Retry to absorb transient Docker Hub registry errors (base-image supersetbot docker \
# pull timeouts, 504/401 on push, ECONNRESET) that otherwise fail $PUSH_OR_LOAD \
# the whole job. buildx reuses the buildkit layer cache from the --preset "$BUILD_PRESET" \
# failed attempt, so a retry mostly re-does just the failed push. --context "$EVENT" \
for attempt in 1 2 3; do --context-ref "$RELEASE" $FORCE_LATEST \
if supersetbot docker \ --extra-flags "--build-arg INCLUDE_CHROMIUM=false --tag $IMAGE_TAG" \
$PUSH_OR_LOAD \ $PLATFORM_ARG
--preset "$BUILD_PRESET" \
--context "$EVENT" \
--context-ref "$RELEASE" $FORCE_LATEST \
--extra-flags "--build-arg INCLUDE_CHROMIUM=false --tag $IMAGE_TAG" \
$PLATFORM_ARG; then
break
fi
if [ "$attempt" -eq 3 ]; then
echo "::error::supersetbot docker build failed after 3 attempts"
exit 1
fi
echo "::warning::Build attempt ${attempt} failed; retrying in 30s..."
sleep 30
done
# in the context of push (using multi-platform build), we need to pull the image locally # in the context of push (using multi-platform build), we need to pull the image locally
- name: Docker pull - name: Docker pull
@@ -177,24 +145,9 @@ jobs:
timeout-minutes: 30 timeout-minutes: 30
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: Free up disk space
shell: bash
run: |
# The sanity check rebuilds the image from scratch whenever the
# registry cache image apache/superset-cache is unavailable, which
# can exhaust the runner's root disk ("no space left on device").
echo "Disk before cleanup:"; df -h /
sudo rm -rf \
/usr/share/dotnet \
/usr/local/lib/android \
/opt/ghc \
/usr/local/.ghcup \
/opt/hostedtoolcache/CodeQL \
/usr/local/share/boost || true
echo "Disk after cleanup:"; df -h /
- name: Setup Docker Environment - name: Setup Docker Environment
uses: ./.github/actions/setup-docker uses: ./.github/actions/setup-docker
with: with:

View File

@@ -10,29 +10,37 @@ permissions:
contents: read contents: read
jobs: jobs:
build: config:
# Publishing uses npm trusted publishing (OIDC), so there is no NPM_TOKEN to runs-on: ubuntu-24.04
# gate on. Restrict to the canonical repo: forks cannot mint a valid OIDC outputs:
# token for this package and must not publish. has-secrets: ${{ steps.check.outputs.has-secrets }}
if: github.repository == 'apache/superset' steps:
- name: "Check for secrets"
id: check
shell: bash
run: |
if [ -n "${NPM_TOKEN}" ]; then
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
fi
env:
NPM_TOKEN: ${{ (secrets.NPM_TOKEN != '') || '' }}
build:
needs: config
if: needs.config.outputs.has-secrets
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
permissions:
contents: read
id-token: write # required for npm trusted publishing (OIDC)
defaults: defaults:
run: run:
working-directory: superset-embedded-sdk working-directory: superset-embedded-sdk
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
# Note: registry-url is intentionally omitted. When set, actions/setup-node
# writes an .npmrc with `_authToken=${NODE_AUTH_TOKEN}` and a placeholder
# token, which makes npm attempt token auth and skip the OIDC
# trusted-publishing exchange. With no .npmrc auth line, npm authenticates
# via OIDC against the default registry (registry.npmjs.org).
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with: with:
node-version-file: "./superset-embedded-sdk/.nvmrc" node-version-file: "./superset-embedded-sdk/.nvmrc"
registry-url: "https://registry.npmjs.org"
- run: npm ci - run: npm ci
- run: npm run ci:release - run: npm run ci:release
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

View File

@@ -21,7 +21,7 @@ jobs:
run: run:
working-directory: superset-embedded-sdk working-directory: superset-embedded-sdk
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6

View File

@@ -32,12 +32,12 @@ jobs:
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
- name: Setup Java - name: Setup Java
uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0 uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
distribution: "temurin" distribution: "temurin"
java-version: "11" java-version: "11"

View File

@@ -27,7 +27,7 @@ jobs:
security-events: write security-events: write
steps: steps:
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false

View File

@@ -16,7 +16,7 @@ jobs:
issues: write issues: write
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false

View File

@@ -12,7 +12,7 @@ jobs:
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive

View File

@@ -18,12 +18,12 @@ jobs:
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
- name: Setup Java - name: Setup Java
uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0 uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
distribution: "temurin" distribution: "temurin"
java-version: "11" java-version: "11"

View File

@@ -21,7 +21,7 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive

View File

@@ -28,7 +28,7 @@ jobs:
python-version: ${{ github.event_name == 'pull_request' && fromJSON('["current"]') || fromJSON('["current", "previous", "next"]') }} python-version: ${{ github.event_name == 'pull_request' && fromJSON('["current"]') || fromJSON('["current", "previous", "next"]') }}
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive

View File

@@ -33,7 +33,7 @@ jobs:
permissions: permissions:
contents: write contents: write
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
# pulls all commits (needed for lerna / semantic release to correctly version) # pulls all commits (needed for lerna / semantic release to correctly version)

View File

@@ -152,7 +152,7 @@ jobs:
- name: Checkout PR code (only if build needed) - name: Checkout PR code (only if build needed)
if: steps.auth.outputs.authorized == 'true' && steps.check.outputs.build_needed == 'true' if: steps.auth.outputs.authorized == 'true' && steps.check.outputs.build_needed == 'true'
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
ref: ${{ steps.check.outputs.target_sha }} ref: ${{ steps.check.outputs.target_sha }}
persist-credentials: false persist-credentials: false

View File

@@ -41,7 +41,7 @@ jobs:
- 16379:6379 - 16379:6379
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
@@ -61,7 +61,7 @@ jobs:
- name: superset init - name: superset init
if: steps.check.outputs.python if: steps.check.outputs.python
run: | run: |
uv pip install --system -e . pip install -e .
superset db upgrade superset db upgrade
superset load_test_users superset load_test_users
- name: superset load_examples - name: superset load_examples

View File

@@ -60,7 +60,7 @@ jobs:
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- name: "Checkout ${{ github.event.workflow_run.head_sha || github.sha }}" - name: "Checkout ${{ github.event.workflow_run.head_sha || github.sha }}"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
ref: ${{ github.event.workflow_run.head_sha || github.sha }} ref: ${{ github.event.workflow_run.head_sha || github.sha }}
persist-credentials: false persist-credentials: false
@@ -71,7 +71,7 @@ jobs:
node-version-file: "./docs/.nvmrc" node-version-file: "./docs/.nvmrc"
- name: Setup Python - name: Setup Python
uses: ./.github/actions/setup-backend/ uses: ./.github/actions/setup-backend/
- uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
distribution: "zulu" distribution: "zulu"
java-version: "21" java-version: "21"

View File

@@ -28,7 +28,7 @@ jobs:
name: Link Checking name: Link Checking
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
# Do not bump this linkinator-action version without opening # Do not bump this linkinator-action version without opening
@@ -73,7 +73,7 @@ jobs:
working-directory: docs working-directory: docs
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
@@ -112,7 +112,7 @@ jobs:
working-directory: docs working-directory: docs
steps: steps:
- name: "Checkout PR head: ${{ github.event.workflow_run.head_sha }}" - name: "Checkout PR head: ${{ github.event.workflow_run.head_sha }}"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
ref: ${{ github.event.workflow_run.head_sha }} ref: ${{ github.event.workflow_run.head_sha }}
persist-credentials: false persist-credentials: false

View File

@@ -38,7 +38,7 @@ jobs:
frontend: ${{ steps.check.outputs.frontend }} frontend: ${{ steps.check.outputs.frontend }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: Check for file changes - name: Check for file changes
@@ -49,7 +49,7 @@ jobs:
cypress-matrix: cypress-matrix:
needs: changes needs: changes
if: (needs.changes.outputs.python == 'true' || needs.changes.outputs.frontend == 'true') && github.event.pull_request.draft == false if: needs.changes.outputs.python == 'true' || needs.changes.outputs.frontend == 'true'
# Somehow one test flakes on 24.04 for unknown reasons, this is the only GHA left on 22.04 # Somehow one test flakes on 24.04 for unknown reasons, this is the only GHA left on 22.04
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
timeout-minutes: 30 timeout-minutes: 30
@@ -97,21 +97,21 @@ jobs:
# Conditional checkout based on context # Conditional checkout based on context
- name: Checkout for push or pull_request event - name: Checkout for push or pull_request event
if: github.event_name == 'push' || github.event_name == 'pull_request' if: github.event_name == 'push' || github.event_name == 'pull_request'
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
- name: Checkout using ref (workflow_dispatch) - name: Checkout using ref (workflow_dispatch)
if: github.event_name == 'workflow_dispatch' && github.event.inputs.ref != '' if: github.event_name == 'workflow_dispatch' && github.event.inputs.ref != ''
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
ref: ${{ github.event.inputs.ref }} ref: ${{ github.event.inputs.ref }}
submodules: recursive submodules: recursive
- name: Checkout using PR ID (workflow_dispatch) - name: Checkout using PR ID (workflow_dispatch)
if: github.event_name == 'workflow_dispatch' && github.event.inputs.pr_id != '' if: github.event_name == 'workflow_dispatch' && github.event.inputs.pr_id != ''
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
ref: refs/pull/${{ github.event.inputs.pr_id }}/merge ref: refs/pull/${{ github.event.inputs.pr_id }}/merge
@@ -207,21 +207,21 @@ jobs:
# Conditional checkout based on context (same as Cypress workflow) # Conditional checkout based on context (same as Cypress workflow)
- name: Checkout for push or pull_request event - name: Checkout for push or pull_request event
if: github.event_name == 'push' || github.event_name == 'pull_request' if: github.event_name == 'push' || github.event_name == 'pull_request'
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
- name: Checkout using ref (workflow_dispatch) - name: Checkout using ref (workflow_dispatch)
if: github.event_name == 'workflow_dispatch' && github.event.inputs.ref != '' if: github.event_name == 'workflow_dispatch' && github.event.inputs.ref != ''
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
ref: ${{ github.event.inputs.ref }} ref: ${{ github.event.inputs.ref }}
submodules: recursive submodules: recursive
- name: Checkout using PR ID (workflow_dispatch) - name: Checkout using PR ID (workflow_dispatch)
if: github.event_name == 'workflow_dispatch' && github.event.inputs.pr_id != '' if: github.event_name == 'workflow_dispatch' && github.event.inputs.pr_id != ''
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
ref: refs/pull/${{ github.event.inputs.pr_id }}/merge ref: refs/pull/${{ github.event.inputs.pr_id }}/merge

View File

@@ -31,7 +31,7 @@ jobs:
working-directory: superset-extensions-cli working-directory: superset-extensions-cli
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive

View File

@@ -27,7 +27,7 @@ jobs:
should-run: ${{ steps.check.outputs.frontend }} should-run: ${{ steps.check.outputs.frontend }}
steps: steps:
- name: Checkout Code - name: Checkout Code
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
@@ -110,7 +110,7 @@ jobs:
id-token: write id-token: write
steps: steps:
- name: Checkout Code - name: Checkout Code
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0

View File

@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive

View File

@@ -29,7 +29,7 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
ref: ${{ inputs.ref || github.ref_name }} ref: ${{ inputs.ref || github.ref_name }}
persist-credentials: true persist-credentials: true

View File

@@ -34,7 +34,7 @@ jobs:
frontend: ${{ steps.check.outputs.frontend }} frontend: ${{ steps.check.outputs.frontend }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: Check for file changes - name: Check for file changes
@@ -83,21 +83,21 @@ jobs:
# Conditional checkout based on context (same as Cypress workflow) # Conditional checkout based on context (same as Cypress workflow)
- name: Checkout for push or pull_request event - name: Checkout for push or pull_request event
if: github.event_name == 'push' || github.event_name == 'pull_request' if: github.event_name == 'push' || github.event_name == 'pull_request'
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
- name: Checkout using ref (workflow_dispatch) - name: Checkout using ref (workflow_dispatch)
if: github.event_name == 'workflow_dispatch' && github.event.inputs.ref != '' if: github.event_name == 'workflow_dispatch' && github.event.inputs.ref != ''
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
ref: ${{ github.event.inputs.ref }} ref: ${{ github.event.inputs.ref }}
submodules: recursive submodules: recursive
- name: Checkout using PR ID (workflow_dispatch) - name: Checkout using PR ID (workflow_dispatch)
if: github.event_name == 'workflow_dispatch' && github.event.inputs.pr_id != '' if: github.event_name == 'workflow_dispatch' && github.event.inputs.pr_id != ''
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
ref: refs/pull/${{ github.event.inputs.pr_id }}/merge ref: refs/pull/${{ github.event.inputs.pr_id }}/merge

View File

@@ -1,11 +1,6 @@
# Python integration tests # Python integration tests
name: Python-Integration name: Python-Integration
# Least-privilege default for GITHUB_TOKEN. Jobs that need more (e.g. OIDC for
# codecov uploads) opt in via their own job-level `permissions:` block.
permissions:
contents: read
on: on:
push: push:
branches: branches:
@@ -29,7 +24,7 @@ jobs:
python: ${{ steps.check.outputs.python }} python: ${{ steps.check.outputs.python }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: Check for file changes - name: Check for file changes
@@ -72,7 +67,7 @@ jobs:
- 16379:6379 - 16379:6379
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
@@ -157,7 +152,7 @@ jobs:
- 16379:6379 - 16379:6379
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
@@ -207,7 +202,7 @@ jobs:
- 16379:6379 - 16379:6379
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive

View File

@@ -25,7 +25,7 @@ jobs:
python: ${{ steps.check.outputs.python }} python: ${{ steps.check.outputs.python }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: Check for file changes - name: Check for file changes
@@ -72,7 +72,7 @@ jobs:
- 16379:6379 - 16379:6379
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
@@ -127,7 +127,7 @@ jobs:
- 16379:6379 - 16379:6379
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
@@ -149,7 +149,7 @@ jobs:
run: celery-worker run: celery-worker
- name: Python unit tests (PostgreSQL) - name: Python unit tests (PostgreSQL)
run: | run: |
uv pip install --system -e .[hive] pip install -e .[hive]
./scripts/python_tests.sh -m 'chart_data_flow or sql_json_flow' ./scripts/python_tests.sh -m 'chart_data_flow or sql_json_flow'
- name: Upload code coverage - name: Upload code coverage
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0

View File

@@ -1,11 +1,6 @@
# Python unit tests # Python unit tests
name: Python-Unit name: Python-Unit
# Least-privilege default for GITHUB_TOKEN. Jobs that need more (e.g. OIDC for
# codecov uploads) opt in via their own job-level `permissions:` block.
permissions:
contents: read
on: on:
push: push:
branches: branches:
@@ -30,7 +25,7 @@ jobs:
python: ${{ steps.check.outputs.python }} python: ${{ steps.check.outputs.python }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: Check for file changes - name: Check for file changes
@@ -55,7 +50,7 @@ jobs:
PYTHONPATH: ${{ github.workspace }} PYTHONPATH: ${{ github.workspace }}
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive

View File

@@ -25,7 +25,7 @@ jobs:
pull-requests: read pull-requests: read
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive
@@ -61,7 +61,7 @@ jobs:
pull-requests: read pull-requests: read
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
submodules: recursive submodules: recursive

View File

@@ -25,7 +25,7 @@ jobs:
timeout-minutes: 20 timeout-minutes: 20
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
- name: Install dependencies - name: Install dependencies

View File

@@ -38,7 +38,7 @@ jobs:
}); });
- name: "Checkout ( ${{ github.sha }} )" - name: "Checkout ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false

View File

@@ -1,60 +0,0 @@
name: Sync requirements for Python dependency PRs
on:
pull_request:
types: [opened, synchronize]
permissions:
contents: write
pull-requests: read
jobs:
sync-python-dep-requirements:
# This action is limited for (1) PRs authored by Dependabot and (2) upstream repo due to write back to remote
if: github.repository == 'apache/superset' && github.event.pull_request.user.login == 'dependabot[bot]' && github.event.pull_request.head.repo.fork == false
runs-on: ubuntu-26.04
steps:
- name: Fetch Dependabot metadata
id: dependabot-metadata
shell: bash
env:
BRANCH_NAME: ${{ github.head_ref }}
run: |
# Get current branch name, extract the package ecosystem and return as GHA step output
packageEcosystem=$(echo "$BRANCH_NAME" | cut -d'/' -f2)
echo "package-ecosystem=$packageEcosystem" >> $GITHUB_OUTPUT
# zizmor: ignore[artipacked] - required persisted credentials to push synced requirement changes back to remote
- name: Checkout source code
if: ${{ steps.dependabot-metadata.outputs.package-ecosystem == 'pip' }}
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: true
# Authenticate the Docker daemon so the python:slim pull in
# uv-pip-compile.sh uses our (much higher) authenticated rate limit
# instead of the shared-runner anonymous one.
- name: Login to Docker Hub
if: ${{ steps.dependabot-metadata.outputs.package-ecosystem == 'pip' }}
continue-on-error: true
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Sync requirements in containerized environment
if: ${{ steps.dependabot-metadata.outputs.package-ecosystem == 'pip' }}
run: ./scripts/uv-pip-compile.sh
- name: Push changes to remote PRs
if: ${{ steps.dependabot-metadata.outputs.package-ecosystem == 'pip' }}
run: |
git config user.name 'github-actions[bot]'
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
git add requirements
git diff --cached --quiet && exit 0
git commit --signoff --message "build(deps): sync pinned requirements for Dependabot pip PRs"
git push origin "HEAD:refs/heads/${GITHUB_EVENT_PULL_REQUEST_HEAD_REF}"
env:
GITHUB_EVENT_PULL_REQUEST_HEAD_REF: ${{ github.event.pull_request.head.ref }}

View File

@@ -54,7 +54,7 @@ jobs:
fail-fast: false fail-fast: false
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
@@ -120,7 +120,7 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0

View File

@@ -32,7 +32,7 @@ jobs:
name: Generate Reports name: Generate Reports
steps: steps:
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
persist-credentials: false persist-credentials: false

View File

@@ -50,4 +50,3 @@ under the License.
- [4.1.4](./CHANGELOG/4.1.4.md) - [4.1.4](./CHANGELOG/4.1.4.md)
- [5.0.0](./CHANGELOG/5.0.0.md) - [5.0.0](./CHANGELOG/5.0.0.md)
- [6.0.0](./CHANGELOG/6.0.0.md) - [6.0.0](./CHANGELOG/6.0.0.md)
- [6.1.0](./CHANGELOG/6.1.0.md)

File diff suppressed because it is too large Load Diff

View File

@@ -23,14 +23,11 @@ PYTHON=`command -v python3.11 || command -v python3.10`
install: superset pre-commit install: superset pre-commit
superset: superset:
# Bootstrap uv (the project's installer) into the active environment
pip install uv
# Install external dependencies # Install external dependencies
uv pip install -r requirements/development.txt pip install -r requirements/development.txt
# Install Superset in editable (development) mode # Install Superset in editable (development) mode
uv pip install -e . pip install -e .
# Create an admin user in your metadata database # Create an admin user in your metadata database
superset fab create-admin \ superset fab create-admin \
@@ -55,14 +52,11 @@ superset:
update: update-py update-js update: update-py update-js
update-py: update-py:
# Bootstrap uv (the project's installer) into the active environment
pip install uv
# Install external dependencies # Install external dependencies
uv pip install -r requirements/development.txt pip install -r requirements/development.txt
# Install Superset in editable (development) mode # Install Superset in editable (development) mode
uv pip install -e . pip install -e .
# Initialize the database # Initialize the database
superset db upgrade superset db upgrade
@@ -85,8 +79,7 @@ activate:
pre-commit: pre-commit:
# setup pre commit dependencies # setup pre commit dependencies
pip install uv pip3 install -r requirements/development.txt
uv pip install -r requirements/development.txt
pre-commit install pre-commit install
format: py-format js-format format: py-format js-format

View File

@@ -83,9 +83,6 @@ categories:
- name: Clark.de - name: Clark.de
url: https://clark.de/ url: https://clark.de/
- name: Cover Genius
url: https://covergenius.com/
- name: EnquiryLabs - name: EnquiryLabs
url: https://www.enquirylabs.co.uk url: https://www.enquirylabs.co.uk
@@ -95,10 +92,6 @@ categories:
- name: KarrotPay - name: KarrotPay
url: https://www.daangnpay.com/ url: https://www.daangnpay.com/
- name: NICE Actimize
url: https://www.niceactimize.com/
contributors: ["@stevensuting"]
- name: Remita - name: Remita
url: https://remita.net url: https://remita.net
contributors: ["@mujibishola"] contributors: ["@mujibishola"]
@@ -119,6 +112,9 @@ categories:
url: https://xendit.co/ url: https://xendit.co/
contributors: ["@LieAlbertTriAdrian"] contributors: ["@LieAlbertTriAdrian"]
- name: Cover Genius
url: https://covergenius.com/
Gaming: Gaming:
- name: Popoko VM Games Studio - name: Popoko VM Games Studio
url: https://popoko.live url: https://popoko.live
@@ -300,6 +296,7 @@ categories:
logo: hifadih.png logo: hifadih.png
contributors: ["@saintLaurent00"] contributors: ["@saintLaurent00"]
# Logo approved by @anmol-hpe on behalf of HPE
- name: HPE - name: HPE
url: https://www.hpe.com/in/en/home.html url: https://www.hpe.com/in/en/home.html
logo: hpe.png logo: hpe.png
@@ -399,10 +396,6 @@ categories:
url: https://www.techaudit.info url: https://www.techaudit.info
contributors: ["@ETselikov"] contributors: ["@ETselikov"]
- name: Tech Solution
url: https://www.tech-solution.com.ar/
contributors: ["@danteGiuliano", "@LeandroVallejos", "@McJaben", "@xJeree", "@zeo-return-null"]
- name: Tenable - name: Tenable
url: https://www.tenable.com url: https://www.tenable.com
contributors: ["@dflionis"] contributors: ["@dflionis"]
@@ -432,10 +425,6 @@ categories:
logo: userguiding.svg logo: userguiding.svg
contributors: ["@tzercin"] contributors: ["@tzercin"]
- name: Value Ad
url: https://bestpair.info/
contributors: ["@stevensuting"]
- name: Virtuoso QA - name: Virtuoso QA
url: https://www.virtuosoqa.com url: https://www.virtuosoqa.com
@@ -520,6 +509,10 @@ categories:
url: https://www.sunbird.org/ url: https://www.sunbird.org/
contributors: ["@eksteporg"] contributors: ["@eksteporg"]
- name: The GRAPH Network
url: https://thegraphnetwork.org/
contributors: ["@fccoelho"]
- name: Udemy - name: Udemy
url: https://www.udemy.com/ url: https://www.udemy.com/
contributors: ["@sungjuly"] contributors: ["@sungjuly"]
@@ -528,24 +521,7 @@ categories:
url: https://www.vipkid.com.cn/ url: https://www.vipkid.com.cn/
contributors: ["@illpanda"] contributors: ["@illpanda"]
Social Organization: - name: WikiMedia Foundation
- name: Living Goods
url: https://www.livinggoods.org
contributors: ["@chelule"]
- name: One Acre Fund
url: https://oneacrefund.org/
contributors: ["@stevensuting"]
- name: Quest Alliance
url: https://www.questalliance.net/
contributors: ["@stevensuting"]
- name: The GRAPH Network
url: https://thegraphnetwork.org/
contributors: ["@fccoelho"]
- name: Wikimedia Foundation
url: https://wikimediafoundation.org url: https://wikimediafoundation.org
contributors: ["@vg"] contributors: ["@vg"]
@@ -558,10 +534,6 @@ categories:
url: https://www.douroeci.com/ url: https://www.douroeci.com/
contributors: ["@nunohelibeires"] contributors: ["@nunohelibeires"]
- name: Rogow
url: https://rogow.com.br/
contributors: ["@nilmonto"]
- name: Safaricom - name: Safaricom
url: https://www.safaricom.co.ke/ url: https://www.safaricom.co.ke/
contributors: ["@mmutiso"] contributors: ["@mmutiso"]
@@ -574,10 +546,11 @@ categories:
url: https://wattbewerb.de/ url: https://wattbewerb.de/
contributors: ["@wattbewerb"] contributors: ["@wattbewerb"]
Healthcare: - name: Rogow
- name: 2070Health url: https://rogow.com.br/
url: https://2070health.com/ contributors: ["@nilmonto"]
Healthcare:
- name: Amino - name: Amino
url: https://amino.com url: https://amino.com
contributors: ["@shkr"] contributors: ["@shkr"]
@@ -590,6 +563,10 @@ categories:
url: https://www.getcare.io/ url: https://www.getcare.io/
contributors: ["@alandao2021"] contributors: ["@alandao2021"]
- name: Living Goods
url: https://www.livinggoods.org
contributors: ["@chelule"]
- name: Maieutical Labs - name: Maieutical Labs
url: https://maieuticallabs.it url: https://maieuticallabs.it
contributors: ["@xrmx"] contributors: ["@xrmx"]
@@ -608,10 +585,10 @@ categories:
- name: WeSure - name: WeSure
url: https://www.wesure.cn/ url: https://www.wesure.cn/
HR / Staffing: - name: 2070Health
- name: bluquist url: https://2070health.com/
url: https://bluquist.com/
HR / Staffing:
- name: Swile - name: Swile
url: https://www.swile.co/ url: https://www.swile.co/
contributors: ["@PaoloTerzi"] contributors: ["@PaoloTerzi"]
@@ -619,18 +596,21 @@ categories:
- name: Symmetrics - name: Symmetrics
url: https://www.symmetrics.fyi url: https://www.symmetrics.fyi
- name: bluquist
url: https://bluquist.com/
Government: Government:
- name: City of Ann Arbor, MI - name: City of Ann Arbor, MI
url: https://www.a2gov.org/ url: https://www.a2gov.org/
contributors: ["@sfirke"] contributors: ["@sfirke"]
- name: NRLM - Sarathi, India
url: https://pib.gov.in/PressReleasePage.aspx?PRID=1999586
- name: RIS3 Strategy of CZ, MIT CR - name: RIS3 Strategy of CZ, MIT CR
url: https://www.ris3.cz/ url: https://www.ris3.cz/
contributors: ["@RIS3CZ"] contributors: ["@RIS3CZ"]
- name: NRLM - Sarathi, India
url: https://pib.gov.in/PressReleasePage.aspx?PRID=1999586
Mobile Software: Mobile Software:
- name: VLMedia - name: VLMedia
url: https://www.vlmedia.com.tr url: https://www.vlmedia.com.tr

View File

@@ -24,20 +24,6 @@ assists people when migrating to a new version.
## Next ## Next
### Pivot table First/Last aggregations follow data order
The pivot table chart's `First` and `Last` aggregations now return the first and last value in data (query result) order, instead of effectively returning the minimum and maximum. Existing pivot tables that use these aggregations for totals/subtotals may show different values after upgrading. For deterministic results, ensure the underlying query has a stable sort order.
### `thumbnail_url` removed from dashboard list API response
The `thumbnail_url` field has been removed from `GET /api/v1/dashboard/` list responses. External consumers relying on this field must now construct the thumbnail URL client-side using `id` and `changed_on_utc`:
```
/api/v1/dashboard/{id}/thumbnail/{changed_on_utc}/
```
The thumbnail endpoint redirects to the current digest URL regardless of whether the supplied digest is exact. If the image is not yet cached, that digest URL may return `202` and trigger async generation. Using `changed_on_utc` as the digest is sufficient for cache-busting purposes.
### Webhook alerts/reports block private/internal hosts by default ### Webhook alerts/reports block private/internal hosts by default
Webhook alert/report dispatch (`WebhookNotification.send`) now validates the target URL's host against the same private/internal-IP block applied to dataset import URLs. If the resolved host is in a loopback, link-local, private (RFC-1918), shared-CGNAT, or multicast range, the webhook is rejected with `NotificationParamException`. Webhook alert/report dispatch (`WebhookNotification.send`) now validates the target URL's host against the same private/internal-IP block applied to dataset import URLs. If the resolved host is in a loopback, link-local, private (RFC-1918), shared-CGNAT, or multicast range, the webhook is rejected with `NotificationParamException`.
@@ -227,9 +213,6 @@ Added a new combined datasource list endpoint at `GET /api/v1/datasource/` to se
- The endpoint is available to users with at least one of `can_read` on `Dataset` or `SemanticView`. - The endpoint is available to users with at least one of `can_read` on `Dataset` or `SemanticView`.
- Semantic views are included only when the `SEMANTIC_LAYERS` feature flag is enabled. - Semantic views are included only when the `SEMANTIC_LAYERS` feature flag is enabled.
- The endpoint enforces strict `order_column` validation and returns `400` for invalid sort columns. - The endpoint enforces strict `order_column` validation and returns `400` for invalid sort columns.
## 6.1.0
### ClickHouse minimum driver version bump ### ClickHouse minimum driver version bump
The minimum required version of `clickhouse-connect` has been raised to `>=0.13.0`. If you are using the ClickHouse connector, please upgrade your `clickhouse-connect` package. The `_mutate_label` workaround that appended hash suffixes to column aliases has also been removed, as it is no longer needed with modern versions of the driver. The minimum required version of `clickhouse-connect` has been raised to `>=0.13.0`. If you are using the ClickHouse connector, please upgrade your `clickhouse-connect` package. The `_mutate_label` workaround that appended hash suffixes to column aliases has also been removed, as it is no longer needed with modern versions of the driver.

View File

@@ -71,22 +71,20 @@ case "${1}" in
worker) worker)
echo "Starting Celery worker..." echo "Starting Celery worker..."
# setting up only 2 workers by default to contain memory usage in dev environments # setting up only 2 workers by default to contain memory usage in dev environments
celery --app=superset.tasks.celery_app:app worker -O fair -l INFO --concurrency=${CELERYD_CONCURRENCY:-2} ${WORKER_LOG_FILE:+--logfile=$WORKER_LOG_FILE} celery --app=superset.tasks.celery_app:app worker -O fair -l INFO --concurrency=${CELERYD_CONCURRENCY:-2}
;; ;;
beat) beat)
echo "Starting Celery beat..." echo "Starting Celery beat..."
rm -f /tmp/celerybeat.pid rm -f /tmp/celerybeat.pid
celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid -l INFO -s "${SUPERSET_HOME}"/celerybeat-schedule ${BEAT_LOG_FILE:+--logfile=$BEAT_LOG_FILE} celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid -l INFO -s "${SUPERSET_HOME}"/celerybeat-schedule
;; ;;
app) app)
echo "Starting web app (using development server)..." echo "Starting web app (using development server)..."
# Default to Flask debug mode in this dev compose entrypoint so the Talisman # Always run in Flask debug mode here: this is the dev compose entrypoint,
# dev CSP (which permits 'unsafe-eval' required by React Refresh / HMR) is # and Superset's Talisman selector keys off app.debug to serve the dev CSP
# served. Operators can still set FLASK_DEBUG=false in docker/.env-local # (which permits 'unsafe-eval' required by React Refresh / HMR).
# to exercise the production-like CSP and error handling. export FLASK_DEBUG=1
: "${FLASK_DEBUG:=1}"
export FLASK_DEBUG
# Werkzeug's interactive debugger (/console) is a separate, security-sensitive # Werkzeug's interactive debugger (/console) is a separate, security-sensitive
# feature and must be opted into explicitly via SUPERSET_DEBUG_ENABLED=true. # feature and must be opted into explicitly via SUPERSET_DEBUG_ENABLED=true.

View File

@@ -19,7 +19,7 @@
# #
HYPHEN_SYMBOL='-' HYPHEN_SYMBOL='-'
exec gunicorn \ gunicorn \
--bind "${SUPERSET_BIND_ADDRESS:-0.0.0.0}:${SUPERSET_PORT:-8088}" \ --bind "${SUPERSET_BIND_ADDRESS:-0.0.0.0}:${SUPERSET_PORT:-8088}" \
--access-logfile "${ACCESS_LOG_FILE:-$HYPHEN_SYMBOL}" \ --access-logfile "${ACCESS_LOG_FILE:-$HYPHEN_SYMBOL}" \
--error-logfile "${ERROR_LOG_FILE:-$HYPHEN_SYMBOL}" \ --error-logfile "${ERROR_LOG_FILE:-$HYPHEN_SYMBOL}" \

View File

@@ -455,51 +455,6 @@ def FLASK_APP_MUTATOR(app: Flask) -> None:
app.before_request_funcs.setdefault(None, []).append(make_session_permanent) app.before_request_funcs.setdefault(None, []).append(make_session_permanent)
``` ```
## Customizing the landing page (index view)
The page served at `/` is rendered by an index view. By default Superset registers
`SupersetIndexView`, which redirects to `/superset/welcome/` and also adds the
`/lang/<locale>` locale handler. You can replace it with your own view, for example
to send users straight to a specific dashboard or to a chart list.
Set `FAB_INDEX_VIEW` to the **importable dotted path** of your view class. Flask-AppBuilder
resolves this during app initialization and uses it in place of the default:
```python
# my_overrides.py — must be importable on the PYTHONPATH
from flask import redirect
from superset.initialization import SupersetIndexView
from superset.superset_typing import FlaskResponse
from flask_appbuilder import expose
class MyIndexView(SupersetIndexView):
@expose("/")
def index(self) -> FlaskResponse:
return redirect("/chart/list/")
```
```python
# superset_config.py
FAB_INDEX_VIEW = "my_overrides.MyIndexView"
```
A few things that commonly trip people up:
- **Subclass `SupersetIndexView`, not Flask-AppBuilder's bare `IndexView`.** Subclassing
keeps Superset's `/lang/<locale>` locale handling; replacing it with a bare `IndexView`
silently drops that behavior.
- **The class must be importable as a real module.** `FAB_INDEX_VIEW` is resolved by
importing the dotted path, which is independent of how `superset_config.py` itself is
loaded. Superset only copies **uppercase** names out of `superset_config.py` into its
runtime config, so a `FAB_INDEX_VIEW = "superset_config.MyIndexView"` reference only works
if `superset_config` is itself importable by that name on the `PYTHONPATH`. If you load
config via `SUPERSET_CONFIG_PATH` (an arbitrary file path), put the view in a separate
importable module instead and reference that module.
- **Don't set `appbuilder.indexview` from `FLASK_APP_MUTATOR`.** The mutator runs after
routes are already registered, so the assignment has no effect on the `/` route. Use
`FAB_INDEX_VIEW` instead.
## Feature Flags ## Feature Flags
To support a diverse set of users, Superset has some features that are not enabled by default. For To support a diverse set of users, Superset has some features that are not enabled by default. For

View File

@@ -22,24 +22,31 @@ level dependencies.
**Debian and Ubuntu** **Debian and Ubuntu**
The following command will ensure that the required dependencies are installed (tested on Ubuntu 20.04, 22.04, and 24.04): Ubuntu **24.04** uses python 3.12 per default, which currently is not supported by Superset. You need to add a second python installation of 3.11 and install the required additional dependencies.
```bash ```bash
sudo apt-get install build-essential libssl-dev libffi-dev python3-dev python3-pip python3-venv libsasl2-dev libldap2-dev libpq-dev default-libmysqlclient-dev pkg-config sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-dev python3.11-venv build-essential libssl-dev libffi-dev libsasl2-dev libldap2-dev default-libmysqlclient-dev
``` ```
Refer to the In Ubuntu **20.04 and 22.04** the following command will ensure that the required dependencies are installed:
[pyproject.toml](https://github.com/apache/superset/blob/master/pyproject.toml) file for the list of
Python versions officially supported by Superset, and install a matching `python3` interpreter for ```bash
your distribution. The `libpq-dev` package is only needed if you intend to connect to (or use) a sudo apt-get install build-essential libssl-dev libffi-dev python3-dev python3-pip libsasl2-dev libldap2-dev default-libmysqlclient-dev
PostgreSQL database; you can omit it otherwise. ```
In Ubuntu **before 20.04** the following command will ensure that the required dependencies are installed:
```bash
sudo apt-get install build-essential libssl-dev libffi-dev python-dev python-pip libsasl2-dev libldap2-dev default-libmysqlclient-dev
```
**Fedora and RHEL-derivative Linux distributions** **Fedora and RHEL-derivative Linux distributions**
Install the following packages using the `yum` package manager: Install the following packages using the `yum` package manager:
```bash ```bash
sudo yum install gcc gcc-c++ libffi-devel python3-devel python3-pip python3-wheel openssl-devel cyrus-sasl-devel openldap-devel sudo yum install gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel cyrus-sasl-devel openldap-devel
``` ```
In more recent versions of CentOS and Fedora, you may need to install a slightly different set of packages using `dnf`: In more recent versions of CentOS and Fedora, you may need to install a slightly different set of packages using `dnf`:

View File

@@ -28,19 +28,14 @@
# Skip builds when no docs changes (exit 0 = skip, non-zero = build). # Skip builds when no docs changes (exit 0 = skip, non-zero = build).
# Checks for changes in docs/ and README.md (which gets pulled into docs). # Checks for changes in docs/ and README.md (which gets pulled into docs).
# #
# $CACHED_COMMIT_REF is the last *deployed* commit; it is set on incremental # $CACHED_COMMIT_REF is the last *deployed* commit. On a PR's first build it
# builds (notably the master production deploy) and empty on a context's # is empty, so the original `git diff` errored and Netlify fell back to
# first build (every deploy preview). The production path diffs against it # building -- which is why every PR built a docs preview once even with no
# and skips correctly. # docs changes. When it is empty we instead diff the whole branch against its
# # merge-base with master, so non-docs PRs are skipped from the very first
# Deploy previews need different handling: Netlify checks out a *merge* # build. Subsequent builds (and the master production build) keep the cheaper
# commit, so $COMMIT_REF (the PR head SHA) is frequently not resolvable in # incremental $CACHED_COMMIT_REF diff. Any failure exits non-zero -> build.
# the clone, and on a shallow clone `git merge-base` can fail too -- so the ignore = 'if [ -n "$CACHED_COMMIT_REF" ]; then git diff --quiet "$CACHED_COMMIT_REF" "$COMMIT_REF" -- . ../README.md; else git fetch origin master --depth=100 >/dev/null 2>&1; git diff --quiet "$(git merge-base origin/master "$COMMIT_REF" 2>/dev/null || echo origin/master)" "$COMMIT_REF" -- . ../README.md; fi'
# previous logic fell through to a build on every PR, even non-docs ones.
# Instead, always diff the checked-out HEAD against its merge-base with
# master, deepening the shallow clone until that merge-base resolves. If it
# genuinely can't be determined, exit non-zero to build (fail safe).
ignore = 'if [ -n "$CACHED_COMMIT_REF" ]; then git diff --quiet "$CACHED_COMMIT_REF" HEAD -- . ../README.md; else git fetch --no-tags origin master >/dev/null 2>&1 || true; i=0; while [ "$i" -lt 10 ] && ! git merge-base origin/master HEAD >/dev/null 2>&1; do git fetch --deepen=200 origin master >/dev/null 2>&1 || break; i=$((i+1)); done; BASE="$(git merge-base origin/master HEAD 2>/dev/null || true)"; if [ -z "$BASE" ]; then exit 1; fi; git diff --quiet "$BASE" HEAD -- . ../README.md; fi'
[build.environment] [build.environment]
# Node version matching docs/.nvmrc # Node version matching docs/.nvmrc

View File

@@ -70,10 +70,10 @@
"@storybook/preview-api": "^8.6.18", "@storybook/preview-api": "^8.6.18",
"@storybook/theming": "^8.6.15", "@storybook/theming": "^8.6.15",
"@superset-ui/core": "^0.20.4", "@superset-ui/core": "^0.20.4",
"@swc/core": "^1.15.41", "@swc/core": "^1.15.40",
"antd": "^6.4.4", "antd": "^6.4.3",
"baseline-browser-mapping": "^2.10.37", "baseline-browser-mapping": "^2.10.34",
"caniuse-lite": "^1.0.30001799", "caniuse-lite": "^1.0.30001797",
"docusaurus-plugin-openapi-docs": "^5.0.2", "docusaurus-plugin-openapi-docs": "^5.0.2",
"docusaurus-theme-openapi-docs": "^5.0.2", "docusaurus-theme-openapi-docs": "^5.0.2",
"js-yaml": "^4.2.0", "js-yaml": "^4.2.0",
@@ -101,15 +101,15 @@
"@types/js-yaml": "^4.0.9", "@types/js-yaml": "^4.0.9",
"@types/react": "^19.1.8", "@types/react": "^19.1.8",
"@typescript-eslint/eslint-plugin": "^8.59.3", "@typescript-eslint/eslint-plugin": "^8.59.3",
"@typescript-eslint/parser": "^8.61.0", "@typescript-eslint/parser": "^8.60.1",
"eslint": "^9.39.2", "eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8", "eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.6", "eslint-plugin-prettier": "^5.5.6",
"eslint-plugin-react": "^7.37.5", "eslint-plugin-react": "^7.37.5",
"globals": "^17.6.0", "globals": "^17.6.0",
"prettier": "^3.8.4", "prettier": "^3.8.3",
"typescript": "~6.0.3", "typescript": "~6.0.3",
"typescript-eslint": "^8.61.1", "typescript-eslint": "^8.60.1",
"webpack": "^5.107.2" "webpack": "^5.107.2"
}, },
"browserslist": { "browserslist": {

View File

@@ -7235,10 +7235,10 @@
"pypi_packages": [ "pypi_packages": [
"oracledb" "oracledb"
], ],
"connection_string": "oracle+oracledb://{username}:{password}@{hostname}:{port}", "connection_string": "oracle://{username}:{password}@{hostname}:{port}",
"default_port": 1521, "default_port": 1521,
"notes": "Previously used cx_Oracle, now uses oracledb.", "notes": "Previously used cx_Oracle, now uses oracledb.",
"docs_url": "https://python-oracledb.readthedocs.io/en/latest/user_guide/installation.html", "docs_url": "https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html",
"category": "Other Databases" "category": "Other Databases"
}, },
"engine": "oracle", "engine": "oracle",

View File

@@ -1808,10 +1808,6 @@ If you enable DML in the meta database users will be able to run DML queries on
Second, you might want to change the value of `SUPERSET_META_DB_LIMIT`. The default value is 1000, and defines how many are read from each database before any aggregations and joins are executed. You can also set this value `None` if you only have small tables. Second, you might want to change the value of `SUPERSET_META_DB_LIMIT`. The default value is 1000, and defines how many are read from each database before any aggregations and joins are executed. You can also set this value `None` if you only have small tables.
:::warning
`SUPERSET_META_DB_LIMIT` is applied to **each** underlying table *before* the in-memory join runs, not to the final result. If any table involved in a join has more rows than the limit, the meta database will read only the first `SUPERSET_META_DB_LIMIT` rows of that table, which means matching rows can be silently dropped and the join can return **incomplete or even empty** results with no error. If you join tables larger than the limit, raise `SUPERSET_META_DB_LIMIT` to comfortably exceed your largest joined table, or set it to `None` when working only with small tables, to get correct results.
:::
Additionally, you might want to restrict the databases to with the meta database has access to. This can be done in the database configuration, under "Advanced" -> "Other" -> "ENGINE PARAMETERS" and adding: Additionally, you might want to restrict the databases to with the meta database has access to. This can be done in the database configuration, under "Advanced" -> "Other" -> "ENGINE PARAMETERS" and adding:
```json ```json

View File

@@ -212,7 +212,7 @@
resolved "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz" resolved "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz"
integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA== integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==
"@ant-design/icons@^6.2.5": "@ant-design/icons@^6.2.3", "@ant-design/icons@^6.2.5":
version "6.2.5" version "6.2.5"
resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-6.2.5.tgz#31c142aa6ce5eaf99598aaead222f4c459693512" resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-6.2.5.tgz#31c142aa6ce5eaf99598aaead222f4c459693512"
integrity sha512-0hKtoKqTjGFOndUyJLJmC9Cg6k4rEO7rLo6xmgbNJH+/ZX1C57RVals2v1j1knHl9n7Q+sBOveTvn931wLOCKw== integrity sha512-0hKtoKqTjGFOndUyJLJmC9Cg6k4rEO7rLo6xmgbNJH+/ZX1C57RVals2v1j1knHl9n7Q+sBOveTvn931wLOCKw==
@@ -3162,21 +3162,21 @@
resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz" resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz"
integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww== integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==
"@rc-component/async-validator@^6.0.0": "@rc-component/async-validator@^5.1.0":
version "6.0.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/@rc-component/async-validator/-/async-validator-6.0.0.tgz#1c20b8864f69bac63b7876b1321697c2ea71c68d" resolved "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.1.0.tgz"
integrity sha512-D3AGQwdyE58gmvx6waVSXJ80JGO+IY5L2O8HDnSOex7JNlzB3GuN/4hyHNTdhy2qtOhkpbIjmeAN3tL993wKbA== integrity sha512-n4HcR5siNUXRX23nDizbZBQPO0ZM/5oTtmKZ6/eqL0L2bo747cklFdZGRN2f+c9qWGICwDzrhW0H7tE9PptdcA==
dependencies: dependencies:
"@babel/runtime" "^7.24.4" "@babel/runtime" "^7.24.4"
"@rc-component/cascader@~1.16.1": "@rc-component/cascader@~1.15.0":
version "1.16.1" version "1.15.0"
resolved "https://registry.yarnpkg.com/@rc-component/cascader/-/cascader-1.16.1.tgz#94193ee55009219999a46e005a0f8589c8c021a2" resolved "https://registry.yarnpkg.com/@rc-component/cascader/-/cascader-1.15.0.tgz#554cba8e01e94a1288547cec96422b2cfc73ff40"
integrity sha512-wxLopwM+EBed0zNNGdnGE4coYoqcO+XD42fHgn+pDvO+XzhNFbdgSlSNXdKocIYqccvqgWvoxDPNb0OVRdi59A== integrity sha512-ZzpMtwFCRo3fbXHuDnncARJMZQjdqA2w7aDuPofNQt+aDx39st1hgfIpEwTBLhe2Hqsvs/zOr8RTtgxTkCPySw==
dependencies: dependencies:
"@rc-component/select" "~1.7.1" "@rc-component/select" "~1.6.0"
"@rc-component/tree" "~1.3.2" "@rc-component/tree" "~1.3.0"
"@rc-component/util" "^1.11.1" "@rc-component/util" "^1.4.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/checkbox@~2.0.0": "@rc-component/checkbox@~2.0.0":
@@ -3242,13 +3242,13 @@
"@rc-component/util" "^1.2.1" "@rc-component/util" "^1.2.1"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/form@~1.8.3": "@rc-component/form@~1.8.1":
version "1.8.5" version "1.8.1"
resolved "https://registry.yarnpkg.com/@rc-component/form/-/form-1.8.5.tgz#20571cfd401dc38c74c38cdf4722ddc6c23a9806" resolved "https://registry.yarnpkg.com/@rc-component/form/-/form-1.8.1.tgz#d811fb52df41bf72297938ebfe5cf4a4774588d4"
integrity sha512-d24EYtvUOBhxEtSd/EqIu9DaMuqrWF2IRIvAFCTM6NQ/GJIYNr8DvEpUSUlv2uPxEJ0ZPwYQ+wwlGIAaiHvdrw== integrity sha512-8O7TB55Fi2mWIGvSnwZjk8jFqVNYyKDAswglwGShcbndxqzKz4cHwNtNaLjZlAeRge9wcB0LL8IWsC/Bl18raQ==
dependencies: dependencies:
"@rc-component/async-validator" "^6.0.0" "@rc-component/async-validator" "^5.1.0"
"@rc-component/util" "^1.11.1" "@rc-component/util" "^1.6.2"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/image@~1.9.0": "@rc-component/image@~1.9.0":
@@ -3270,13 +3270,13 @@
"@rc-component/util" "^1.4.0" "@rc-component/util" "^1.4.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/input@~1.3.0", "@rc-component/input@~1.3.1": "@rc-component/input@~1.3.0":
version "1.3.1" version "1.3.0"
resolved "https://registry.yarnpkg.com/@rc-component/input/-/input-1.3.1.tgz#230b8b59cdde8521d50f0eede63ddacb61cc0cd3" resolved "https://registry.yarnpkg.com/@rc-component/input/-/input-1.3.0.tgz#a8c113000bbc39089cf75337bec68120115b9e05"
integrity sha512-iFvTUT9W+JC/MSin2aGAk8NqsVlTzcExNC9DZariON1IWirju9NoNeEk47an4Q8iHazkoVI/y1LnDi88+CPcig== integrity sha512-IUUNOdAuWuEvDEFFgfmwQl818tiDbvXwLgon4HL1q2hJeYkqrRrYwYhJN0zfPHGTDxs3gvyVC/C02D4hWFoIcA==
dependencies: dependencies:
"@rc-component/resize-observer" "^1.1.1" "@rc-component/resize-observer" "^1.1.1"
"@rc-component/util" "^1.11.1" "@rc-component/util" "^1.4.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/mentions@~1.9.0": "@rc-component/mentions@~1.9.0":
@@ -3290,15 +3290,15 @@
"@rc-component/util" "^1.3.0" "@rc-component/util" "^1.3.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/menu@~1.3.0", "@rc-component/menu@~1.3.1": "@rc-component/menu@~1.3.0":
version "1.3.1" version "1.3.0"
resolved "https://registry.yarnpkg.com/@rc-component/menu/-/menu-1.3.1.tgz#16cae71a01080914e8bac08359fccdda7bfce540" resolved "https://registry.yarnpkg.com/@rc-component/menu/-/menu-1.3.0.tgz#fc70d81ca76ae6013b0d7955f20a2393adef04b3"
integrity sha512-pSZl9nBPgKgxN0aaW7NilIBEwWsc+43S+ulGdWAg9afak96dNOGWsGx0DLLBB1VQsAJvo6bQMTDzXoPlEHsBEw== integrity sha512-u3NfiwpiEgT177qa5Yxm5QsI8i/93EBGpWj8HYZQDnh2pCZ2xtQCe/+w3pSR2NlwKOZDTCKzEhEyD09mGphssA==
dependencies: dependencies:
"@rc-component/motion" "^1.1.4" "@rc-component/motion" "^1.1.4"
"@rc-component/overflow" "^1.0.0" "@rc-component/overflow" "^1.0.0"
"@rc-component/trigger" "^3.0.0" "@rc-component/trigger" "^3.0.0"
"@rc-component/util" "^1.11.1" "@rc-component/util" "^1.3.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/mini-decimal@^1.0.1": "@rc-component/mini-decimal@^1.0.1":
@@ -3308,12 +3308,12 @@
dependencies: dependencies:
"@babel/runtime" "^7.18.0" "@babel/runtime" "^7.18.0"
"@rc-component/motion@^1.0.0", "@rc-component/motion@^1.1.3", "@rc-component/motion@^1.1.4", "@rc-component/motion@^1.3.3": "@rc-component/motion@^1.0.0", "@rc-component/motion@^1.1.3", "@rc-component/motion@^1.1.4", "@rc-component/motion@^1.3.2":
version "1.3.3" version "1.3.2"
resolved "https://registry.yarnpkg.com/@rc-component/motion/-/motion-1.3.3.tgz#6a7bbe0a9f070bd11642168f741d40e78bb28565" resolved "https://registry.yarnpkg.com/@rc-component/motion/-/motion-1.3.2.tgz#bd96e0fd16ee9d98c1d9be14198f003e367d8feb"
integrity sha512-Xh3IszxvlSv3/PLYFyC2UZi9LNB83yOnkB/LNmRzaypZLvkhqUIPS7MQpGZcCMWrNsXV2p6YTSWbSGvFpEle9A== integrity sha512-itfd+GztzJYAb04Z4RkEub1TbJAfZc2Iuy8p44U44xD1F5+fNYFKI3897ijlbIyfvXkTmMm+KGcjkQQGMHywEQ==
dependencies: dependencies:
"@rc-component/util" "^1.11.0" "@rc-component/util" "^1.2.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/mutate-observer@^2.0.1": "@rc-component/mutate-observer@^2.0.1":
@@ -3342,12 +3342,12 @@
"@rc-component/util" "^1.4.0" "@rc-component/util" "^1.4.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/pagination@~1.3.0": "@rc-component/pagination@~1.2.0":
version "1.3.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/@rc-component/pagination/-/pagination-1.3.0.tgz#ee66301e37a03974826fb3028a91a1aeacdcd0ac" resolved "https://registry.npmjs.org/@rc-component/pagination/-/pagination-1.2.0.tgz"
integrity sha512-12ahTY+HPITg1L2bjWKXUqBJe/oOnpA2QsChdCjthqLVf/e19StiCsv8OLKpWoHbc+8PFEkNjRqRqrLoRBHjFw== integrity sha512-YcpUFE8dMLfSo6OARJlK6DbHHvrxz7pMGPGmC/caZSJJz6HRKHC1RPP001PRHCvG9Z/veD039uOQmazVuLJzlw==
dependencies: dependencies:
"@rc-component/util" "^1.11.1" "@rc-component/util" "^1.3.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/picker@~1.10.0": "@rc-component/picker@~1.10.0":
@@ -3377,10 +3377,10 @@
"@rc-component/util" "^1.2.1" "@rc-component/util" "^1.2.1"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/qrcode@~2.0.0": "@rc-component/qrcode@~1.1.1":
version "2.0.0" version "1.1.1"
resolved "https://registry.yarnpkg.com/@rc-component/qrcode/-/qrcode-2.0.0.tgz#ef4134c213002e7a43edbe609b24248914de4974" resolved "https://registry.npmjs.org/@rc-component/qrcode/-/qrcode-1.1.1.tgz"
integrity sha512-aAv3QhPP1xyafuTZOxub6a54pCeBnN3IwQkpETrBtthq4BL5IgxnCbuoBWPDpdLw1y1j6BgBUCAKV92+yX06Dw== integrity sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==
dependencies: dependencies:
"@babel/runtime" "^7.24.7" "@babel/runtime" "^7.24.7"
@@ -3409,15 +3409,15 @@
"@rc-component/util" "^1.3.0" "@rc-component/util" "^1.3.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/select@~1.7.0", "@rc-component/select@~1.7.1": "@rc-component/select@~1.6.0", "@rc-component/select@~1.6.15":
version "1.7.1" version "1.6.15"
resolved "https://registry.yarnpkg.com/@rc-component/select/-/select-1.7.1.tgz#cdda0ac185f00ebed1c85e7809ae1f7855a9f7ab" resolved "https://registry.yarnpkg.com/@rc-component/select/-/select-1.6.15.tgz#de2a3c8b020834cabd600b52de573a328c061eef"
integrity sha512-GZ1cMJk2xQh0VHyOQjjG8drYL4iu24NcbkXioUcReQOCUr+ub/3fmRonZe6cRPEZhWMbJdeHsqnEltogDaZ5Tg== integrity sha512-SyVCWnqxCQZZcQvQJ/CxSjx2bGma6ds/HtnpkIfZVnt6RoEgbqUmHgD6vrzNarNXwbLXerwVzWwq8F3d1sst7g==
dependencies: dependencies:
"@rc-component/overflow" "^1.0.0" "@rc-component/overflow" "^1.0.0"
"@rc-component/trigger" "^3.0.0" "@rc-component/trigger" "^3.0.0"
"@rc-component/util" "^1.11.1" "@rc-component/util" "^1.3.0"
"@rc-component/virtual-list" "^1.2.0" "@rc-component/virtual-list" "^1.0.1"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/slider@~1.0.1": "@rc-component/slider@~1.0.1":
@@ -3444,27 +3444,27 @@
"@rc-component/util" "^1.3.0" "@rc-component/util" "^1.3.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/table@~1.10.2": "@rc-component/table@~1.10.0":
version "1.10.2" version "1.10.0"
resolved "https://registry.yarnpkg.com/@rc-component/table/-/table-1.10.2.tgz#7b052fd5eb2ccf6996a93eebeb7af7036a262c8b" resolved "https://registry.yarnpkg.com/@rc-component/table/-/table-1.10.0.tgz#7a98d68176f23f50a762df464f4c9142e7db3942"
integrity sha512-b3PjqB9Gp25p5t/zq+9QrbXbodkptT8/zvLmwgd2FNPUUtaYyDnQqfxeD5a7ao8E8lpinLHsi2u2vdfPhyNvAw== integrity sha512-SjtpcCf+rL7dDc62GKT3rXTdERjVuJvRiqjpU7g0Jc/ewCifXynHc7Nm3Em1XsD+WhGrgQtxNDScI/0+Lpfr0w==
dependencies: dependencies:
"@rc-component/context" "^2.0.1" "@rc-component/context" "^2.0.1"
"@rc-component/resize-observer" "^1.0.0" "@rc-component/resize-observer" "^1.0.0"
"@rc-component/util" "^1.11.1" "@rc-component/util" "^1.1.0"
"@rc-component/virtual-list" "^1.0.1" "@rc-component/virtual-list" "^1.0.1"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/tabs@~1.9.1": "@rc-component/tabs@~1.9.0":
version "1.9.1" version "1.9.0"
resolved "https://registry.yarnpkg.com/@rc-component/tabs/-/tabs-1.9.1.tgz#52b9cb0392c718fba43e7d558f46f6c910d19acb" resolved "https://registry.yarnpkg.com/@rc-component/tabs/-/tabs-1.9.0.tgz#8f3e3755450e5a90d240d1ed3dc140d520b1fbef"
integrity sha512-6mY08Fce6aNOHuGsxbzT+f2ekgL9mg1cGGHkittMlVGymjGg+kGupu5v90sRxcUd/paRU9jclLLXtF/PkK1FUA== integrity sha512-tn1slmbbaTyt8mgwyWJcT8jo/qNiYUs6u1H7OgGQt9faYO06BJIkU5cTmMqORzIrNmSEeeUY6pD5i+JlqSHYhg==
dependencies: dependencies:
"@rc-component/dropdown" "~1.0.0" "@rc-component/dropdown" "~1.0.0"
"@rc-component/menu" "~1.3.0" "@rc-component/menu" "~1.3.0"
"@rc-component/motion" "^1.1.3" "@rc-component/motion" "^1.1.3"
"@rc-component/resize-observer" "^1.0.0" "@rc-component/resize-observer" "^1.0.0"
"@rc-component/util" "^1.11.1" "@rc-component/util" "^1.3.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/tooltip@~1.4.0": "@rc-component/tooltip@~1.4.0":
@@ -3486,30 +3486,30 @@
"@rc-component/util" "^1.7.0" "@rc-component/util" "^1.7.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/tree-select@~1.10.0": "@rc-component/tree-select@~1.9.0":
version "1.10.0" version "1.9.0"
resolved "https://registry.yarnpkg.com/@rc-component/tree-select/-/tree-select-1.10.0.tgz#72e337fd58591f677404189cb3e9d3f718cd3332" resolved "https://registry.yarnpkg.com/@rc-component/tree-select/-/tree-select-1.9.0.tgz#13ea516478b6cb558e04181abb0a01ae6fbdd31f"
integrity sha512-E1U4pn2LAbXEhLJdzIzid7WYbIuFbkTIctuFoeC6weppf8UbPR3+YYB6/ay0c0ksand4gXMRQpa1Z60Auo7VJA== integrity sha512-GXcFe15a+trUl1/J3OHWQhsVWFpwFpGFK2cqYWZ1sK22Zs3KZTvMwDpzr75PIo1s6QVioVxpE/pRwRopkeDQ6w==
dependencies: dependencies:
"@rc-component/select" "~1.7.0" "@rc-component/select" "~1.6.0"
"@rc-component/tree" "~1.3.0" "@rc-component/tree" "~1.3.0"
"@rc-component/util" "^1.4.0" "@rc-component/util" "^1.4.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/tree@~1.3.0", "@rc-component/tree@~1.3.2": "@rc-component/tree@~1.3.0", "@rc-component/tree@~1.3.1":
version "1.3.2" version "1.3.1"
resolved "https://registry.yarnpkg.com/@rc-component/tree/-/tree-1.3.2.tgz#4b0c13564314eff61ca948c18ef923b87c9d7e44" resolved "https://registry.yarnpkg.com/@rc-component/tree/-/tree-1.3.1.tgz#6983ca6bd9d5f6d04dd7258d00cb0fe71cdfe661"
integrity sha512-bJFj46wEkpBPnWyTm18XmgAgNQ/4YvprxMOPPY2a6rmhGJYxLuNKEFiL5Qej4Qctu9wHJm8WW+v2SYskafE0kA== integrity sha512-zlL0PW0bTFlveTtLcA01VD/yMWKK73EywItFMgIZUY5sb6tMOAw7zV6qGzqldufqrV93ZWQB4H3NBNoTMCueJA==
dependencies: dependencies:
"@rc-component/motion" "^1.0.0" "@rc-component/motion" "^1.0.0"
"@rc-component/util" "^1.11.1" "@rc-component/util" "^1.8.1"
"@rc-component/virtual-list" "^1.2.0" "@rc-component/virtual-list" "^1.0.1"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/trigger@^3.0.0", "@rc-component/trigger@^3.6.15", "@rc-component/trigger@^3.7.1", "@rc-component/trigger@^3.9.1": "@rc-component/trigger@^3.0.0", "@rc-component/trigger@^3.6.15", "@rc-component/trigger@^3.7.1", "@rc-component/trigger@^3.9.0":
version "3.9.1" version "3.9.0"
resolved "https://registry.yarnpkg.com/@rc-component/trigger/-/trigger-3.9.1.tgz#3f730315c558bc392921a563ac9109a1d094ef23" resolved "https://registry.npmjs.org/@rc-component/trigger/-/trigger-3.9.0.tgz"
integrity sha512-LNsYvz60mrLJ/kRvKcHE7boUvcQfVMCfRqZ71x3Fo9AOiZ1KKIEqkzMA8DNvz2V3Bcvir/vwQNn7JF1NPODQ7Q== integrity sha512-X8btpwfrT27AgrZVOz4swclhEHTZcqaHeQMXXBgveagOiakTa36uObXbdwerXffgV8G9dH1fAAE0DHtVQs8EHg==
dependencies: dependencies:
"@rc-component/motion" "^1.1.4" "@rc-component/motion" "^1.1.4"
"@rc-component/portal" "^2.2.0" "@rc-component/portal" "^2.2.0"
@@ -3517,18 +3517,18 @@
"@rc-component/util" "^1.2.1" "@rc-component/util" "^1.2.1"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/upload@~1.1.1": "@rc-component/upload@~1.1.0":
version "1.1.1" version "1.1.0"
resolved "https://registry.yarnpkg.com/@rc-component/upload/-/upload-1.1.1.tgz#90d16edcdaeb104ffa9111fd0b428061de7c21ac" resolved "https://registry.npmjs.org/@rc-component/upload/-/upload-1.1.0.tgz"
integrity sha512-GvYWSKeaJTOxxC5p6+nOSadzfvXA1h8C/iHFPFZX+szH3JUXrvs+DLiW8YUTBgvMh8m63mJeHrlYlJzAlg+pDA== integrity sha512-LIBV90mAnUE6VK5N4QvForoxZc4XqEYZimcp7fk+lkE4XwHHyJWxpIXQQwMU8hJM+YwBbsoZkGksL1sISWHQxw==
dependencies: dependencies:
"@rc-component/util" "^1.11.1" "@rc-component/util" "^1.3.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/util@^1.10.1", "@rc-component/util@^1.11.0", "@rc-component/util@^1.11.1", "@rc-component/util@^1.2.0", "@rc-component/util@^1.2.1", "@rc-component/util@^1.3.0", "@rc-component/util@^1.4.0", "@rc-component/util@^1.7.0", "@rc-component/util@^1.9.0": "@rc-component/util@^1.1.0", "@rc-component/util@^1.10.1", "@rc-component/util@^1.11.0", "@rc-component/util@^1.2.0", "@rc-component/util@^1.2.1", "@rc-component/util@^1.3.0", "@rc-component/util@^1.4.0", "@rc-component/util@^1.6.2", "@rc-component/util@^1.7.0", "@rc-component/util@^1.8.1", "@rc-component/util@^1.9.0":
version "1.11.1" version "1.11.0"
resolved "https://registry.yarnpkg.com/@rc-component/util/-/util-1.11.1.tgz#07d698908339c55648e4f974afa739345e65b483" resolved "https://registry.yarnpkg.com/@rc-component/util/-/util-1.11.0.tgz#965c8b44a3f57fc96dc14e5072afbe32e422fd4d"
integrity sha512-awVlI3ub2vqfqkYxOBc/uQ0efm3jw0wcrhtO/YWLyZfxiKXczKwNbVuhlnyxytDt7H9pbbVQiqr+O6MLATtRYg== integrity sha512-jHG3/BYgUWiP5c7RZHiaUNToyw1L3nlPSKG2RPu+YoiD9b3ajiJwBWhsjO+ZELmCsKFAjNR5DelbKdlF0e2BDA==
dependencies: dependencies:
is-mobile "^5.0.0" is-mobile "^5.0.0"
react-is "^18.2.0" react-is "^18.2.0"
@@ -3543,16 +3543,6 @@
"@rc-component/util" "^1.4.0" "@rc-component/util" "^1.4.0"
clsx "^2.1.1" clsx "^2.1.1"
"@rc-component/virtual-list@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@rc-component/virtual-list/-/virtual-list-1.2.0.tgz#3c9ee8cd7d10da334a2a06ad86ca234e2792a381"
integrity sha512-iavRm1Jo4GDbASQwdGa7jFyk93RvSOo9xHyBT4QL1pgFJj/Fdf1G+3RErH7/7BmAMvx2AkF62mjGYxDbXsK9TQ==
dependencies:
"@babel/runtime" "^7.20.0"
"@rc-component/resize-observer" "^1.0.1"
"@rc-component/util" "^1.4.0"
clsx "^2.1.1"
"@redocly/ajv@^8.18.0": "@redocly/ajv@^8.18.0":
version "8.18.3" version "8.18.3"
resolved "https://registry.yarnpkg.com/@redocly/ajv/-/ajv-8.18.3.tgz#a925753d9a33375219f1b2ba91aef320f9929577" resolved "https://registry.yarnpkg.com/@redocly/ajv/-/ajv-8.18.3.tgz#a925753d9a33375219f1b2ba91aef320f9929577"
@@ -4153,86 +4143,86 @@
dependencies: dependencies:
apg-lite "^1.0.4" apg-lite "^1.0.4"
"@swc/core-darwin-arm64@1.15.41": "@swc/core-darwin-arm64@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.41.tgz#4fcbc9cbb9dfc9027d66e2b23b8d1d0315d164bd" resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.40.tgz#b05d715b04c4fd47baf59288233da85a683cc0bc"
integrity sha512-kREh6J5paQFvP3i7f/4FbqRNOJREutVFVOkder4GVyCBQ39YmER55cW/y1NNjwrchzFqgYswFn0mMDCqbqKzrw== integrity sha512-PaYyclfmQ++77D8ityYvmmVzHv9aG8ROwt2GfG6/ccloy4Hgf80qtOnzb9VYvPsUT7Ty1uhuDRhv3XYpf62qhQ==
"@swc/core-darwin-x64@1.15.41": "@swc/core-darwin-x64@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.41.tgz#726c60a893e2f1a07bee28f79b519b8e6489415b" resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.40.tgz#3180daef5c1e47b435f8edd084509e0a5c0d883b"
integrity sha512-N8B56ESFazZAWZyIkecADSPCwlLEinW7QLMEeotCpv4J7VXwfH+OLkmRL8o96UZ+1355fwHxDTS6/wK7yucvkA== integrity sha512-HbbPzvfLBUXjIB1Ezks+//lNUjmLjfyd63XSwprJgrZaXYdm70kohXPJUWdqKZozolFxbPaO+xtBaiUp6BoueA==
"@swc/core-linux-arm-gnueabihf@1.15.41": "@swc/core-linux-arm-gnueabihf@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.41.tgz#08930e8015ca2fadc729546d5bd4b758a3999dda" resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.40.tgz#18fcd3c70e48fdfae07c9f18751b1409ce1e5e84"
integrity sha512-6XrId2fyle0mS5xxON8rU84mPd2Cq1kDJRj+4BnQKTd7u+2kSA6Ww+JkOP0iTNqOqt9OXhPOEAjBHAuonWcdCg== integrity sha512-SlRZsCjOCPR2LvFs0Ri/Xrx/5o5TCt8vl4gW6mX1hEZOG0a625RxzRHpHdAQNGykmAN/7IeaFAJG+QnNmxlHcA==
"@swc/core-linux-arm64-gnu@1.15.41": "@swc/core-linux-arm64-gnu@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.41.tgz#6c27490a4013647a09ff64cea1d6b1169394602f" resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.40.tgz#26304933922f2a8e3194770e404403fc25a19c89"
integrity sha512-ynLIarxlkVnqHn1D0fKOVht6mNU5ks6lrH+MY3kkS+XFaGGgDxFZVjWKJlkYTKm3RCvBTfA8Ng5fLufXheMRKQ== integrity sha512-Q8byxJt2fh8CR3EUX6snBpy47AoBVm+In/+Z3rjDHMjC38ZvR9/gtUUNCT0tfrn4EdVsO8/QPi59nxrxvqxvBQ==
"@swc/core-linux-arm64-musl@1.15.41": "@swc/core-linux-arm64-musl@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.41.tgz#4cce52fbbbe78b1f99c2a4e3f9ad2629f6eae494" resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.40.tgz#3402dfba04ba7b8ea81f243e2f8fa2c336b54d03"
integrity sha512-dXu/5vd4gh8symyhRF+4G7gOPkjmb4pONhh7sl+6GSiW0LOKZlfu5kXmyFbTz9smOT7jgr002qY9b1nujjXt2A== integrity sha512-4z0MgHU+7M0pZDqBN1El7mFXDI1SBwinfcUkAyA4v8QrhOIUOZltySt2aStQLZGrdXVXM4Y4ylfiTC04ED+MoQ==
"@swc/core-linux-ppc64-gnu@1.15.41": "@swc/core-linux-ppc64-gnu@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.41.tgz#3d1fadd8d320e7250a6b2a2d9c0b0d4dac162f97" resolved "https://registry.yarnpkg.com/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.40.tgz#b3df9065cad352328c1eeef08a28fc9fe98785aa"
integrity sha512-XGO6zVPXoPE0gf/XnI4jBbafNT13AYgoh6ns0JCSdOetI/kqVf0vhpz7NuNgAzZrMVCsmieqjPoTwViDgh4mOQ== integrity sha512-fLI4iUgeSZu0eRWUXwe6YzPFx9gHbFiPkl8Rp3mJfP8OpNR3nTQCGPvHdDh9xniW7mVvgMY4ni7A4VzqI1KrpA==
"@swc/core-linux-s390x-gnu@1.15.41": "@swc/core-linux-s390x-gnu@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.41.tgz#6e4c54168d4a8d7852ef797437bd25e6fb5d7a50" resolved "https://registry.yarnpkg.com/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.40.tgz#58e5b601f641dde81b30626ef66a668701ec918f"
integrity sha512-0WUglRwyZtW+iMi7J3iFdrCxreZZIKf4egTwEQfIYRsqFax69A0OrFj+NIoFSE03xBT/IFRrg+S8K6f9Ky+4hA== integrity sha512-YqeKMAb7d4nQSGMJQ454IlaCENpzcDqhvBE9+CPfdnYpnUXxd+BSrB6Xk0YjW8UyoEhUj4p6quATCxbsp6J3jg==
"@swc/core-linux-x64-gnu@1.15.41": "@swc/core-linux-x64-gnu@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.41.tgz#5f947698786e15e2f696e0c6b3afd25138bae86b" resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.40.tgz#cf057dce0c148c53f2d30152baaf60ea29e5d59c"
integrity sha512-VxkuQK59c0tHm6uJZCUrS3cyA2JhGGfdU6e41SZz0x/JS+4Sm7C1mIc97In14vkZJopEt7yXA2TouCqZDSygEA== integrity sha512-7HOuS1iGcme/j/TuL1TfmmLGiMQrjv/GmjyZeydl00FKPtpGXEldwqfI56xgd1YzrzoB2svWjxbGGyQ0TEASxg==
"@swc/core-linux-x64-musl@1.15.41": "@swc/core-linux-x64-musl@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.41.tgz#f4a0910cb273e39bcc09d572a08f62a355a93628" resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.40.tgz#21fb1a4d0193e9bbcd1469ecd36166d2e96e4006"
integrity sha512-/0qXIu1ZxggLuovLb22vFfKHq2AA4n6Whw5UwmVCHk4pkw7KWnPIQpMCEqUMPsNkFJig7PPp/TSYFu8ZEb2rtQ== integrity sha512-h4kZYHc7dpc9P9u4brRJaS8Pl7tPVHAeiLSzw7T5RfIJgAoSdaCMKzI/2Uay9gFhaw8uyCDl0L5q37r0EpAfIA==
"@swc/core-win32-arm64-msvc@1.15.41": "@swc/core-win32-arm64-msvc@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.41.tgz#a55334b1b7c23a962d4219f332b6422f3c3374e4" resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.40.tgz#1dba23b2b0db86b3d6d65da2abd627cc607a1fbc"
integrity sha512-Y481sMNZM6rECh9VO4+y26N1lWEDAyxnBZskUf37fl90uHE946VHfmiVQWT0uMFOhyJJFovGTRuF4W82dwewUg== integrity sha512-+mQgKZXSj6mV38Zh05QaxSjUDmGP/R2JWlXZTDLSPkDzHU6p3GxN9eeSf5dfyDVU86946fmCvSzyl/ucImx8+A==
"@swc/core-win32-ia32-msvc@1.15.41": "@swc/core-win32-ia32-msvc@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.41.tgz#e1135f8d6857f6c48e4bfb6105568b37b3f88dc5" resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.40.tgz#b2da1e33165d469467b1046a2189db468da488eb"
integrity sha512-BAchBD5qeUzy3hiPSLJtaaoSm4blCLyYffOF1bGE4ETcV+OisqjUAwDQMJj++4bTpvMCDzwC+Bj3PmQyBCtscw== integrity sha512-yvwdPLGd25mcj/mNatjNQ0lZujtQD6psH3v9PNmMb+fSzjbNG8KIDxjFWrcV+fsFVLOkyOmdJsFmX7NAFjVyPw==
"@swc/core-win32-x64-msvc@1.15.41": "@swc/core-win32-x64-msvc@1.15.40":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.41.tgz#52d241e2bf4c6154675c0ad447b29cbdb0ccb547" resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.40.tgz#3563f7e8ce8708f5fda43eb8e0956ef11e0da320"
integrity sha512-WOkA+fJ/ViVBQDsSV9JC52NACTe5PhlurA6viASDZGb7HR3KS01ZG7RZ+Bg6SVQFIoq3gSbTsskQVe6EbHFAYw== integrity sha512-OXtKsLU1bVtInzzDEAY2sYiF/rl4tvAnLLLpuMp3HzAOQZ5A+i69AKDhA1YLQTaMAqO3vzyYNVAYVRMPtSYD4w==
"@swc/core@^1.15.41", "@swc/core@^1.7.39": "@swc/core@^1.15.40", "@swc/core@^1.7.39":
version "1.15.41" version "1.15.40"
resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.15.41.tgz#a212c5040abd1ffd2ad6caf140f0d586ffcfaa6e" resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.15.40.tgz#941c949aa88c0d8d291f102f519f3c2c77701b90"
integrity sha512-03nQq/082QRJJiOvp3FGbgxTGyyxMxohPTjhk/W9bD2J0tk4ukITI7goOhOO2WbaHn/lsPmo/zf8+DIXhwpgYQ== integrity sha512-2kwzJikRvgtNAG7MwVZY2vEzZjTxKIq5jXOihuSV/8U+Hej8Va22t65aKnJZs3P+NwojZvR8Mf8kyM7O+V8sQg==
dependencies: dependencies:
"@swc/counter" "^0.1.3" "@swc/counter" "^0.1.3"
"@swc/types" "^0.1.26" "@swc/types" "^0.1.26"
optionalDependencies: optionalDependencies:
"@swc/core-darwin-arm64" "1.15.41" "@swc/core-darwin-arm64" "1.15.40"
"@swc/core-darwin-x64" "1.15.41" "@swc/core-darwin-x64" "1.15.40"
"@swc/core-linux-arm-gnueabihf" "1.15.41" "@swc/core-linux-arm-gnueabihf" "1.15.40"
"@swc/core-linux-arm64-gnu" "1.15.41" "@swc/core-linux-arm64-gnu" "1.15.40"
"@swc/core-linux-arm64-musl" "1.15.41" "@swc/core-linux-arm64-musl" "1.15.40"
"@swc/core-linux-ppc64-gnu" "1.15.41" "@swc/core-linux-ppc64-gnu" "1.15.40"
"@swc/core-linux-s390x-gnu" "1.15.41" "@swc/core-linux-s390x-gnu" "1.15.40"
"@swc/core-linux-x64-gnu" "1.15.41" "@swc/core-linux-x64-gnu" "1.15.40"
"@swc/core-linux-x64-musl" "1.15.41" "@swc/core-linux-x64-musl" "1.15.40"
"@swc/core-win32-arm64-msvc" "1.15.41" "@swc/core-win32-arm64-msvc" "1.15.40"
"@swc/core-win32-ia32-msvc" "1.15.41" "@swc/core-win32-ia32-msvc" "1.15.40"
"@swc/core-win32-x64-msvc" "1.15.41" "@swc/core-win32-x64-msvc" "1.15.40"
"@swc/counter@^0.1.3": "@swc/counter@^0.1.3":
version "0.1.3" version "0.1.3"
@@ -4932,110 +4922,110 @@
dependencies: dependencies:
"@types/yargs-parser" "*" "@types/yargs-parser" "*"
"@typescript-eslint/eslint-plugin@8.61.1", "@typescript-eslint/eslint-plugin@^8.59.3": "@typescript-eslint/eslint-plugin@8.60.1", "@typescript-eslint/eslint-plugin@^8.59.3":
version "8.61.1" version "8.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.61.1.tgz#6e4b7fee21f1983308e9e9b634ecbaf702c86006" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.1.tgz#c1060bb8fa4be80624d3f3dec8dd9caca373af76"
integrity sha512-ZPlVl3PB3et/59Ne0fv/sci6ZXz4T4Hp4nTJ56i/Y0gR89ARb+KphojTq6j+56E5PIezmOIOOWyY+aWQFd+IkQ== integrity sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==
dependencies: dependencies:
"@eslint-community/regexpp" "^4.12.2" "@eslint-community/regexpp" "^4.12.2"
"@typescript-eslint/scope-manager" "8.61.1" "@typescript-eslint/scope-manager" "8.60.1"
"@typescript-eslint/type-utils" "8.61.1" "@typescript-eslint/type-utils" "8.60.1"
"@typescript-eslint/utils" "8.61.1" "@typescript-eslint/utils" "8.60.1"
"@typescript-eslint/visitor-keys" "8.61.1" "@typescript-eslint/visitor-keys" "8.60.1"
ignore "^7.0.5" ignore "^7.0.5"
natural-compare "^1.4.0" natural-compare "^1.4.0"
ts-api-utils "^2.5.0" ts-api-utils "^2.5.0"
"@typescript-eslint/parser@8.61.1", "@typescript-eslint/parser@^8.61.0": "@typescript-eslint/parser@8.60.1", "@typescript-eslint/parser@^8.60.1":
version "8.61.1" version "8.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.61.1.tgz#881fba60b50636249cdeea2e547bf75715254c72" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.60.1.tgz#a9d7f30850384d34b41f4687dd8944823c09e289"
integrity sha512-PJ5vePq5/ognBbrIcoC5+SHO5dfpeLPzP9FpLkzWrguoYQEeeSjlJpVwOpo1JRSTEi7dRcwNy4h4dzV70PqHcg== integrity sha512-A0M6ua6H252bVjPvvtSgl2QA4+ET9S5Mtkb2GDyTxIhH/C4qDItT7RQNO5PhMC6NXGYXOR9dIalcDDgBKT7oFA==
dependencies: dependencies:
"@typescript-eslint/scope-manager" "8.61.1" "@typescript-eslint/scope-manager" "8.60.1"
"@typescript-eslint/types" "8.61.1" "@typescript-eslint/types" "8.60.1"
"@typescript-eslint/typescript-estree" "8.61.1" "@typescript-eslint/typescript-estree" "8.60.1"
"@typescript-eslint/visitor-keys" "8.61.1" "@typescript-eslint/visitor-keys" "8.60.1"
debug "^4.4.3" debug "^4.4.3"
"@typescript-eslint/project-service@8.61.1": "@typescript-eslint/project-service@8.60.1":
version "8.61.1" version "8.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.61.1.tgz#fcd9739964a40867eed55f1ac318d3909f24b4af" resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.60.1.tgz#eb29712f58d72c222fc727162e92f2ab4670971b"
integrity sha512-PrC4JYGmR241lYnfhmKGTXkFqv8+ymbTFgSAY0fVXpY82/QkMw5TZPl+vGzuDDU2QYJk9fIDOBTntF+yDv9LEA== integrity sha512-eXkTH2bxmXlqD1RnOPmLZ9ZM9D3VwSx04JOwBnP9RQ+yUA5a2Mu7SfW8uaV2Aon53NJzZlZYuX7tn91Izf+xaw==
dependencies: dependencies:
"@typescript-eslint/tsconfig-utils" "^8.61.1" "@typescript-eslint/tsconfig-utils" "^8.60.1"
"@typescript-eslint/types" "^8.61.1" "@typescript-eslint/types" "^8.60.1"
debug "^4.4.3" debug "^4.4.3"
"@typescript-eslint/scope-manager@8.61.1": "@typescript-eslint/scope-manager@8.60.1":
version "8.61.1" version "8.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.61.1.tgz#2479921a40fdb0afa18f5838fae6167264b417b2" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.60.1.tgz#2f875962eaad0a0789cc3c36aea9b4ddeb2dd9c8"
integrity sha512-L2bdIeoQS8FlKAvONAr20w6OcLXeB+qiDKbAooS9A0Ben+iSIkBef0FxqwKWYqt5sa0i4KJtxVyVmhMylKzF5w== integrity sha512-gvI5OQoptnxQnchOirukCuQ55svJSTuD/4k5+pC267xyBtYry748R9/c3tYUzb/iE6RZfllRz2lVulLCHkTm4w==
dependencies: dependencies:
"@typescript-eslint/types" "8.61.1" "@typescript-eslint/types" "8.60.1"
"@typescript-eslint/visitor-keys" "8.61.1" "@typescript-eslint/visitor-keys" "8.60.1"
"@typescript-eslint/tsconfig-utils@8.61.1": "@typescript-eslint/tsconfig-utils@8.60.1":
version "8.61.1" version "8.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.61.1.tgz#ca88080e0cf191d49516d7f300b67aa090d2254f" resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.1.tgz#bee8b942a13679a878101c9c74577d732062ed93"
integrity sha512-UN/H4di+OO7EWx2ovME+8t31YO+KVnK0RRKEHR3kOt21/Ay8BOq3M1OMvWs5vNiqcFCYGYoxK3MXPZzmMUE+yg== integrity sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA==
"@typescript-eslint/tsconfig-utils@^8.61.1": "@typescript-eslint/tsconfig-utils@^8.60.1":
version "8.62.0" version "8.61.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.0.tgz#9440a673581c6d9de308c4d5803dd52ed5d71729" resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.61.0.tgz#05d6e3ff20001674ebcd22d03dac29ee448043ba"
integrity sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g== integrity sha512-O5Amvdv9ztMpxpf+vmFULGG78IE6Qwdr3bCGvqwG4nwc9H2qXkOYJJnRbRHyMkQTjv1d03olqwwwzHLMqpFePQ==
"@typescript-eslint/type-utils@8.61.1": "@typescript-eslint/type-utils@8.60.1":
version "8.61.1" version "8.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.61.1.tgz#8fa18f453ee140893b47d339d1a6b64cac9b08a1" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.60.1.tgz#1ae45f0f2a701354beea4a58c2161e40a5e3c379"
integrity sha512-GYRicKmVK0C4fsKgaACaknOUAq9Oa2kwsjnpFhFcS/5p4Ht5IP9OVLbgIgcK4SRk92nVHFluurg1lumD9dBcLw== integrity sha512-sdwTrpjosW7ANQYJ39ZBF1ZyEMEGVB2UsikrserVM/30a/F1dTLnu9bGxEdosugyu5caigjLrR2qiD11asjI1A==
dependencies: dependencies:
"@typescript-eslint/types" "8.61.1" "@typescript-eslint/types" "8.60.1"
"@typescript-eslint/typescript-estree" "8.61.1" "@typescript-eslint/typescript-estree" "8.60.1"
"@typescript-eslint/utils" "8.61.1" "@typescript-eslint/utils" "8.60.1"
debug "^4.4.3" debug "^4.4.3"
ts-api-utils "^2.5.0" ts-api-utils "^2.5.0"
"@typescript-eslint/types@8.61.1": "@typescript-eslint/types@8.60.1":
version "8.61.1" version "8.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.61.1.tgz#0c51f518e4e6848371a1c988e859d59eb7522d5a" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.60.1.tgz#ccdc482ba9e17f9723a10ce240b5e67dad3046c4"
integrity sha512-G+CRlPqLv7Bz1IZVs03x5K59F1veqL0EJUROAdGhKsEq8qOiRiZbI+HUojPq5l0fEGOKModD9br6lObhB8zkoA== integrity sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==
"@typescript-eslint/types@^8.61.1": "@typescript-eslint/types@^8.60.1":
version "8.62.0" version "8.61.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.62.0.tgz#601427c10203d9f0f34f0b3e474df735eb12b593" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.61.0.tgz#0ddb46e012a4288292950bdd253db42f278ce64d"
integrity sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg== integrity sha512-9QTQpZ5Iin4CdIodfbDQFSeiSJKidgYJYug1P9CC2xWgUTvlmixViqDZNciMjwLBZyJnG4tGmPl97rVAFb1AJg==
"@typescript-eslint/typescript-estree@8.61.1": "@typescript-eslint/typescript-estree@8.60.1":
version "8.61.1" version "8.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.61.1.tgz#febbe70365ac0bf7611262b61b338fc8797965c7" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.60.1.tgz#016630b119228bf483ddc652703a6a038f3fdd74"
integrity sha512-u+oQD3BqYWPc8YV9Zab4vaJElJuwOLPRc10Jm1o/qS+6Qwen14HCWwx0Seo4LnSn2wxea2Ik8DxPt2/FHmuhrg== integrity sha512-alpRkfG8hlVE5kdJW2GkfgDgXxold3e8e4l6EnmhRmRLbekgAPCCGDVD++sABy9FcgPFroq+uFcCSM1vR57Cew==
dependencies: dependencies:
"@typescript-eslint/project-service" "8.61.1" "@typescript-eslint/project-service" "8.60.1"
"@typescript-eslint/tsconfig-utils" "8.61.1" "@typescript-eslint/tsconfig-utils" "8.60.1"
"@typescript-eslint/types" "8.61.1" "@typescript-eslint/types" "8.60.1"
"@typescript-eslint/visitor-keys" "8.61.1" "@typescript-eslint/visitor-keys" "8.60.1"
debug "^4.4.3" debug "^4.4.3"
minimatch "^10.2.2" minimatch "^10.2.2"
semver "^7.7.3" semver "^7.7.3"
tinyglobby "^0.2.15" tinyglobby "^0.2.15"
ts-api-utils "^2.5.0" ts-api-utils "^2.5.0"
"@typescript-eslint/utils@8.61.1": "@typescript-eslint/utils@8.60.1":
version "8.61.1" version "8.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.61.1.tgz#ffd1054de7dd33b7873cd6c6713ec6b0366316d3" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.60.1.tgz#31cf566095602d9fe8ad91837d2eb520b8de762b"
integrity sha512-1+P/3Dj6jvtybE1q0HQ6yBt/gq+oKJyLdEv4HdnqasaEXRSYCAsD59mXEVQnM/ULNdQxbX77tdG4jPRjIS6knA== integrity sha512-h2MPBLoNtjc3qZWfY3Tl51yPorQ2McHn8pJfcMNTcIvrrZrr90Ykffit0yjrPFWQcRcUxzH20+6OcVdW4yHtUg==
dependencies: dependencies:
"@eslint-community/eslint-utils" "^4.9.1" "@eslint-community/eslint-utils" "^4.9.1"
"@typescript-eslint/scope-manager" "8.61.1" "@typescript-eslint/scope-manager" "8.60.1"
"@typescript-eslint/types" "8.61.1" "@typescript-eslint/types" "8.60.1"
"@typescript-eslint/typescript-estree" "8.61.1" "@typescript-eslint/typescript-estree" "8.60.1"
"@typescript-eslint/visitor-keys@8.61.1": "@typescript-eslint/visitor-keys@8.60.1":
version "8.61.1" version "8.60.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.61.1.tgz#546cf102b4efdb72a9a08e63a1b0d7d745eb66eb" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.60.1.tgz#165d1d8901137b944efaf18f00ab5ecb57f06995"
integrity sha512-6fJ9MHWtK14C1DSkiMlHUSOmrVebL7150xZJBlJiL62jjhIA4JmOq6flwBgDxIdBKKdoiZRel+dfPD5MLfny3w== integrity sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==
dependencies: dependencies:
"@typescript-eslint/types" "8.61.1" "@typescript-eslint/types" "8.60.1"
eslint-visitor-keys "^5.0.0" eslint-visitor-keys "^5.0.0"
"@ungap/structured-clone@^1.0.0": "@ungap/structured-clone@^1.0.0":
@@ -5392,54 +5382,54 @@ ansis@^3.2.0:
resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7" resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7"
integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg== integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==
antd@^6.4.4: antd@^6.4.3:
version "6.4.4" version "6.4.3"
resolved "https://registry.yarnpkg.com/antd/-/antd-6.4.4.tgz#a422610959b37ac4d4b766dbaac67ea2d8fd0785" resolved "https://registry.yarnpkg.com/antd/-/antd-6.4.3.tgz#80a7aab9c13c35daa0e0e7eea80585ba57cb7203"
integrity sha512-lgPz4KhfhiYddV/qPYo0ieqWimCVgV2OQF72mbeGNixE753JWNnmEc7UNGy08wBS/zZ7hxrmX0pc5aX7EUaIIg== integrity sha512-6H2avkxCGfxcF67r3J2mwm9Ck50el1pks/73vfM1wDsPL/tPtj5vHuauMgJFnrqmq7CH3g8aoZ0VBQbt+jpAsw==
dependencies: dependencies:
"@ant-design/colors" "^8.0.1" "@ant-design/colors" "^8.0.1"
"@ant-design/cssinjs" "^2.1.2" "@ant-design/cssinjs" "^2.1.2"
"@ant-design/cssinjs-utils" "^2.1.2" "@ant-design/cssinjs-utils" "^2.1.2"
"@ant-design/fast-color" "^3.0.1" "@ant-design/fast-color" "^3.0.1"
"@ant-design/icons" "^6.2.5" "@ant-design/icons" "^6.2.3"
"@ant-design/react-slick" "~2.0.0" "@ant-design/react-slick" "~2.0.0"
"@babel/runtime" "^7.29.2" "@babel/runtime" "^7.29.2"
"@rc-component/cascader" "~1.16.1" "@rc-component/cascader" "~1.15.0"
"@rc-component/checkbox" "~2.0.0" "@rc-component/checkbox" "~2.0.0"
"@rc-component/collapse" "~1.2.0" "@rc-component/collapse" "~1.2.0"
"@rc-component/color-picker" "~3.1.1" "@rc-component/color-picker" "~3.1.1"
"@rc-component/dialog" "~1.9.0" "@rc-component/dialog" "~1.9.0"
"@rc-component/drawer" "~1.4.2" "@rc-component/drawer" "~1.4.2"
"@rc-component/dropdown" "~1.0.2" "@rc-component/dropdown" "~1.0.2"
"@rc-component/form" "~1.8.3" "@rc-component/form" "~1.8.1"
"@rc-component/image" "~1.9.0" "@rc-component/image" "~1.9.0"
"@rc-component/input" "~1.3.1" "@rc-component/input" "~1.3.0"
"@rc-component/input-number" "~1.6.2" "@rc-component/input-number" "~1.6.2"
"@rc-component/mentions" "~1.9.0" "@rc-component/mentions" "~1.9.0"
"@rc-component/menu" "~1.3.1" "@rc-component/menu" "~1.3.0"
"@rc-component/motion" "^1.3.3" "@rc-component/motion" "^1.3.2"
"@rc-component/mutate-observer" "^2.0.1" "@rc-component/mutate-observer" "^2.0.1"
"@rc-component/notification" "~2.0.7" "@rc-component/notification" "~2.0.7"
"@rc-component/pagination" "~1.3.0" "@rc-component/pagination" "~1.2.0"
"@rc-component/picker" "~1.10.0" "@rc-component/picker" "~1.10.0"
"@rc-component/progress" "~1.0.2" "@rc-component/progress" "~1.0.2"
"@rc-component/qrcode" "~2.0.0" "@rc-component/qrcode" "~1.1.1"
"@rc-component/rate" "~1.0.1" "@rc-component/rate" "~1.0.1"
"@rc-component/resize-observer" "^1.1.2" "@rc-component/resize-observer" "^1.1.2"
"@rc-component/segmented" "~1.3.0" "@rc-component/segmented" "~1.3.0"
"@rc-component/select" "~1.7.1" "@rc-component/select" "~1.6.15"
"@rc-component/slider" "~1.0.1" "@rc-component/slider" "~1.0.1"
"@rc-component/steps" "~1.2.2" "@rc-component/steps" "~1.2.2"
"@rc-component/switch" "~1.0.3" "@rc-component/switch" "~1.0.3"
"@rc-component/table" "~1.10.2" "@rc-component/table" "~1.10.0"
"@rc-component/tabs" "~1.9.1" "@rc-component/tabs" "~1.9.0"
"@rc-component/tooltip" "~1.4.0" "@rc-component/tooltip" "~1.4.0"
"@rc-component/tour" "~2.4.0" "@rc-component/tour" "~2.4.0"
"@rc-component/tree" "~1.3.2" "@rc-component/tree" "~1.3.1"
"@rc-component/tree-select" "~1.10.0" "@rc-component/tree-select" "~1.9.0"
"@rc-component/trigger" "^3.9.1" "@rc-component/trigger" "^3.9.0"
"@rc-component/upload" "~1.1.1" "@rc-component/upload" "~1.1.0"
"@rc-component/util" "^1.11.1" "@rc-component/util" "^1.11.0"
clsx "^2.1.1" clsx "^2.1.1"
dayjs "^1.11.11" dayjs "^1.11.11"
scroll-into-view-if-needed "^3.1.0" scroll-into-view-if-needed "^3.1.0"
@@ -5698,10 +5688,10 @@ base64-js@^1.3.1, base64-js@^1.5.1:
resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
baseline-browser-mapping@^2.10.37, baseline-browser-mapping@^2.9.0, baseline-browser-mapping@^2.9.19: baseline-browser-mapping@^2.10.34, baseline-browser-mapping@^2.9.0, baseline-browser-mapping@^2.9.19:
version "2.10.37" version "2.10.34"
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.37.tgz#3e636475b6b293244e2b23e2c71a2ab9d9e6ba7d" resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.34.tgz#dedb606362446777cfe328d30d4ee15056d06303"
integrity sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig== integrity sha512-IMDedajPifLnHNY0X9n8hKxRTQ6/eTHwr5bDo04WnuqxyKw6LYtQywCuuqPZwhl3aBXMvQpJov42GLCwRRdQzw==
batch@0.6.1: batch@0.6.1:
version "0.6.1" version "0.6.1"
@@ -5944,10 +5934,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2" lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0" lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001799: caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001797:
version "1.0.30001799" version "1.0.30001797"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz#5c909138c27f1a61219d3e092071c1cc7d32dc55" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001797.tgz#1332709e1439f01ff92085dd17001e0a45897ec0"
integrity sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw== integrity sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==
ccount@^2.0.0: ccount@^2.0.0:
version "2.0.1" version "2.0.1"
@@ -7262,10 +7252,17 @@ domhandler@^5.0.2, domhandler@^5.0.3:
dependencies: dependencies:
domelementtype "^2.3.0" domelementtype "^2.3.0"
dompurify@^3.3.1, dompurify@^3.4.0: dompurify@^3.3.1:
version "3.4.11" version "3.4.2"
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.11.tgz#29c8ba496475f279ef4015784068452fb14a0680" resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.2.tgz#f0ff81be682c485505097ba8195a058d8f575218"
integrity sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw== integrity sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA==
optionalDependencies:
"@types/trusted-types" "^2.0.7"
dompurify@^3.4.0:
version "3.4.1"
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.1.tgz#521d04483ac12631b2aedf434a5f5390933b8789"
integrity sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==
optionalDependencies: optionalDependencies:
"@types/trusted-types" "^2.0.7" "@types/trusted-types" "^2.0.7"
@@ -8768,9 +8765,9 @@ http-parser-js@>=0.5.1:
integrity sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA== integrity sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==
http-proxy-middleware@^2.0.9: http-proxy-middleware@^2.0.9:
version "2.0.10" version "2.0.9"
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.10.tgz#b2df7b705203d7a8c269ac8450cf96b00c532f94" resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz"
integrity sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ== integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==
dependencies: dependencies:
"@types/http-proxy" "^1.17.8" "@types/http-proxy" "^1.17.8"
http-proxy "^1.18.1" http-proxy "^1.18.1"
@@ -12273,10 +12270,10 @@ prettier-linter-helpers@^1.0.1:
dependencies: dependencies:
fast-diff "^1.1.2" fast-diff "^1.1.2"
prettier@^3.8.4: prettier@^3.8.3:
version "3.8.4" version "3.8.3"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.4.tgz#f334f013ac04a96676f24dabc23c1c4ae1bae411" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.3.tgz#560f2de55bf01b4c0503bc629d5df99b9a1d09b0"
integrity sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q== integrity sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==
pretty-error@^4.0.0: pretty-error@^4.0.0:
version "4.0.0" version "4.0.0"
@@ -14502,15 +14499,15 @@ types-ramda@^0.30.1:
dependencies: dependencies:
ts-toolbelt "^9.6.0" ts-toolbelt "^9.6.0"
typescript-eslint@^8.61.1: typescript-eslint@^8.60.1:
version "8.61.1" version "8.60.1"
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.61.1.tgz#7c224a9a643b7f42d295c67a75c1e30fee8c3eaa" resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.60.1.tgz#13db05c6eabb89669deec44545b788a0e9aee640"
integrity sha512-V7PayAfJokV3pEHgN7/v03D1SpujhRfQtYLbLIiBfDDncdg4PAiRBfoS4cnCANK4jmAPncczi59QO3afiXUlNw== integrity sha512-6m5hkkRAp8lKvhVpcprAIn5KkehQEh+47oHH2VGnExEh7dhNxXlg6GPAOIu6TxbVQxhebrJDvjl3020ooiWCMA==
dependencies: dependencies:
"@typescript-eslint/eslint-plugin" "8.61.1" "@typescript-eslint/eslint-plugin" "8.60.1"
"@typescript-eslint/parser" "8.61.1" "@typescript-eslint/parser" "8.60.1"
"@typescript-eslint/typescript-estree" "8.61.1" "@typescript-eslint/typescript-estree" "8.60.1"
"@typescript-eslint/utils" "8.61.1" "@typescript-eslint/utils" "8.60.1"
typescript@~6.0.3: typescript@~6.0.3:
version "6.0.3" version "6.0.3"
@@ -15009,9 +15006,9 @@ webpack-dev-middleware@^7.4.2:
schema-utils "^4.0.0" schema-utils "^4.0.0"
webpack-dev-server@^5.2.2: webpack-dev-server@^5.2.2:
version "5.2.5" version "5.2.4"
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.5.tgz#648fceaac6a5736b0935e5c1e55d6aa1d0626119" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.4.tgz#6e6306ce59848ed322c235e48b326632b1eed6d6"
integrity sha512-4wZtCquSuv9CKX8oybo+mqxtxZqWz47uM1Ch94lxowBztOhWCbhqvRbfC/mODOwxgV2brY+JGZpHq58/SuVFYg== integrity sha512-GqDPGZN9bRqKBTkp4aWkobDDHMsrXKoGSdOH56smIri8qR0JG8gfL8/v/f/OZR3/OKXjG8uwJbFVhKm/FNU/UA==
dependencies: dependencies:
"@types/bonjour" "^3.5.13" "@types/bonjour" "^3.5.13"
"@types/connect-history-api-fallback" "^1.5.4" "@types/connect-history-api-fallback" "^1.5.4"

View File

@@ -29,7 +29,7 @@ maintainers:
- name: craig-rueda - name: craig-rueda
email: craig@craigrueda.com email: craig@craigrueda.com
url: https://github.com/craig-rueda url: https://github.com/craig-rueda
version: 0.17.2 # See [README](https://github.com/apache/superset/blob/master/helm/superset/README.md#versioning) for version details. version: 0.16.0 # See [README](https://github.com/apache/superset/blob/master/helm/superset/README.md#versioning) for version details.
dependencies: dependencies:
- name: postgresql - name: postgresql
version: 16.7.27 version: 16.7.27

View File

@@ -23,7 +23,7 @@ NOTE: This file is generated by helm-docs: https://github.com/norwoodj/helm-docs
# superset # superset
![Version: 0.17.2](https://img.shields.io/badge/Version-0.17.2-informational?style=flat-square) ![Version: 0.16.0](https://img.shields.io/badge/Version-0.16.0-informational?style=flat-square)
Apache Superset is a modern, enterprise-ready business intelligence web application Apache Superset is a modern, enterprise-ready business intelligence web application
@@ -111,6 +111,9 @@ On helm this can be set on `extraSecretEnv.SUPERSET_SECRET_KEY` or `configOverri
| init.resources | object | `{}` | | | init.resources | object | `{}` | |
| init.tolerations | list | `[]` | | | init.tolerations | list | `[]` | |
| init.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to init job | | init.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to init job |
| initImage.pullPolicy | string | `"IfNotPresent"` | |
| initImage.repository | string | `"apache/superset"` | |
| initImage.tag | string | `"dockerize"` | |
| nameOverride | string | `nil` | Provide a name to override the name of the chart | | nameOverride | string | `nil` | Provide a name to override the name of the chart |
| nodeSelector | object | `{}` | | | nodeSelector | object | `{}` | |
| postgresql | object | see `values.yaml` | Configuration values for the postgresql dependency. ref: https://github.com/bitnami/charts/tree/main/bitnami/postgresql | | postgresql | object | see `values.yaml` | Configuration values for the postgresql dependency. ref: https://github.com/bitnami/charts/tree/main/bitnami/postgresql |
@@ -216,7 +219,6 @@ On helm this can be set on `extraSecretEnv.SUPERSET_SECRET_KEY` or `configOverri
| supersetNode.extraContainers | list | `[]` | Launch additional containers into supersetNode pod | | supersetNode.extraContainers | list | `[]` | Launch additional containers into supersetNode pod |
| supersetNode.forceReload | bool | `false` | If true, forces deployment to reload on each upgrade | | supersetNode.forceReload | bool | `false` | If true, forces deployment to reload on each upgrade |
| supersetNode.initContainers | list | a container waiting for postgres | Init containers | | supersetNode.initContainers | list | a container waiting for postgres | Init containers |
| supersetNode.lifecycle | object | `{}` | Container lifecycle hooks, e.g. a preStop sleep so the Service/Ingress stops routing to the pod before gunicorn receives SIGTERM |
| supersetNode.livenessProbe.failureThreshold | int | `3` | | | supersetNode.livenessProbe.failureThreshold | int | `3` | |
| supersetNode.livenessProbe.httpGet.path | string | `"/health"` | | | supersetNode.livenessProbe.httpGet.path | string | `"/health"` | |
| supersetNode.livenessProbe.httpGet.port | string | `"http"` | | | supersetNode.livenessProbe.httpGet.port | string | `"http"` | |
@@ -249,7 +251,6 @@ On helm this can be set on `extraSecretEnv.SUPERSET_SECRET_KEY` or `configOverri
| supersetNode.startupProbe.successThreshold | int | `1` | | | supersetNode.startupProbe.successThreshold | int | `1` | |
| supersetNode.startupProbe.timeoutSeconds | int | `1` | | | supersetNode.startupProbe.timeoutSeconds | int | `1` | |
| supersetNode.strategy | object | `{}` | | | supersetNode.strategy | object | `{}` | |
| supersetNode.terminationGracePeriodSeconds | string | `nil` | Pod termination grace period (seconds). Set greater than GUNICORN_TIMEOUT so in-flight requests can drain before SIGKILL |
| supersetNode.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to supersetNode deployments | | supersetNode.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to supersetNode deployments |
| supersetWebsockets.affinity | object | `{}` | Affinity to be added to supersetWebsockets deployment | | supersetWebsockets.affinity | object | `{}` | Affinity to be added to supersetWebsockets deployment |
| supersetWebsockets.command | list | `[]` | | | supersetWebsockets.command | list | `[]` | |
@@ -313,7 +314,6 @@ On helm this can be set on `extraSecretEnv.SUPERSET_SECRET_KEY` or `configOverri
| supersetWorker.extraContainers | list | `[]` | Launch additional containers into supersetWorker pod | | supersetWorker.extraContainers | list | `[]` | Launch additional containers into supersetWorker pod |
| supersetWorker.forceReload | bool | `false` | If true, forces deployment to reload on each upgrade | | supersetWorker.forceReload | bool | `false` | If true, forces deployment to reload on each upgrade |
| supersetWorker.initContainers | list | a container waiting for postgres and redis | Init container | | supersetWorker.initContainers | list | a container waiting for postgres and redis | Init container |
| supersetWorker.lifecycle | object | `{}` | Container lifecycle hooks for the worker pod |
| supersetWorker.livenessProbe.exec.command | list | a `celery inspect ping` command | Liveness probe command | | supersetWorker.livenessProbe.exec.command | list | a `celery inspect ping` command | Liveness probe command |
| supersetWorker.livenessProbe.failureThreshold | int | `3` | | | supersetWorker.livenessProbe.failureThreshold | int | `3` | |
| supersetWorker.livenessProbe.initialDelaySeconds | int | `120` | | | supersetWorker.livenessProbe.initialDelaySeconds | int | `120` | |
@@ -334,7 +334,6 @@ On helm this can be set on `extraSecretEnv.SUPERSET_SECRET_KEY` or `configOverri
| supersetWorker.resources | object | `{}` | Resource settings for the supersetWorker pods - these settings overwrite might existing values from the global resources object defined above. | | supersetWorker.resources | object | `{}` | Resource settings for the supersetWorker pods - these settings overwrite might existing values from the global resources object defined above. |
| supersetWorker.startupProbe | object | `{}` | No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic) | | supersetWorker.startupProbe | object | `{}` | No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic) |
| supersetWorker.strategy | object | `{}` | | | supersetWorker.strategy | object | `{}` | |
| supersetWorker.terminationGracePeriodSeconds | string | `nil` | Pod termination grace period (seconds) for the worker pod so in-flight tasks can drain before SIGKILL |
| supersetWorker.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to supersetWorker deployments | | supersetWorker.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to supersetWorker deployments |
| tolerations | list | `[]` | | | tolerations | list | `[]` | |
| topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to all deployments | | topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to all deployments |

View File

@@ -126,7 +126,7 @@ spec:
{{- toYaml .Values.resources | nindent 12 }} {{- toYaml .Values.resources | nindent 12 }}
{{- end }} {{- end }}
{{- if .Values.supersetCeleryBeat.extraContainers }} {{- if .Values.supersetCeleryBeat.extraContainers }}
{{- tpl (toYaml .Values.supersetCeleryBeat.extraContainers) . | nindent 8 }} {{- toYaml .Values.supersetCeleryBeat.extraContainers | nindent 8 }}
{{- end }} {{- end }}
{{- with .Values.nodeSelector }} {{- with .Values.nodeSelector }}
nodeSelector: {{- toYaml . | nindent 8 }} nodeSelector: {{- toYaml . | nindent 8 }}

View File

@@ -121,7 +121,7 @@ spec:
{{- toYaml .Values.resources | nindent 12 }} {{- toYaml .Values.resources | nindent 12 }}
{{- end }} {{- end }}
{{- if .Values.supersetCeleryFlower.extraContainers }} {{- if .Values.supersetCeleryFlower.extraContainers }}
{{- tpl (toYaml .Values.supersetCeleryFlower.extraContainers) . | nindent 8 }} {{- toYaml .Values.supersetCeleryFlower.extraContainers | nindent 8 }}
{{- end }} {{- end }}
{{- with .Values.nodeSelector }} {{- with .Values.nodeSelector }}
nodeSelector: {{- toYaml . | nindent 8 }} nodeSelector: {{- toYaml . | nindent 8 }}

View File

@@ -134,9 +134,6 @@ spec:
{{- if .Values.supersetWorker.livenessProbe }} {{- if .Values.supersetWorker.livenessProbe }}
livenessProbe: {{- .Values.supersetWorker.livenessProbe | toYaml | nindent 12 }} livenessProbe: {{- .Values.supersetWorker.livenessProbe | toYaml | nindent 12 }}
{{- end }} {{- end }}
{{- if .Values.supersetWorker.lifecycle }}
lifecycle: {{- .Values.supersetWorker.lifecycle | toYaml | nindent 12 }}
{{- end }}
resources: resources:
{{- if .Values.supersetWorker.resources }} {{- if .Values.supersetWorker.resources }}
{{- toYaml .Values.supersetWorker.resources | nindent 12 }} {{- toYaml .Values.supersetWorker.resources | nindent 12 }}
@@ -144,7 +141,7 @@ spec:
{{- toYaml .Values.resources | nindent 12 }} {{- toYaml .Values.resources | nindent 12 }}
{{- end }} {{- end }}
{{- if .Values.supersetWorker.extraContainers }} {{- if .Values.supersetWorker.extraContainers }}
{{- tpl (toYaml .Values.supersetWorker.extraContainers) . | nindent 8 }} {{- toYaml .Values.supersetWorker.extraContainers | nindent 8 }}
{{- end }} {{- end }}
{{- with .Values.nodeSelector }} {{- with .Values.nodeSelector }}
nodeSelector: {{- toYaml . | nindent 8 }} nodeSelector: {{- toYaml . | nindent 8 }}
@@ -173,9 +170,6 @@ spec:
{{- with .Values.tolerations }} {{- with .Values.tolerations }}
tolerations: {{- toYaml . | nindent 8 }} tolerations: {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
{{- if .Values.supersetWorker.terminationGracePeriodSeconds }}
terminationGracePeriodSeconds: {{ .Values.supersetWorker.terminationGracePeriodSeconds }}
{{- end }}
{{- if .Values.imagePullSecrets }} {{- if .Values.imagePullSecrets }}
imagePullSecrets: {{- toYaml .Values.imagePullSecrets | nindent 8 }} imagePullSecrets: {{- toYaml .Values.imagePullSecrets | nindent 8 }}
{{- end }} {{- end }}

View File

@@ -120,7 +120,7 @@ spec:
livenessProbe: {{- .Values.supersetWebsockets.livenessProbe | toYaml | nindent 12 }} livenessProbe: {{- .Values.supersetWebsockets.livenessProbe | toYaml | nindent 12 }}
{{- end }} {{- end }}
{{- if .Values.supersetWebsockets.extraContainers }} {{- if .Values.supersetWebsockets.extraContainers }}
{{- tpl (toYaml .Values.supersetWebsockets.extraContainers) . | nindent 8 }} {{- toYaml .Values.supersetWebsockets.extraContainers | nindent 8 }}
{{- end }} {{- end }}
{{- with .Values.nodeSelector }} {{- with .Values.nodeSelector }}
nodeSelector: {{- toYaml . | nindent 8 }} nodeSelector: {{- toYaml . | nindent 8 }}

View File

@@ -144,9 +144,6 @@ spec:
{{- if .Values.supersetNode.livenessProbe }} {{- if .Values.supersetNode.livenessProbe }}
livenessProbe: {{- .Values.supersetNode.livenessProbe | toYaml | nindent 12 }} livenessProbe: {{- .Values.supersetNode.livenessProbe | toYaml | nindent 12 }}
{{- end }} {{- end }}
{{- if .Values.supersetNode.lifecycle }}
lifecycle: {{- .Values.supersetNode.lifecycle | toYaml | nindent 12 }}
{{- end }}
resources: resources:
{{- if .Values.supersetNode.resources }} {{- if .Values.supersetNode.resources }}
{{- toYaml .Values.supersetNode.resources | nindent 12 }} {{- toYaml .Values.supersetNode.resources | nindent 12 }}
@@ -154,7 +151,7 @@ spec:
{{- toYaml .Values.resources | nindent 12 }} {{- toYaml .Values.resources | nindent 12 }}
{{- end }} {{- end }}
{{- if .Values.supersetNode.extraContainers }} {{- if .Values.supersetNode.extraContainers }}
{{- tpl (toYaml .Values.supersetNode.extraContainers) . | nindent 8 }} {{- toYaml .Values.supersetNode.extraContainers | nindent 8 }}
{{- end }} {{- end }}
{{- with .Values.nodeSelector }} {{- with .Values.nodeSelector }}
nodeSelector: {{- toYaml . | nindent 8 }} nodeSelector: {{- toYaml . | nindent 8 }}
@@ -183,9 +180,6 @@ spec:
{{- with .Values.tolerations }} {{- with .Values.tolerations }}
tolerations: {{- toYaml . | nindent 8 }} tolerations: {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
{{- if .Values.supersetNode.terminationGracePeriodSeconds }}
terminationGracePeriodSeconds: {{ .Values.supersetNode.terminationGracePeriodSeconds }}
{{- end }}
{{- if .Values.imagePullSecrets }} {{- if .Values.imagePullSecrets }}
imagePullSecrets: {{- toYaml .Values.imagePullSecrets | nindent 8 }} imagePullSecrets: {{- toYaml .Values.imagePullSecrets | nindent 8 }}
{{- end }} {{- end }}

View File

@@ -62,9 +62,6 @@ spec:
{{- if .Values.init.initContainers }} {{- if .Values.init.initContainers }}
initContainers: {{- tpl (toYaml .Values.init.initContainers) . | nindent 6 }} initContainers: {{- tpl (toYaml .Values.init.initContainers) . | nindent 6 }}
{{- end }} {{- end }}
{{- with .Values.hostAliases }}
hostAliases: {{- toYaml . | nindent 6 }}
{{- end }}
containers: containers:
- name: {{ template "superset.name" . }}-init-db - name: {{ template "superset.name" . }}-init-db
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
@@ -104,7 +101,7 @@ spec:
command: {{ tpl (toJson .Values.init.command) . }} command: {{ tpl (toJson .Values.init.command) . }}
resources: {{- toYaml .Values.init.resources | nindent 10 }} resources: {{- toYaml .Values.init.resources | nindent 10 }}
{{- if .Values.init.extraContainers }} {{- if .Values.init.extraContainers }}
{{- tpl (toYaml .Values.init.extraContainers) . | nindent 6 }} {{- toYaml .Values.init.extraContainers | nindent 6 }}
{{- end }} {{- end }}
{{- with .Values.nodeSelector }} {{- with .Values.nodeSelector }}
nodeSelector: {{- toYaml . | nindent 8 }} nodeSelector: {{- toYaml . | nindent 8 }}

View File

@@ -194,6 +194,11 @@ image:
imagePullSecrets: [] imagePullSecrets: []
initImage:
repository: apache/superset
tag: dockerize
pullPolicy: IfNotPresent
service: service:
type: ClusterIP type: ClusterIP
port: 8088 port: 8088
@@ -269,7 +274,7 @@ supersetNode:
command: command:
- "/bin/sh" - "/bin/sh"
- "-c" - "-c"
- ". {{ .Values.configMountPath }}/superset_bootstrap.sh; exec /usr/bin/run-server.sh" - ". {{ .Values.configMountPath }}/superset_bootstrap.sh; /usr/bin/run-server.sh"
connections: connections:
# -- Change in case of bringing your own redis and then also set redis.enabled:false # -- Change in case of bringing your own redis and then also set redis.enabled:false
redis_host: "{{ .Release.Name }}-redis-headless" redis_host: "{{ .Release.Name }}-redis-headless"
@@ -298,29 +303,15 @@ supersetNode:
# @default -- a container waiting for postgres # @default -- a container waiting for postgres
initContainers: initContainers:
- name: wait-for-postgres - name: wait-for-postgres
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}"
imagePullPolicy: "{{ .Values.image.pullPolicy }}" imagePullPolicy: "{{ .Values.initImage.pullPolicy }}"
envFrom: envFrom:
- secretRef: - secretRef:
name: "{{ tpl .Values.envFromSecret . }}" name: "{{ tpl .Values.envFromSecret . }}"
command: command:
- /bin/bash - /bin/sh
- -c - -c
- | - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -timeout 120s
# opening a /dev/tcp fd performs a TCP connect without sending any
# payload (avoids postgres "incomplete startup packet" log noise);
# no external `dockerize`, `nc`, or busybox needed. SECONDS-based
# deadline mirrors the prior `dockerize -timeout 120s` behaviour.
SECONDS=0
until (exec 3<>/dev/tcp/"$DB_HOST"/"$DB_PORT") 2>/dev/null; do
if [ "$SECONDS" -ge 120 ]; then
echo "timeout waiting for postgres at $DB_HOST:$DB_PORT after 120s" >&2
exit 1
fi
echo "waiting for postgres at $DB_HOST:$DB_PORT (elapsed ${SECONDS}s)"
sleep 2
done
echo "postgres at $DB_HOST:$DB_PORT is up"
resources: resources:
limits: limits:
memory: "256Mi" memory: "256Mi"
@@ -369,12 +360,6 @@ supersetNode:
failureThreshold: 3 failureThreshold: 3
periodSeconds: 15 periodSeconds: 15
successThreshold: 1 successThreshold: 1
# -- Container lifecycle hooks, e.g. a preStop sleep so the Service/Ingress
# stops routing to the pod before gunicorn receives SIGTERM
lifecycle: {}
# -- Pod termination grace period (seconds). Set greater than GUNICORN_TIMEOUT so
# in-flight requests can drain before SIGKILL
terminationGracePeriodSeconds: ~
# -- Resource settings for the supersetNode pods - these settings overwrite might existing values from the global resources object defined above. # -- Resource settings for the supersetNode pods - these settings overwrite might existing values from the global resources object defined above.
resources: {} resources: {}
# limits: # limits:
@@ -415,38 +400,22 @@ supersetWorker:
command: command:
- "/bin/sh" - "/bin/sh"
- "-c" - "-c"
- ". {{ .Values.configMountPath }}/superset_bootstrap.sh; exec celery --app=superset.tasks.celery_app:app worker" - ". {{ .Values.configMountPath }}/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app worker"
# -- If true, forces deployment to reload on each upgrade # -- If true, forces deployment to reload on each upgrade
forceReload: false forceReload: false
# -- Init container # -- Init container
# @default -- a container waiting for postgres and redis # @default -- a container waiting for postgres and redis
initContainers: initContainers:
- name: wait-for-postgres-redis - name: wait-for-postgres-redis
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}"
imagePullPolicy: "{{ .Values.image.pullPolicy }}" imagePullPolicy: "{{ .Values.initImage.pullPolicy }}"
envFrom: envFrom:
- secretRef: - secretRef:
name: "{{ tpl .Values.envFromSecret . }}" name: "{{ tpl .Values.envFromSecret . }}"
command: command:
- /bin/bash - /bin/sh
- -c - -c
- | - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -wait "tcp://$REDIS_HOST:$REDIS_PORT" -timeout 120s
# See supersetNode.initContainers for the rationale.
SECONDS=0
wait_for() {
local host=$1 port=$2 name=$3
until (exec 3<>/dev/tcp/"$host"/"$port") 2>/dev/null; do
if [ "$SECONDS" -ge 120 ]; then
echo "timeout waiting for $name at $host:$port after 120s" >&2
exit 1
fi
echo "waiting for $name at $host:$port (elapsed ${SECONDS}s)"
sleep 2
done
echo "$name at $host:$port is up"
}
wait_for "$DB_HOST" "$DB_PORT" postgres
wait_for "$REDIS_HOST" "$REDIS_PORT" redis
resources: resources:
limits: limits:
memory: "256Mi" memory: "256Mi"
@@ -495,10 +464,6 @@ supersetWorker:
failureThreshold: 3 failureThreshold: 3
periodSeconds: 60 periodSeconds: 60
successThreshold: 1 successThreshold: 1
# -- Container lifecycle hooks for the worker pod
lifecycle: {}
# -- Pod termination grace period (seconds) for the worker pod so in-flight tasks can drain before SIGKILL
terminationGracePeriodSeconds: ~
# -- No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic) # -- No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic)
startupProbe: {} startupProbe: {}
# -- No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic) # -- No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic)
@@ -523,38 +488,22 @@ supersetCeleryBeat:
command: command:
- "/bin/sh" - "/bin/sh"
- "-c" - "-c"
- ". {{ .Values.configMountPath }}/superset_bootstrap.sh; exec celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid --schedule /tmp/celerybeat-schedule" - ". {{ .Values.configMountPath }}/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid --schedule /tmp/celerybeat-schedule"
# -- If true, forces deployment to reload on each upgrade # -- If true, forces deployment to reload on each upgrade
forceReload: false forceReload: false
# -- List of init containers # -- List of init containers
# @default -- a container waiting for postgres # @default -- a container waiting for postgres
initContainers: initContainers:
- name: wait-for-postgres-redis - name: wait-for-postgres-redis
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}"
imagePullPolicy: "{{ .Values.image.pullPolicy }}" imagePullPolicy: "{{ .Values.initImage.pullPolicy }}"
envFrom: envFrom:
- secretRef: - secretRef:
name: "{{ tpl .Values.envFromSecret . }}" name: "{{ tpl .Values.envFromSecret . }}"
command: command:
- /bin/bash - /bin/sh
- -c - -c
- | - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -wait "tcp://$REDIS_HOST:$REDIS_PORT" -timeout 120s
# See supersetNode.initContainers for the rationale.
SECONDS=0
wait_for() {
local host=$1 port=$2 name=$3
until (exec 3<>/dev/tcp/"$host"/"$port") 2>/dev/null; do
if [ "$SECONDS" -ge 120 ]; then
echo "timeout waiting for $name at $host:$port after 120s" >&2
exit 1
fi
echo "waiting for $name at $host:$port (elapsed ${SECONDS}s)"
sleep 2
done
echo "$name at $host:$port is up"
}
wait_for "$DB_HOST" "$DB_PORT" postgres
wait_for "$REDIS_HOST" "$REDIS_PORT" redis
resources: resources:
limits: limits:
memory: "256Mi" memory: "256Mi"
@@ -645,31 +594,15 @@ supersetCeleryFlower:
# @default -- a container waiting for postgres and redis # @default -- a container waiting for postgres and redis
initContainers: initContainers:
- name: wait-for-postgres-redis - name: wait-for-postgres-redis
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}"
imagePullPolicy: "{{ .Values.image.pullPolicy }}" imagePullPolicy: "{{ .Values.initImage.pullPolicy }}"
envFrom: envFrom:
- secretRef: - secretRef:
name: "{{ tpl .Values.envFromSecret . }}" name: "{{ tpl .Values.envFromSecret . }}"
command: command:
- /bin/bash - /bin/sh
- -c - -c
- | - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -wait "tcp://$REDIS_HOST:$REDIS_PORT" -timeout 120s
# See supersetNode.initContainers for the rationale.
SECONDS=0
wait_for() {
local host=$1 port=$2 name=$3
until (exec 3<>/dev/tcp/"$host"/"$port") 2>/dev/null; do
if [ "$SECONDS" -ge 120 ]; then
echo "timeout waiting for $name at $host:$port after 120s" >&2
exit 1
fi
echo "waiting for $name at $host:$port (elapsed ${SECONDS}s)"
sleep 2
done
echo "$name at $host:$port is up"
}
wait_for "$DB_HOST" "$DB_PORT" postgres
wait_for "$REDIS_HOST" "$REDIS_PORT" redis
resources: resources:
limits: limits:
memory: "256Mi" memory: "256Mi"
@@ -831,26 +764,15 @@ init:
# @default -- a container waiting for postgres # @default -- a container waiting for postgres
initContainers: initContainers:
- name: wait-for-postgres - name: wait-for-postgres
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}"
imagePullPolicy: "{{ .Values.image.pullPolicy }}" imagePullPolicy: "{{ .Values.initImage.pullPolicy }}"
envFrom: envFrom:
- secretRef: - secretRef:
name: "{{ tpl .Values.envFromSecret . }}" name: "{{ tpl .Values.envFromSecret . }}"
command: command:
- /bin/bash - /bin/sh
- -c - -c
- | - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -timeout 120s
# See supersetNode.initContainers for the rationale.
SECONDS=0
until (exec 3<>/dev/tcp/"$DB_HOST"/"$DB_PORT") 2>/dev/null; do
if [ "$SECONDS" -ge 120 ]; then
echo "timeout waiting for postgres at $DB_HOST:$DB_PORT after 120s" >&2
exit 1
fi
echo "waiting for postgres at $DB_HOST:$DB_PORT (elapsed ${SECONDS}s)"
sleep 2
done
echo "postgres at $DB_HOST:$DB_PORT is up"
resources: resources:
limits: limits:
memory: "256Mi" memory: "256Mi"

View File

@@ -38,20 +38,14 @@ dependencies = [
# no bounds for apache-superset-core until we have a stable version # no bounds for apache-superset-core until we have a stable version
"apache-superset-core", "apache-superset-core",
"backoff>=1.8.0", "backoff>=1.8.0",
# cachetools is used directly by ``superset.db_engine_specs.aws_iam`` (TTLCache).
# It used to be installed transitively via ``google-auth`` (<2.53), but
# ``google-auth`` 2.53+ dropped it, so Superset must declare it
# explicitly to keep fresh ``pip install apache-superset`` working
# without the ``base.txt`` lock file (#40962).
"cachetools>=6.2.1, <7",
"celery>=5.3.6, <6.0.0", "celery>=5.3.6, <6.0.0",
"click>=8.4.0", "click>=8.4.0",
"click-option-group", "click-option-group",
"colorama", "colorama",
"flask-cors>=6.0.5, <7.0", "flask-cors>=6.0.0, <7.0",
"croniter>=6.2.2", "croniter>=0.3.28",
"cron-descriptor", "cron-descriptor",
"cryptography>=48.0.0, <49.0.0", "cryptography>=42.0.4, <47.0.0",
"deprecation>=2.1.0, <2.2.0", "deprecation>=2.1.0, <2.2.0",
"flask>=2.2.5, <4.0.0", "flask>=2.2.5, <4.0.0",
"flask-appbuilder>=5.2.1, <6.0.0", "flask-appbuilder>=5.2.1, <6.0.0",
@@ -59,11 +53,11 @@ dependencies = [
"flask-compress>=1.13, <2.0", "flask-compress>=1.13, <2.0",
"flask-talisman>=1.0.0, <2.0", "flask-talisman>=1.0.0, <2.0",
"flask-login>=0.6.0, < 1.0", "flask-login>=0.6.0, < 1.0",
"flask-migrate>=4.1.0, <5.0", "flask-migrate>=3.1.0, <5.0",
"flask-session>=0.4.0, <1.0", "flask-session>=0.4.0, <1.0",
"flask-wtf>=1.3.0, <2.0", "flask-wtf>=1.3.0, <2.0",
"geopy", "geopy",
"greenlet<=3.5.1, >=3.5.1", "greenlet>=3.0.3, <=3.5.0",
"gunicorn>=25.3.0, <26; sys_platform != 'win32'", "gunicorn>=25.3.0, <26; sys_platform != 'win32'",
"hashids>=1.3.1, <2", "hashids>=1.3.1, <2",
# holidays>=0.45 required for security fix # holidays>=0.45 required for security fix
@@ -73,12 +67,10 @@ dependencies = [
"jsonpath-ng>=1.8.0, <2", "jsonpath-ng>=1.8.0, <2",
"Mako>=1.2.2", "Mako>=1.2.2",
"markdown>=3.10.2", "markdown>=3.10.2",
# marshmallow 4 compatibility: see superset/marshmallow_compatibility.py for a # marshmallow>=4 has issues: https://github.com/apache/superset/issues/33162
# Flask-AppBuilder workaround. Tracking issue: "marshmallow>=3.0, <4",
# https://github.com/apache/superset/issues/33162
"marshmallow>=3.0, <5",
"marshmallow-union>=0.1", "marshmallow-union>=0.1",
"msgpack>=1.2.0, <1.3", "msgpack>=1.0.0, <1.2",
"nh3>=0.3.5, <0.4", "nh3>=0.3.5, <0.4",
"numpy>1.23.5, <2.3", "numpy>1.23.5, <2.3",
"packaging", "packaging",
@@ -98,14 +90,14 @@ dependencies = [
"python-dotenv", # optional dependencies for Flask but required for Superset, see https://flask.palletsprojects.com/en/stable/installation/#optional-dependencies "python-dotenv", # optional dependencies for Flask but required for Superset, see https://flask.palletsprojects.com/en/stable/installation/#optional-dependencies
"pygeohash", "pygeohash",
"pyarrow>=24.0.0, <25", # before upgrading pyarrow, check that all db dependencies support this, see e.g. https://github.com/apache/superset/pull/34693 "pyarrow>=24.0.0, <25", # before upgrading pyarrow, check that all db dependencies support this, see e.g. https://github.com/apache/superset/pull/34693
"pyyaml>=6.0.3, <7.0.0", "pyyaml>=6.0.0, <7.0.0",
"PyJWT>=2.4.0, <3.0", "PyJWT>=2.4.0, <3.0",
"redis>=5.0.0, <6.0", "redis>=5.0.0, <6.0",
"rison>=2.0.0, <3.0", "rison>=2.0.0, <3.0",
"selenium>=4.44.0, <5.0", "selenium>=4.44.0, <5.0",
"shillelagh[gsheetsapi]>=1.4.4, <2.0", "shillelagh[gsheetsapi]>=1.4.4, <2.0",
"sshtunnel>=0.4.0, <0.5", "sshtunnel>=0.4.0, <0.5",
"simplejson>=4.1.1", "simplejson>=3.15.0",
"slack_sdk>=3.19.0, <4", "slack_sdk>=3.19.0, <4",
"sqlalchemy>=1.4, <2", "sqlalchemy>=1.4, <2",
"sqlalchemy-utils>=0.38.0, <0.43", # expanding lowerbound to work with pydoris "sqlalchemy-utils>=0.38.0, <0.43", # expanding lowerbound to work with pydoris
@@ -149,10 +141,10 @@ drill = ["sqlalchemy-drill>=1.1.10, <2"]
druid = ["pydruid>=0.6.5,<0.7"] druid = ["pydruid>=0.6.5,<0.7"]
duckdb = ["duckdb>=1.5.2,<2", "duckdb-engine>=0.17.0"] duckdb = ["duckdb>=1.5.2,<2", "duckdb-engine>=0.17.0"]
dynamodb = ["pydynamodb>=0.4.2"] dynamodb = ["pydynamodb>=0.4.2"]
solr = ["sqlalchemy-solr >= 0.2.4.3"] solr = ["sqlalchemy-solr >= 0.2.0"]
elasticsearch = ["elasticsearch-dbapi>=0.2.13, <0.3.0"] elasticsearch = ["elasticsearch-dbapi>=0.2.13, <0.3.0"]
exasol = ["sqlalchemy-exasol>=2.4.0, <8.0"] exasol = ["sqlalchemy-exasol>=2.4.0, <8.0"]
excel = ["xlrd>=2.0.2, <2.1"] excel = ["xlrd>=1.2.0, <1.3"]
fastmcp = [ fastmcp = [
"fastmcp>=3.2.4,<4.0", "fastmcp>=3.2.4,<4.0",
# tiktoken backs the response-size-guard token estimator. Without # tiktoken backs the response-size-guard token estimator. Without
@@ -164,7 +156,7 @@ firebird = ["sqlalchemy-firebird>=0.7.0, <2.2"]
firebolt = ["firebolt-sqlalchemy>=1.0.0, <2"] firebolt = ["firebolt-sqlalchemy>=1.0.0, <2"]
gevent = ["gevent>=26.4.0"] gevent = ["gevent>=26.4.0"]
gsheets = ["shillelagh[gsheetsapi]>=1.4.4, <2"] gsheets = ["shillelagh[gsheetsapi]>=1.4.4, <2"]
hana = ["hdbcli==2.28.21", "sqlalchemy_hana==0.4.0"] hana = ["hdbcli==2.28.20", "sqlalchemy_hana==0.4.0"]
hive = [ hive = [
"pyhive[hive]>=0.6.5;python_version<'3.11'", "pyhive[hive]>=0.6.5;python_version<'3.11'",
"pyhive[hive_pure_sasl]>=0.7.0", "pyhive[hive_pure_sasl]>=0.7.0",
@@ -181,17 +173,17 @@ motherduck = ["apache-superset[duckdb]"]
mysql = ["mysqlclient>=2.1.0, <3"] mysql = ["mysqlclient>=2.1.0, <3"]
ocient = [ ocient = [
"sqlalchemy-ocient>=1.0.0", "sqlalchemy-ocient>=1.0.0",
"pyocient>=1.0.15, <4", "pyocient>=1.0.15, <2",
"shapely", "shapely",
"geojson", "geojson",
] ]
oracle = ["oracledb>=2.0.0, <5"] oracle = ["cx-Oracle>8.0.0, <8.4"]
parseable = ["sqlalchemy-parseable>=0.1.3,<0.2.0"] parseable = ["sqlalchemy-parseable>=0.1.3,<0.2.0"]
pinot = ["pinotdb>=5.0.0, <10.0.0"] pinot = ["pinotdb>=5.0.0, <10.0.0"]
playwright = ["playwright>=1.60.0, <2"] playwright = ["playwright>=1.60.0, <2"]
postgres = ["psycopg2-binary==2.9.12"] postgres = ["psycopg2-binary==2.9.12"]
presto = ["pyhive[presto]>=0.6.5"] presto = ["pyhive[presto]>=0.6.5"]
trino = ["trino>=0.337.0"] trino = ["trino>=0.328.0"]
prophet = ["prophet>=1.1.6, <2"] prophet = ["prophet>=1.1.6, <2"]
redshift = ["sqlalchemy-redshift>=0.8.1, <0.9"] redshift = ["sqlalchemy-redshift>=0.8.1, <0.9"]
risingwave = ["sqlalchemy-risingwave"] risingwave = ["sqlalchemy-risingwave"]
@@ -216,7 +208,7 @@ netezza = ["nzalchemy>=11.0.2"]
starrocks = ["starrocks>=1.3.3, <2"] starrocks = ["starrocks>=1.3.3, <2"]
doris = ["pydoris>=1.0.0, <2.0.0"] doris = ["pydoris>=1.0.0, <2.0.0"]
oceanbase = ["oceanbase_py>=0.0.1.2"] oceanbase = ["oceanbase_py>=0.0.1.2"]
ydb = ["ydb-sqlalchemy>=0.1.22", "ydb-sqlglot-plugin>=0.2.5"] ydb = ["ydb-sqlalchemy>=0.1.2", "ydb-sqlglot-plugin>=0.2.5"]
development = [ development = [
# no bounds for apache-superset-extensions-cli until a stable version # no bounds for apache-superset-extensions-cli until a stable version
"apache-superset-extensions-cli", "apache-superset-extensions-cli",
@@ -224,7 +216,7 @@ development = [
"docker", "docker",
"flask-testing", "flask-testing",
"freezegun", "freezegun",
"grpcio>=1.81.1", "grpcio>=1.55.3",
"openapi-spec-validator", "openapi-spec-validator",
"parameterized", "parameterized",
"pip", "pip",
@@ -375,6 +367,7 @@ select = [
ignore = [ ignore = [
"S101", "S101",
"PT004", # Fixtures that don't return values - underscore prefix conflicts with pytest usage
"PT006", "PT006",
"T201", "T201",
"N999", "N999",

View File

@@ -18,30 +18,5 @@
testpaths = testpaths =
tests tests
python_files = *_test.py test_*.py *_tests.py *viz/utils.py python_files = *_test.py test_*.py *_tests.py *viz/utils.py
# `-p no:warnings` temporarily disabled in favor of more finely tuned `filterwarnings`. addopts = -p no:warnings
#addopts = -p no:warnings
asyncio_mode = auto asyncio_mode = auto
# `ignore` is effectively equivalent to `-p no:warnings`.
# Always print RemovedIn20Warning when SQLALCHEMY_WARN_20=1.
# Additionally, raise errors for refactored RemovedIn20Warning cases to prevent regression.
filterwarnings =
ignore
always::sqlalchemy.exc.RemovedIn20Warning
error:Passing a string to Connection.execute\(\) is deprecated:sqlalchemy.exc.RemovedIn20Warning
# error:"Query" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
# error:"SavedQuery" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
# error:"SqlaTable" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
# error:"SqlMetric" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
# error:"TableColumn" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
# error:"TaggedObject" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
# error:The ``as_declarative\(\)`` function is now available:sqlalchemy.exc.RemovedIn20Warning
# error:The autoload parameter is deprecated:sqlalchemy.exc.RemovedIn20Warning
# error:The connection.execute\(\) method:sqlalchemy.exc.RemovedIn20Warning
# error:The current statement is being autocommitted using implicit autocommit:sqlalchemy.exc.RemovedIn20Warning
# error:The `database` package is deprecated:sqlalchemy.exc.RemovedIn20Warning
# error:The ``declarative_base\(\)`` function is now available:sqlalchemy.exc.RemovedIn20Warning
# error:The Engine.execute\(\) method is considered legacy:sqlalchemy.exc.RemovedIn20Warning
error:The legacy calling style of select\(\) is deprecated:sqlalchemy.exc.RemovedIn20Warning
# error:The "whens" argument to case:sqlalchemy.exc.RemovedIn20Warning
# error:"User" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning

View File

@@ -26,7 +26,7 @@ filelock>=3.20.3,<4.0.0
brotli>=1.2.0,<2.0.0 brotli>=1.2.0,<2.0.0
numexpr>=2.9.0 numexpr>=2.9.0
# Security: CVE-2026-34073 (MEDIUM) - Improper Certificate Validation # Security: CVE-2026-34073 (MEDIUM) - Improper Certificate Validation
cryptography>=48.0.0,<49.0.0 cryptography>=46.0.7,<47.0.0
# Security: Snyk - XSS vulnerability in Mako templates # Security: Snyk - XSS vulnerability in Mako templates
mako>=1.3.11,<2.0.0 mako>=1.3.11,<2.0.0
# Security: CVE-2024-52338 (CRITICAL) - Deserialization of untrusted data in IPC/Parquet readers # Security: CVE-2024-52338 (CRITICAL) - Deserialization of untrusted data in IPC/Parquet readers
@@ -44,10 +44,11 @@ async_timeout>=4.0.0,<5.0.0
# a bit of attention to bump. # a bit of attention to bump.
apispec>=6.0.0,<6.7.0 apispec>=6.0.0,<6.7.0
# 1.4.1 introduced a memory regression that exhausts memory in the test suite # 1.4.1 appears to use much more memory, where the python test suite runs out of memory
# (https://github.com/marshmallow-code/marshmallow-sqlalchemy/issues/665). 1.4.2 # causing CI to fail. 1.4.0 is the last version that works.
# claimed a fix but did not address the root cause; only 1.5.0 actually fixes it. # https://marshmallow-sqlalchemy.readthedocs.io/en/latest/changelog.html#id3
marshmallow-sqlalchemy>=1.5.0 # Opened this issue https://github.com/marshmallow-code/marshmallow-sqlalchemy/issues/665
marshmallow-sqlalchemy>=1.3.0,<1.4.1
# needed for python 3.12 support # needed for python 3.12 support
openapi-schema-validator>=0.6.3 openapi-schema-validator>=0.6.3
@@ -57,9 +58,3 @@ openapi-schema-validator>=0.6.3
# Known affected packages: Preset's 'clients' package # Known affected packages: Preset's 'clients' package
# See docs/docs/contributing/pkg-resources-migration.md for details # See docs/docs/contributing/pkg-resources-migration.md for details
setuptools<81 setuptools<81
# google-auth 2.53+ dropped its transitive dependency on cachetools, which is
# imported directly by superset.db_engine_specs.aws_iam. We declare cachetools
# explicitly in pyproject.toml and pin google-auth to the post-drop range so
# the install path is internally consistent (#40962).
google-auth>=2.53.0,<3.0.0

View File

@@ -45,7 +45,7 @@ cachelib==0.13.0
# flask-caching # flask-caching
# flask-session # flask-session
cachetools==6.2.1 cachetools==6.2.1
# via apache-superset (pyproject.toml) # via google-auth
cattrs==25.1.1 cattrs==25.1.1
# via requests-cache # via requests-cache
celery==5.5.2 celery==5.5.2
@@ -84,13 +84,12 @@ colorama==0.4.6
# flask-appbuilder # flask-appbuilder
cron-descriptor==1.4.5 cron-descriptor==1.4.5
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
croniter==6.2.2 croniter==6.0.0
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
cryptography==48.0.1 cryptography==46.0.7
# via # via
# -r requirements/base.in # -r requirements/base.in
# apache-superset (pyproject.toml) # apache-superset (pyproject.toml)
# google-auth
# paramiko # paramiko
# pyopenssl # pyopenssl
defusedxml==0.7.1 defusedxml==0.7.1
@@ -132,7 +131,7 @@ flask-caching==2.3.1
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
flask-compress==1.17 flask-compress==1.17
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
flask-cors==6.0.5 flask-cors==6.0.2
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
flask-jwt-extended==4.7.1 flask-jwt-extended==4.7.1
# via flask-appbuilder # via flask-appbuilder
@@ -142,7 +141,7 @@ flask-login==0.6.3
# via # via
# apache-superset (pyproject.toml) # apache-superset (pyproject.toml)
# flask-appbuilder # flask-appbuilder
flask-migrate==4.1.0 flask-migrate==3.1.0
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
flask-session==0.8.0 flask-session==0.8.0
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
@@ -160,11 +159,9 @@ geographiclib==2.0
# via geopy # via geopy
geopy==2.4.1 geopy==2.4.1
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
google-auth==2.53.0 google-auth==2.43.0
# via # via shillelagh
# -r requirements/base.in greenlet==3.5.0
# shillelagh
greenlet==3.5.1
# via # via
# apache-superset (pyproject.toml) # apache-superset (pyproject.toml)
# shillelagh # shillelagh
@@ -226,13 +223,13 @@ markupsafe==3.0.2
# mako # mako
# werkzeug # werkzeug
# wtforms # wtforms
marshmallow==4.3.0 marshmallow==3.26.2
# via # via
# apache-superset (pyproject.toml) # apache-superset (pyproject.toml)
# flask-appbuilder # flask-appbuilder
# marshmallow-sqlalchemy # marshmallow-sqlalchemy
# marshmallow-union # marshmallow-union
marshmallow-sqlalchemy==1.5.0 marshmallow-sqlalchemy==1.4.0
# via # via
# -r requirements/base.in # -r requirements/base.in
# flask-appbuilder # flask-appbuilder
@@ -240,7 +237,7 @@ marshmallow-union==0.1.15
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
mdurl==0.1.2 mdurl==0.1.2
# via markdown-it-py # via markdown-it-py
msgpack==1.2.1 msgpack==1.0.8
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
msgspec==0.19.0 msgspec==0.19.0
# via flask-session # via flask-session
@@ -273,6 +270,7 @@ packaging==25.0
# deprecation # deprecation
# gunicorn # gunicorn
# limits # limits
# marshmallow
# shillelagh # shillelagh
pandas==2.1.4 pandas==2.1.4
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
@@ -300,7 +298,9 @@ pyarrow==24.0.0
# apache-superset (pyproject.toml) # apache-superset (pyproject.toml)
# apache-superset-core # apache-superset-core
pyasn1==0.6.3 pyasn1==0.6.3
# via pyasn1-modules # via
# pyasn1-modules
# rsa
pyasn1-modules==0.4.2 pyasn1-modules==0.4.2
# via google-auth # via google-auth
pycparser==2.22 pycparser==2.22
@@ -323,7 +323,7 @@ pyjwt==2.12.0
# redis # redis
pynacl==1.6.2 pynacl==1.6.2
# via paramiko # via paramiko
pyopenssl==26.2.0 pyopenssl==26.0.0
# via # via
# -r requirements/base.in # -r requirements/base.in
# shillelagh # shillelagh
@@ -344,11 +344,12 @@ python-dotenv==1.2.2
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
pytz==2025.2 pytz==2025.2
# via # via
# croniter
# flask-babel # flask-babel
# pandas # pandas
pyxlsb==1.0.10 pyxlsb==1.0.10
# via pandas # via pandas
pyyaml==6.0.3 pyyaml==6.0.2
# via # via
# apache-superset (pyproject.toml) # apache-superset (pyproject.toml)
# apispec # apispec
@@ -375,13 +376,15 @@ rpds-py==0.25.0
# via # via
# jsonschema # jsonschema
# referencing # referencing
rsa==4.9.1
# via google-auth
selenium==4.44.0 selenium==4.44.0
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
setuptools==80.9.0 setuptools==80.9.0
# via -r requirements/base.in # via -r requirements/base.in
shillelagh==1.4.4 shillelagh==1.4.4
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
simplejson==4.1.1 simplejson==3.20.1
# via apache-superset (pyproject.toml) # via apache-superset (pyproject.toml)
six==1.17.0 six==1.17.0
# via # via

View File

@@ -100,7 +100,7 @@ cachelib==0.13.0
cachetools==6.2.1 cachetools==6.2.1
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # google-auth
# py-key-value-aio # py-key-value-aio
caio==0.9.25 caio==0.9.25
# via aiofile # via aiofile
@@ -174,16 +174,15 @@ cron-descriptor==1.4.5
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
croniter==6.2.2 croniter==6.0.0
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
cryptography==48.0.1 cryptography==46.0.7
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
# authlib # authlib
# google-auth
# paramiko # paramiko
# pyjwt # pyjwt
# pyopenssl # pyopenssl
@@ -277,7 +276,7 @@ flask-compress==1.17
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
flask-cors==6.0.5 flask-cors==6.0.2
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
@@ -294,7 +293,7 @@ flask-login==0.6.3
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
# flask-appbuilder # flask-appbuilder
flask-migrate==4.1.0 flask-migrate==3.1.0
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
@@ -341,7 +340,7 @@ google-api-core==2.23.0
# google-cloud-core # google-cloud-core
# pandas-gbq # pandas-gbq
# sqlalchemy-bigquery # sqlalchemy-bigquery
google-auth==2.53.0 google-auth==2.43.0
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# google-api-core # google-api-core
@@ -374,7 +373,7 @@ googleapis-common-protos==1.66.0
# via # via
# google-api-core # google-api-core
# grpcio-status # grpcio-status
greenlet==3.5.1 greenlet==3.5.0
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
@@ -383,7 +382,7 @@ greenlet==3.5.1
# sqlalchemy # sqlalchemy
griffelib==2.0.2 griffelib==2.0.2
# via fastmcp # via fastmcp
grpcio==1.81.1 grpcio==1.71.0
# via # via
# apache-superset # apache-superset
# google-api-core # google-api-core
@@ -508,8 +507,6 @@ limits==5.1.0
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# flask-limiter # flask-limiter
lz4==4.4.5
# via trino
mako==1.3.12 mako==1.3.12
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
@@ -530,14 +527,14 @@ markupsafe==3.0.2
# mako # mako
# werkzeug # werkzeug
# wtforms # wtforms
marshmallow==4.3.0 marshmallow==3.26.2
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
# flask-appbuilder # flask-appbuilder
# marshmallow-sqlalchemy # marshmallow-sqlalchemy
# marshmallow-union # marshmallow-union
marshmallow-sqlalchemy==1.5.0 marshmallow-sqlalchemy==1.4.0
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# flask-appbuilder # flask-appbuilder
@@ -559,7 +556,7 @@ more-itertools==10.8.0
# via # via
# jaraco-classes # jaraco-classes
# jaraco-functools # jaraco-functools
msgpack==1.2.1 msgpack==1.0.8
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
@@ -611,8 +608,6 @@ ordered-set==4.1.0
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# flask-limiter # flask-limiter
orjson==3.11.9
# via trino
outcome==1.3.0.post0 outcome==1.3.0.post0
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
@@ -631,6 +626,7 @@ packaging==25.0
# google-cloud-bigquery # google-cloud-bigquery
# gunicorn # gunicorn
# limits # limits
# marshmallow
# matplotlib # matplotlib
# pytest # pytest
# shillelagh # shillelagh
@@ -727,6 +723,7 @@ pyasn1==0.6.3
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# pyasn1-modules # pyasn1-modules
# python-ldap # python-ldap
# rsa
pyasn1-modules==0.4.2 pyasn1-modules==0.4.2
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
@@ -783,7 +780,7 @@ pynacl==1.6.2
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# paramiko # paramiko
pyopenssl==26.2.0 pyopenssl==26.0.0
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# shillelagh # shillelagh
@@ -844,6 +841,7 @@ python-multipart==0.0.29
pytz==2025.2 pytz==2025.2
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# croniter
# flask-babel # flask-babel
# pandas # pandas
# trino # trino
@@ -851,7 +849,7 @@ pyxlsb==1.0.10
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# pandas # pandas
pyyaml==6.0.3 pyyaml==6.0.2
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
@@ -913,6 +911,10 @@ rpds-py==0.25.0
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# jsonschema # jsonschema
# referencing # referencing
rsa==4.9.1
# via
# -c requirements/base-constraint.txt
# google-auth
ruff==0.9.7 ruff==0.9.7
# via apache-superset # via apache-superset
s3transfer==0.16.0 s3transfer==0.16.0
@@ -937,7 +939,7 @@ shillelagh==1.4.4
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
simplejson==4.1.1 simplejson==3.20.1
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# apache-superset # apache-superset
@@ -1015,7 +1017,7 @@ tqdm==4.67.1
# via # via
# cmdstanpy # cmdstanpy
# prophet # prophet
trino==0.337.0 trino==0.330.0
# via apache-superset # via apache-superset
trio==0.33.0 trio==0.33.0
# via # via
@@ -1035,7 +1037,6 @@ typing-extensions==4.15.0
# apache-superset-core # apache-superset-core
# cattrs # cattrs
# exceptiongroup # exceptiongroup
# grpcio
# limits # limits
# mcp # mcp
# opentelemetry-api # opentelemetry-api
@@ -1150,4 +1151,3 @@ zstandard==0.23.0
# via # via
# -c requirements/base-constraint.txt # -c requirements/base-constraint.txt
# flask-compress # flask-compress
# trino

View File

@@ -30,7 +30,7 @@ from flask import current_app
from flask_appbuilder import Model from flask_appbuilder import Model
from flask_migrate import downgrade, upgrade from flask_migrate import downgrade, upgrade
from progress.bar import ChargingBar from progress.bar import ChargingBar
from sqlalchemy import create_engine, inspect, text from sqlalchemy import create_engine, inspect
from sqlalchemy.ext.automap import automap_base from sqlalchemy.ext.automap import automap_base
from superset import db from superset import db
@@ -154,7 +154,7 @@ def main( # noqa: C901
print(f"Migration goes from {down_revision} to {revision}") print(f"Migration goes from {down_revision} to {revision}")
current_revision = db.engine.execute( current_revision = db.engine.execute(
text("SELECT version_num FROM alembic_version") "SELECT version_num FROM alembic_version"
).scalar() ).scalar()
print(f"Current version of the DB is {current_revision}") print(f"Current version of the DB is {current_revision}")

View File

@@ -106,7 +106,6 @@ LANGUAGE_NAMES: dict[str, str] = {
"ru": "Russian", "ru": "Russian",
"sk": "Slovak", "sk": "Slovak",
"sl": "Slovenian", "sl": "Slovenian",
"sr": "Serbian",
"tr": "Turkish", "tr": "Turkish",
"uk": "Ukrainian", "uk": "Ukrainian",
"zh": "Chinese (Simplified)", "zh": "Chinese (Simplified)",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@superset-ui/embedded-sdk", "name": "@superset-ui/embedded-sdk",
"version": "0.4.0", "version": "0.3.0",
"description": "SDK for embedding resources from Superset into your own application", "description": "SDK for embedding resources from Superset into your own application",
"access": "public", "access": "public",
"keywords": [ "keywords": [

View File

@@ -47,11 +47,7 @@ function logError(...args) {
execSync('npm publish --access public', { stdio: 'pipe' }); execSync('npm publish --access public', { stdio: 'pipe' });
log(`published ${version} to npm`); log(`published ${version} to npm`);
} catch (err) { } catch (err) {
// npm writes failure details to stderr (auth/permission/registry console.error(String(err.stdout));
// errors in particular), so surface both streams to avoid masking
// the real cause in CI logs.
if (err.stdout) console.error(String(err.stdout));
if (err.stderr) console.error(String(err.stderr));
logError('Encountered an error, details should be above'); logError('Encountered an error, details should be above');
process.exitCode = 1; process.exitCode = 1;
} }

View File

@@ -107,13 +107,7 @@ module.exports = {
[ [
'babel-plugin-jsx-remove-data-test-id', 'babel-plugin-jsx-remove-data-test-id',
{ {
// The plugin matches attribute names exactly (no prefix match), attributes: 'data-test',
// so each data-test* attribute must be listed explicitly.
attributes: [
'data-test',
'data-test-drag-source-id',
'data-test-drop-target-id',
],
}, },
], ],
], ],

View File

@@ -69,7 +69,7 @@ module.exports = {
], ],
coverageReporters: ['lcov', 'json-summary', 'html', 'text'], coverageReporters: ['lcov', 'json-summary', 'html', 'text'],
transformIgnorePatterns: [ transformIgnorePatterns: [
'node_modules/(?!@formatjs/.*|d3-(array|interpolate|color|time|scale|time-format|format)|internmap|@mapbox/tiny-sdf|remark-gfm|(?!@ngrx|(?!deck.gl)|d3-scale)|markdown-table|micromark-*.|decode-named-character-reference|character-entities|mdast-util-*.|unist-util-*.|ccount|escape-string-regexp|nanoid|uuid|@rjsf/*.|echarts|zrender|fetch-mock|pretty-ms|parse-ms|ol|@babel/runtime|@emotion|cheerio|cheerio/lib|parse5|dom-serializer|entities|htmlparser2|rehype-sanitize|hast-util-sanitize|unified|unist-.*|hast-.*|rehype-.*|remark-.*|mdast-.*|micromark-.*|parse-entities|property-information|space-separated-tokens|comma-separated-tokens|bail|devlop|zwitch|longest-streak|geostyler|geostyler-.*|(?!geostyler)lodash|react-error-boundary|react-json-tree|react-base16-styling|lodash-es|rbush|quickselect|react-diff-viewer-continued|storybook/*.|json-stringify-pretty-compact)', 'node_modules/(?!@formatjs/.*|d3-(array|interpolate|color|time|scale|time-format|format)|internmap|@mapbox/tiny-sdf|remark-gfm|(?!@ngrx|(?!deck.gl)|d3-scale)|markdown-table|micromark-*.|decode-named-character-reference|character-entities|mdast-util-*.|unist-util-*.|ccount|escape-string-regexp|nanoid|uuid|@rjsf/*.|echarts|zrender|fetch-mock|pretty-ms|parse-ms|ol|@babel/runtime|@emotion|cheerio|cheerio/lib|parse5|dom-serializer|entities|htmlparser2|rehype-sanitize|hast-util-sanitize|unified|unist-.*|hast-.*|rehype-.*|remark-.*|mdast-.*|micromark-.*|parse-entities|property-information|space-separated-tokens|comma-separated-tokens|bail|devlop|zwitch|longest-streak|geostyler|geostyler-.*|(?!geostyler)lodash|react-error-boundary|react-json-tree|react-base16-styling|lodash-es|rbush|quickselect|react-diff-viewer-continued|storybook/*.)',
], ],
preset: 'ts-jest', preset: 'ts-jest',
transform: { transform: {

File diff suppressed because it is too large Load Diff

View File

@@ -119,7 +119,7 @@
"@great-expectations/jsonforms-antd-renderers": "^2.2.10", "@great-expectations/jsonforms-antd-renderers": "^2.2.10",
"@jsonforms/core": "^3.7.0", "@jsonforms/core": "^3.7.0",
"@jsonforms/react": "^3.7.0", "@jsonforms/react": "^3.7.0",
"@jsonforms/vanilla-renderers": "^3.8.0", "@jsonforms/vanilla-renderers": "^3.7.0",
"@luma.gl/constants": "~9.2.5", "@luma.gl/constants": "~9.2.5",
"@luma.gl/core": "~9.2.5", "@luma.gl/core": "~9.2.5",
"@luma.gl/engine": "~9.2.5", "@luma.gl/engine": "~9.2.5",
@@ -158,57 +158,58 @@
"@types/d3-selection": "^3.0.11", "@types/d3-selection": "^3.0.11",
"@types/d3-time-format": "^4.0.3", "@types/d3-time-format": "^4.0.3",
"@types/react-google-recaptcha": "^2.1.9", "@types/react-google-recaptcha": "^2.1.9",
"@visx/axis": "^4.0.0", "@visx/axis": "^3.8.0",
"@visx/grid": "^4.0.0", "@visx/grid": "^3.5.0",
"@visx/responsive": "^4.0.0", "@visx/responsive": "^3.0.0",
"@visx/scale": "^4.0.0", "@visx/scale": "^3.5.0",
"@visx/tooltip": "^4.0.0", "@visx/tooltip": "^3.0.0",
"@visx/xychart": "^4.0.0", "@visx/xychart": "^3.5.1",
"ag-grid-community": "35.3.1", "ag-grid-community": "35.3.1",
"ag-grid-react": "35.3.1", "ag-grid-react": "35.3.1",
"antd": "^5.26.0", "antd": "^5.26.0",
"chrono-node": "^2.9.1", "chrono-node": "^2.9.1",
"classnames": "^2.2.5", "classnames": "^2.2.5",
"content-disposition": "^2.0.1", "content-disposition": "^2.0.1",
"d3-color": "^3.1.0",
"d3-scale": "^4.0.2", "d3-scale": "^4.0.2",
"dayjs": "^1.11.21", "dayjs": "^1.11.21",
"dom-to-image-more": "^3.10.0", "dom-to-image-more": "^3.7.2",
"dom-to-pdf": "^0.3.2", "dom-to-pdf": "^0.3.2",
"echarts": "^5.6.0", "echarts": "^5.6.0",
"fast-glob": "^3.3.2", "fast-glob": "^3.3.2",
"fs-extra": "^11.3.5", "fs-extra": "^11.3.5",
"fuse.js": "^7.4.2", "fuse.js": "^7.4.1",
"geolib": "^3.3.14", "geolib": "^3.3.14",
"geostyler": "^18.6.0", "geostyler": "^18.6.0",
"geostyler-data": "^1.1.0", "geostyler-data": "^1.1.0",
"geostyler-openlayers-parser": "^5.7.0", "geostyler-openlayers-parser": "^5.7.0",
"geostyler-style": "11.0.2", "geostyler-style": "11.0.2",
"geostyler-wfs-parser": "^3.0.1", "geostyler-wfs-parser": "^3.0.1",
"google-auth-library": "^10.7.0", "google-auth-library": "^10.6.2",
"immer": "^11.1.8", "immer": "^11.1.8",
"interweave": "^13.1.1", "interweave": "^13.1.1",
"jquery": "^4.0.0", "jquery": "^4.0.0",
"js-levenshtein": "^1.1.6", "js-levenshtein": "^1.1.6",
"json-bigint": "^1.0.0", "json-bigint": "^1.0.0",
"json-stringify-pretty-compact": "^4.0.0", "json-stringify-pretty-compact": "^2.0.0",
"lodash": "^4.18.1", "lodash": "^4.18.1",
"mapbox-gl": "^3.24.1", "mapbox-gl": "^3.24.0",
"markdown-to-jsx": "^9.8.2", "markdown-to-jsx": "^9.8.1",
"match-sorter": "^8.3.0", "match-sorter": "^8.3.0",
"memoize-one": "^6.0.0", "memoize-one": "^5.2.1",
"mousetrap": "^1.6.5", "mousetrap": "^1.6.5",
"mustache": "^4.2.0", "mustache": "^4.2.0",
"nanoid": "^5.1.11", "nanoid": "^5.1.11",
"ol": "^10.9.0", "ol": "^10.9.0",
"query-string": "9.4.0", "query-string": "9.4.0",
"re-resizable": "^6.11.2", "re-resizable": "^6.11.2",
"react": "^18.3.0", "react": "^18.2.0",
"react-arborist": "^3.10.5", "react-arborist": "^3.10.1",
"react-checkbox-tree": "^1.8.0", "react-checkbox-tree": "^1.8.0",
"react-diff-viewer-continued": "^4.2.2", "react-diff-viewer-continued": "^4.2.2",
"react-dnd": "^11.1.3", "react-dnd": "^11.1.3",
"react-dnd-html5-backend": "^11.1.3", "react-dnd-html5-backend": "^11.1.3",
"react-dom": "^18.3.0", "react-dom": "^18.2.0",
"react-google-recaptcha": "^3.1.0", "react-google-recaptcha": "^3.1.0",
"react-intersection-observer": "^10.0.3", "react-intersection-observer": "^10.0.3",
"react-json-tree": "^0.20.0", "react-json-tree": "^0.20.0",
@@ -230,9 +231,9 @@
"redux-undo": "^1.0.0-beta9-9-7", "redux-undo": "^1.0.0-beta9-9-7",
"rison": "^0.1.1", "rison": "^0.1.1",
"scroll-into-view-if-needed": "^3.1.0", "scroll-into-view-if-needed": "^3.1.0",
"simple-zstd": "^2.1.0", "simple-zstd": "^1.4.2",
"stream-browserify": "^3.0.0", "stream-browserify": "^3.0.0",
"tinycolor2": "^1.6.0", "tinycolor2": "^1.4.2",
"urijs": "^1.19.8", "urijs": "^1.19.8",
"use-event-callback": "^0.1.0", "use-event-callback": "^0.1.0",
"use-immer": "^0.11.0", "use-immer": "^0.11.0",
@@ -260,17 +261,17 @@
"@babel/types": "^7.29.7", "@babel/types": "^7.29.7",
"@emotion/babel-plugin": "^11.13.5", "@emotion/babel-plugin": "^11.13.5",
"@emotion/jest": "^11.14.2", "@emotion/jest": "^11.14.2",
"@formatjs/intl-durationformat": "^0.10.15", "@formatjs/intl-durationformat": "^0.10.13",
"@istanbuljs/nyc-config-typescript": "^1.0.1", "@istanbuljs/nyc-config-typescript": "^1.0.1",
"@playwright/test": "^1.61.0", "@playwright/test": "^1.60.0",
"@pmmmwh/react-refresh-webpack-plugin": "^0.6.2", "@pmmmwh/react-refresh-webpack-plugin": "^0.6.2",
"@storybook/addon-docs": "10.4.5", "@storybook/addon-docs": "10.4.2",
"@storybook/addon-links": "10.4.4", "@storybook/addon-links": "10.4.2",
"@storybook/react-webpack5": "10.4.4", "@storybook/react-webpack5": "10.4.2",
"@storybook/test-runner": "0.24.4", "@storybook/test-runner": "0.24.4",
"@svgr/webpack": "^8.1.0", "@svgr/webpack": "^8.1.0",
"@swc/core": "^1.15.41", "@swc/core": "^1.15.40",
"@swc/plugin-emotion": "^14.13.0", "@swc/plugin-emotion": "^14.12.0",
"@swc/plugin-transform-imports": "^12.5.0", "@swc/plugin-transform-imports": "^12.5.0",
"@testing-library/dom": "^9.3.4", "@testing-library/dom": "^9.3.4",
"@testing-library/jest-dom": "^6.9.1", "@testing-library/jest-dom": "^6.9.1",
@@ -283,9 +284,9 @@
"@types/js-levenshtein": "^1.1.3", "@types/js-levenshtein": "^1.1.3",
"@types/json-bigint": "^1.0.4", "@types/json-bigint": "^1.0.4",
"@types/mousetrap": "^1.6.15", "@types/mousetrap": "^1.6.15",
"@types/node": "^25.9.3", "@types/node": "^25.9.2",
"@types/react": "^18.3.0", "@types/react": "^18.2.0",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.2.0",
"@types/react-loadable": "^5.5.11", "@types/react-loadable": "^5.5.11",
"@types/react-redux": "^7.1.10", "@types/react-redux": "^7.1.10",
"@types/react-router-dom": "^5.3.3", "@types/react-router-dom": "^5.3.3",
@@ -296,21 +297,21 @@
"@types/rison": "0.1.0", "@types/rison": "0.1.0",
"@types/tinycolor2": "^1.4.3", "@types/tinycolor2": "^1.4.3",
"@types/unzipper": "^0.10.11", "@types/unzipper": "^0.10.11",
"@typescript-eslint/eslint-plugin": "^8.61.1", "@typescript-eslint/eslint-plugin": "^8.61.0",
"@typescript-eslint/parser": "^8.61.0", "@typescript-eslint/parser": "^8.61.0",
"babel-jest": "^30.4.1", "babel-jest": "^30.4.1",
"babel-loader": "^10.1.1", "babel-loader": "^10.1.1",
"babel-plugin-dynamic-import-node": "^2.3.3", "babel-plugin-dynamic-import-node": "^2.3.3",
"babel-plugin-jsx-remove-data-test-id": "^3.0.0", "babel-plugin-jsx-remove-data-test-id": "^3.0.0",
"babel-plugin-lodash": "^3.3.4", "babel-plugin-lodash": "^3.3.4",
"baseline-browser-mapping": "^2.10.37", "baseline-browser-mapping": "^2.10.34",
"cheerio": "1.2.0", "cheerio": "1.2.0",
"concurrently": "^10.0.3", "concurrently": "^10.0.3",
"copy-webpack-plugin": "^14.0.0", "copy-webpack-plugin": "^14.0.0",
"cross-env": "^10.1.0", "cross-env": "^10.1.0",
"css-loader": "^7.1.4", "css-loader": "^7.1.4",
"css-minimizer-webpack-plugin": "^8.0.0", "css-minimizer-webpack-plugin": "^8.0.0",
"eslint": "^10.5.0", "eslint": "^10.4.1",
"eslint-config-prettier": "^10.1.8", "eslint-config-prettier": "^10.1.8",
"eslint-import-resolver-alias": "^1.1.2", "eslint-import-resolver-alias": "^1.1.2",
"eslint-import-resolver-typescript": "^4.4.5", "eslint-import-resolver-typescript": "^4.4.5",
@@ -323,8 +324,8 @@
"eslint-plugin-no-only-tests": "^3.4.0", "eslint-plugin-no-only-tests": "^3.4.0",
"eslint-plugin-prettier": "^5.5.6", "eslint-plugin-prettier": "^5.5.6",
"eslint-plugin-react-prefer-function-component": "^5.0.0", "eslint-plugin-react-prefer-function-component": "^5.0.0",
"eslint-plugin-react-you-might-not-need-an-effect": "^1.0.1", "eslint-plugin-react-you-might-not-need-an-effect": "^1.0.0",
"eslint-plugin-storybook": "10.4.5", "eslint-plugin-storybook": "10.4.2",
"eslint-plugin-testing-library": "^7.16.2", "eslint-plugin-testing-library": "^7.16.2",
"eslint-plugin-theme-colors": "file:eslint-rules/eslint-plugin-theme-colors", "eslint-plugin-theme-colors": "file:eslint-rules/eslint-plugin-theme-colors",
"fetch-mock": "^12.6.0", "fetch-mock": "^12.6.0",
@@ -343,19 +344,18 @@
"lightningcss": "^1.32.0", "lightningcss": "^1.32.0",
"mini-css-extract-plugin": "^2.10.2", "mini-css-extract-plugin": "^2.10.2",
"open-cli": "^9.0.0", "open-cli": "^9.0.0",
"oxlint": "^1.70.0", "oxlint": "^1.68.0",
"po2json": "^0.4.5", "po2json": "^0.4.5",
"prettier": "3.8.4", "prettier": "3.8.3",
"prettier-plugin-packagejson": "^3.0.2", "prettier-plugin-packagejson": "^3.0.2",
"process": "^0.11.10", "process": "^0.11.10",
"react-dnd-test-backend": "^16.0.1",
"react-refresh": "^0.18.0", "react-refresh": "^0.18.0",
"react-resizable": "^4.0.1", "react-resizable": "^4.0.1",
"redux-mock-store": "^1.5.4", "redux-mock-store": "^1.5.4",
"source-map": "^0.7.6", "source-map": "^0.7.6",
"source-map-support": "^0.5.21", "source-map-support": "^0.5.21",
"speed-measure-webpack-plugin": "^1.6.0", "speed-measure-webpack-plugin": "^1.6.0",
"storybook": "10.4.6", "storybook": "10.4.2",
"style-loader": "^4.0.0", "style-loader": "^4.0.0",
"swc-loader": "^0.2.7", "swc-loader": "^0.2.7",
"terser-webpack-plugin": "^5.6.1", "terser-webpack-plugin": "^5.6.1",
@@ -369,7 +369,7 @@
"webpack": "^5.107.2", "webpack": "^5.107.2",
"webpack-bundle-analyzer": "^5.3.0", "webpack-bundle-analyzer": "^5.3.0",
"webpack-cli": "^7.0.3", "webpack-cli": "^7.0.3",
"webpack-dev-server": "^5.2.5", "webpack-dev-server": "^5.2.4",
"webpack-manifest-plugin": "^6.0.1", "webpack-manifest-plugin": "^6.0.1",
"webpack-sources": "^3.5.0", "webpack-sources": "^3.5.0",
"webpack-visualizer-plugin2": "^2.0.0" "webpack-visualizer-plugin2": "^2.0.0"

View File

@@ -37,7 +37,7 @@
"cross-env": "^10.1.0", "cross-env": "^10.1.0",
"fs-extra": "^11.3.5", "fs-extra": "^11.3.5",
"jest": "^30.4.2", "jest": "^30.4.2",
"yeoman-test": "^11.6.0" "yeoman-test": "^11.5.2"
}, },
"engines": { "engines": {
"npm": ">= 4.0.0", "npm": ">= 4.0.0",

View File

@@ -97,8 +97,8 @@
"@fontsource/ibm-plex-mono": "^5.2.7", "@fontsource/ibm-plex-mono": "^5.2.7",
"@fontsource/inter": "^5.2.6", "@fontsource/inter": "^5.2.6",
"nanoid": "^5.0.9", "nanoid": "^5.0.9",
"react": "^18.3.0", "react": "^18.2.0",
"react-dom": "^18.3.0", "react-dom": "^18.2.0",
"react-loadable": "^5.5.0", "react-loadable": "^5.5.0",
"tinycolor2": "*", "tinycolor2": "*",
"lodash": "^4.18.1", "lodash": "^4.18.1",

View File

@@ -16,26 +16,13 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
export {}; // ensure this file is treated as a module so top-level declarations don't leak into global scope
type LoggingModule = typeof import('./index');
const loadLogging = (): LoggingModule['logging'] => {
let logging: LoggingModule['logging'] | undefined;
jest.isolateModules(() => {
({ logging } = jest.requireActual<LoggingModule>(
'@apache-superset/core/utils',
));
});
return logging!;
};
beforeEach(() => { beforeEach(() => {
jest.resetModules();
jest.resetAllMocks(); jest.resetAllMocks();
}); });
test('should pipe to `console` methods', () => { test('should pipe to `console` methods', () => {
const logging = loadLogging(); const { logging } = require('@apache-superset/core/utils');
jest.spyOn(logging, 'debug').mockImplementation(); jest.spyOn(logging, 'debug').mockImplementation();
jest.spyOn(logging, 'log').mockImplementation(); jest.spyOn(logging, 'log').mockImplementation();
@@ -63,24 +50,20 @@ test('should pipe to `console` methods', () => {
}); });
test('should use noop functions when console unavailable', () => { test('should use noop functions when console unavailable', () => {
const originalConsole = window.console;
Object.assign(window, { console: undefined }); Object.assign(window, { console: undefined });
try { const { logging } = require('@apache-superset/core/utils');
const logging = loadLogging();
expect(() => { expect(() => {
logging.debug(); logging.debug();
logging.log(); logging.log();
logging.info(); logging.info();
logging.warn('warn'); logging.warn('warn');
logging.error('error'); logging.error('error');
logging.trace(); logging.trace();
logging.table([ logging.table([
[1, 2], [1, 2],
[3, 4], [3, 4],
]); ]);
}).not.toThrow(); }).not.toThrow();
} finally { Object.assign(window, { console });
Object.assign(window, { console: originalConsole });
}
}); });

View File

@@ -39,10 +39,10 @@
"@testing-library/user-event": "*", "@testing-library/user-event": "*",
"ace-builds": "^1.4.14", "ace-builds": "^1.4.14",
"brace": "^0.11.1", "brace": "^0.11.1",
"memoize-one": "^6.0.0", "memoize-one": "^5.1.1",
"react": "^18.3.0", "react": "^18.2.0",
"react-ace": "^10.1.0", "react-ace": "^10.1.0",
"react-dom": "^18.3.0" "react-dom": "^18.2.0"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@@ -677,9 +677,7 @@ export interface ServerPaginationData {
export type TableColumnConfig = { export type TableColumnConfig = {
d3NumberFormat?: string; d3NumberFormat?: string;
// Allow null to match JSON round-trips, where an unset value deserializes d3SmallNumberFormat?: string;
// from the metadata DB as `null` rather than `undefined`.
d3SmallNumberFormat?: string | null;
d3TimeFormat?: string; d3TimeFormat?: string;
columnWidth?: number; columnWidth?: number;
horizontalAlign?: 'left' | 'right' | 'center'; horizontalAlign?: 'left' | 'right' | 'center';

View File

@@ -29,7 +29,7 @@
"@babel/runtime": "^7.29.7", "@babel/runtime": "^7.29.7",
"@braintree/sanitize-url": "^7.1.2", "@braintree/sanitize-url": "^7.1.2",
"@types/json-bigint": "^1.0.4", "@types/json-bigint": "^1.0.4",
"@visx/responsive": "^4.0.0", "@visx/responsive": "^3.12.0",
"ace-builds": "^1.44.0", "ace-builds": "^1.44.0",
"ag-grid-community": "35.3.1", "ag-grid-community": "35.3.1",
"ag-grid-react": "35.3.1", "ag-grid-react": "35.3.1",
@@ -43,7 +43,7 @@
"d3-time": "^3.1.0", "d3-time": "^3.1.0",
"d3-time-format": "^4.1.0", "d3-time-format": "^4.1.0",
"dayjs": "^1.11.21", "dayjs": "^1.11.21",
"dompurify": "^3.4.11", "dompurify": "^3.4.8",
"fetch-retry": "^6.0.0", "fetch-retry": "^6.0.0",
"handlebars": "^4.7.9", "handlebars": "^4.7.9",
"jed": "^1.1.1", "jed": "^1.1.1",
@@ -77,7 +77,7 @@
"@types/d3-time-format": "^4.0.3", "@types/d3-time-format": "^4.0.3",
"@types/jquery": "^4.0.1", "@types/jquery": "^4.0.1",
"@types/lodash": "^4.17.24", "@types/lodash": "^4.17.24",
"@types/node": "^25.9.3", "@types/node": "^25.9.2",
"@types/prop-types": "^15.7.15", "@types/prop-types": "^15.7.15",
"@types/react-syntax-highlighter": "^15.5.13", "@types/react-syntax-highlighter": "^15.5.13",
"@types/react-table": "^7.7.20", "@types/react-table": "^7.7.20",
@@ -101,8 +101,8 @@
"@types/tinycolor2": "*", "@types/tinycolor2": "*",
"antd": "^5.26.0", "antd": "^5.26.0",
"nanoid": "^5.0.9", "nanoid": "^5.0.9",
"react": "^18.3.0", "react": "^18.2.0",
"react-dom": "^18.3.0", "react-dom": "^18.2.0",
"react-loadable": "^5.5.0", "react-loadable": "^5.5.0",
"tinycolor2": "*" "tinycolor2": "*"
}, },

View File

@@ -17,23 +17,15 @@
* under the License. * under the License.
*/ */
import { forwardRef } from 'react';
import { Avatar as AntdAvatar } from 'antd'; import { Avatar as AntdAvatar } from 'antd';
import type { AvatarProps, GroupProps as AvatarGroupProps } from './types'; import type { AvatarProps, GroupProps as AvatarGroupProps } from './types';
export const Avatar = forwardRef<HTMLSpanElement, AvatarProps>((props, ref) => ( export function Avatar(props: AvatarProps) {
<AntdAvatar ref={ref} {...props} /> return <AntdAvatar {...props} />;
)); }
// antd Avatar.Group is a plain function component without forwardRef; wrap in export function AvatarGroup(props: AvatarGroupProps) {
// a span so this component can be a Tooltip / Popover trigger and skip the return <AntdAvatar.Group {...props} />;
// findDOMNode fallback. }
export const AvatarGroup = forwardRef<HTMLSpanElement, AvatarGroupProps>(
(props, ref) => (
<span ref={ref}>
<AntdAvatar.Group {...props} />
</span>
),
);
export type { AvatarProps, AvatarGroupProps }; export type { AvatarProps, AvatarGroupProps };

View File

@@ -16,7 +16,7 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
import { Children, ReactElement, Fragment, forwardRef, Ref } from 'react'; import { Children, ReactElement, Fragment } from 'react';
import cx from 'classnames'; import cx from 'classnames';
import { Button as AntdButton } from 'antd'; import { Button as AntdButton } from 'antd';
import { useTheme } from '@apache-superset/core/theme'; import { useTheme } from '@apache-superset/core/theme';
@@ -100,7 +100,7 @@ const BUTTON_STYLE_MAP: Record<
link: { type: 'link' }, link: { type: 'link' },
}; };
function ButtonInner(props: ButtonProps, ref: Ref<HTMLElement>) { export function Button(props: ButtonProps) {
const { const {
tooltip, tooltip,
placement, placement,
@@ -160,7 +160,6 @@ function ButtonInner(props: ButtonProps, ref: Ref<HTMLElement>) {
const button = ( const button = (
<AntdButton <AntdButton
ref={ref as Ref<HTMLButtonElement & HTMLAnchorElement>}
href={disabled ? undefined : href} href={disabled ? undefined : href}
disabled={disabled} disabled={disabled}
type={antdType} type={antdType}
@@ -236,6 +235,4 @@ function ButtonInner(props: ButtonProps, ref: Ref<HTMLElement>) {
return button; return button;
} }
export const Button = forwardRef<HTMLElement, ButtonProps>(ButtonInner);
export type { ButtonProps, OnClickHandler }; export type { ButtonProps, OnClickHandler };

View File

@@ -75,10 +75,7 @@ export const DropdownButton = ({
id={`${kebabCase(tooltip)}-tooltip`} id={`${kebabCase(tooltip)}-tooltip`}
title={tooltip} title={tooltip}
> >
{/* antd Dropdown.Button is a plain function component without {button}
forwardRef; wrap in a span so the Tooltip can attach a ref to a
real DOM node and skip the findDOMNode fallback. */}
<span>{button}</span>
</Tooltip> </Tooltip>
); );
} }

View File

@@ -240,10 +240,7 @@ export function EditableTitle({
t("You don't have the rights to alter this title.") t("You don't have the rights to alter this title.")
} }
> >
{/* Wrap in span so the Tooltip can attach a ref to a DOM element. {titleComponent}
antd's Input.TextArea forwards a non-DOM imperative handle, which
triggers a React 18 findDOMNode deprecation warning. */}
<span>{titleComponent}</span>
</Tooltip> </Tooltip>
); );
} }

View File

@@ -16,54 +16,47 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
import { forwardRef } from 'react';
import { Tooltip } from '../Tooltip'; import { Tooltip } from '../Tooltip';
import { Button } from '../Button'; import { Button } from '../Button';
import type { IconTooltipProps } from './types'; import type { IconTooltipProps } from './types';
export const IconTooltip = forwardRef<HTMLElement, IconTooltipProps>( export const IconTooltip = ({
( children = null,
{ className = '',
children = null, onClick = () => undefined,
className = '', placement = 'top',
onClick = () => undefined, style = {},
placement = 'top', tooltip = null,
style = {}, mouseEnterDelay = 0.3,
tooltip = null, mouseLeaveDelay = 0.15,
mouseEnterDelay = 0.3, }: IconTooltipProps) => {
mouseLeaveDelay = 0.15, const iconTooltip = (
}, <Button
ref, onClick={onClick}
) => { style={{
const iconTooltip = ( padding: 0,
<Button ...style,
ref={ref} }}
onClick={onClick} buttonStyle="link"
style={{ className={`IconTooltip ${className}`}
padding: 0, >
...style, {children}
}} </Button>
buttonStyle="link" );
className={`IconTooltip ${className}`} if (tooltip) {
return (
<Tooltip
id="tooltip"
title={tooltip}
placement={placement}
mouseEnterDelay={mouseEnterDelay}
mouseLeaveDelay={mouseLeaveDelay}
> >
{children} {iconTooltip}
</Button> </Tooltip>
); );
if (tooltip) { }
return ( return iconTooltip;
<Tooltip };
id="tooltip"
title={tooltip}
placement={placement}
mouseEnterDelay={mouseEnterDelay}
mouseLeaveDelay={mouseLeaveDelay}
>
{iconTooltip}
</Tooltip>
);
}
return iconTooltip;
},
);
export type { IconTooltipProps }; export type { IconTooltipProps };

View File

@@ -86,7 +86,6 @@ import {
FundProjectionScreenOutlined, FundProjectionScreenOutlined,
FunctionOutlined, FunctionOutlined,
HighlightOutlined, HighlightOutlined,
HomeOutlined,
InfoCircleOutlined, InfoCircleOutlined,
InfoCircleFilled, InfoCircleFilled,
InsertRowAboveOutlined, InsertRowAboveOutlined,
@@ -166,7 +165,7 @@ import {
SlackOutlined, SlackOutlined,
ApiOutlined, ApiOutlined,
} from '@ant-design/icons'; } from '@ant-design/icons';
import { ForwardRefExoticComponent, RefAttributes, forwardRef } from 'react'; import { FC } from 'react';
import { IconType } from './types'; import { IconType } from './types';
import { BaseIconComponent } from './BaseIcon'; import { BaseIconComponent } from './BaseIcon';
@@ -244,7 +243,6 @@ const AntdIcons = {
GoogleOutlined, GoogleOutlined,
GroupOutlined, GroupOutlined,
HighlightOutlined, HighlightOutlined,
HomeOutlined,
InfoCircleOutlined, InfoCircleOutlined,
InfoCircleFilled, InfoCircleFilled,
InsertRowAboveOutlined, InsertRowAboveOutlined,
@@ -325,25 +323,19 @@ type AntdIconNames = keyof typeof AntdIcons;
export const antdEnhancedIcons: Record< export const antdEnhancedIcons: Record<
AntdIconNames, AntdIconNames,
ForwardRefExoticComponent<IconType & RefAttributes<HTMLSpanElement>> FC<IconType>
> = Object.keys(AntdIcons) > = Object.keys(AntdIcons)
.filter(key => !EXCLUDED_ICONS.some(excluded => key.includes(excluded))) .filter(key => !EXCLUDED_ICONS.some(excluded => key.includes(excluded)))
.reduce( .reduce(
(acc, key) => { (acc, key) => {
acc[key as AntdIconNames] = forwardRef<HTMLSpanElement, IconType>( acc[key as AntdIconNames] = (props: IconType) => (
(props, ref) => ( <BaseIconComponent
<BaseIconComponent component={AntdIcons[key as AntdIconNames]}
ref={ref} fileName={key}
component={AntdIcons[key as AntdIconNames]} {...props}
fileName={key} />
{...props}
/>
),
); );
return acc; return acc;
}, },
{} as Record< {} as Record<AntdIconNames, FC<IconType>>,
AntdIconNames,
ForwardRefExoticComponent<IconType & RefAttributes<HTMLSpanElement>>
>,
); );

View File

@@ -17,12 +17,12 @@
* under the License. * under the License.
*/ */
import { FC, SVGProps, forwardRef, useEffect, useRef, useState } from 'react'; import { FC, SVGProps, useEffect, useRef, useState } from 'react';
import TransparentIcon from './svgs/transparent.svg'; import TransparentIcon from './svgs/transparent.svg';
import { IconType } from './types'; import { IconType } from './types';
import { BaseIconComponent } from './BaseIcon'; import { BaseIconComponent } from './BaseIcon';
const AsyncIcon = forwardRef<HTMLSpanElement, IconType>((props, ref) => { const AsyncIcon = (props: IconType) => {
const [, setLoaded] = useState(false); const [, setLoaded] = useState(false);
const ImportedSVG = useRef<FC<SVGProps<SVGSVGElement>>>(); const ImportedSVG = useRef<FC<SVGProps<SVGSVGElement>>>();
const { fileName, customIcons, iconSize, iconColor, viewBox, ...restProps } = const { fileName, customIcons, iconSize, iconColor, viewBox, ...restProps } =
@@ -46,7 +46,6 @@ const AsyncIcon = forwardRef<HTMLSpanElement, IconType>((props, ref) => {
return ( return (
<BaseIconComponent <BaseIconComponent
ref={ref}
component={ImportedSVG.current || TransparentIcon} component={ImportedSVG.current || TransparentIcon}
fileName={fileName} fileName={fileName}
customIcons={customIcons} customIcons={customIcons}
@@ -56,6 +55,6 @@ const AsyncIcon = forwardRef<HTMLSpanElement, IconType>((props, ref) => {
{...restProps} {...restProps}
/> />
); );
}); };
export default AsyncIcon; export default AsyncIcon;

View File

@@ -17,7 +17,6 @@
* under the License. * under the License.
*/ */
import { forwardRef, type ComponentType } from 'react';
import { css, useTheme, getFontSize } from '@apache-superset/core/theme'; import { css, useTheme, getFontSize } from '@apache-superset/core/theme';
import { AntdIconType, BaseIconProps, CustomIconType, IconType } from './types'; import { AntdIconType, BaseIconProps, CustomIconType, IconType } from './types';
@@ -36,78 +35,65 @@ const genAriaLabel = (fileName: string) => {
return name.toLowerCase(); return name.toLowerCase();
}; };
export const BaseIconComponent = forwardRef< export const BaseIconComponent: React.FC<
HTMLSpanElement | SVGSVGElement,
BaseIconProps & Omit<IconType, 'component'> BaseIconProps & Omit<IconType, 'component'>
>( > = ({
( component: Component,
{ iconColor,
component: Component, iconSize,
iconColor, viewBox,
iconSize, customIcons,
viewBox, fileName,
customIcons, ...rest
fileName, }) => {
...rest const theme = useTheme();
}, const whatRole = rest?.onClick ? 'button' : 'img';
ref, const ariaLabel = genAriaLabel(fileName || '');
) => { const style = {
const theme = useTheme(); color: iconColor,
const whatRole = rest?.onClick ? 'button' : 'img'; fontSize: iconSize
const ariaLabel = genAriaLabel(fileName || ''); ? `${getFontSize(theme, iconSize)}px`
const style = { : `${theme.fontSize}px`,
color: iconColor, cursor: rest?.onClick ? 'pointer' : undefined,
fontSize: iconSize };
? `${getFontSize(theme, iconSize)}px`
: `${theme.fontSize}px`,
cursor: rest?.onClick ? 'pointer' : undefined,
};
const AntdComponent = Component as ComponentType< return customIcons ? (
Record<string, unknown> & { <span
ref?: React.Ref<HTMLSpanElement | SVGSVGElement>; role={whatRole}
} aria-label={ariaLabel}
>; data-test={ariaLabel}
return customIcons ? ( css={[
<span css`
ref={ref as React.Ref<HTMLSpanElement>} display: inline-flex;
role={whatRole} align-items: center;
aria-label={ariaLabel} line-height: 0;
data-test={ariaLabel} vertical-align: middle;
css={[ `,
css` ]}
display: inline-flex; >
align-items: center; <Component
line-height: 0; viewBox={viewBox || '0 0 24 24'}
vertical-align: middle;
`,
]}
>
<Component
viewBox={viewBox || '0 0 24 24'}
style={style}
width={
iconSize
? `${getFontSize(theme, iconSize) || theme.fontSize}px`
: `${theme.fontSize}px`
}
height={
iconSize
? `${getFontSize(theme, iconSize) || theme.fontSize}px`
: `${theme.fontSize}px`
}
{...(rest as CustomIconType)}
/>
</span>
) : (
<AntdComponent
ref={ref}
role={whatRole}
style={style} style={style}
aria-label={ariaLabel} width={
data-test={ariaLabel} iconSize
{...(rest as AntdIconType)} ? `${getFontSize(theme, iconSize) || theme.fontSize}px`
: `${theme.fontSize}px`
}
height={
iconSize
? `${getFontSize(theme, iconSize) || theme.fontSize}px`
: `${theme.fontSize}px`
}
{...(rest as CustomIconType)}
/> />
); </span>
}, ) : (
); <Component
role={whatRole}
style={style}
aria-label={ariaLabel}
data-test={ariaLabel}
{...(rest as AntdIconType)}
/>
);
};

View File

@@ -17,16 +17,12 @@
* under the License. * under the License.
*/ */
import { ForwardRefExoticComponent, RefAttributes, forwardRef } from 'react'; import { FC } from 'react';
import { antdEnhancedIcons } from './AntdEnhanced'; import { antdEnhancedIcons } from './AntdEnhanced';
import AsyncIcon from './AsyncIcon'; import AsyncIcon from './AsyncIcon';
import type { IconType } from './types'; import type { IconType } from './types';
type IconComponent = ForwardRefExoticComponent<
IconType & RefAttributes<HTMLSpanElement>
>;
/** /**
* Filename is going to be inferred from the icon name. * Filename is going to be inferred from the icon name.
* i.e. BigNumberChartTile => assets/images/icons/big_number_chart_tile * i.e. BigNumberChartTile => assets/images/icons/big_number_chart_tile
@@ -62,17 +58,15 @@ const customIcons = [
'Undo', 'Undo',
] as const; ] as const;
type CustomIconType = Record<(typeof customIcons)[number], IconComponent>; type CustomIconType = Record<(typeof customIcons)[number], FC<IconType>>;
const iconOverrides: CustomIconType = {} as CustomIconType; const iconOverrides: CustomIconType = {} as CustomIconType;
customIcons.forEach(customIcon => { customIcons.forEach(customIcon => {
const fileName = customIcon const fileName = customIcon
.replace(/([a-z0-9])([A-Z])/g, '$1_$2') .replace(/([a-z0-9])([A-Z])/g, '$1_$2')
.toLowerCase(); .toLowerCase();
iconOverrides[customIcon] = forwardRef<HTMLSpanElement, IconType>( iconOverrides[customIcon] = (props: IconType) => (
(props, ref) => ( <AsyncIcon customIcons fileName={fileName} {...props} />
<AsyncIcon ref={ref} customIcons fileName={fileName} {...props} />
),
); );
}); });
@@ -80,7 +74,7 @@ export type IconNameType =
| keyof typeof antdEnhancedIcons | keyof typeof antdEnhancedIcons
| keyof typeof iconOverrides; | keyof typeof iconOverrides;
type IconComponentType = Record<IconNameType, IconComponent>; type IconComponentType = Record<IconNameType, FC<IconType>>;
export const Icons: IconComponentType = { export const Icons: IconComponentType = {
...antdEnhancedIcons, ...antdEnhancedIcons,

View File

@@ -16,7 +16,6 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
import { forwardRef } from 'react';
import { Tag } from '@superset-ui/core/components/Tag'; import { Tag } from '@superset-ui/core/components/Tag';
import { css } from '@emotion/react'; import { css } from '@emotion/react';
import { useTheme, getColorVariants } from '@apache-superset/core/theme'; import { useTheme, getColorVariants } from '@apache-superset/core/theme';
@@ -24,7 +23,7 @@ import { DatasetTypeLabel } from './reusable/DatasetTypeLabel';
import { PublishedLabel } from './reusable/PublishedLabel'; import { PublishedLabel } from './reusable/PublishedLabel';
import type { LabelProps } from './types'; import type { LabelProps } from './types';
export const Label = forwardRef<HTMLSpanElement, LabelProps>((props, ref) => { export function Label(props: LabelProps) {
const theme = useTheme(); const theme = useTheme();
// Use Ant Design's motion duration instead of deprecated transitionTiming // Use Ant Design's motion duration instead of deprecated transitionTiming
const { const {
@@ -72,7 +71,6 @@ export const Label = forwardRef<HTMLSpanElement, LabelProps>((props, ref) => {
return ( return (
<Tag <Tag
ref={ref}
onClick={onClick} onClick={onClick}
role={onClick ? 'button' : undefined} role={onClick ? 'button' : undefined}
style={style} style={style}
@@ -83,6 +81,6 @@ export const Label = forwardRef<HTMLSpanElement, LabelProps>((props, ref) => {
{children} {children}
</Tag> </Tag>
); );
}); }
export { DatasetTypeLabel, PublishedLabel }; export { DatasetTypeLabel, PublishedLabel };
export type { LabelType } from './types'; export type { LabelType } from './types';

View File

@@ -371,9 +371,6 @@ const CustomModal = ({
disabled={!draggable || dragDisabled} disabled={!draggable || dragDisabled}
bounds={bounds ?? false} bounds={bounds ?? false}
onStart={(event, uiData) => onDragStart(event, uiData)} onStart={(event, uiData) => onDragStart(event, uiData)}
// Pass nodeRef so react-draggable does not fall back to
// ReactDOM.findDOMNode (deprecated in React 18+ Strict Mode).
nodeRef={draggableRef}
{...draggableConfig} {...draggableConfig}
> >
{resizable ? ( {resizable ? (

View File

@@ -16,15 +16,11 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
import { forwardRef } from 'react';
import { Popover as AntdPopover } from 'antd'; import { Popover as AntdPopover } from 'antd';
import { PopoverProps as AntdPopoverProps } from 'antd/es/popover'; import { PopoverProps as AntdPopoverProps } from 'antd/es/popover';
import type { TooltipRef } from 'antd/es/tooltip';
export interface PopoverProps extends AntdPopoverProps { export interface PopoverProps extends AntdPopoverProps {
forceRender?: boolean; forceRender?: boolean;
} }
export const Popover = forwardRef<TooltipRef, PopoverProps>((props, ref) => ( export const Popover = (props: PopoverProps) => <AntdPopover {...props} />;
<AntdPopover ref={ref} {...props} />
));

View File

@@ -16,9 +16,10 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
import { MouseEventHandler } from 'react'; import { MouseEventHandler, forwardRef } from 'react';
import { SupersetTheme } from '@apache-superset/core/theme'; import { SupersetTheme } from '@apache-superset/core/theme';
import { Icons } from '@superset-ui/core/components/Icons'; import { Icons } from '@superset-ui/core/components/Icons';
import type { IconType } from '@superset-ui/core/components/Icons/types';
import { Tooltip } from '../Tooltip'; import { Tooltip } from '../Tooltip';
export interface RefreshLabelProps { export interface RefreshLabelProps {
@@ -31,19 +32,25 @@ const RefreshLabel = ({
onClick, onClick,
tooltipContent, tooltipContent,
disabled, disabled,
}: RefreshLabelProps) => ( }: RefreshLabelProps) => {
<Tooltip title={tooltipContent}> // eslint-disable-next-line @typescript-eslint/no-unused-vars
<Icons.SyncOutlined const IconWithoutRef = forwardRef((props: IconType, ref: any) => (
iconSize="l" <Icons.SyncOutlined iconSize="l" {...props} />
role="button" ));
onClick={disabled ? undefined : onClick}
css={(theme: SupersetTheme) => ({ return (
cursor: 'pointer', <Tooltip title={tooltipContent}>
color: theme.colorIcon, <IconWithoutRef
'&:hover': { color: theme.colorPrimary }, role="button"
})} onClick={disabled ? undefined : onClick}
/> css={(theme: SupersetTheme) => ({
</Tooltip> cursor: 'pointer',
); color: theme.colorIcon,
'&:hover': { color: theme.colorPrimary },
})}
/>
</Tooltip>
);
};
export default RefreshLabel; export default RefreshLabel;

View File

@@ -74,10 +74,7 @@ export function transformLinkUri(uri: string): string {
// "java\tscript:" or "java\x01script:") are ignored by browsers, so strip // "java\tscript:" or "java\x01script:") are ignored by browsers, so strip
// them before comparing against the blocklist. // them before comparing against the blocklist.
// eslint-disable-next-line no-control-regex // eslint-disable-next-line no-control-regex
const scheme = url const scheme = url.slice(0, colon).replace(/[\u0000-\u0020]/g, '').toLowerCase();
.slice(0, colon)
.replace(/[\u0000-\u0020]/g, '')
.toLowerCase();
return DANGEROUS_LINK_PROTOCOLS.includes(scheme) ? '' : url; return DANGEROUS_LINK_PROTOCOLS.includes(scheme) ? '' : url;
} }

View File

@@ -519,8 +519,7 @@ const Select = forwardRef(
handleSelectAll(); handleSelectAll();
}} }}
> >
{t('Select all')}{' '} {t('Select all')} {`(${formatNumber('SMART_NUMBER', bulkSelectCounts.selectable)})`}
{`(${formatNumber('SMART_NUMBER', bulkSelectCounts.selectable)})`}
</Button> </Button>
<Button <Button
type="link" type="link"
@@ -537,8 +536,7 @@ const Select = forwardRef(
handleDeselectAll(); handleDeselectAll();
}} }}
> >
{t('Clear')}{' '} {t('Clear')} {`(${formatNumber('SMART_NUMBER', bulkSelectCounts.deselectable)})`}
{`(${formatNumber('SMART_NUMBER', bulkSelectCounts.deselectable)})`}
</Button> </Button>
</StyledBulkActionsContainer> </StyledBulkActionsContainer>
), ),

View File

@@ -16,22 +16,17 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
import { forwardRef } from 'react';
import { Tooltip as AntdTooltip } from 'antd'; import { Tooltip as AntdTooltip } from 'antd';
import type { TooltipRef } from 'antd/es/tooltip';
import type { TooltipProps, TooltipPlacement } from './types'; import type { TooltipProps, TooltipPlacement } from './types';
export const Tooltip = forwardRef<TooltipRef, TooltipProps>( export const Tooltip = ({ overlayStyle, ...props }: TooltipProps) => (
({ overlayStyle, ...props }, ref) => ( <AntdTooltip
<AntdTooltip styles={{
ref={ref} body: { overflow: 'hidden', textOverflow: 'ellipsis' },
styles={{ root: overlayStyle ?? {},
body: { overflow: 'hidden', textOverflow: 'ellipsis' }, }}
root: overlayStyle ?? {}, {...props}
}} />
{...props}
/>
),
); );
export type { TooltipProps, TooltipPlacement }; export type { TooltipProps, TooltipPlacement };

View File

@@ -52,13 +52,6 @@ const SupersetClient: SupersetClientInterface = {
request: request => getInstance().request(request), request: request => getInstance().request(request),
getCSRFToken: () => getInstance().getCSRFToken(), getCSRFToken: () => getInstance().getCSRFToken(),
getUrl: (...args) => getInstance().getUrl(...args), getUrl: (...args) => getInstance().getUrl(...args),
get guestTokenHeaderName() {
try {
return getInstance().guestTokenHeaderName;
} catch {
return 'X-GuestToken';
}
},
}; };
export default SupersetClient; export default SupersetClient;

View File

@@ -163,7 +163,6 @@ export interface SupersetClientInterface extends Pick<
configure: (config?: ClientConfig) => SupersetClientInterface; configure: (config?: ClientConfig) => SupersetClientInterface;
reset: () => void; reset: () => void;
getCSRFToken: () => CsrfPromise; getCSRFToken: () => CsrfPromise;
guestTokenHeaderName?: string;
} }
export type SupersetClientResponse = Response | JsonResponse | TextResponse; export type SupersetClientResponse = Response | JsonResponse | TextResponse;

View File

@@ -18,11 +18,7 @@
*/ */
import { ExtensibleFunction } from '../models'; import { ExtensibleFunction } from '../models';
// Import from the concrete modules rather than the `number-format` barrel to import { getNumberFormatter, NumberFormats } from '../number-format';
// avoid a circular dependency (the barrel pulls in getSmallNumberFormatter,
// which imports CurrencyFormatter).
import { getNumberFormatter } from '../number-format/NumberFormatterRegistrySingleton';
import NumberFormats from '../number-format/NumberFormats';
import { Currency } from '../query'; import { Currency } from '../query';
import { RowData, RowDataValue } from './types'; import { RowData, RowDataValue } from './types';
import { AUTO_CURRENCY_SYMBOL, ISO_4217_REGEX } from './CurrencyFormats'; import { AUTO_CURRENCY_SYMBOL, ISO_4217_REGEX } from './CurrencyFormats';

Some files were not shown because too many files have changed in this diff Show More